Merge "Cts test for throwing error on session create." into sc-dev
diff --git a/apps/CameraITS/tests/scene0/test_metadata.py b/apps/CameraITS/tests/scene0/test_metadata.py
index 12b68a4..b0995a7 100644
--- a/apps/CameraITS/tests/scene0/test_metadata.py
+++ b/apps/CameraITS/tests/scene0/test_metadata.py
@@ -51,6 +51,7 @@
       logging.debug('Limited: %s', camera_properties_utils.limited(props))
       logging.debug('Full or better: %s',
                     camera_properties_utils.full_or_better(props))
+      logging.debug('Level 3: %s', camera_properties_utils.level3(props))
       logging.debug('Capabilities')
       logging.debug('Manual sensor: %s',
                     camera_properties_utils.manual_sensor(props))
diff --git a/apps/CameraITS/tests/scene4/test_aspect_ratio_and_crop.py b/apps/CameraITS/tests/scene4/test_aspect_ratio_and_crop.py
index 842ac73..657f20c 100644
--- a/apps/CameraITS/tests/scene4/test_aspect_ratio_and_crop.py
+++ b/apps/CameraITS/tests/scene4/test_aspect_ratio_and_crop.py
@@ -28,6 +28,7 @@
 import its_session_utils
 import opencv_processing_utils
 
+_ANDROID11_API_LEVEL = 30
 _CIRCLE_COLOR = 0  # [0: black, 255: white].
 _CIRCLE_MIN_AREA = 0.01  # 1% of image size.
 _FOV_PERCENT_RTOL = 0.15  # Relative tolerance on circle FoV % to expected.
@@ -50,7 +51,7 @@
 
 def _check_skip_conditions(first_api_level, props):
   """Check the skip conditions based on first API level."""
-  if first_api_level < 30:  # Original constraint.
+  if first_api_level < _ANDROID11_API_LEVEL:  # Original constraint.
     camera_properties_utils.skip_unless(camera_properties_utils.read_3a(props))
   else:  # Loosen from read_3a to enable LIMITED coverage.
     camera_properties_utils.skip_unless(
@@ -100,7 +101,8 @@
   return format_list
 
 
-def _print_failed_test_results(failed_ar, failed_fov, failed_crop):
+def _print_failed_test_results(failed_ar, failed_fov, failed_crop,
+                               first_api_level, level_3):
   """Print failed test results."""
   if failed_ar:
     logging.error('Aspect ratio test summary')
@@ -125,13 +127,17 @@
     raise RuntimeError
   if failed_fov:
     raise RuntimeError
-  if failed_crop:  # failed_crop = [] if run_crop_test = False.
-    raise RuntimeError
+  if first_api_level > _ANDROID11_API_LEVEL:
+    if failed_crop:  # failed_crop = [] if run_crop_test = False.
+      raise RuntimeError
+  else:
+    if failed_crop and level_3:
+      raise RuntimeError
 
 
 def _is_checked_aspect_ratio(first_api_level, w, h):
   """Determine if format aspect ratio is a checked on based of first_API."""
-  if first_api_level >= 30:
+  if first_api_level >= _ANDROID11_API_LEVEL:
     return True
 
   for ar_check in _AR_CHECKED_PRE_API_30:
@@ -476,6 +482,7 @@
 
       # Determine camera capabilities.
       full_or_better = camera_properties_utils.full_or_better(props)
+      level3 = camera_properties_utils.level3(props)
       raw_avlb = camera_properties_utils.raw16(props)
       debug = self.debug_mode
 
@@ -559,7 +566,8 @@
               image_processing_utils.write_image(img, img_name, True)
 
       # Print any failed test results.
-      _print_failed_test_results(failed_ar, failed_fov, failed_crop)
+      _print_failed_test_results(failed_ar, failed_fov, failed_crop,
+                                 first_api_level, level3)
 
 if __name__ == '__main__':
   test_runner.main()
diff --git a/apps/CameraITS/tests/sensor_fusion/test_sensor_fusion.py b/apps/CameraITS/tests/sensor_fusion/test_sensor_fusion.py
index d6dded3..44543dc 100644
--- a/apps/CameraITS/tests/sensor_fusion/test_sensor_fusion.py
+++ b/apps/CameraITS/tests/sensor_fusion/test_sensor_fusion.py
@@ -19,6 +19,7 @@
 import math
 import multiprocessing
 import os
+import sys
 import time
 
 from matplotlib import pylab
@@ -366,6 +367,26 @@
       '%s_plot_rotations.png' % os.path.join(log_path, _NAME))
 
 
+def load_data():
+  """Load a set of previously captured data.
+
+  Returns:
+    events: Dictionary containing all gyro events and cam timestamps.
+    frames: List of RGB images as numpy arrays.
+    w:      Pixel width of frames
+    h:      Pixel height of frames
+  """
+  with open(f'{_NAME}_events.txt', 'r') as f:
+    events = json.loads(f.read())
+  n = len(events['cam'])
+  frames = []
+  for i in range(n):
+    img = image_processing_utils.read_image(f'{_NAME}_frame{i:03d}.png')
+    w, h = img.size[0:2]
+    frames.append(np.array(img).reshape((h, w, 3)) / 255)
+  return events, frames, w, h
+
+
 class SensorFusionTest(its_base_test.ItsBaseTest):
   """Tests if image and motion sensor events are well synchronized.
 
@@ -414,6 +435,13 @@
       raise AssertionError(f'Gyro sample rate, {gyro_smp_per_sec}S/s, low!')
 
   def test_sensor_fusion(self):
+    # Determine if '--replay' in cmd line
+    replay = False
+    for s in list(sys.argv[1:]):
+      if '--replay' in s:
+        replay = True
+        logging.info('test_sensor_fusion.py not run. Using existing data set.')
+
     rot_rig = {}
     fps = float(self.fps)
     img_w, img_h = self.img_w, self.img_h
@@ -427,15 +455,18 @@
           ' to run smoothly.  If you run into problems, consider'
           " smaller values of 'w', 'h', 'fps', or 'test_length'.")
 
-    with its_session_utils.ItsSession(
-        device_id=self.dut.serial,
-        camera_id=self.camera_id,
-        hidden_physical_id=self.hidden_physical_id) as cam:
+    if replay:
+      events, frames, _, h = load_data()
+    else:
+      with its_session_utils.ItsSession(
+          device_id=self.dut.serial,
+          camera_id=self.camera_id,
+          hidden_physical_id=self.hidden_physical_id) as cam:
 
-      rot_rig['cntl'] = self.rotator_cntl
-      rot_rig['ch'] = self.rotator_ch
-      events, frames = _collect_data(cam, fps, img_w, img_h, test_length,
-                                     rot_rig, chart_distance, log_path)
+        rot_rig['cntl'] = self.rotator_cntl
+        rot_rig['ch'] = self.rotator_ch
+        events, frames = _collect_data(cam, fps, img_w, img_h, test_length,
+                                       rot_rig, chart_distance, log_path)
 
     _plot_gyro_events(events['gyro'], log_path)
 
@@ -463,8 +494,8 @@
 
     # Assert PASS/FAIL criteria.
     if corr_dist > _CORR_DIST_THRESH_MAX:
-      raise AssertionError(f'Poor gyro/camera correlation. '
-                           f'Corr: {corr_dist}, TOL: {_CORR_DIST_THRESH_MAX}.')
+      raise AssertionError(f'Poor gyro/camera correlation: {corr_dist:.6f}, '
+                           f'TOL: {_CORR_DIST_THRESH_MAX}.')
     if abs(offset_ms) > _OFFSET_MS_THRESH_MAX:
       raise AssertionError('Offset too large. Measured (ms): '
                            f'{offset_ms:.3f}, TOL: {_OFFSET_MS_THRESH_MAX}.')
diff --git a/apps/CameraITS/tools/DngNoiseModel.pdf b/apps/CameraITS/tools/DngNoiseModel.pdf
index 7cbdbd0..6216482 100644
--- a/apps/CameraITS/tools/DngNoiseModel.pdf
+++ b/apps/CameraITS/tools/DngNoiseModel.pdf
Binary files differ
diff --git a/apps/CameraITS/tools/run_all_tests.py b/apps/CameraITS/tools/run_all_tests.py
index d385af2..823616a 100644
--- a/apps/CameraITS/tools/run_all_tests.py
+++ b/apps/CameraITS/tools/run_all_tests.py
@@ -416,33 +416,40 @@
     auto_scene_switch = False
     logging.info('Manual testing: no tablet defined or testing scene5.')
 
-  # Run through all scenes if user does not supply one and config file doesn't
-  # have specific scene name listed.
-  possible_scenes = _AUTO_SCENES if auto_scene_switch else _ALL_SCENES
-  if not scenes or '<scene-name>' in scenes:
-    scenes = possible_scenes
-  else:
-    # Validate user input scene names
-    valid_scenes = True
-    temp_scenes = []
-    for s in scenes:
-      if s in possible_scenes:
-        temp_scenes.append(s)
-      elif s in _GROUPED_SCENES:
-        expand_scene(s, temp_scenes)
-      else:
-        valid_scenes = False
-        raise ValueError(f'Unknown scene specified: {s}')
-
-    # assign temp_scenes back to scenes and remove duplicates
-    scenes = sorted(set(temp_scenes), key=temp_scenes.index)
-
   logging.info('Running ITS on device: %s, camera: %s, scene: %s',
                device_id, camera_id_combos, scenes)
 
   for camera_id in camera_id_combos:
     test_params_content['camera'] = camera_id
     results = {}
+
+    # Run through all scenes if user does not supply one and config file doesn't
+    # have specific scene name listed.
+    if its_session_utils.SUB_CAMERA_SEPARATOR in camera_id:
+      possible_scenes = list(SUB_CAMERA_TESTS.keys())
+      if auto_scene_switch:
+        possible_scenes.remove('sensor_fusion')
+    else:
+      possible_scenes = _AUTO_SCENES if auto_scene_switch else _ALL_SCENES
+
+    if not scenes or '<scene-name>' in scenes:
+      scenes = possible_scenes
+    else:
+      # Validate user input scene names
+      valid_scenes = True
+      temp_scenes = []
+      for s in scenes:
+        if s in possible_scenes:
+          temp_scenes.append(s)
+        elif s in _GROUPED_SCENES:
+          expand_scene(s, temp_scenes)
+        else:
+          valid_scenes = False
+          raise ValueError(f'Unknown scene specified: {s}')
+
+      # assign temp_scenes back to scenes and remove duplicates
+      scenes = sorted(set(temp_scenes), key=temp_scenes.index)
+
     for s in _ALL_SCENES:
       results[s] = {RESULT_KEY: RESULT_NOT_EXECUTED}
     # A subdir in topdir will be created for each camera_id. All scene test
diff --git a/apps/CameraITS/utils/image_processing_utils.py b/apps/CameraITS/utils/image_processing_utils.py
index dd7ea4d..c041e24 100644
--- a/apps/CameraITS/utils/image_processing_utils.py
+++ b/apps/CameraITS/utils/image_processing_utils.py
@@ -446,6 +446,11 @@
     raise error_util.CameraItsError('Unsupported image type')
 
 
+def read_image(fname):
+  """Read image function to match write_image() above."""
+  return Image.open(fname)
+
+
 def apply_lut_to_image(img, lut):
   """Applies a LUT to every pixel in a float image array.
 
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index 2a083c2..51a1287 100644
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -2476,6 +2476,7 @@
     <string name="provisioning_byod_capture_image_support">Camera support cross profile image capture</string>
     <string name="provisioning_byod_capture_image_support_info">
         This test verifies that images can be captured from the managed profile using the primary profile camera.\n
+        If prompted, accept the camera permission after pressing go.\n
         1. Capture a picture using the camera.\n
         2. Verify that the captured picture is shown.\n
         3. Click on the close button.
@@ -2483,6 +2484,7 @@
     <string name="provisioning_byod_capture_video_support_with_extra_output">Camera support cross profile video capture (with extra output path)</string>
     <string name="provisioning_byod_capture_video_support_info">
         This test verifies that videos can be captured from the managed profile using the primary profile camera.\n
+        If prompted, accept the camera permission after pressing go.\n
         1. Capture a video using the camera.\n
         2. Click on the play button.\n
         3. Verify that the captured video is played.\n
@@ -3251,8 +3253,10 @@
     <string name="provisioning_byod_no_gps_location_feature">No GPS feature present. Skip test.</string>
     <string name="provisioning_byod_location_mode_enable">Enable location</string>
     <string name="provisioning_byod_location_mode_enable_toast_location_change">Location changed</string>
+    <string name="provisioning_byod_location_mode_enable_missing_permission">Permission missing</string>
     <string name="provisioning_byod_location_mode_enable_instruction">
         This test verifies that the location updates can be enabled for the managed profile apps.\n
+        If prompted, accept the location permission after pressing go.\n
         1. Press the go button to go to the location settings page, set both the main location switch and the work profile location switch enabled.\n
         2. Press home to go to the launcher.\n
         3. Move your position a little bit, verify that location updates toast comes up.\n
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/AbstractBaseTest.java b/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/AbstractBaseTest.java
index 2938b00..a58a18f 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/AbstractBaseTest.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/AbstractBaseTest.java
@@ -83,6 +83,11 @@
         Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
     }
 
+    void showToastAndLog(String s, Exception e) {
+        Log.d(getTag(), s, e);
+        Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
+    }
+
     protected void onBiometricEnrollFinished() {
     }
 
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/AbstractUserAuthenticationTest.java b/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/AbstractUserAuthenticationTest.java
index 92869f3..ace4c7f 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/AbstractUserAuthenticationTest.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/AbstractUserAuthenticationTest.java
@@ -356,7 +356,7 @@
 
                     if (keyUsed != shouldKeyBeUsable) {
                         showToastAndLog("Test failed. shouldKeyBeUsable: " + shouldKeyBeUsable
-                                + " keyUsed: " + keyUsed + " Exception: " + exception);
+                                + " keyUsed: " + keyUsed + " Exception: " + exception, exception);
                         if (exception != null) {
                             exception.printStackTrace();
                         }
@@ -418,4 +418,9 @@
         Log.d(getTag(), s);
         Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
     }
+
+    private void showToastAndLog(String s, Exception e) {
+        Log.d(getTag(), s, e);
+        Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
+    }
 }
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/BiometricStrongTests.java b/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/BiometricStrongTests.java
index f1e1c0f..d5d2199 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/BiometricStrongTests.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/BiometricStrongTests.java
@@ -249,7 +249,7 @@
                                 updatePassButton();
                             } catch (Exception e) {
                                 showToastAndLog("Failed to encrypt after biometric was"
-                                        + "authenticated: " + e);
+                                        + "authenticated: " + e, e);
                             }
                         }
                     });
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/CredentialCryptoTests.java b/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/CredentialCryptoTests.java
index 50aee3a..17f49f8 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/CredentialCryptoTests.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/biometrics/CredentialCryptoTests.java
@@ -128,7 +128,7 @@
             // Expected
             Log.d(TAG, "UserNotAuthenticated (expected)");
         } catch (Exception e) {
-            showToastAndLog("Unexpected exception: " + e);
+            showToastAndLog("Unexpected exception: " + e, e);
         }
 
         // Authenticate with credential
@@ -160,7 +160,7 @@
                     }
                     updateButton();
                 } catch (Exception e) {
-                    showToastAndLog("Unable to encrypt: " + e);
+                    showToastAndLog("Unable to encrypt: " + e, e);
                 }
             }
         });
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/camera/OWNERS b/apps/CtsVerifier/src/com/android/cts/verifier/camera/OWNERS
index 8ebd7b8..d1d18b4 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/camera/OWNERS
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/camera/OWNERS
@@ -1,2 +1,2 @@
 # Bug component: 41727
-include platform/frameworks/av:/camera/OWNER
\ No newline at end of file
+include platform/frameworks/av:/camera/OWNERS
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsTestActivity.java
index cd75746..806d055 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsTestActivity.java
@@ -96,6 +96,7 @@
             add("scene3");
             add("scene4");
             add("scene5");
+            add("scene6");
             add("scene_change");
             add("sensor_fusion");
         }};
@@ -213,6 +214,10 @@
             add("test_lens_shading_and_color_uniformity");
         }};
 
+    private static final ArrayList<String> mScene6Tests = new ArrayList<String>() {{
+            add("test_zoom");
+        }};
+
     private static final ArrayList<String> mSceneChangeTests = new ArrayList<String>() {{
             add("test_scene_change");
         }};
@@ -235,6 +240,7 @@
             put("scene3",mScene3Tests);
             put("scene4",mScene4Tests);
             put("scene5",mScene5Tests);
+            put("scene6",mScene6Tests);
             put("scene_change",mSceneChangeTests);
             put("sensor_fusion",mSensorFusionTests);
         }};
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestHelper.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestHelper.java
index 2bb1046..e8c47c9 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestHelper.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodFlowTestHelper.java
@@ -4,8 +4,13 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
+import android.os.UserManager;
+import android.util.Log;
 
 public class ByodFlowTestHelper {
+
+    private static final String TAG = ByodFlowTestHelper.class.getSimpleName();
+
     private Context mContext;
     private PackageManager mPackageManager;
 
@@ -39,7 +44,12 @@
      * Clean up things. This has to be working even it is called multiple times.
      */
     public void tearDown() {
-        Utils.requestDeleteManagedProfile(mContext);
+        if (!UserManager.isHeadlessSystemUserMode()) {
+            // TODO(b/177554984): figure out how to use it on headless system user mode - right now,
+            // it removes the current user on teardown
+            Log.i(TAG, "tearDown(): not deleting managed profile on headless system user mode");
+            Utils.requestDeleteManagedProfile(mContext);
+        }
         setComponentsEnabledState(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
     }
 
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodHelperActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodHelperActivity.java
index a6a25e6..74d50a9 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodHelperActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ByodHelperActivity.java
@@ -19,6 +19,7 @@
 import static android.os.UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES;
 import static android.os.UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY;
 
+import android.Manifest;
 import android.app.KeyguardManager;
 import android.app.Notification;
 import android.app.NotificationChannel;
@@ -27,6 +28,7 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.PackageManager;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -34,6 +36,9 @@
 import android.provider.MediaStore;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
 import androidx.core.content.FileProvider;
 import androidx.core.util.Pair;
 
@@ -53,7 +58,7 @@
  * Note: We have to use a test activity because cross-profile intents only work for activities.
  */
 public class ByodHelperActivity extends LocationListenerActivity
-        implements DialogCallback {
+        implements DialogCallback, ActivityCompat.OnRequestPermissionsResultCallback {
 
     static final String TAG = "ByodHelperActivity";
 
@@ -167,6 +172,11 @@
     private static final int NOTIFICATION_ID = 7;
     private static final String NOTIFICATION_CHANNEL_ID = TAG;
 
+    private static final int EXECUTE_IMAGE_CAPTURE_TEST = 1;
+    private static final int EXECUTE_VIDEO_CAPTURE_WITH_EXTRA_TEST = 2;
+    private static final int EXECUTE_VIDEO_CAPTURE_WITHOUT_EXTRA_TEST = 3;
+    private static final int EXECUTE_LOCATION_UPDATE_TEST = 4;
+
     private NotificationManager mNotificationManager;
     private Bundle mOriginalRestrictions;
 
@@ -274,40 +284,25 @@
                             IntentFiltersTestHelper.FLAG_INTENTS_FROM_MANAGED);
             setResult(intentFiltersSetForManagedIntents? RESULT_OK : RESULT_FAILED, null);
         } else if (action.equals(ACTION_CAPTURE_AND_CHECK_IMAGE)) {
-            // We need the camera permission to send the image capture intent.
-            grantCameraPermissionToSelf();
-            Intent captureImageIntent = getCaptureImageIntent();
-            Pair<File, Uri> pair = getTempUri("image.jpg");
-            mImageFile = pair.first;
-            mImageUri = pair.second;
-            captureImageIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
-            if (captureImageIntent.resolveActivity(getPackageManager()) != null) {
-                startActivityForResult(captureImageIntent, REQUEST_IMAGE_CAPTURE);
+            if (hasCameraPermission()) {
+                startCaptureImageIntent();
             } else {
-                Log.e(TAG, "Capture image intent could not be resolved in managed profile.");
-                showToast(R.string.provisioning_byod_capture_media_error);
-                finish();
+                requestCameraPermission(EXECUTE_IMAGE_CAPTURE_TEST);
             }
             return;
         } else if (action.equals(ACTION_CAPTURE_AND_CHECK_VIDEO_WITH_EXTRA_OUTPUT) ||
                 action.equals(ACTION_CAPTURE_AND_CHECK_VIDEO_WITHOUT_EXTRA_OUTPUT)) {
-            // We need the camera permission to send the video capture intent.
-            grantCameraPermissionToSelf();
-            Intent captureVideoIntent = getCaptureVideoIntent();
-            int videoCaptureRequestId;
+            final int testRequestCode;
             if (action.equals(ACTION_CAPTURE_AND_CHECK_VIDEO_WITH_EXTRA_OUTPUT)) {
-                mVideoUri = getTempUri("video.mp4").second;
-                captureVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mVideoUri);
-                videoCaptureRequestId = REQUEST_VIDEO_CAPTURE_WITH_EXTRA_OUTPUT;
+                testRequestCode = EXECUTE_VIDEO_CAPTURE_WITH_EXTRA_TEST;
             } else {
-                videoCaptureRequestId = REQUEST_VIDEO_CAPTURE_WITHOUT_EXTRA_OUTPUT;
+                testRequestCode = EXECUTE_VIDEO_CAPTURE_WITHOUT_EXTRA_TEST;
             }
-            if (captureVideoIntent.resolveActivity(getPackageManager()) != null) {
-                startActivityForResult(captureVideoIntent, videoCaptureRequestId);
+
+            if (hasCameraPermission()) {
+                startCaptureVideoActivity(testRequestCode);
             } else {
-                Log.e(TAG, "Capture video intent could not be resolved in managed profile.");
-                showToast(R.string.provisioning_byod_capture_media_error);
-                finish();
+                requestCameraPermission(testRequestCode);
             }
             return;
         } else if (action.equals(ACTION_CAPTURE_AND_CHECK_AUDIO)) {
@@ -356,7 +351,11 @@
                         DeviceAdminTestReceiver.getReceiverComponentName(), restriction);
             }
         } else if (action.equals(ACTION_BYOD_SET_LOCATION_AND_CHECK_UPDATES)) {
-            handleLocationAction();
+            if (hasLocationPermission()) {
+                handleLocationAction();
+            } else {
+                requestLocationPermission(EXECUTE_LOCATION_UPDATE_TEST);
+            }
             return;
         } else if (action.equals(ACTION_NOTIFICATION)) {
             showNotification(Notification.VISIBILITY_PUBLIC);
@@ -394,6 +393,40 @@
         finish();
     }
 
+    private void startCaptureVideoActivity(int testRequestCode) {
+        Intent captureVideoIntent = getCaptureVideoIntent();
+        int videoCaptureRequestId;
+        if (testRequestCode == EXECUTE_VIDEO_CAPTURE_WITH_EXTRA_TEST) {
+            mVideoUri = getTempUri("video.mp4").second;
+            captureVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mVideoUri);
+            videoCaptureRequestId = REQUEST_VIDEO_CAPTURE_WITH_EXTRA_OUTPUT;
+        } else {
+            videoCaptureRequestId = REQUEST_VIDEO_CAPTURE_WITHOUT_EXTRA_OUTPUT;
+        }
+        if (captureVideoIntent.resolveActivity(getPackageManager()) != null) {
+            startActivityForResult(captureVideoIntent, videoCaptureRequestId);
+        } else {
+            Log.e(TAG, "Capture video intent could not be resolved in managed profile.");
+            showToast(R.string.provisioning_byod_capture_media_error);
+            finish();
+        }
+    }
+
+    private void startCaptureImageIntent() {
+        Intent captureImageIntent = getCaptureImageIntent();
+        Pair<File, Uri> pair = getTempUri("image.jpg");
+        mImageFile = pair.first;
+        mImageUri = pair.second;
+        captureImageIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
+        if (captureImageIntent.resolveActivity(getPackageManager()) != null) {
+            startActivityForResult(captureImageIntent, REQUEST_IMAGE_CAPTURE);
+        } else {
+            Log.e(TAG, "Capture image intent could not be resolved in managed profile.");
+            showToast(R.string.provisioning_byod_capture_media_error);
+            finish();
+        }
+    }
+
     private void startInstallerActivity(String pathToApk) {
         // Start the installer activity until this activity is rendered to workaround a glitch.
         mMainThreadHandler.post(() -> {
@@ -552,10 +585,73 @@
         }
     }
 
-    private void grantCameraPermissionToSelf() {
-        mDevicePolicyManager.setPermissionGrantState(mAdminReceiverComponent, getPackageName(),
-                android.Manifest.permission.CAMERA,
-                DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED);
+    private boolean hasCameraPermission() {
+        return ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)
+                == PackageManager.PERMISSION_GRANTED;
+    }
+
+    private void requestCameraPermission(int requestCode) {
+        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.CAMERA},
+                requestCode);
+    }
+
+    private boolean hasLocationPermission() {
+        return ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
+                == PackageManager.PERMISSION_GRANTED;
+    }
+
+    private void requestLocationPermission(int requestCode) {
+        ActivityCompat.requestPermissions(this,
+                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
+                requestCode);
+    }
+
+    /**
+     * Launch the right test based on the request code, after validating the right permission
+     * has been granted.
+     */
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+            @NonNull int[] grants) {
+        // Test that the right permission was granted.
+        switch(requestCode) {
+            case EXECUTE_IMAGE_CAPTURE_TEST:
+            case EXECUTE_VIDEO_CAPTURE_WITH_EXTRA_TEST:
+            case EXECUTE_VIDEO_CAPTURE_WITHOUT_EXTRA_TEST:
+                if (!permissions[0].equals(android.Manifest.permission.CAMERA)
+                        || grants[0] != PackageManager.PERMISSION_GRANTED) {
+                    Log.e(TAG, "The test needs camera permission.");
+                    showToast(R.string.provisioning_byod_capture_media_error);
+                    finish();
+                    return;
+                }
+                break;
+            case EXECUTE_LOCATION_UPDATE_TEST:
+                if (!permissions[0].equals(Manifest.permission.ACCESS_FINE_LOCATION)
+                        || grants[0] != PackageManager.PERMISSION_GRANTED) {
+                    Log.e(TAG, "The test needs location permission.");
+                    showToast(R.string.provisioning_byod_location_mode_enable_missing_permission);
+                    finish();
+                    return;
+                }
+                break;
+        }
+
+        // Execute the right test.
+        switch (requestCode) {
+            case EXECUTE_IMAGE_CAPTURE_TEST:
+                startCaptureImageIntent();
+                break;
+            case EXECUTE_VIDEO_CAPTURE_WITH_EXTRA_TEST:
+            case EXECUTE_VIDEO_CAPTURE_WITHOUT_EXTRA_TEST:
+                startCaptureVideoActivity(requestCode);
+                break;
+            case EXECUTE_LOCATION_UPDATE_TEST:
+                handleLocationAction();
+                break;
+            default:
+                Log.e(TAG, "Unknown action.");
+                finish();
+        }
     }
 
     private void sendIntentInsideChooser(Intent toSend) {
@@ -566,21 +662,6 @@
     }
 
     @Override
-    protected void handleLocationAction() {
-        // Grant the locaiton permission to the provile owner on cts-verifier.
-        // The permission state does not have to be reverted at the end since the profile onwer
-        // is going to be deleted when BYOD tests ends.
-        grantLocationPermissionToSelf();
-        super.handleLocationAction();
-    }
-
-    private void grantLocationPermissionToSelf() {
-        mDevicePolicyManager.setPermissionGrantState(mAdminReceiverComponent, getPackageName(),
-                android.Manifest.permission.ACCESS_FINE_LOCATION,
-                DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED);
-    }
-
-    @Override
     public void onDialogClose() {
         finish();
     }
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/CommandReceiverActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/CommandReceiverActivity.java
index 7a24c09..3b292a2 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/CommandReceiverActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/CommandReceiverActivity.java
@@ -124,6 +124,8 @@
 
     public static final String EXTRA_USER_RESTRICTION =
             "com.android.cts.verifier.managedprovisioning.extra.USER_RESTRICTION";
+    public static final String EXTRA_USE_CURRENT_USER_DPM =
+            "com.android.cts.verifier.managedprovisioning.extra.USE_CURRENT_USER_DPM";
     public static final String EXTRA_SETTING =
             "com.android.cts.verifier.managedprovisioning.extra.SETTING";
     // This extra can be used along with a command extra to set policy to
@@ -186,8 +188,17 @@
         super.onCreate(savedInstanceState);
         final Intent intent = getIntent();
         try {
-            mDpm = TestAppSystemServiceFactory.getDevicePolicyManager(this,
-                    DeviceAdminTestReceiver.class);
+            // On phones, the test runs on user 0, which is the Device Owner, but on headless system
+            // user mode it runs in a different user.
+            // Most DPM operations must be set on device owner user, but a few - like adding user
+            // restrictions - must be set in the current user.
+
+            boolean useCurrentUserDpm = intent.getBooleanExtra(EXTRA_USE_CURRENT_USER_DPM, false);
+            mDpm = useCurrentUserDpm
+                    ? getSystemService(DevicePolicyManager.class)
+                    : TestAppSystemServiceFactory.getDevicePolicyManager(this,
+                            DeviceAdminTestReceiver.class);
+
             mUm = (UserManager) getSystemService(Context.USER_SERVICE);
             mAdmin = DeviceAdminTestReceiver.getReceiverComponentName();
             final String command = getIntent().getStringExtra(EXTRA_COMMAND);
@@ -196,6 +207,8 @@
                 case COMMAND_SET_USER_RESTRICTION: {
                     String restrictionKey = intent.getStringExtra(EXTRA_USER_RESTRICTION);
                     boolean enforced = intent.getBooleanExtra(EXTRA_ENFORCED, false);
+                    Log.i(TAG, "Setting '" + restrictionKey + "'=" + enforced + " using " + mDpm
+                            + " on user " + getUserId());
                     if (enforced) {
                         mDpm.addUserRestriction(mAdmin, restrictionKey);
                     } else {
@@ -633,9 +646,30 @@
         }
     }
 
-    public static Intent createSetUserRestrictionIntent(String restriction, boolean enforced) {
-        return new Intent(ACTION_EXECUTE_COMMAND)
-                .putExtra(EXTRA_COMMAND,COMMAND_SET_USER_RESTRICTION)
+    /**
+     * Creates an intent to set the given user restriction using the device owner's {@code dpm}.
+     */
+    public static Intent createSetDeviceOwnerUserRestrictionIntent(String restriction,
+            boolean enforced) {
+        return createSetUserRestrictionIntent(restriction, enforced, /* currentUserDpm= */ false);
+    }
+
+    /**
+     * Creates an intent to set the given user restriction using the current user's {@code dpm}.
+     */
+    public static Intent createSetCurrentUserRestrictionIntent(String restriction,
+            boolean enforced) {
+        return createSetUserRestrictionIntent(restriction, enforced, /* currentUserDpm= */ true);
+    }
+
+    private static Intent createSetUserRestrictionIntent(String restriction, boolean enforced,
+            boolean forceCurrentUserDpm) {
+        Intent intent = new Intent(ACTION_EXECUTE_COMMAND);
+        if (forceCurrentUserDpm) {
+            intent.putExtra(EXTRA_USE_CURRENT_USER_DPM, true);
+        }
+        return intent
+                .putExtra(EXTRA_COMMAND, COMMAND_SET_USER_RESTRICTION)
                 .putExtra(EXTRA_USER_RESTRICTION, restriction)
                 .putExtra(EXTRA_ENFORCED, enforced);
     }
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/DeviceOwnerPositiveTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/DeviceOwnerPositiveTestActivity.java
index cc2131b..0044e5c 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/DeviceOwnerPositiveTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/DeviceOwnerPositiveTestActivity.java
@@ -86,13 +86,8 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        if (!UserManager.isHeadlessSystemUserMode()) {
-            // TODO(b/177554984): figure out how to use it on headless system user mode - right now,
-            // it removes the current user on teardown
-
-            // Tidy up in case previous run crashed.
-            new ByodFlowTestHelper(this).tearDown();
-        }
+        // Tidy up in case previous run crashed.
+        new ByodFlowTestHelper(this).tearDown();
 
         if (ACTION_CHECK_DEVICE_OWNER.equals(getIntent().getAction())) {
             DevicePolicyManager dpm = TestAppSystemServiceFactory.getDevicePolicyManager(this,
@@ -222,14 +217,14 @@
                     new ButtonInfo[] {
                             new ButtonInfo(
                                     R.string.device_owner_user_restriction_set,
-                                    CommandReceiverActivity.createSetUserRestrictionIntent(
+                                    CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                             UserManager.DISALLOW_CONFIG_WIFI, true)),
                             new ButtonInfo(
                                     R.string.device_owner_settings_go,
                                     new Intent(Settings.ACTION_WIFI_SETTINGS)),
                             new ButtonInfo(
                                     R.string.device_owner_user_restriction_unset,
-                                    CommandReceiverActivity.createSetUserRestrictionIntent(
+                                    CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                             UserManager.DISALLOW_CONFIG_WIFI, false))
             }));
         }
@@ -257,7 +252,7 @@
                 new ButtonInfo[] {
                         new ButtonInfo(
                                 R.string.device_owner_user_vpn_restriction_set,
-                                CommandReceiverActivity.createSetUserRestrictionIntent(
+                                CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                         UserManager.DISALLOW_CONFIG_VPN, true)),
                         new ButtonInfo(
                                 R.string.device_owner_settings_go,
@@ -267,7 +262,7 @@
                                 new Intent(this, VpnTestActivity.class)),
                         new ButtonInfo(
                                 R.string.device_owner_user_restriction_unset,
-                                CommandReceiverActivity.createSetUserRestrictionIntent(
+                                CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                         UserManager.DISALLOW_CONFIG_VPN, false))
         }));
 
@@ -279,14 +274,14 @@
                     new ButtonInfo[] {
                             new ButtonInfo(
                                     R.string.device_owner_user_restriction_set,
-                                    CommandReceiverActivity.createSetUserRestrictionIntent(
+                                    CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                             UserManager.DISALLOW_DATA_ROAMING, true)),
                             new ButtonInfo(
                                     R.string.device_owner_settings_go,
                                     new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)),
                             new ButtonInfo(
                                     R.string.device_owner_user_restriction_unset,
-                                    CommandReceiverActivity.createSetUserRestrictionIntent(
+                                    CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                             UserManager.DISALLOW_DATA_ROAMING, false))
             }));
         }
@@ -298,11 +293,11 @@
                 new ButtonInfo[] {
                         new ButtonInfo(
                                 R.string.device_owner_user_restriction_set,
-                                CommandReceiverActivity.createSetUserRestrictionIntent(
+                                CommandReceiverActivity.createSetDeviceOwnerUserRestrictionIntent(
                                         UserManager.DISALLOW_FACTORY_RESET, true)),
                         new ButtonInfo(
                                 R.string.device_owner_user_restriction_unset,
-                                CommandReceiverActivity.createSetUserRestrictionIntent(
+                                CommandReceiverActivity.createSetDeviceOwnerUserRestrictionIntent(
                                         UserManager.DISALLOW_FACTORY_RESET, false))
         }));
 
@@ -314,14 +309,14 @@
                     new ButtonInfo[] {
                             new ButtonInfo(
                                     R.string.device_owner_user_restriction_set,
-                                    CommandReceiverActivity.createSetUserRestrictionIntent(
+                                    CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                             UserManager.DISALLOW_CONFIG_BLUETOOTH, true)),
                             new ButtonInfo(
                                     R.string.device_owner_settings_go,
                                     new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)),
                             new ButtonInfo(
                                     R.string.device_owner_user_restriction_unset,
-                                    CommandReceiverActivity.createSetUserRestrictionIntent(
+                                    CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                             UserManager.DISALLOW_CONFIG_BLUETOOTH, false))
             }));
         }
@@ -333,11 +328,11 @@
                 new ButtonInfo[] {
                         new ButtonInfo(
                                 R.string.device_owner_user_restriction_set,
-                                CommandReceiverActivity.createSetUserRestrictionIntent(
+                                CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                         UserManager.DISALLOW_USB_FILE_TRANSFER, true)),
                         new ButtonInfo(
                                 R.string.device_owner_user_restriction_unset,
-                                CommandReceiverActivity.createSetUserRestrictionIntent(
+                                CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                         UserManager.DISALLOW_USB_FILE_TRANSFER, false))
         }));
 
@@ -392,7 +387,7 @@
                                 createSetUserIconIntent(R.drawable.user_icon_1)),
                         new ButtonInfo(
                                 R.string.disallow_set_user_icon,
-                                CommandReceiverActivity.createSetUserRestrictionIntent(
+                                CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                         UserManager.DISALLOW_SET_USER_ICON, true)),
                         new ButtonInfo(
                                 R.string.device_owner_set_user_icon2_button,
@@ -402,7 +397,7 @@
                                 new Intent(Settings.ACTION_SETTINGS)),
                         new ButtonInfo(
                                 R.string.device_owner_user_restriction_unset,
-                                CommandReceiverActivity.createSetUserRestrictionIntent(
+                                CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                         UserManager.DISALLOW_SET_USER_ICON, false))
         }));
 
@@ -475,14 +470,14 @@
                                     createCreateManagedUserWithoutSetupIntent()),
                             new ButtonInfo(
                                     R.string.device_owner_user_restriction_set,
-                                    CommandReceiverActivity.createSetUserRestrictionIntent(
+                                    CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                             UserManager.DISALLOW_USER_SWITCH, true)),
                             new ButtonInfo(
                                     R.string.device_owner_settings_go,
                                     new Intent(Settings.ACTION_USER_SETTINGS)),
                             new ButtonInfo(
                                     R.string.device_owner_user_restriction_unset,
-                                    CommandReceiverActivity.createSetUserRestrictionIntent(
+                                    CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                             UserManager.DISALLOW_USER_SWITCH, false))
             }));
 
@@ -496,14 +491,14 @@
                                     createCreateManagedUserWithoutSetupIntent()),
                             new ButtonInfo(
                                     R.string.device_owner_user_restriction_set,
-                                    CommandReceiverActivity.createSetUserRestrictionIntent(
+                                    CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                             UserManager.DISALLOW_REMOVE_USER, true)),
                             new ButtonInfo(
                                     R.string.device_owner_settings_go,
                                     new Intent(Settings.ACTION_USER_SETTINGS)),
                             new ButtonInfo(
                                     R.string.device_owner_user_restriction_unset,
-                                    CommandReceiverActivity.createSetUserRestrictionIntent(
+                                    CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                             UserManager.DISALLOW_REMOVE_USER, false))
             }));
         }
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/DeviceOwnerRequestingBugreportTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/DeviceOwnerRequestingBugreportTestActivity.java
index 7ab8e7e..498e7d8 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/DeviceOwnerRequestingBugreportTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/DeviceOwnerRequestingBugreportTestActivity.java
@@ -21,14 +21,13 @@
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.admin.DevicePolicyManager;
-import android.content.ComponentName;
-import android.content.Context;
 import android.content.Intent;
 import android.database.DataSetObserver;
 import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
 
+import com.android.bedstead.dpmwrapper.TestAppSystemServiceFactory;
 import com.android.cts.verifier.ArrayTestListAdapter;
 import com.android.cts.verifier.IntentDrivenTestActivity.ButtonInfo;
 import com.android.cts.verifier.PassFailButtons;
@@ -67,8 +66,8 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         if (ACTION_CHECK_DEVICE_OWNER_FOR_REQUESTING_BUGREPORT.equals(getIntent().getAction())) {
-            DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(
-                    Context.DEVICE_POLICY_SERVICE);
+            DevicePolicyManager dpm = TestAppSystemServiceFactory.getDevicePolicyManager(this,
+                    DeviceAdminTestReceiver.class);
             if (dpm.isDeviceOwnerApp(getPackageName())) {
                 TestResult.setPassedResult(this, getIntent().getStringExtra(EXTRA_TEST_ID),
                         null, null);
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ManagedUserPositiveTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ManagedUserPositiveTestActivity.java
index acfebfe..8be4564 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ManagedUserPositiveTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/ManagedUserPositiveTestActivity.java
@@ -157,7 +157,7 @@
                 new ButtonInfo[]{
                         new ButtonInfo(
                                 R.string.device_owner_user_restriction_set,
-                                CommandReceiverActivity.createSetUserRestrictionIntent(
+                                CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                                         UserManager.DISALLOW_REMOVE_USER, true)),
                         new ButtonInfo(
                                 R.string.device_owner_settings_go,
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/PolicyTransparencyTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/PolicyTransparencyTestActivity.java
index 6ed396f..690bd6b 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/PolicyTransparencyTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/PolicyTransparencyTestActivity.java
@@ -22,8 +22,8 @@
 import android.inputmethodservice.InputMethodService;
 import android.os.Bundle;
 import android.util.ArrayMap;
-import android.view.accessibility.AccessibilityEvent;
 import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
@@ -238,7 +238,7 @@
         if (TEST_CHECK_USER_RESTRICTION.equals(mTest)) {
             final String userRestriction = getIntent().getStringExtra(
                     CommandReceiverActivity.EXTRA_USER_RESTRICTION);
-            intent = CommandReceiverActivity.createSetUserRestrictionIntent(
+            intent = CommandReceiverActivity.createSetCurrentUserRestrictionIntent(
                     userRestriction, isChecked);
         } else {
             intent = new Intent(CommandReceiverActivity.ACTION_EXECUTE_COMMAND);
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/SetSupportMessageActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/SetSupportMessageActivity.java
index 9aa71a8..e116b41 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/SetSupportMessageActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/managedprovisioning/SetSupportMessageActivity.java
@@ -16,6 +16,7 @@
 
 package com.android.cts.verifier.managedprovisioning;
 
+import android.app.ActionBar;
 import android.app.Activity;
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
@@ -46,7 +47,12 @@
         findViewById(R.id.set_default_message).setOnClickListener(this);
         findViewById(R.id.set_message).setOnClickListener(this);
         findViewById(R.id.clear_message).setOnClickListener(this);
-        mSupportMessage = (EditText) findViewById(R.id.message_view);
+        mSupportMessage = findViewById(R.id.message_view);
+
+        ActionBar actBar = getActionBar();
+        if (actBar != null) {
+            actBar.setDisplayHomeAsUpEnabled(true);
+        }
 
         mType = getIntent().getStringExtra(EXTRA_SUPPORT_MSG_TYPE);
         setTitle(TYPE_SHORT_MSG.equals(mType)
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/net/MultiNetworkConnectivityTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/net/MultiNetworkConnectivityTestActivity.java
index dcc4f37..f1deb8d 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/net/MultiNetworkConnectivityTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/net/MultiNetworkConnectivityTestActivity.java
@@ -554,7 +554,7 @@
         final NetworkCallback mWifiNetworkCallback = new NetworkCallback() {
             @Override
             public void onAvailable(Network network) {
-                Log.i(TAG, "Wifi network available " + network.getNetId());
+                Log.i(TAG, "Wifi network available " + network);
                 stopTimerDisplayIfRequested();
                 mMultiNetworkValidator.onWifiNetworkConnected(network);
             }
@@ -569,7 +569,7 @@
         final NetworkCallback mCellularNetworkCallback = new NetworkCallback() {
             @Override
             public void onAvailable(Network network) {
-                Log.i(TAG, "Cellular network available " + network.getNetId());
+                Log.i(TAG, "Cellular network available " + network);
                 stopTimerDisplayIfRequested();
                 mMultiNetworkValidator.onCellularNetworkConnected(network);
             }
@@ -761,7 +761,7 @@
             Network activeNetwork = mConnectivityManager.getActiveNetwork();
             NetworkCapabilities activeNetworkCapabilities =
                     mConnectivityManager.getNetworkCapabilities(activeNetwork);
-            Log.i(TAG, "Network capabilities for " + activeNetwork.getNetId() + " "
+            Log.i(TAG, "Network capabilities for " + activeNetwork + " "
                     + activeNetworkCapabilities.hasCapability(NET_CAPABILITY_INTERNET));
             return activeNetworkCapabilities.hasTransport(transport)
                     && activeNetworkCapabilities.hasCapability(NET_CAPABILITY_INTERNET);
@@ -774,7 +774,7 @@
         boolean isNetworkConnected(Network network) {
             NetworkInfo networkInfo = mConnectivityManager.getNetworkInfo(network);
             boolean status = networkInfo != null && networkInfo.isConnectedOrConnecting();
-            Log.i(TAG, "Network connection status " + network.getNetId() + " " + status);
+            Log.i(TAG, "Network connection status " + network + " " + status);
             return status;
         }
 
@@ -786,7 +786,7 @@
 
         /** Called when a wifi network is connected and available */
         void onWifiNetworkConnected(Network network) {
-            Log.i(TAG, "Wifi network connected " + network.getNetId());
+            Log.i(TAG, "Wifi network connected " + network);
         }
 
         void onWifiNetworkUnavailable() {
diff --git a/apps/ForceStopHelperApp/AndroidManifest.xml b/apps/ForceStopHelperApp/AndroidManifest.xml
index 2bd9b0d..5f3ba67 100644
--- a/apps/ForceStopHelperApp/AndroidManifest.xml
+++ b/apps/ForceStopHelperApp/AndroidManifest.xml
@@ -18,6 +18,7 @@
           package="com.android.cts.forcestophelper" >
 
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+    <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
 
     <application android:label="Force stop helper app">
         <activity android:name=".RecentTaskActivity"
diff --git a/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/DeviceOwnerHelper.java b/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/DeviceOwnerHelper.java
index 8cab723..ed99c17 100644
--- a/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/DeviceOwnerHelper.java
+++ b/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/DeviceOwnerHelper.java
@@ -24,6 +24,7 @@
 import static com.android.bedstead.dpmwrapper.Utils.EXTRA_METHOD;
 import static com.android.bedstead.dpmwrapper.Utils.EXTRA_NUMBER_ARGS;
 import static com.android.bedstead.dpmwrapper.Utils.VERBOSE;
+import static com.android.bedstead.dpmwrapper.Utils.callOnHandlerThread;
 import static com.android.bedstead.dpmwrapper.Utils.isHeadlessSystemUser;
 
 import android.annotation.Nullable;
@@ -76,7 +77,7 @@
             Log.d(TAG, "runManagerMethod(): userId=" + context.getUserId()
                     + ", intent=" + intent.getAction() + ", class=" + className
                     + ", methodName=" + methodName + ", numberArgs=" + numberArgs);
-            Object[] args = null;
+            final Object[] args;
             Class<?>[] parameterTypes = null;
             if (numberArgs > 0) {
                 args = new Object[numberArgs];
@@ -88,6 +89,8 @@
                 Log.d(TAG, "runManagerMethod(): args=" + Arrays.toString(args) + ", types="
                         + Arrays.toString(parameterTypes));
 
+            } else {
+                args = null;
             }
             Class<?> managerClass = Class.forName(className);
             Method method = findMethod(managerClass, methodName, parameterTypes);
@@ -99,8 +102,8 @@
             Object manager = managerClass.equals(DevicePolicyManager.class)
                     ? receiver.getManager(context)
                     : context.getSystemService(managerClass);
-
-            Object result = method.invoke(manager, args);
+            // Must handle in a separate thread as some APIs will fail when called from main's
+            Object result = callOnHandlerThread(() -> method.invoke(manager, args));
 
             if (VERBOSE) {
                 // Some results - like network logging events - are quite large
@@ -142,6 +145,7 @@
                     return clazz.getDeclaredMethod(methodName,
                             new Class<?>[] { int.class, CharSequence.class });
                 case "setDeviceOwnerLockScreenInfo":
+                case "setOrganizationName":
                     return clazz.getDeclaredMethod(methodName,
                             new Class<?>[] { ComponentName.class, CharSequence.class });
             }
diff --git a/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/DevicePolicyManagerWrapper.java b/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/DevicePolicyManagerWrapper.java
index c1de82d..377439e 100644
--- a/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/DevicePolicyManagerWrapper.java
+++ b/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/DevicePolicyManagerWrapper.java
@@ -156,6 +156,27 @@
             // Used by SuspendPackageTest
             doAnswer(answer).when(spy).getPolicyExemptApps();
 
+            // Used by PrivacyDeviceOwnerTest
+            doAnswer(answer).when(spy).getDeviceOwner();
+
+            // Used by AdminActionBookkeepingTest
+            doAnswer(answer).when(spy).getDeviceOwnerOrganizationName();
+            doAnswer(answer).when(spy).setOrganizationName(any(), any());
+            doAnswer(answer).when(spy).retrieveSecurityLogs(any());
+            doAnswer(answer).when(spy).getLastSecurityLogRetrievalTime();
+            doAnswer(answer).when(spy).getLastBugReportRequestTime();
+            doAnswer(answer).when(spy).isDeviceManaged();
+            doAnswer(answer).when(spy).isCurrentInputMethodSetByOwner();
+            doAnswer(answer).when(spy).installCaCert(any(), any());
+            doAnswer(answer).when(spy).getOwnerInstalledCaCerts(any());
+            doAnswer(answer).when(spy).retrievePreRebootSecurityLogs(any());
+            doAnswer(answer).when(spy).getLastNetworkLogRetrievalTime();
+
+            // Used by PrivateDnsPolicyTest
+            doAnswer(answer).when(spy).getGlobalPrivateDnsHost(any());
+            doAnswer(answer).when(spy).getGlobalPrivateDnsMode(any());
+            doAnswer(answer).when(spy).setGlobalPrivateDnsModeSpecifiedHost(any(), any());
+
             // TODO(b/176993670): add more methods below as tests are converted
         } catch (Exception e) {
             // Should never happen, but needs to be catch as some methods declare checked exceptions
diff --git a/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/TestAppSystemServiceFactory.java b/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/TestAppSystemServiceFactory.java
index 30071d15..7bb9084 100644
--- a/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/TestAppSystemServiceFactory.java
+++ b/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/TestAppSystemServiceFactory.java
@@ -24,6 +24,7 @@
 import static com.android.bedstead.dpmwrapper.Utils.EXTRA_METHOD;
 import static com.android.bedstead.dpmwrapper.Utils.EXTRA_NUMBER_ARGS;
 import static com.android.bedstead.dpmwrapper.Utils.VERBOSE;
+import static com.android.bedstead.dpmwrapper.Utils.getHandler;
 
 import android.annotation.Nullable;
 import android.app.admin.DeviceAdminReceiver;
@@ -37,8 +38,6 @@
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
-import android.os.Handler;
-import android.os.HandlerThread;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.util.Log;
@@ -72,10 +71,6 @@
     // 6 minutes for network monitoring events.
     private static final long TIMEOUT_MS = TimeUnit.MINUTES.toMillis(10);
 
-    private static final HandlerThread HANDLER_THREAD = new HandlerThread(TAG + "HandlerThread");
-
-    private static Handler sHandler;
-
     // Caches whether the package declares the required receiver (otherwise each test would be
     // querying package manager, which is expensive)
     private static final HashMap<String, Boolean> sHasRequiredReceiver = new HashMap<>();
@@ -164,12 +159,6 @@
             return manager;
         }
 
-        if (sHandler == null) {
-            Log.i(TAG, "Starting handler thread " + HANDLER_THREAD);
-            HANDLER_THREAD.start();
-            sHandler = new Handler(HANDLER_THREAD.getLooper());
-        }
-
         String receiverClassName = receiverClass.getName();
         final String wrappedClassName = wrappedClass.getName();
         if (VERBOSE) {
@@ -219,10 +208,10 @@
                     != PackageManager.PERMISSION_GRANTED) {
                 fail("Package " + context.getPackageName() + " doesn't have "
                         + INTERACT_ACROSS_USERS + " - did you add it to the manifest and called "
-                        + "grantDpmWrapper() in the host-side test?");
+                        + "grantDpmWrapper() (for user " + userId + ") in the host-side test?");
             }
             context.sendOrderedBroadcastAsUser(intent,
-                    UserHandle.SYSTEM, /* permission= */ null, myReceiver, sHandler,
+                    UserHandle.SYSTEM, /* permission= */ null, myReceiver, getHandler(),
                     RESULT_NOT_SENT_TO_ANY_RECEIVER, /* initialData= */ null,
                     /* initialExtras= */ null);
 
diff --git a/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/Utils.java b/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/Utils.java
index 5fc2518..03b8963 100644
--- a/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/Utils.java
+++ b/common/device-side/bedstead/dpmwrapper/src/main/java/com/android/bedstead/dpmwrapper/Utils.java
@@ -20,16 +20,28 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.util.Log;
+
+import com.android.internal.annotations.GuardedBy;
 
 import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Generic helpers.
  */
 public final class Utils {
 
+    private static final String TAG = "DpmWrapperUtils";
+
     static final boolean VERBOSE = false;
 
     static final int MY_USER_ID = UserHandle.myUserId();
@@ -41,6 +53,14 @@
     static final String EXTRA_NUMBER_ARGS = "number_args";
     static final String EXTRA_ARG_PREFIX = "arg_";
 
+    private static final Object LOCK = new Object();
+
+    @GuardedBy("LOCK")
+    private static HandlerThread sHandlerThread;
+
+    @GuardedBy("LOCK")
+    private static Handler sHandler;
+
     static boolean isHeadlessSystemUser() {
         return UserManager.isHeadlessSystemUserMode() && MY_USER_ID == UserHandle.USER_SYSTEM;
     }
@@ -65,6 +85,49 @@
         return builder.append(']').toString();
     }
 
+    static Handler getHandler() {
+        synchronized (LOCK) {
+            if (sHandler == null) {
+                sHandlerThread = new HandlerThread("DpmWrapperHandlerThread");
+                Log.i(TAG, "Starting handler thread " + sHandlerThread);
+                sHandlerThread.start();
+                sHandler = new Handler(sHandlerThread.getLooper());
+            }
+        }
+        return sHandler;
+    }
+
+    static <T> T callOnHandlerThread(Callable<T> callable) throws Exception {
+        if (VERBOSE) Log.v(TAG, "callOnHandlerThread(): called from " + Thread.currentThread());
+
+        final CountDownLatch latch = new CountDownLatch(1);
+        final AtomicReference<T> returnRef = new AtomicReference<>();
+        final AtomicReference<Exception> exceptionRef = new AtomicReference<>();
+
+        getHandler().post(() -> {
+            Log.d(TAG, "Calling callable on handler thread " + Thread.currentThread());
+            try {
+                T result = callable.call();
+                if (VERBOSE) Log.v(TAG, "Got result: "  + result);
+                returnRef.set(result);
+            } catch (Exception e) {
+                Log.e(TAG, "Got exception: "  + e);
+                exceptionRef.set(e);
+            } finally {
+                latch.countDown();
+            }
+        });
+
+        if (!latch.await(50, TimeUnit.SECONDS)) {
+            throw new TimeoutException("didn't get result in 50 seconds");
+        }
+
+        Exception exception = exceptionRef.get();
+        if (exception != null) throw exception;
+
+        return returnRef.get();
+    }
+
     /**
      * Gets a more detailed description of an intent (for example, including extras).
      */
diff --git a/common/device-side/bedstead/eventlib/lint-baseline.xml b/common/device-side/bedstead/eventlib/lint-baseline.xml
new file mode 100644
index 0000000..467bd49
--- /dev/null
+++ b/common/device-side/bedstead/eventlib/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 28 (current min is 27): `android.app.AppComponentFactory`"
+        errorLine1="public class EventLibAppComponentFactory extends AppComponentFactory {"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/common/device-side/bedstead/eventlib/src/main/java/com/android/eventlib/premade/EventLibAppComponentFactory.java"
+            line="28"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level R (current min is 27): `android.content.Context#bindServiceAsUser`"
+        errorLine1="                didBind.set(sContext.bindServiceAsUser("
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/common/device-side/bedstead/eventlib/src/main/java/com/android/eventlib/RemoteEventQuerier.java"
+            line="197"
+            column="38"/>
+    </issue>
+
+</issues>
diff --git a/common/device-side/bedstead/eventlib/src/main/java/com/android/eventlib/events/deviceadminreceivers/DeviceAdminPasswordFailedEvent.java b/common/device-side/bedstead/eventlib/src/main/java/com/android/eventlib/events/deviceadminreceivers/DeviceAdminPasswordFailedEvent.java
new file mode 100644
index 0000000..b796a25
--- /dev/null
+++ b/common/device-side/bedstead/eventlib/src/main/java/com/android/eventlib/events/deviceadminreceivers/DeviceAdminPasswordFailedEvent.java
@@ -0,0 +1,193 @@
+/*
+ * 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.eventlib.events.deviceadminreceivers;
+
+import android.app.admin.DeviceAdminReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.UserHandle;
+
+import androidx.annotation.CheckResult;
+
+import com.android.eventlib.Event;
+import com.android.eventlib.EventLogger;
+import com.android.eventlib.EventLogsQuery;
+import com.android.eventlib.info.DeviceAdminReceiverInfo;
+import com.android.eventlib.queryhelpers.DeviceAdminReceiverQuery;
+import com.android.eventlib.queryhelpers.DeviceAdminReceiverQueryHelper;
+import com.android.eventlib.queryhelpers.IntentQueryHelper;
+import com.android.eventlib.queryhelpers.UserHandleQuery;
+import com.android.eventlib.queryhelpers.UserHandleQueryHelper;
+import com.android.eventlib.util.SerializableParcelWrapper;
+
+/**
+ * Event logged when {@link DeviceAdminReceiver#onPasswordFailed(Context, Intent)} or
+ * {@link DeviceAdminReceiver#onPasswordFailed(Context, Intent, UserHandle)} is called.
+ */
+public final class DeviceAdminPasswordFailedEvent extends Event {
+
+    /** Begin a query for {@link DeviceAdminPasswordFailedEvent} events. */
+    public static DeviceAdminPasswordFailedEventQuery queryPackage(String packageName) {
+        return new DeviceAdminPasswordFailedEventQuery(packageName);
+    }
+
+    /** {@link EventLogsQuery} for {@link DeviceAdminPasswordFailedEvent}. */
+    public static final class DeviceAdminPasswordFailedEventQuery
+            extends EventLogsQuery<DeviceAdminPasswordFailedEvent,
+            DeviceAdminPasswordFailedEventQuery> {
+        DeviceAdminReceiverQueryHelper<DeviceAdminPasswordFailedEventQuery> mDeviceAdminReceiver =
+                new DeviceAdminReceiverQueryHelper<>(this);
+        IntentQueryHelper<DeviceAdminPasswordFailedEventQuery> mIntent =
+                new IntentQueryHelper<>(this);
+        UserHandleQueryHelper<DeviceAdminPasswordFailedEventQuery> mUserHandle =
+                new UserHandleQueryHelper<DeviceAdminPasswordFailedEventQuery>(this);
+
+        private DeviceAdminPasswordFailedEventQuery(String packageName) {
+            super(DeviceAdminPasswordFailedEvent.class, packageName);
+        }
+
+        /**
+         * Query {@link Intent} passed into
+         * {@link DeviceAdminReceiver#onPasswordFailed(Context, Intent)}.
+         */
+        @CheckResult
+        public IntentQueryHelper<DeviceAdminPasswordFailedEventQuery> whereIntent() {
+            return mIntent;
+        }
+
+        /** Query {@link DeviceAdminReceiver}. */
+        @CheckResult
+        public DeviceAdminReceiverQuery<DeviceAdminPasswordFailedEventQuery>
+                whereDeviceAdminReceiver() {
+            return mDeviceAdminReceiver;
+        }
+
+        /** Query {@link UserHandle} passed into
+         * {@link DeviceAdminReceiver#onPasswordFailed(Context, Intent, UserHandle)}.
+         */
+        @CheckResult
+        public UserHandleQuery<DeviceAdminPasswordFailedEventQuery> whereUserHandle() {
+            return mUserHandle;
+        }
+
+        @Override
+        protected boolean filter(DeviceAdminPasswordFailedEvent event) {
+            if (!mIntent.matches(event.mIntent)) {
+                return false;
+            }
+            if (!mDeviceAdminReceiver.matches(event.mDeviceAdminReceiver)) {
+                return false;
+            }
+            if (!mUserHandle.matches(event.mUserHandle)) {
+                return false;
+            }
+            return true;
+        }
+    }
+
+    /** Begin logging a {@link DeviceAdminPasswordFailedEvent}. */
+    public static DeviceAdminPasswordFailedEventLogger logger(
+            DeviceAdminReceiver deviceAdminReceiver, Context context, Intent intent) {
+        return new DeviceAdminPasswordFailedEventLogger(deviceAdminReceiver, context, intent);
+    }
+
+    /** {@link EventLogger} for {@link DeviceAdminPasswordFailedEvent}. */
+    public static final class DeviceAdminPasswordFailedEventLogger
+            extends EventLogger<DeviceAdminPasswordFailedEvent> {
+        private DeviceAdminPasswordFailedEventLogger(
+                DeviceAdminReceiver deviceAdminReceiver, Context context, Intent intent) {
+            super(context, new DeviceAdminPasswordFailedEvent());
+            mEvent.mIntent = new SerializableParcelWrapper<>(intent);
+            setDeviceAdminReceiver(deviceAdminReceiver);
+        }
+
+        /** Set the {@link DeviceAdminReceiver} which received this event. */
+        public DeviceAdminPasswordFailedEventLogger setDeviceAdminReceiver(
+                DeviceAdminReceiver deviceAdminReceiver) {
+            mEvent.mDeviceAdminReceiver = new DeviceAdminReceiverInfo(deviceAdminReceiver);
+            return this;
+        }
+
+        /** Set the {@link DeviceAdminReceiver} which received this event. */
+        public DeviceAdminPasswordFailedEventLogger setDeviceAdminReceiver(
+                Class<? extends DeviceAdminReceiver> deviceAdminReceiverClass) {
+            mEvent.mDeviceAdminReceiver = new DeviceAdminReceiverInfo(deviceAdminReceiverClass);
+            return this;
+        }
+
+        /** Set the {@link DeviceAdminReceiver} which received this event. */
+        public DeviceAdminPasswordFailedEventLogger setDeviceAdminReceiver(
+                String deviceAdminReceiverClassName) {
+            mEvent.mDeviceAdminReceiver = new DeviceAdminReceiverInfo(deviceAdminReceiverClassName);
+            return this;
+        }
+
+        /** Set the {@link Intent} which was received. */
+        public DeviceAdminPasswordFailedEventLogger setIntent(Intent intent) {
+            mEvent.mIntent = new SerializableParcelWrapper<>(intent);
+            return this;
+        }
+
+        /** Set the {@link UserHandle}. */
+        public DeviceAdminPasswordFailedEventLogger setUserHandle(UserHandle userHandle) {
+            mEvent.mUserHandle = new SerializableParcelWrapper<>(userHandle);
+            return this;
+        }
+    }
+
+    protected SerializableParcelWrapper<Intent> mIntent;
+    protected SerializableParcelWrapper<UserHandle> mUserHandle;
+    protected DeviceAdminReceiverInfo mDeviceAdminReceiver;
+
+    /**
+     * The {@link Intent} passed into
+     * {@link DeviceAdminReceiver#onPasswordFailed(Context, Intent)}.
+     */
+    public Intent intent() {
+        if (mIntent == null) {
+            return null;
+        }
+        return mIntent.get();
+    }
+
+    /**
+     * The {@link UserHandle} passed into
+     * {@link DeviceAdminReceiver#onPasswordFailed(Context, Intent, UserHandle)}.
+     */
+    public UserHandle userHandle() {
+        if (mUserHandle == null) {
+            return null;
+        }
+        return mUserHandle.get();
+    }
+
+    /** Information about the {@link DeviceAdminReceiver} which received the intent. */
+    public DeviceAdminReceiverInfo deviceAdminReceiver() {
+        return mDeviceAdminReceiver;
+    }
+
+    @Override
+    public String toString() {
+        return "DeviceAdminPasswordFailedEvent{"
+                + " intent=" + intent()
+                + ", userHandle=" + userHandle()
+                + ", deviceAdminReceiver=" + mDeviceAdminReceiver
+                + ", packageName='" + mPackageName + "'"
+                + ", timestamp=" + mTimestamp
+                + "}";
+    }
+}
diff --git a/common/device-side/bedstead/eventlib/src/main/java/com/android/eventlib/events/deviceadminreceivers/DeviceAdminPasswordSucceededEvent.java b/common/device-side/bedstead/eventlib/src/main/java/com/android/eventlib/events/deviceadminreceivers/DeviceAdminPasswordSucceededEvent.java
new file mode 100644
index 0000000..ba22d98
--- /dev/null
+++ b/common/device-side/bedstead/eventlib/src/main/java/com/android/eventlib/events/deviceadminreceivers/DeviceAdminPasswordSucceededEvent.java
@@ -0,0 +1,193 @@
+/*
+ * 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.eventlib.events.deviceadminreceivers;
+
+import android.app.admin.DeviceAdminReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.UserHandle;
+
+import androidx.annotation.CheckResult;
+
+import com.android.eventlib.Event;
+import com.android.eventlib.EventLogger;
+import com.android.eventlib.EventLogsQuery;
+import com.android.eventlib.info.DeviceAdminReceiverInfo;
+import com.android.eventlib.queryhelpers.DeviceAdminReceiverQuery;
+import com.android.eventlib.queryhelpers.DeviceAdminReceiverQueryHelper;
+import com.android.eventlib.queryhelpers.IntentQueryHelper;
+import com.android.eventlib.queryhelpers.UserHandleQuery;
+import com.android.eventlib.queryhelpers.UserHandleQueryHelper;
+import com.android.eventlib.util.SerializableParcelWrapper;
+
+/**
+ * Event logged when {@link DeviceAdminReceiver#onPasswordSucceeded(Context, Intent)} or
+ * {@link DeviceAdminReceiver#onPasswordSucceeded(Context, Intent, UserHandle)} is called.
+ */
+public final class DeviceAdminPasswordSucceededEvent extends Event {
+
+    /** Begin a query for {@link DeviceAdminPasswordSucceededEvent} events. */
+    public static DeviceAdminPasswordSucceededEventQuery queryPackage(String packageName) {
+        return new DeviceAdminPasswordSucceededEventQuery(packageName);
+    }
+
+    /** {@link EventLogsQuery} for {@link DeviceAdminPasswordSucceededEvent}. */
+    public static final class DeviceAdminPasswordSucceededEventQuery
+            extends EventLogsQuery<DeviceAdminPasswordSucceededEvent,
+            DeviceAdminPasswordSucceededEventQuery> {
+        DeviceAdminReceiverQueryHelper<DeviceAdminPasswordSucceededEventQuery>
+                mDeviceAdminReceiver = new DeviceAdminReceiverQueryHelper<>(this);
+        IntentQueryHelper<DeviceAdminPasswordSucceededEventQuery> mIntent =
+                new IntentQueryHelper<>(this);
+        UserHandleQueryHelper<DeviceAdminPasswordSucceededEventQuery> mUserHandle =
+                new UserHandleQueryHelper<DeviceAdminPasswordSucceededEventQuery>(this);
+
+        private DeviceAdminPasswordSucceededEventQuery(String packageName) {
+            super(DeviceAdminPasswordSucceededEvent.class, packageName);
+        }
+
+        /**
+         * Query {@link Intent} passed into
+         * {@link DeviceAdminReceiver#onPasswordSucceeded(Context, Intent)}.
+         */
+        @CheckResult
+        public IntentQueryHelper<DeviceAdminPasswordSucceededEventQuery> whereIntent() {
+            return mIntent;
+        }
+
+        /** Query {@link DeviceAdminReceiver}. */
+        @CheckResult
+        public DeviceAdminReceiverQuery<DeviceAdminPasswordSucceededEventQuery>
+                whereDeviceAdminReceiver() {
+            return mDeviceAdminReceiver;
+        }
+
+        /** Query {@link UserHandle} passed into
+         * {@link DeviceAdminReceiver#onPasswordSucceeded(Context, Intent, UserHandle)}.
+         */
+        @CheckResult
+        public UserHandleQuery<DeviceAdminPasswordSucceededEventQuery> whereUserHandle() {
+            return mUserHandle;
+        }
+
+        @Override
+        protected boolean filter(DeviceAdminPasswordSucceededEvent event) {
+            if (!mIntent.matches(event.mIntent)) {
+                return false;
+            }
+            if (!mDeviceAdminReceiver.matches(event.mDeviceAdminReceiver)) {
+                return false;
+            }
+            if (!mUserHandle.matches(event.mUserHandle)) {
+                return false;
+            }
+            return true;
+        }
+    }
+
+    /** Begin logging a {@link DeviceAdminPasswordSucceededEvent}. */
+    public static DeviceAdminPasswordSucceededEventLogger logger(
+            DeviceAdminReceiver deviceAdminReceiver, Context context, Intent intent) {
+        return new DeviceAdminPasswordSucceededEventLogger(deviceAdminReceiver, context, intent);
+    }
+
+    /** {@link EventLogger} for {@link DeviceAdminPasswordSucceededEvent}. */
+    public static final class DeviceAdminPasswordSucceededEventLogger
+            extends EventLogger<DeviceAdminPasswordSucceededEvent> {
+        private DeviceAdminPasswordSucceededEventLogger(
+                DeviceAdminReceiver deviceAdminReceiver, Context context, Intent intent) {
+            super(context, new DeviceAdminPasswordSucceededEvent());
+            mEvent.mIntent = new SerializableParcelWrapper<>(intent);
+            setDeviceAdminReceiver(deviceAdminReceiver);
+        }
+
+        /** Set the {@link DeviceAdminReceiver} which received this event. */
+        public DeviceAdminPasswordSucceededEventLogger setDeviceAdminReceiver(
+                DeviceAdminReceiver deviceAdminReceiver) {
+            mEvent.mDeviceAdminReceiver = new DeviceAdminReceiverInfo(deviceAdminReceiver);
+            return this;
+        }
+
+        /** Set the {@link DeviceAdminReceiver} which received this event. */
+        public DeviceAdminPasswordSucceededEventLogger setDeviceAdminReceiver(
+                Class<? extends DeviceAdminReceiver> deviceAdminReceiverClass) {
+            mEvent.mDeviceAdminReceiver = new DeviceAdminReceiverInfo(deviceAdminReceiverClass);
+            return this;
+        }
+
+        /** Set the {@link DeviceAdminReceiver} which received this event. */
+        public DeviceAdminPasswordSucceededEventLogger setDeviceAdminReceiver(
+                String deviceAdminReceiverClassName) {
+            mEvent.mDeviceAdminReceiver = new DeviceAdminReceiverInfo(deviceAdminReceiverClassName);
+            return this;
+        }
+
+        /** Set the {@link Intent} which was received. */
+        public DeviceAdminPasswordSucceededEventLogger setIntent(Intent intent) {
+            mEvent.mIntent = new SerializableParcelWrapper<>(intent);
+            return this;
+        }
+
+        /** Set the {@link UserHandle}. */
+        public DeviceAdminPasswordSucceededEventLogger setUserHandle(UserHandle userHandle) {
+            mEvent.mUserHandle = new SerializableParcelWrapper<>(userHandle);
+            return this;
+        }
+    }
+
+    protected SerializableParcelWrapper<Intent> mIntent;
+    protected SerializableParcelWrapper<UserHandle> mUserHandle;
+    protected DeviceAdminReceiverInfo mDeviceAdminReceiver;
+
+    /**
+     * The {@link Intent} passed into
+     * {@link DeviceAdminReceiver#onPasswordSucceeded(Context, Intent)}.
+     */
+    public Intent intent() {
+        if (mIntent == null) {
+            return null;
+        }
+        return mIntent.get();
+    }
+
+    /**
+     * The {@link UserHandle} passed into
+     * {@link DeviceAdminReceiver#onPasswordSucceeded(Context, Intent, UserHandle)}.
+     */
+    public UserHandle userHandle() {
+        if (mUserHandle == null) {
+            return null;
+        }
+        return mUserHandle.get();
+    }
+
+    /** Information about the {@link DeviceAdminReceiver} which received the intent. */
+    public DeviceAdminReceiverInfo deviceAdminReceiver() {
+        return mDeviceAdminReceiver;
+    }
+
+    @Override
+    public String toString() {
+        return "DeviceAdminPasswordSucceededEvent{"
+                + " intent=" + intent()
+                + ", userHandle=" + userHandle()
+                + ", deviceAdminReceiver=" + mDeviceAdminReceiver
+                + ", packageName='" + mPackageName + "'"
+                + ", timestamp=" + mTimestamp
+                + "}";
+    }
+}
diff --git a/common/device-side/bedstead/eventlib/src/main/java/com/android/eventlib/premade/EventLibDeviceAdminReceiver.java b/common/device-side/bedstead/eventlib/src/main/java/com/android/eventlib/premade/EventLibDeviceAdminReceiver.java
index 1c243ad..67bc33e 100644
--- a/common/device-side/bedstead/eventlib/src/main/java/com/android/eventlib/premade/EventLibDeviceAdminReceiver.java
+++ b/common/device-side/bedstead/eventlib/src/main/java/com/android/eventlib/premade/EventLibDeviceAdminReceiver.java
@@ -28,6 +28,8 @@
 import com.android.eventlib.events.deviceadminreceivers.DeviceAdminDisabledEvent;
 import com.android.eventlib.events.deviceadminreceivers.DeviceAdminEnabledEvent;
 import com.android.eventlib.events.deviceadminreceivers.DeviceAdminPasswordChangedEvent;
+import com.android.eventlib.events.deviceadminreceivers.DeviceAdminPasswordFailedEvent;
+import com.android.eventlib.events.deviceadminreceivers.DeviceAdminPasswordSucceededEvent;
 
 /** Implementation of {@link DeviceAdminReceiver} which logs events in response to callbacks. */
 public class EventLibDeviceAdminReceiver extends DeviceAdminReceiver {
@@ -106,28 +108,60 @@
         }
 
         logger.log();
-
-        super.onPasswordChanged(context, intent, user);
     }
 
     @Override
     public void onPasswordFailed(Context context, Intent intent) {
+        DeviceAdminPasswordFailedEvent.DeviceAdminPasswordFailedEventLogger logger =
+                DeviceAdminPasswordFailedEvent.logger(this, context, intent);
+
+        if (mOverrideDeviceAdminReceiverClassName != null) {
+            logger.setDeviceAdminReceiver(mOverrideDeviceAdminReceiverClassName);
+        }
+
+        logger.log();
+
         super.onPasswordFailed(context, intent);
     }
 
     @Override
     public void onPasswordFailed(Context context, Intent intent, UserHandle user) {
-        super.onPasswordFailed(context, intent, user);
+        DeviceAdminPasswordFailedEvent.DeviceAdminPasswordFailedEventLogger logger =
+                DeviceAdminPasswordFailedEvent.logger(this, context, intent);
+        logger.setUserHandle(user);
+
+        if (mOverrideDeviceAdminReceiverClassName != null) {
+            logger.setDeviceAdminReceiver(mOverrideDeviceAdminReceiverClassName);
+        }
+
+        logger.log();
     }
 
     @Override
     public void onPasswordSucceeded(Context context, Intent intent) {
+        DeviceAdminPasswordSucceededEvent.DeviceAdminPasswordSucceededEventLogger logger =
+                DeviceAdminPasswordSucceededEvent.logger(this, context, intent);
+
+        if (mOverrideDeviceAdminReceiverClassName != null) {
+            logger.setDeviceAdminReceiver(mOverrideDeviceAdminReceiverClassName);
+        }
+
+        logger.log();
+
         super.onPasswordSucceeded(context, intent);
     }
 
     @Override
     public void onPasswordSucceeded(Context context, Intent intent, UserHandle user) {
-        super.onPasswordSucceeded(context, intent, user);
+        DeviceAdminPasswordSucceededEvent.DeviceAdminPasswordSucceededEventLogger logger =
+                DeviceAdminPasswordSucceededEvent.logger(this, context, intent);
+        logger.setUserHandle(user);
+
+        if (mOverrideDeviceAdminReceiverClassName != null) {
+            logger.setDeviceAdminReceiver(mOverrideDeviceAdminReceiverClassName);
+        }
+
+        logger.log();
     }
 
     @Override
diff --git a/common/device-side/bedstead/eventlib/src/test/java/com/android/eventlib/events/deviceadminreceivers/DeviceAdminPasswordFailedEventTest.java b/common/device-side/bedstead/eventlib/src/test/java/com/android/eventlib/events/deviceadminreceivers/DeviceAdminPasswordFailedEventTest.java
new file mode 100644
index 0000000..814d869
--- /dev/null
+++ b/common/device-side/bedstead/eventlib/src/test/java/com/android/eventlib/events/deviceadminreceivers/DeviceAdminPasswordFailedEventTest.java
@@ -0,0 +1,182 @@
+/*
+ * 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.eventlib.events.deviceadminreceivers;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.admin.DeviceAdminReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.UserHandle;
+
+import com.android.bedstead.nene.TestApis;
+import com.android.eventlib.EventLogs;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public final class DeviceAdminPasswordFailedEventTest {
+
+    private static final TestApis sTestApis = new TestApis();
+    private static final Context sContext = sTestApis.context().instrumentedContext();
+    private static final String STRING_VALUE = "Value";
+    private static final String DIFFERENT_STRING_VALUE = "Value2";
+    private static final Intent INTENT = new Intent();
+
+    private static final String DEFAULT_DEVICE_ADMIN_RECEIVER_CLASS_NAME =
+            TestDeviceAdminReceiver.class.getName();
+    private static final String CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME =
+            "customDeviceAdminReceiver";
+    private static final String DIFFERENT_CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME =
+            "customDeviceAdminReceiver2";
+    private static final DeviceAdminReceiver DEVICE_ADMIN_RECEIVER = new TestDeviceAdminReceiver();
+    private static final UserHandle USER_HANDLE = UserHandle.of(1);
+    private static final UserHandle DIFFERENT_USER_HANDLE = UserHandle.of(2);
+
+    private static class TestDeviceAdminReceiver extends DeviceAdminReceiver {
+    }
+
+    @Before
+    public void setUp() {
+        EventLogs.resetLogs();
+    }
+
+    @Test
+    public void whereIntent_works() {
+        Intent intent = new Intent();
+        intent.setAction(STRING_VALUE);
+        DeviceAdminPasswordFailedEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, intent).log();
+
+        EventLogs<DeviceAdminPasswordFailedEvent> eventLogs =
+                DeviceAdminPasswordFailedEvent.queryPackage(sContext.getPackageName())
+                        .whereIntent().action().isEqualTo(STRING_VALUE);
+
+        assertThat(eventLogs.get().intent()).isEqualTo(intent);
+    }
+
+    @Test
+    public void whereIntent_skipsNonMatching() {
+        Intent intent = new Intent();
+        intent.setAction(STRING_VALUE);
+        Intent differentIntent = new Intent();
+        differentIntent.setAction(DIFFERENT_STRING_VALUE);
+        DeviceAdminPasswordFailedEvent.logger(
+                DEVICE_ADMIN_RECEIVER, sContext, differentIntent).log();
+        DeviceAdminPasswordFailedEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, intent).log();
+
+        EventLogs<DeviceAdminPasswordFailedEvent> eventLogs =
+                DeviceAdminPasswordFailedEvent.queryPackage(sContext.getPackageName())
+                        .whereIntent().action().isEqualTo(STRING_VALUE);
+
+        assertThat(eventLogs.get().intent()).isEqualTo(intent);
+    }
+
+    @Test
+    public void whereDeviceAdminReceiver_customValueOnLogger_works() {
+        DeviceAdminPasswordFailedEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setDeviceAdminReceiver(CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME)
+                .log();
+
+        EventLogs<DeviceAdminPasswordFailedEvent> eventLogs =
+                DeviceAdminPasswordFailedEvent.queryPackage(sContext.getPackageName())
+                        .whereDeviceAdminReceiver().className().isEqualTo(
+                        CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+
+        assertThat(eventLogs.get().deviceAdminReceiver().className()).isEqualTo(
+                CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+    }
+
+    @Test
+    public void whereDeviceAdminReceiver_customValueOnLogger_skipsNonMatching() {
+        DeviceAdminPasswordFailedEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setDeviceAdminReceiver(DIFFERENT_CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME)
+                .log();
+        DeviceAdminPasswordFailedEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setDeviceAdminReceiver(CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME)
+                .log();
+
+        EventLogs<DeviceAdminPasswordFailedEvent> eventLogs =
+                DeviceAdminPasswordFailedEvent.queryPackage(sContext.getPackageName())
+                        .whereDeviceAdminReceiver().className().isEqualTo(
+                        CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+
+        assertThat(eventLogs.get().deviceAdminReceiver().className()).isEqualTo(
+                CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+    }
+
+    @Test
+    public void whereDeviceAdminReceiver_defaultValue_works() {
+        DeviceAdminPasswordFailedEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT).log();
+
+        EventLogs<DeviceAdminPasswordFailedEvent> eventLogs =
+                DeviceAdminPasswordFailedEvent.queryPackage(sContext.getPackageName())
+                        .whereDeviceAdminReceiver().className()
+                        .isEqualTo(DEFAULT_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+
+        assertThat(eventLogs.get().deviceAdminReceiver().className())
+                .isEqualTo(DEFAULT_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+    }
+
+    @Test
+    public void whereDeviceAdminReceiver_defaultValue_skipsNonMatching() {
+        DeviceAdminPasswordFailedEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setDeviceAdminReceiver(CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME)
+                .log();
+        DeviceAdminPasswordFailedEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .log();
+
+        EventLogs<DeviceAdminPasswordFailedEvent> eventLogs =
+                DeviceAdminPasswordFailedEvent.queryPackage(sContext.getPackageName())
+                        .whereDeviceAdminReceiver().className()
+                        .isEqualTo(DEFAULT_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+
+        assertThat(eventLogs.get().deviceAdminReceiver().className())
+                .isEqualTo(DEFAULT_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+    }
+
+    @Test
+    public void whereUserHandle_works() {
+        DeviceAdminPasswordFailedEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setUserHandle(USER_HANDLE)
+                .log();
+
+        EventLogs<DeviceAdminPasswordFailedEvent> eventLogs =
+                DeviceAdminPasswordFailedEvent.queryPackage(sContext.getPackageName())
+                        .whereUserHandle().isEqualTo(USER_HANDLE);
+
+        assertThat(eventLogs.get().userHandle()).isEqualTo(USER_HANDLE);
+    }
+
+    @Test
+    public void whereUserHandle_skipsNonMatching() {
+        DeviceAdminPasswordFailedEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setUserHandle(DIFFERENT_USER_HANDLE)
+                .log();
+        DeviceAdminPasswordFailedEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setUserHandle(USER_HANDLE)
+                .log();
+
+        EventLogs<DeviceAdminPasswordFailedEvent> eventLogs =
+                DeviceAdminPasswordFailedEvent.queryPackage(sContext.getPackageName())
+                        .whereUserHandle().isEqualTo(USER_HANDLE);
+
+        assertThat(eventLogs.get().userHandle()).isEqualTo(USER_HANDLE);
+    }
+}
diff --git a/common/device-side/bedstead/eventlib/src/test/java/com/android/eventlib/events/deviceadminreceivers/DeviceAdminPasswordSucceededEventTest.java b/common/device-side/bedstead/eventlib/src/test/java/com/android/eventlib/events/deviceadminreceivers/DeviceAdminPasswordSucceededEventTest.java
new file mode 100644
index 0000000..c123c7d
--- /dev/null
+++ b/common/device-side/bedstead/eventlib/src/test/java/com/android/eventlib/events/deviceadminreceivers/DeviceAdminPasswordSucceededEventTest.java
@@ -0,0 +1,182 @@
+/*
+ * 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.eventlib.events.deviceadminreceivers;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.admin.DeviceAdminReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.UserHandle;
+
+import com.android.bedstead.nene.TestApis;
+import com.android.eventlib.EventLogs;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+@RunWith(JUnit4.class)
+public final class DeviceAdminPasswordSucceededEventTest {
+
+    private static final TestApis sTestApis = new TestApis();
+    private static final Context sContext = sTestApis.context().instrumentedContext();
+    private static final String STRING_VALUE = "Value";
+    private static final String DIFFERENT_STRING_VALUE = "Value2";
+    private static final Intent INTENT = new Intent();
+
+    private static final String DEFAULT_DEVICE_ADMIN_RECEIVER_CLASS_NAME =
+            TestDeviceAdminReceiver.class.getName();
+    private static final String CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME =
+            "customDeviceAdminReceiver";
+    private static final String DIFFERENT_CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME =
+            "customDeviceAdminReceiver2";
+    private static final DeviceAdminReceiver DEVICE_ADMIN_RECEIVER = new TestDeviceAdminReceiver();
+    private static final UserHandle USER_HANDLE = UserHandle.of(1);
+    private static final UserHandle DIFFERENT_USER_HANDLE = UserHandle.of(2);
+
+    private static class TestDeviceAdminReceiver extends DeviceAdminReceiver {
+    }
+
+    @Before
+    public void setUp() {
+        EventLogs.resetLogs();
+    }
+
+    @Test
+    public void whereIntent_works() {
+        Intent intent = new Intent();
+        intent.setAction(STRING_VALUE);
+        DeviceAdminPasswordSucceededEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, intent).log();
+
+        EventLogs<DeviceAdminPasswordSucceededEvent> eventLogs =
+                DeviceAdminPasswordSucceededEvent.queryPackage(sContext.getPackageName())
+                        .whereIntent().action().isEqualTo(STRING_VALUE);
+
+        assertThat(eventLogs.get().intent()).isEqualTo(intent);
+    }
+
+    @Test
+    public void whereIntent_skipsNonMatching() {
+        Intent intent = new Intent();
+        intent.setAction(STRING_VALUE);
+        Intent differentIntent = new Intent();
+        differentIntent.setAction(DIFFERENT_STRING_VALUE);
+        DeviceAdminPasswordSucceededEvent.logger(
+                DEVICE_ADMIN_RECEIVER, sContext, differentIntent).log();
+        DeviceAdminPasswordSucceededEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, intent).log();
+
+        EventLogs<DeviceAdminPasswordSucceededEvent> eventLogs =
+                DeviceAdminPasswordSucceededEvent.queryPackage(sContext.getPackageName())
+                        .whereIntent().action().isEqualTo(STRING_VALUE);
+
+        assertThat(eventLogs.get().intent()).isEqualTo(intent);
+    }
+
+    @Test
+    public void whereDeviceAdminReceiver_customValueOnLogger_works() {
+        DeviceAdminPasswordSucceededEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setDeviceAdminReceiver(CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME)
+                .log();
+
+        EventLogs<DeviceAdminPasswordSucceededEvent> eventLogs =
+                DeviceAdminPasswordSucceededEvent.queryPackage(sContext.getPackageName())
+                        .whereDeviceAdminReceiver().className().isEqualTo(
+                        CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+
+        assertThat(eventLogs.get().deviceAdminReceiver().className()).isEqualTo(
+                CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+    }
+
+    @Test
+    public void whereDeviceAdminReceiver_customValueOnLogger_skipsNonMatching() {
+        DeviceAdminPasswordSucceededEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setDeviceAdminReceiver(DIFFERENT_CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME)
+                .log();
+        DeviceAdminPasswordSucceededEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setDeviceAdminReceiver(CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME)
+                .log();
+
+        EventLogs<DeviceAdminPasswordSucceededEvent> eventLogs =
+                DeviceAdminPasswordSucceededEvent.queryPackage(sContext.getPackageName())
+                        .whereDeviceAdminReceiver().className().isEqualTo(
+                        CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+
+        assertThat(eventLogs.get().deviceAdminReceiver().className()).isEqualTo(
+                CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+    }
+
+    @Test
+    public void whereDeviceAdminReceiver_defaultValue_works() {
+        DeviceAdminPasswordSucceededEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT).log();
+
+        EventLogs<DeviceAdminPasswordSucceededEvent> eventLogs =
+                DeviceAdminPasswordSucceededEvent.queryPackage(sContext.getPackageName())
+                        .whereDeviceAdminReceiver().className()
+                        .isEqualTo(DEFAULT_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+
+        assertThat(eventLogs.get().deviceAdminReceiver().className())
+                .isEqualTo(DEFAULT_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+    }
+
+    @Test
+    public void whereDeviceAdminReceiver_defaultValue_skipsNonMatching() {
+        DeviceAdminPasswordSucceededEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setDeviceAdminReceiver(CUSTOM_DEVICE_ADMIN_RECEIVER_CLASS_NAME)
+                .log();
+        DeviceAdminPasswordSucceededEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .log();
+
+        EventLogs<DeviceAdminPasswordSucceededEvent> eventLogs =
+                DeviceAdminPasswordSucceededEvent.queryPackage(sContext.getPackageName())
+                        .whereDeviceAdminReceiver().className()
+                        .isEqualTo(DEFAULT_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+
+        assertThat(eventLogs.get().deviceAdminReceiver().className())
+                .isEqualTo(DEFAULT_DEVICE_ADMIN_RECEIVER_CLASS_NAME);
+    }
+
+    @Test
+    public void whereUserHandle_works() {
+        DeviceAdminPasswordSucceededEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setUserHandle(USER_HANDLE)
+                .log();
+
+        EventLogs<DeviceAdminPasswordSucceededEvent> eventLogs =
+                DeviceAdminPasswordSucceededEvent.queryPackage(sContext.getPackageName())
+                        .whereUserHandle().isEqualTo(USER_HANDLE);
+
+        assertThat(eventLogs.get().userHandle()).isEqualTo(USER_HANDLE);
+    }
+
+    @Test
+    public void whereUserHandle_skipsNonMatching() {
+        DeviceAdminPasswordSucceededEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setUserHandle(DIFFERENT_USER_HANDLE)
+                .log();
+        DeviceAdminPasswordSucceededEvent.logger(DEVICE_ADMIN_RECEIVER, sContext, INTENT)
+                .setUserHandle(USER_HANDLE)
+                .log();
+
+        EventLogs<DeviceAdminPasswordSucceededEvent> eventLogs =
+                DeviceAdminPasswordSucceededEvent.queryPackage(sContext.getPackageName())
+                        .whereUserHandle().isEqualTo(USER_HANDLE);
+
+        assertThat(eventLogs.get().userHandle()).isEqualTo(USER_HANDLE);
+    }
+}
diff --git a/common/device-side/bedstead/eventlib/src/test/java/com/android/eventlib/premade/EventLibDeviceAdminReceiverTest.java b/common/device-side/bedstead/eventlib/src/test/java/com/android/eventlib/premade/EventLibDeviceAdminReceiverTest.java
index 1ed7eec..3709b43 100644
--- a/common/device-side/bedstead/eventlib/src/test/java/com/android/eventlib/premade/EventLibDeviceAdminReceiverTest.java
+++ b/common/device-side/bedstead/eventlib/src/test/java/com/android/eventlib/premade/EventLibDeviceAdminReceiverTest.java
@@ -32,6 +32,8 @@
 import com.android.eventlib.events.deviceadminreceivers.DeviceAdminDisabledEvent;
 import com.android.eventlib.events.deviceadminreceivers.DeviceAdminEnabledEvent;
 import com.android.eventlib.events.deviceadminreceivers.DeviceAdminPasswordChangedEvent;
+import com.android.eventlib.events.deviceadminreceivers.DeviceAdminPasswordFailedEvent;
+import com.android.eventlib.events.deviceadminreceivers.DeviceAdminPasswordSucceededEvent;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -131,4 +133,50 @@
         assertThat(eventLogs.get().userHandle()).isEqualTo(sUser.userHandle());
     }
 
+    @Test
+    public void failPassword_logsPasswordFailedEvent() {
+        EventLibDeviceAdminReceiver receiver = new EventLibDeviceAdminReceiver();
+
+        receiver.onPasswordFailed(sContext, sIntent);
+
+        EventLogs<DeviceAdminPasswordFailedEvent> eventLogs =
+                DeviceAdminPasswordFailedEvent.queryPackage(sContext.getPackageName());
+        assertThat(eventLogs.get()).isNotNull();
+    }
+
+    @Test
+    public void failPasswordWithUserHandle_logsPasswordFailedEvent() {
+        EventLibDeviceAdminReceiver receiver = new EventLibDeviceAdminReceiver();
+
+        receiver.onPasswordFailed(sContext, sIntent, sUser.userHandle());
+
+        EventLogs<DeviceAdminPasswordFailedEvent> eventLogs =
+                DeviceAdminPasswordFailedEvent.queryPackage(sContext.getPackageName());
+        assertThat(eventLogs.get()).isNotNull();
+        assertThat(eventLogs.get().userHandle()).isEqualTo(sUser.userHandle());
+    }
+
+    @Test
+    public void succeedPassword_logsPasswordSucceededEvent() {
+        EventLibDeviceAdminReceiver receiver = new EventLibDeviceAdminReceiver();
+
+        receiver.onPasswordSucceeded(sContext, sIntent);
+
+        EventLogs<DeviceAdminPasswordSucceededEvent> eventLogs =
+                DeviceAdminPasswordSucceededEvent.queryPackage(sContext.getPackageName());
+        assertThat(eventLogs.get()).isNotNull();
+    }
+
+    @Test
+    public void succeedPasswordWithUserHandle_logsPasswordSucceededEvent() {
+        EventLibDeviceAdminReceiver receiver = new EventLibDeviceAdminReceiver();
+
+        receiver.onPasswordSucceeded(sContext, sIntent, sUser.userHandle());
+
+        EventLogs<DeviceAdminPasswordSucceededEvent> eventLogs =
+                DeviceAdminPasswordSucceededEvent.queryPackage(sContext.getPackageName());
+        assertThat(eventLogs.get()).isNotNull();
+        assertThat(eventLogs.get().userHandle()).isEqualTo(sUser.userHandle());
+    }
+
 }
diff --git a/common/device-side/bedstead/harrier/Android.bp b/common/device-side/bedstead/harrier/Android.bp
index 975d63e..a99ec9c 100644
--- a/common/device-side/bedstead/harrier/Android.bp
+++ b/common/device-side/bedstead/harrier/Android.bp
@@ -26,7 +26,8 @@
 
     static_libs: [
         "Nene",
-        "compatibility-device-util-axt"
+        "compatibility-device-util-axt",
+        "androidx.test.ext.junit",
     ]
 }
 
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/BedsteadJUnit4.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/BedsteadJUnit4.java
new file mode 100644
index 0000000..07d5314
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/BedsteadJUnit4.java
@@ -0,0 +1,331 @@
+/*
+ * 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.bedstead.harrier;
+
+import androidx.annotation.Nullable;
+
+import com.android.bedstead.harrier.annotations.enterprise.EnterprisePolicy;
+import com.android.bedstead.harrier.annotations.enterprise.NegativePolicyTest;
+import com.android.bedstead.harrier.annotations.enterprise.PositivePolicyTest;
+import com.android.bedstead.harrier.annotations.meta.ParameterizedAnnotation;
+import com.android.bedstead.harrier.annotations.parameterized.IncludeNone;
+
+import com.google.common.base.Objects;
+
+import org.junit.Test;
+import org.junit.rules.TestRule;
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.TestClass;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * A JUnit test runner for use with Bedstead.
+ */
+public final class BedsteadJUnit4 extends BlockJUnit4ClassRunner {
+
+    private static final String BEDSTEAD_PACKAGE_NAME = "com.android.bedstead";
+
+    // These are annotations which are not included indirectly
+    private static final Set<String> sIgnoredAnnotationPackages = new HashSet<>();
+    static {
+        sIgnoredAnnotationPackages.add("java.lang.annotation");
+        sIgnoredAnnotationPackages.add("com.android.bedstead.harrier.annotations.meta");
+    }
+
+    /**
+     * {@link FrameworkMethod} subclass which allows modifying the test name and annotations.
+     */
+    public static final class BedsteadFrameworkMethod extends FrameworkMethod {
+
+        private final Class<? extends Annotation> mParameterizedAnnotation;
+        private final Map<Class<? extends Annotation>, Annotation> mAnnotationsMap =
+                new HashMap<>();
+        private Annotation[] mAnnotations;
+
+        public BedsteadFrameworkMethod(Method method) {
+            this(method, /* parameterizedAnnotation= */ null);
+        }
+
+        public BedsteadFrameworkMethod(Method method, Annotation parameterizedAnnotation) {
+            super(method);
+            this.mParameterizedAnnotation = (parameterizedAnnotation == null) ? null
+                    : parameterizedAnnotation.annotationType();
+
+            calculateAnnotations();
+        }
+
+        private void calculateAnnotations() {
+            List<Annotation> annotations = new ArrayList<>(
+                    Arrays.asList(getMethod().getAnnotations()));
+
+            parseEnterpriseAnnotations(annotations);
+
+            resolveRecursiveAnnotations(annotations, mParameterizedAnnotation);
+
+            this.mAnnotations = annotations.toArray(new Annotation[0]);
+            for (Annotation annotation : annotations) {
+                mAnnotationsMap.put(annotation.annotationType(), annotation);
+            }
+        }
+
+        @Override
+        public String getName() {
+            if (mParameterizedAnnotation == null) {
+                return super.getName();
+            }
+            return super.getName() + "[" + mParameterizedAnnotation.getSimpleName() + "]";
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (!super.equals(obj)) {
+                return false;
+            }
+
+            if (!(obj instanceof BedsteadFrameworkMethod)) {
+                return false;
+            }
+
+            BedsteadFrameworkMethod other = (BedsteadFrameworkMethod) obj;
+
+            return Objects.equal(mParameterizedAnnotation, other.mParameterizedAnnotation);
+        }
+
+        @Override
+        public Annotation[] getAnnotations() {
+            return mAnnotations;
+        }
+
+        @Override
+        public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
+            return (T) mAnnotationsMap.get(annotationType);
+        }
+    }
+
+    /**
+     * Resolve annotations recursively.
+     *
+     * @param parameterizedAnnotation The class of the parameterized annotation to expand, if any
+     */
+    public static void resolveRecursiveAnnotations(List<Annotation> annotations,
+            @Nullable Class<? extends Annotation> parameterizedAnnotation) {
+        int index = 0;
+        while (index < annotations.size()) {
+            Annotation annotation = annotations.get(index);
+            annotations.remove(index);
+            List<Annotation> replacementAnnotations =
+                    getReplacementAnnotations(annotation, parameterizedAnnotation);
+            annotations.addAll(index, replacementAnnotations);
+            index += replacementAnnotations.size();
+        }
+    }
+
+    private static List<Annotation> getReplacementAnnotations(Annotation annotation,
+            @Nullable Class<? extends Annotation> parameterizedAnnotation) {
+        List<Annotation> replacementAnnotations = new ArrayList<>();
+
+        if (annotation.annotationType().getAnnotation(ParameterizedAnnotation.class) != null
+                && !annotation.annotationType().equals(parameterizedAnnotation)) {
+            return replacementAnnotations;
+        }
+
+        for (Annotation indirectAnnotation : annotation.annotationType().getAnnotations()) {
+            if (sIgnoredAnnotationPackages.contains(
+                    indirectAnnotation.annotationType().getPackage().getName())) {
+                continue;
+            }
+
+            replacementAnnotations.addAll(getReplacementAnnotations(
+                    indirectAnnotation, parameterizedAnnotation));
+        }
+
+        replacementAnnotations.add(annotation);
+
+        return replacementAnnotations;
+    }
+
+    public BedsteadJUnit4(Class<?> testClass) throws InitializationError {
+        super(testClass);
+    }
+
+    @Override
+    protected List<FrameworkMethod> computeTestMethods() {
+        TestClass testClass = getTestClass();
+
+        List<FrameworkMethod> basicTests = testClass.getAnnotatedMethods(Test.class);
+        List<FrameworkMethod> modifiedTests = new ArrayList<>();
+
+        for (FrameworkMethod m : basicTests) {
+            Set<Annotation> parameterizedAnnotations = getParameterizedAnnotations(m);
+
+            if (parameterizedAnnotations.isEmpty()) {
+                // Unparameterized, just add the original
+                modifiedTests.add(new BedsteadFrameworkMethod(m.getMethod()));
+            }
+
+            for (Annotation annotation : parameterizedAnnotations) {
+                if (annotation.annotationType().equals(IncludeNone.class)) {
+                    // Special case - does not generate a run
+                    continue;
+                }
+                modifiedTests.add(
+                        new BedsteadFrameworkMethod(m.getMethod(), annotation));
+            }
+        }
+
+        sortMethodsByBedsteadAnnotations(modifiedTests);
+
+        return modifiedTests;
+    }
+
+    /**
+     * Sort methods so that methods with identical bedstead annotations are together.
+     *
+     * <p>This will also ensure that all tests methods which are not annotated for bedstead will
+     * run before any tests which are annotated.
+     */
+    private void sortMethodsByBedsteadAnnotations(List<FrameworkMethod> modifiedTests) {
+        List<Annotation> bedsteadAnnotationsSortedByMostCommon =
+                bedsteadAnnotationsSortedByMostCommon(modifiedTests);
+
+        modifiedTests.sort((o1, o2) -> {
+            for (Annotation annotation : bedsteadAnnotationsSortedByMostCommon) {
+                boolean o1HasAnnotation = o1.getAnnotation(annotation.annotationType()) != null;
+                boolean o2HasAnnotation = o2.getAnnotation(annotation.annotationType()) != null;
+
+                if (o1HasAnnotation && !o2HasAnnotation) {
+                    // o1 goes to the end
+                    return 1;
+                } else if (o2HasAnnotation && !o1HasAnnotation) {
+                    return -1;
+                }
+            }
+            return 0;
+        });
+    }
+
+    private List<Annotation> bedsteadAnnotationsSortedByMostCommon(List<FrameworkMethod> methods) {
+        Map<Annotation, Integer> annotationCounts = countAnnotations(methods);
+        List<Annotation> annotations = new ArrayList<>(annotationCounts.keySet());
+
+        annotations.removeIf(
+                annotation ->
+                        !annotation.getClass().getCanonicalName().contains(BEDSTEAD_PACKAGE_NAME));
+
+        annotations.sort(Comparator.comparingInt(annotationCounts::get));
+        Collections.reverse(annotations);
+
+        return annotations;
+    }
+
+    private Map<Annotation, Integer> countAnnotations(List<FrameworkMethod> methods) {
+        Map<Annotation, Integer> annotationCounts = new HashMap<>();
+
+        for (FrameworkMethod method : methods) {
+            for (Annotation annotation : method.getAnnotations()) {
+                annotationCounts.put(
+                        annotation, annotationCounts.getOrDefault(annotation, 0) + 1);
+            }
+        }
+
+        return annotationCounts;
+    }
+
+    private Set<Annotation> getParameterizedAnnotations(FrameworkMethod method) {
+        Set<Annotation> parameterizedAnnotations = new HashSet<>();
+        List<Annotation> annotations = new ArrayList<>(Arrays.asList(method.getAnnotations()));
+
+        // TODO(scottjonathan): We're doing this twice... does it matter?
+        parseEnterpriseAnnotations(annotations);
+
+        for (Annotation annotation : annotations) {
+            if (annotation.annotationType().getAnnotation(ParameterizedAnnotation.class) != null) {
+                parameterizedAnnotations.add(annotation);
+            }
+        }
+
+        return parameterizedAnnotations;
+    }
+
+    /**
+     * Parse enterprise-specific annotations.
+     *
+     * <p>To be used before general annotation processing.
+     */
+    private static void parseEnterpriseAnnotations(List<Annotation> annotations) {
+        int index = 0;
+        while (index < annotations.size()) {
+            Annotation annotation = annotations.get(index);
+            if (annotation instanceof PositivePolicyTest) {
+                annotations.remove(index);
+                Class<?> policy = ((PositivePolicyTest) annotation).policy();
+
+                EnterprisePolicy enterprisePolicy =
+                        policy.getAnnotation(EnterprisePolicy.class);
+                List<Annotation> replacementAnnotations =
+                        Policy.positiveStates(enterprisePolicy);
+
+                annotations.addAll(index, replacementAnnotations);
+                index += replacementAnnotations.size();
+            } else if (annotation instanceof NegativePolicyTest) {
+                annotations.remove(index);
+                Class<?> policy = ((NegativePolicyTest) annotation).policy();
+
+                EnterprisePolicy enterprisePolicy =
+                        policy.getAnnotation(EnterprisePolicy.class);
+                List<Annotation> replacementAnnotations =
+                        Policy.negativeStates(enterprisePolicy);
+
+                annotations.addAll(index, replacementAnnotations);
+                index += replacementAnnotations.size();
+            } else {
+                index++;
+            }
+        }
+    }
+
+    @Override
+    protected List<TestRule> classRules() {
+        List<TestRule> rules = super.classRules();
+
+        for (TestRule rule : rules) {
+            if (rule instanceof DeviceState) {
+                DeviceState deviceState = (DeviceState) rule;
+
+                deviceState.setSkipTestTeardown(true);
+                deviceState.setUsingBedsteadJUnit4(true);
+
+                break;
+            }
+        }
+
+        return rules;
+    }
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/DeviceState.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/DeviceState.java
index 5294875..15c50e8 100644
--- a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/DeviceState.java
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/DeviceState.java
@@ -33,18 +33,16 @@
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.platform.app.InstrumentationRegistry;
 
-import com.android.bedstead.harrier.annotations.EnsureHasNoSecondaryUser;
-import com.android.bedstead.harrier.annotations.EnsureHasSecondaryUser;
-import com.android.bedstead.harrier.annotations.EnsureHasTvProfile;
-import com.android.bedstead.harrier.annotations.EnsureHasWorkProfile;
 import com.android.bedstead.harrier.annotations.FailureMode;
 import com.android.bedstead.harrier.annotations.RequireFeatures;
-import com.android.bedstead.harrier.annotations.RequireRunOnPrimaryUser;
-import com.android.bedstead.harrier.annotations.RequireRunOnSecondaryUser;
-import com.android.bedstead.harrier.annotations.RequireRunOnTvProfile;
-import com.android.bedstead.harrier.annotations.RequireRunOnWorkProfile;
 import com.android.bedstead.harrier.annotations.RequireUserSupported;
 import com.android.bedstead.harrier.annotations.meta.EnsureHasNoProfileAnnotation;
+import com.android.bedstead.harrier.annotations.meta.EnsureHasNoUserAnnotation;
+import com.android.bedstead.harrier.annotations.meta.EnsureHasProfileAnnotation;
+import com.android.bedstead.harrier.annotations.meta.EnsureHasUserAnnotation;
+import com.android.bedstead.harrier.annotations.meta.ParameterizedAnnotation;
+import com.android.bedstead.harrier.annotations.meta.RequireRunOnUserAnnotation;
+import com.android.bedstead.harrier.annotations.meta.RequiresBedsteadJUnit4;
 import com.android.bedstead.nene.TestApis;
 import com.android.bedstead.nene.exceptions.AdbException;
 import com.android.bedstead.nene.exceptions.NeneException;
@@ -54,6 +52,8 @@
 import com.android.bedstead.nene.utils.ShellCommand;
 import com.android.compatibility.common.util.BlockingBroadcastReceiver;
 
+import junit.framework.AssertionFailedError;
+
 import org.junit.rules.TestRule;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
@@ -83,9 +83,12 @@
     private final Context mContext = ApplicationProvider.getApplicationContext();
     private static final TestApis sTestApis = new TestApis();
     private static final String SKIP_TEST_TEARDOWN_KEY = "skip-test-teardown";
+    private static final String SKIP_CLASS_TEARDOWN_KEY = "skip-class-teardown";
     private static final String SKIP_TESTS_REASON_KEY = "skip-tests-reason";
-    private final boolean mSkipTestTeardown;
+    private boolean mSkipTestTeardown;
+    private boolean mSkipClassTeardown;
     private boolean mSkipTests;
+    private boolean mUsingBedsteadJUnit4 = false;
     private String mSkipTestsReason;
 
     private static final String TV_PROFILE_TYPE_NAME = "com.android.tv.profile";
@@ -94,10 +97,20 @@
         Bundle arguments = InstrumentationRegistry.getArguments();
         mSkipTestTeardown = Boolean.parseBoolean(
                 arguments.getString(SKIP_TEST_TEARDOWN_KEY, "false"));
+        mSkipClassTeardown = Boolean.parseBoolean(
+                arguments.getString(SKIP_CLASS_TEARDOWN_KEY, "false"));
         mSkipTestsReason = arguments.getString(SKIP_TESTS_REASON_KEY, "");
         mSkipTests = !mSkipTestsReason.isEmpty();
     }
 
+    void setSkipTestTeardown(boolean skipTestTeardown) {
+        mSkipTestTeardown = skipTestTeardown;
+    }
+
+    void setUsingBedsteadJUnit4(boolean usingBedsteadJUnit4) {
+        mUsingBedsteadJUnit4 = usingBedsteadJUnit4;
+    }
+
     @Override public Statement apply(final Statement base,
             final Description description) {
 
@@ -116,7 +129,7 @@
 
                 assumeFalse(mSkipTestsReason, mSkipTests);
 
-                for (Annotation annotation : description.getAnnotations()) {
+                for (Annotation annotation : getAnnotations(description)) {
                     Class<? extends Annotation> annotationType = annotation.annotationType();
 
                     EnsureHasNoProfileAnnotation ensureHasNoProfileAnnotation =
@@ -126,71 +139,56 @@
                                 .getMethod("forUser").invoke(annotation);
                         ensureHasNoProfile(ensureHasNoProfileAnnotation.value(), userType);
                     }
-                }
 
-                if (description.getAnnotation(RequireRunOnPrimaryUser.class) != null) {
-                    assumeTrue("@RequireRunOnPrimaryUser tests only run on primary user",
-                            isRunningOnPrimaryUser());
-                }
-                if (description.getAnnotation(RequireRunOnWorkProfile.class) != null) {
-                    assumeTrue("@RequireRunOnWorkProfile tests only run on work profile",
-                            isRunningOnWorkProfile());
-                }
-                if (description.getAnnotation(RequireRunOnSecondaryUser.class) != null) {
-                    assumeTrue("@RequireRunOnSecondaryUser tests only run on secondary user",
-                            isRunningOnSecondaryUser());
-                }
-                if (description.getAnnotation(RequireRunOnTvProfile.class) != null) {
-                    assumeTrue("@RequireRunOnTvProfile tests only run on TV profile",
-                            isRunningOnTvProfile());
-                }
-                EnsureHasWorkProfile ensureHasWorkAnnotation =
-                        description.getAnnotation(EnsureHasWorkProfile.class);
-                if (ensureHasWorkAnnotation != null) {
-                    ensureHasProfile(
-                            MANAGED_PROFILE_TYPE_NAME,
-                            /* installTestApp= */ ensureHasWorkAnnotation.installTestApp(),
-                            /* forUser= */ ensureHasWorkAnnotation.forUser()
-                    );
-                }
-                EnsureHasTvProfile ensureHasTvProfileAnnotation =
-                        description.getAnnotation(EnsureHasTvProfile.class);
-                if (ensureHasTvProfileAnnotation != null) {
-                    ensureHasProfile(
-                            TV_PROFILE_TYPE_NAME,
-                            /* installTestApp= */ ensureHasTvProfileAnnotation.installTestApp(),
-                            /* forUser= */ ensureHasTvProfileAnnotation.forUser()
-                    );
-                }
-                EnsureHasSecondaryUser ensureHasSecondaryUserAnnotation =
-                        description.getAnnotation(EnsureHasSecondaryUser.class);
-                if (ensureHasSecondaryUserAnnotation != null) {
-                    ensureHasUser(
-                            SECONDARY_USER_TYPE_NAME,
-                            /* installTestApp= */ ensureHasSecondaryUserAnnotation.installTestApp()
-                    );
-                }
-                EnsureHasNoSecondaryUser ensureHasNoSecondaryUserAnnotation =
-                        description.getAnnotation(EnsureHasNoSecondaryUser.class);
-                if (ensureHasNoSecondaryUserAnnotation != null) {
-                    ensureHasNoUser(SECONDARY_USER_TYPE_NAME);
-                }
-                RequireFeatures requireFeaturesAnnotation =
-                        description.getAnnotation(RequireFeatures.class);
-                if (requireFeaturesAnnotation != null) {
-                    for (String feature: requireFeaturesAnnotation.value()) {
-                        requireFeature(feature, requireFeaturesAnnotation.failureMode());
+                    EnsureHasProfileAnnotation ensureHasProfileAnnotation =
+                            annotationType.getAnnotation(EnsureHasProfileAnnotation.class);
+                    if (ensureHasProfileAnnotation != null) {
+                        UserType forUser = (UserType) annotation.annotationType()
+                                .getMethod("forUser").invoke(annotation);
+                        boolean installTestApp = (boolean) annotation.annotationType()
+                                .getMethod("installTestApp").invoke(annotation);
+                            ensureHasProfile(
+                                    ensureHasProfileAnnotation.value(), installTestApp, forUser);
                     }
-                }
-                RequireUserSupported requireUserSupportedAnnotation =
-                        description.getAnnotation(RequireUserSupported.class);
-                if (requireUserSupportedAnnotation != null) {
-                    for (String userType: requireUserSupportedAnnotation.value()) {
-                        requireUserSupported(
-                                userType, requireUserSupportedAnnotation.failureMode());
-                    }
-                }
 
+
+                    EnsureHasNoUserAnnotation ensureHasNoUserAnnotation =
+                            annotationType.getAnnotation(EnsureHasNoUserAnnotation.class);
+                    if (ensureHasNoUserAnnotation != null) {
+                        ensureHasNoUser(ensureHasNoUserAnnotation.value());
+                    }
+
+                    EnsureHasUserAnnotation ensureHasUserAnnotation =
+                            annotationType.getAnnotation(EnsureHasUserAnnotation.class);
+                    if (ensureHasUserAnnotation != null) {
+                        boolean installTestApp = (boolean) annotation.getClass()
+                                .getMethod("installTestApp").invoke(annotation);
+                        ensureHasUser(ensureHasUserAnnotation.value(), installTestApp);
+                    }
+
+                    RequireRunOnUserAnnotation requireRunOnUserAnnotation =
+                            annotationType.getAnnotation(RequireRunOnUserAnnotation.class);
+                    if (requireRunOnUserAnnotation != null) {
+                        requireRunOnUser(requireRunOnUserAnnotation.value());
+                    }
+
+                    if (annotation instanceof RequireFeatures) {
+                        RequireFeatures requireFeaturesAnnotation = (RequireFeatures) annotation;
+                        for (String feature: requireFeaturesAnnotation.value()) {
+                            requireFeature(feature, requireFeaturesAnnotation.failureMode());
+                        }
+                    }
+
+                    if (annotation instanceof RequireUserSupported) {
+                        RequireUserSupported requireUserSupportedAnnotation =
+                                (RequireUserSupported) annotation;
+                        for (String userType: requireUserSupportedAnnotation.value()) {
+                            requireUserSupported(
+                                    userType, requireUserSupportedAnnotation.failureMode());
+                        }
+                    }
+
+                }
                 Log.d(LOG_TAG,
                         "Finished preparing state for test " + description.getMethodName());
 
@@ -209,8 +207,53 @@
             }};
     }
 
+    private Collection<Annotation> getAnnotations(Description description) {
+        if (mUsingBedsteadJUnit4) {
+            // The annotations are already exploded
+            return description.getAnnotations();
+        }
+
+        // Otherwise we should build a new collection by recursively gathering annotations
+        // if we find any which don't work without the runner we should error and fail the test
+        List<Annotation> annotations = new ArrayList<>(description.getAnnotations());
+        checkAnnotations(annotations);
+
+        BedsteadJUnit4.resolveRecursiveAnnotations(annotations,
+                /* parameterizedAnnotation= */ null);
+
+        checkAnnotations(annotations);
+
+        return annotations;
+    }
+
+    private void checkAnnotations(Collection<Annotation> annotations) {
+        for (Annotation annotation : annotations) {
+            if (annotation.annotationType().getAnnotation(RequiresBedsteadJUnit4.class) != null
+                    || annotation.annotationType().getAnnotation(
+                            ParameterizedAnnotation.class) != null) {
+                throw new AssertionFailedError("Test is annotated "
+                        + annotation.annotationType().getSimpleName()
+                        + " which requires using the BedsteadJUnit4 test runner");
+            }
+        }
+    }
+
     private Statement applySuite(final Statement base, final Description description) {
-        return base;
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                base.evaluate();
+
+                if (!mSkipClassTeardown) {
+                    teardownShareableState();
+                }
+            }
+        };
+    }
+
+    private void requireRunOnUser(String userType) {
+        assumeTrue("This test only runs on users of type " + userType,
+                isRunningOnUser(userType));
     }
 
     private void requireFeature(String feature, FailureMode failureMode) {
@@ -325,9 +368,9 @@
         return mProfiles.get(userType).get(forUser);
     }
 
-    private boolean isRunningOnWorkProfile() {
+    private boolean isRunningOnUser(String userType) {
         return sTestApis.users().instrumented()
-                .resolve().type().name().equals(MANAGED_PROFILE_TYPE_NAME);
+                .resolve().type().name().equals(userType);
     }
 
     /**
@@ -366,20 +409,6 @@
         return profile(TV_PROFILE_TYPE_NAME, forUser);
     }
 
-    public boolean isRunningOnTvProfile() {
-        return sTestApis.users().instrumented().resolve()
-                .type().name().equals(TV_PROFILE_TYPE_NAME);
-    }
-
-    public boolean isRunningOnPrimaryUser() {
-        return sTestApis.users().instrumented().resolve().isPrimary();
-    }
-
-    public boolean isRunningOnSecondaryUser() {
-        return sTestApis.users().instrumented().resolve()
-                .type().name().equals(SECONDARY_USER_TYPE_NAME);
-    }
-
     /**
      * Get the user ID of the first human user on the device.
      *
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/Policy.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/Policy.java
new file mode 100644
index 0000000..3496f86
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/Policy.java
@@ -0,0 +1,74 @@
+/*
+ * 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.bedstead.harrier;
+
+import com.android.bedstead.harrier.annotations.enterprise.EnterprisePolicy;
+import com.android.bedstead.harrier.annotations.parameterized.IncludeNone;
+import com.android.bedstead.harrier.annotations.parameterized.IncludeRunOnDeviceOwnerUser;
+import com.android.bedstead.harrier.annotations.parameterized.IncludeRunOnNonAffiliatedDeviceOwnerSecondaryUser;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Utility class for enterprise policy tests.
+ */
+@IncludeNone
+@IncludeRunOnDeviceOwnerUser
+@IncludeRunOnNonAffiliatedDeviceOwnerSecondaryUser
+public final class Policy {
+
+    private Policy() {
+
+    }
+
+    private static final IncludeNone INCLUDE_NONE_ANNOTATION =
+            Policy.class.getAnnotation(IncludeNone.class);
+    private static final IncludeRunOnDeviceOwnerUser INCLUDE_RUN_ON_DEVICE_OWNER_USER =
+            Policy.class.getAnnotation(IncludeRunOnDeviceOwnerUser.class);
+    private static final IncludeRunOnNonAffiliatedDeviceOwnerSecondaryUser
+            INCLUDE_RUN_ON_NON_AFFILIATED_DEVICE_OWNER_SECONDARY_USER =
+            Policy.class.getAnnotation(IncludeRunOnNonAffiliatedDeviceOwnerSecondaryUser.class);
+
+    /**
+     * Get positive state annotations for the given policy.
+     *
+     * <p>These are states which should be run where the policy is able to be applied.
+     */
+    public static List<Annotation> positiveStates(EnterprisePolicy enterprisePolicy) {
+        List<Annotation> annotations = new ArrayList<>();
+
+        annotations.add(INCLUDE_RUN_ON_DEVICE_OWNER_USER);
+        annotations.add(INCLUDE_RUN_ON_NON_AFFILIATED_DEVICE_OWNER_SECONDARY_USER);
+
+        return annotations;
+    }
+
+    /**
+     * Get negative state annotations for the given policy.
+     *
+     * <p>These are states which should be run where the policy is not able to be applied.
+     */
+    public static List<Annotation> negativeStates(EnterprisePolicy enterprisePolicy) {
+        List<Annotation> annotations = new ArrayList<>();
+
+        annotations.add(INCLUDE_NONE_ANNOTATION);
+
+        return annotations;
+    }
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasNoSecondaryUser.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasNoSecondaryUser.java
index 22a646e..e66a126 100644
--- a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasNoSecondaryUser.java
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasNoSecondaryUser.java
@@ -17,6 +17,7 @@
 package com.android.bedstead.harrier.annotations;
 
 import com.android.bedstead.harrier.DeviceState;
+import com.android.bedstead.harrier.annotations.meta.EnsureHasNoUserAnnotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -33,5 +34,6 @@
  */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
+@EnsureHasNoUserAnnotation("android.os.usertype.full.SECONDARY")
 public @interface EnsureHasNoSecondaryUser {
 }
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasSecondaryUser.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasSecondaryUser.java
index 9419a48..3e58efc 100644
--- a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasSecondaryUser.java
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasSecondaryUser.java
@@ -17,6 +17,7 @@
 package com.android.bedstead.harrier.annotations;
 
 import com.android.bedstead.harrier.DeviceState;
+import com.android.bedstead.harrier.annotations.meta.EnsureHasUserAnnotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -35,6 +36,7 @@
  */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
+@EnsureHasUserAnnotation("android.os.usertype.full.SECONDARY")
 public @interface EnsureHasSecondaryUser {
     /** Whether the test app should be installed in the secondary user. */
     boolean installTestApp() default true;
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasTvProfile.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasTvProfile.java
index 0345491..7c4438b 100644
--- a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasTvProfile.java
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasTvProfile.java
@@ -19,6 +19,7 @@
 import static com.android.bedstead.harrier.DeviceState.UserType.CURRENT_USER;
 
 import com.android.bedstead.harrier.DeviceState;
+import com.android.bedstead.harrier.annotations.meta.EnsureHasProfileAnnotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -34,6 +35,7 @@
  */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
+@EnsureHasProfileAnnotation("com.android.tv.profile")
 public @interface EnsureHasTvProfile {
     /** Which user type the tv profile should be attached to. */
     DeviceState.UserType forUser() default CURRENT_USER;
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasWorkProfile.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasWorkProfile.java
index b2c1e25..c7977c5 100644
--- a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasWorkProfile.java
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/EnsureHasWorkProfile.java
@@ -19,6 +19,7 @@
 import static com.android.bedstead.harrier.DeviceState.UserType.CURRENT_USER;
 
 import com.android.bedstead.harrier.DeviceState;
+import com.android.bedstead.harrier.annotations.meta.EnsureHasProfileAnnotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -37,6 +38,7 @@
  */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
+@EnsureHasProfileAnnotation("android.os.usertype.profile.MANAGED")
 public @interface EnsureHasWorkProfile {
     /** Which user type the work profile should be attached to. */
     DeviceState.UserType forUser() default CURRENT_USER;
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnPrimaryUser.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnPrimaryUser.java
index c30452e..875f1e3 100644
--- a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnPrimaryUser.java
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnPrimaryUser.java
@@ -17,6 +17,7 @@
 package com.android.bedstead.harrier.annotations;
 
 import com.android.bedstead.harrier.DeviceState;
+import com.android.bedstead.harrier.annotations.meta.RequireRunOnUserAnnotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -31,7 +32,8 @@
  * <p>Optionally, you can guarantee that these methods do not run outside of the primary
  * user by using {@link DeviceState}.
  */
-@Target(ElementType.METHOD)
+@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
 @Retention(RetentionPolicy.RUNTIME)
+@RequireRunOnUserAnnotation("android.os.usertype.full.SYSTEM")
 public @interface RequireRunOnPrimaryUser {
 }
\ No newline at end of file
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnSecondaryUser.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnSecondaryUser.java
index 6205df9..9225e04 100644
--- a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnSecondaryUser.java
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnSecondaryUser.java
@@ -17,6 +17,7 @@
 package com.android.bedstead.harrier.annotations;
 
 import com.android.bedstead.harrier.DeviceState;
+import com.android.bedstead.harrier.annotations.meta.RequireRunOnUserAnnotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -36,7 +37,8 @@
  * annotated {@link Postsubmit} until they are shown to meet the multi-user presubmit
  * requirements.
  */
-@Target(ElementType.METHOD)
+@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
 @Retention(RetentionPolicy.RUNTIME)
+@RequireRunOnUserAnnotation("android.os.usertype.full.SECONDARY")
 public @interface RequireRunOnSecondaryUser {
 }
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnTvProfile.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnTvProfile.java
index 7a4f4cf..9e20a9f 100644
--- a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnTvProfile.java
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnTvProfile.java
@@ -17,6 +17,7 @@
 package com.android.bedstead.harrier.annotations;
 
 import com.android.bedstead.harrier.DeviceState;
+import com.android.bedstead.harrier.annotations.meta.RequireRunOnUserAnnotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -34,5 +35,6 @@
  */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
+@RequireRunOnUserAnnotation("com.android.tv.profile")
 public @interface RequireRunOnTvProfile {
 }
\ No newline at end of file
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnWorkProfile.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnWorkProfile.java
index 70ddc97..31144df 100644
--- a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnWorkProfile.java
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/RequireRunOnWorkProfile.java
@@ -17,6 +17,7 @@
 package com.android.bedstead.harrier.annotations;
 
 import com.android.bedstead.harrier.DeviceState;
+import com.android.bedstead.harrier.annotations.meta.RequireRunOnUserAnnotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -37,5 +38,6 @@
  */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
+@RequireRunOnUserAnnotation("android.os.usertype.profile.MANAGED")
 public @interface RequireRunOnWorkProfile {
 }
\ No newline at end of file
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/enterprise/EnterprisePolicy.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/enterprise/EnterprisePolicy.java
new file mode 100644
index 0000000..127020b
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/enterprise/EnterprisePolicy.java
@@ -0,0 +1,56 @@
+/*
+ * 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.bedstead.harrier.annotations.enterprise;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Used to annotate an enterprise policy for use with {@link NegativePolicyTest} and
+ * {@link PositivePolicyTest}.
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EnterprisePolicy {
+    enum DeviceOwnerControl {
+        /** A policy that can be applied by a Device Owner to all users on the device. */
+        GLOBAL,
+        /** A policy that can be applied by a Device Owner to only the Device Owner's user. */
+        USER,
+        /** A policy that cannot be applied by a Device Owner. */
+        NO
+    }
+
+    enum ProfileOwnerControl {
+        /** A policy that can be applied by a Profile Owner to the profile itself and its parent. */
+        PARENT,
+        /**
+         * A policy that can be applied by a Profile Owner to the profile itself, and to the
+         * parent if it is a COPE profile.
+         */
+        COPE_PARENT,
+        /** A policy that can be applied by a Profile Owner to the profile itself. */
+        PROFILE,
+        /** A policy that cannot be applied by a Profile Owner. */
+        NO
+    }
+
+    DeviceOwnerControl deviceOwner();
+    ProfileOwnerControl profileOwner();
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/enterprise/NegativePolicyTest.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/enterprise/NegativePolicyTest.java
new file mode 100644
index 0000000..c5a9ef4
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/enterprise/NegativePolicyTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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.bedstead.harrier.annotations.enterprise;
+
+import com.android.bedstead.harrier.annotations.meta.RequiresBedsteadJUnit4;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark a test as testing the states where a policy is applied (by a Device Owner or Profile Owner)
+ * and it should not apply to the user the test is running on.
+ *
+ * <p>This will generated parameterized runs for all matching states.
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@RequiresBedsteadJUnit4
+public @interface NegativePolicyTest {
+    /**
+     * The policy being tested.
+     *
+     * <p>This is used to calculate which states are required to be tested.
+     */
+    Class<?> policy();
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/enterprise/PositivePolicyTest.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/enterprise/PositivePolicyTest.java
new file mode 100644
index 0000000..07e7bba
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/enterprise/PositivePolicyTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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.bedstead.harrier.annotations.enterprise;
+
+import com.android.bedstead.harrier.annotations.meta.RequiresBedsteadJUnit4;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark a test as testing the states where a policy is applied (by a Device Owner or Profile Owner)
+ * and it should apply to the user the test is running on.
+ *
+ * <p>This will generated parameterized runs for all matching states.
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@RequiresBedsteadJUnit4
+public @interface PositivePolicyTest {
+    /**
+     * The policy being tested.
+     *
+     * <p>This is used to calculate which states are required to be tested.
+     */
+    Class<?> policy();
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasNoProfileAnnotation.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasNoProfileAnnotation.java
index d7118de..940dae0 100644
--- a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasNoProfileAnnotation.java
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasNoProfileAnnotation.java
@@ -31,6 +31,6 @@
 @Target(ElementType.ANNOTATION_TYPE)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface EnsureHasNoProfileAnnotation {
-    /** The name of the profile which should not be present. */
+    /** The name of the profile type which should not be present. */
     String value();
 }
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasNoUser.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasNoUser.java
new file mode 100644
index 0000000..1504a06
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasNoUser.java
@@ -0,0 +1,27 @@
+/*
+ * 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.bedstead.harrier.annotations.meta;
+
+import java.lang.annotation.Target;
+
+/**
+ * This annotation should not be used directly. It exists as a template for annotations which
+ * ensure that a given user type does not exist.
+ */
+@Target({})
+public @interface EnsureHasNoUser {
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasNoUserAnnotation.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasNoUserAnnotation.java
new file mode 100644
index 0000000..5aaaf31
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasNoUserAnnotation.java
@@ -0,0 +1,35 @@
+/*
+ * 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.bedstead.harrier.annotations.meta;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark that an annotation is used to indicate that no users of a given type should exist.
+ *
+ * <p>The annotation annotated with {@link EnsureHasNoUserAnnotation} must have the same body as
+ * {@link EnsureHasNoUser}.
+ */
+@Target(ElementType.ANNOTATION_TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EnsureHasNoUserAnnotation {
+    /** The name of the user type which should not be present. */
+    String value();
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasProfile.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasProfile.java
new file mode 100644
index 0000000..54aa2d5
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasProfile.java
@@ -0,0 +1,36 @@
+/*
+ * 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.bedstead.harrier.annotations.meta;
+
+import static com.android.bedstead.harrier.DeviceState.UserType.CURRENT_USER;
+
+import com.android.bedstead.harrier.DeviceState;
+
+import java.lang.annotation.Target;
+
+/**
+ * This annotation should not be used directly. It exists as a template for annotations which
+ * ensure that a given user has a specific profile type.
+ */
+@Target({})
+public @interface EnsureHasProfile {
+    /** Which user type the profile should be attached to. */
+    DeviceState.UserType forUser() default CURRENT_USER;
+
+    /** Whether the test app should be installed in the profile. */
+    boolean installTestApp() default true;
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasProfileAnnotation.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasProfileAnnotation.java
new file mode 100644
index 0000000..9b405d8
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasProfileAnnotation.java
@@ -0,0 +1,36 @@
+/*
+ * 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.bedstead.harrier.annotations.meta;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark that an annotation is used to indicate that a given user should have a profile of the
+ * given type.
+ *
+ * <p>The annotation annotated with {@link EnsureHasProfileAnnotation} must have the same body as
+ * {@link EnsureHasProfile}.
+ */
+@Target(ElementType.ANNOTATION_TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EnsureHasProfileAnnotation {
+    /** The name of the profile type which should be present. */
+    String value();
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasUser.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasUser.java
new file mode 100644
index 0000000..871c57a
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasUser.java
@@ -0,0 +1,29 @@
+/*
+ * 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.bedstead.harrier.annotations.meta;
+
+import java.lang.annotation.Target;
+
+/**
+ * This annotation should not be used directly. It exists as a template for annotations which
+ * ensure that a given user type exists.
+ */
+@Target({})
+public @interface EnsureHasUser {
+    /** Whether the test app should be installed in the user. */
+    boolean installTestApp() default true;
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasUserAnnotation.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasUserAnnotation.java
new file mode 100644
index 0000000..1e6a88d
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/EnsureHasUserAnnotation.java
@@ -0,0 +1,35 @@
+/*
+ * 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.bedstead.harrier.annotations.meta;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark that an annotation is used to indicate that a given user type should exist on the device.
+ *
+ * <p>The annotation annotated with {@link EnsureHasUserAnnotation} must have the same body as
+ * {@link EnsureHasUser}.
+ */
+@Target(ElementType.ANNOTATION_TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EnsureHasUserAnnotation {
+    /** The name of the user type which should be present. */
+    String value();
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/ParameterizedAnnotation.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/ParameterizedAnnotation.java
new file mode 100644
index 0000000..bab40ca
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/ParameterizedAnnotation.java
@@ -0,0 +1,37 @@
+/*
+ * 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.bedstead.harrier.annotations.meta;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark a Harrier annotation as being Parameterized.
+ *
+ * <p>There will be a separate run generated for the annotated method for each
+ * {@link ParameterizedAnnotation} annotation. The test will be named methodName[paramName].
+ *
+ * <p>If any {@link ParameterizedAnnotation} annotations are applied to a test, then the basic
+ * un-parameterized test will not be run.
+ */
+@Target(ElementType.ANNOTATION_TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@RequiresBedsteadJUnit4
+public @interface ParameterizedAnnotation {
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/RequireRunOnUser.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/RequireRunOnUser.java
new file mode 100644
index 0000000..b3882b1
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/RequireRunOnUser.java
@@ -0,0 +1,27 @@
+/*
+ * 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.bedstead.harrier.annotations.meta;
+
+import java.lang.annotation.Target;
+
+/**
+ * This annotation should not be used directly. It exists as a template for annotations which
+ * ensure that a test runs on a given user type.
+ */
+@Target({})
+public @interface RequireRunOnUser {
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/RequireRunOnUserAnnotation.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/RequireRunOnUserAnnotation.java
new file mode 100644
index 0000000..e100416
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/RequireRunOnUserAnnotation.java
@@ -0,0 +1,35 @@
+/*
+ * 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.bedstead.harrier.annotations.meta;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Mark that an annotation is used to indicate that a test should run on a given user type.
+ *
+ * <p>The annotation annotated with {@link RequireRunOnUserAnnotation} must have the same body as
+ * {@link RequireRunOnUser}.
+ */
+@Target(ElementType.ANNOTATION_TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface RequireRunOnUserAnnotation {
+    /** The name of the user type which the test should be run on. */
+    String value();
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/RequiresBedsteadJUnit4.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/RequiresBedsteadJUnit4.java
new file mode 100644
index 0000000..9033b90
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/meta/RequiresBedsteadJUnit4.java
@@ -0,0 +1,32 @@
+/*
+ * 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.bedstead.harrier.annotations.meta;
+
+import com.android.bedstead.harrier.BedsteadJUnit4;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Indicates that an annotation requires using the {@link BedsteadJUnit4} test runner
+ */
+@Target(ElementType.ANNOTATION_TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface RequiresBedsteadJUnit4 {
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/parameterized/IncludeNone.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/parameterized/IncludeNone.java
new file mode 100644
index 0000000..3ad98af
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/parameterized/IncludeNone.java
@@ -0,0 +1,33 @@
+/*
+ * 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.bedstead.harrier.annotations.parameterized;
+
+import com.android.bedstead.harrier.annotations.meta.ParameterizedAnnotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Parameterize a test but do not generate a run.
+ */
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@ParameterizedAnnotation
+public @interface IncludeNone {
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/parameterized/IncludeRunOnDeviceOwnerUser.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/parameterized/IncludeRunOnDeviceOwnerUser.java
new file mode 100644
index 0000000..8f877eb
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/parameterized/IncludeRunOnDeviceOwnerUser.java
@@ -0,0 +1,36 @@
+/*
+ * 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.bedstead.harrier.annotations.parameterized;
+
+import com.android.bedstead.harrier.annotations.RequireRunOnPrimaryUser;
+import com.android.bedstead.harrier.annotations.meta.ParameterizedAnnotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Parameterize a test so that it runs on the same user as the device owner.
+ */
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@ParameterizedAnnotation
+@RequireRunOnPrimaryUser
+// TODO(scottjonathan): Add annotations to ensure Device Owner is set
+public @interface IncludeRunOnDeviceOwnerUser {
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/parameterized/IncludeRunOnNonAffiliatedDeviceOwnerSecondaryUser.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/parameterized/IncludeRunOnNonAffiliatedDeviceOwnerSecondaryUser.java
new file mode 100644
index 0000000..0adbb86
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/annotations/parameterized/IncludeRunOnNonAffiliatedDeviceOwnerSecondaryUser.java
@@ -0,0 +1,37 @@
+/*
+ * 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.bedstead.harrier.annotations.parameterized;
+
+import com.android.bedstead.harrier.annotations.RequireRunOnSecondaryUser;
+import com.android.bedstead.harrier.annotations.meta.ParameterizedAnnotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Parameterize a test so that it runs on a non-affiliated secondary user on a device with a
+ * Device Owner.
+ */
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@ParameterizedAnnotation
+@RequireRunOnSecondaryUser
+// TODO(scottjonathan): Add annotations to ensure Device Owner is set
+public @interface IncludeRunOnNonAffiliatedDeviceOwnerSecondaryUser {
+}
diff --git a/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/policies/TestPolicy.java b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/policies/TestPolicy.java
new file mode 100644
index 0000000..0b7c557
--- /dev/null
+++ b/common/device-side/bedstead/harrier/src/main/java/com/android/bedstead/harrier/policies/TestPolicy.java
@@ -0,0 +1,27 @@
+/*
+ * 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.bedstead.harrier.policies;
+
+import static com.android.bedstead.harrier.annotations.enterprise.EnterprisePolicy.DeviceOwnerControl.NO;
+import static com.android.bedstead.harrier.annotations.enterprise.EnterprisePolicy.ProfileOwnerControl.COPE_PARENT;
+
+import com.android.bedstead.harrier.annotations.enterprise.EnterprisePolicy;
+
+/** Example Policy until real policies are added. */
+@EnterprisePolicy(profileOwner = COPE_PARENT, deviceOwner = NO)
+public class TestPolicy {
+}
diff --git a/common/device-side/bedstead/harrier/src/test/java/com/android/bedstead/harrier/DeviceStateTest.java b/common/device-side/bedstead/harrier/src/test/java/com/android/bedstead/harrier/DeviceStateTest.java
index 68d92bc..9dd78f0 100644
--- a/common/device-side/bedstead/harrier/src/test/java/com/android/bedstead/harrier/DeviceStateTest.java
+++ b/common/device-side/bedstead/harrier/src/test/java/com/android/bedstead/harrier/DeviceStateTest.java
@@ -35,9 +35,8 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
-@RunWith(JUnit4.class)
+@RunWith(BedsteadJUnit4.class)
 public class DeviceStateTest {
 
     @ClassRule
diff --git a/common/device-side/bedstead/nene/lint-baseline.xml b/common/device-side/bedstead/nene/lint-baseline.xml
new file mode 100644
index 0000000..6fe256f
--- /dev/null
+++ b/common/device-side/bedstead/nene/lint-baseline.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 10000 (current min is 27): `AdbUserParser31`"
+        errorLine1="            return new AdbUserParser31(testApis);"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/users/AdbUserParser.java"
+            line="37"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level R (current min is 27): `AdbUserParser30`"
+        errorLine1="            return new AdbUserParser30(testApis);"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/users/AdbUserParser.java"
+            line="40"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 27): `android.app.UiAutomation#adoptShellPermissionIdentity`"
+        errorLine1="            ShellCommandUtils.uiAutomation().adoptShellPermissionIdentity("
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/permissions/Permissions.java"
+            line="196"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 27): `android.app.UiAutomation#dropShellPermissionIdentity`"
+        errorLine1="            ShellCommandUtils.uiAutomation().dropShellPermissionIdentity();"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/permissions/Permissions.java"
+            line="240"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 27): `android.app.UiAutomation#adoptShellPermissionIdentity`"
+        errorLine1="            ShellCommandUtils.uiAutomation().adoptShellPermissionIdentity();"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/permissions/Permissions.java"
+            line="242"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 27): `android.app.UiAutomation#adoptShellPermissionIdentity`"
+        errorLine1="            ShellCommandUtils.uiAutomation().adoptShellPermissionIdentity("
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/permissions/Permissions.java"
+            line="244"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 31 (current min is 27): `android.app.UiAutomation#executeShellCommandRw`"
+        errorLine1="        ParcelFileDescriptor[] fds = uiAutomation().executeShellCommandRw(command);"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/utils/ShellCommandUtils.java"
+            line="156"
+            column="53"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level R (current min is 27): `java.util.Set#of`"
+        errorLine1="        managedProfileMutableUserType.mBaseType = Set.of(UserType.BaseType.PROFILE);"
+        errorLine2="                                                      ~~">
+        <location
+            file="cts/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/users/Users.java"
+            line="213"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level R (current min is 27): `java.util.Set#of`"
+        errorLine1="                Set.of(UserType.BaseType.FULL, UserType.BaseType.SYSTEM);"
+        errorLine2="                    ~~">
+        <location
+            file="cts/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/users/Users.java"
+            line="224"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level R (current min is 27): `java.util.Set#of`"
+        errorLine1="        managedProfileMutableUserType.mBaseType = Set.of(UserType.BaseType.FULL);"
+        errorLine2="                                                      ~~">
+        <location
+            file="cts/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/users/Users.java"
+            line="234"
+            column="55"/>
+    </issue>
+
+</issues>
diff --git a/common/device-side/bedstead/testapp/Android.bp b/common/device-side/bedstead/testapp/Android.bp
index e9ced93..5b325c4 100644
--- a/common/device-side/bedstead/testapp/Android.bp
+++ b/common/device-side/bedstead/testapp/Android.bp
@@ -37,7 +37,16 @@
 
 python_binary_host {
     name: "index_testapps",
-    defaults: ["base_default"],
+    version: {
+        py2: {
+            enabled: false,
+            embedded_launcher: false,
+        },
+        py3: {
+            enabled: true,
+            embedded_launcher: true,
+        },
+    },
     main: "tools/index/index_testapps.py",
     srcs: [
         "tools/index/index_testapps.py",
diff --git a/common/device-side/util-axt/src/com/android/compatibility/common/util/AppStandbyUtils.java b/common/device-side/util-axt/src/com/android/compatibility/common/util/AppStandbyUtils.java
index 6eeaae2..3d8fefa 100644
--- a/common/device-side/util-axt/src/com/android/compatibility/common/util/AppStandbyUtils.java
+++ b/common/device-side/util-axt/src/com/android/compatibility/common/util/AppStandbyUtils.java
@@ -16,13 +16,15 @@
 
 package com.android.compatibility.common.util;
 
+import android.app.usage.UsageStatsManager;
 import android.util.Log;
 
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import androidx.test.InstrumentationRegistry;
 
 public class AppStandbyUtils {
     private static final String TAG = "CtsAppStandbyUtils";
+    private static final UsageStatsManager sUsageStatsManager = InstrumentationRegistry
+            .getTargetContext().getSystemService(UsageStatsManager.class);
 
     /**
      * Returns if app standby is enabled.
@@ -63,4 +65,14 @@
         Log.d(TAG, "AppStandby is " + (boolResult ? "enabled" : "disabled") + " at runtime.");
         return boolResult;
     }
+
+    /** Returns the current standby-bucket of the package on the device */
+    public static int getAppStandbyBucket(String packageName) {
+        try {
+            return SystemUtil.callWithShellPermissionIdentity(
+                    () -> sUsageStatsManager.getAppStandbyBucket(packageName));
+        } catch (Exception e) {
+            throw new RuntimeException("Could not get standby-bucket for " + packageName, e);
+        }
+    }
 }
diff --git a/common/device-side/util-axt/src/com/android/compatibility/common/util/BlockingCallback.java b/common/device-side/util-axt/src/com/android/compatibility/common/util/BlockingCallback.java
index 38fcee7..2b694bf 100644
--- a/common/device-side/util-axt/src/com/android/compatibility/common/util/BlockingCallback.java
+++ b/common/device-side/util-axt/src/com/android/compatibility/common/util/BlockingCallback.java
@@ -20,6 +20,7 @@
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Subclass this to create a blocking version of a callback. For example:
@@ -41,11 +42,11 @@
     private static final int DEFAULT_TIMEOUT_SECONDS = 120;
 
     private final CountDownLatch mLatch = new CountDownLatch(1);
-    private E mValue = null;
+    private AtomicReference<E> mValue = new AtomicReference<>();
 
     /** Call this method from the callback method to mark the response as received. */
     protected void callbackTriggered(E value) {
-        mValue = value;
+        mValue.set(value);
         mLatch.countDown();
     }
 
@@ -69,6 +70,6 @@
         if (!mLatch.await(timeout, unit)) {
             fail("Callback was not received");
         }
-        return mValue;
+        return mValue.get();
     }
 }
diff --git a/common/device-side/util-axt/src/com/android/compatibility/common/util/PollingCheck.java b/common/device-side/util-axt/src/com/android/compatibility/common/util/PollingCheck.java
index bcc3530..00eda91 100644
--- a/common/device-side/util-axt/src/com/android/compatibility/common/util/PollingCheck.java
+++ b/common/device-side/util-axt/src/com/android/compatibility/common/util/PollingCheck.java
@@ -17,22 +17,33 @@
 package com.android.compatibility.common.util;
 
 import java.util.concurrent.Callable;
+import java.util.function.BooleanSupplier;
 
 import junit.framework.Assert;
 
 public abstract class PollingCheck {
     private static final long TIME_SLICE = 50;
-    private long mTimeout = 3000;
+    private static final long DEFAULT_TIMEOUT = 3_000;
+    private static final String DEFAULT_ERROR_MESSAGE = "unexpected timeout";
+
+    private final long mTimeout;
+    private final String mErrorMessage;
 
     public static interface PollingCheckCondition {
         boolean canProceed();
     }
 
     public PollingCheck() {
+        this(DEFAULT_TIMEOUT, DEFAULT_ERROR_MESSAGE);
     }
 
     public PollingCheck(long timeout) {
+        this(timeout, DEFAULT_ERROR_MESSAGE);
+    }
+
+    public PollingCheck(long timeout, String errorMessage) {
         mTimeout = timeout;
+        mErrorMessage = errorMessage;
     }
 
     protected abstract boolean check();
@@ -57,7 +68,7 @@
             timeout -= TIME_SLICE;
         }
 
-        Assert.fail("unexpected timeout");
+        Assert.assertTrue(mErrorMessage, check());
     }
 
     public static void check(CharSequence message, long timeout, Callable<Boolean> condition)
@@ -91,4 +102,13 @@
             }
         }.run();
     }
+
+    public static void waitFor(long timeout, BooleanSupplier condition, String errorMessage) {
+        new PollingCheck(timeout, errorMessage) {
+            @Override
+            protected boolean check() {
+                return condition.getAsBoolean();
+            }
+        }.run();
+    }
 }
diff --git a/common/device-side/util-axt/src/com/android/compatibility/common/util/PropertyUtil.java b/common/device-side/util-axt/src/com/android/compatibility/common/util/PropertyUtil.java
index c5933a7..352175a 100644
--- a/common/device-side/util-axt/src/com/android/compatibility/common/util/PropertyUtil.java
+++ b/common/device-side/util-axt/src/com/android/compatibility/common/util/PropertyUtil.java
@@ -46,6 +46,7 @@
     private static final String TAG_DEV_KEYS = "dev-keys";
     private static final String VENDOR_SDK_VERSION = "ro.vendor.build.version.sdk";
     private static final String VNDK_VERSION = "ro.vndk.version";
+    private static final String CAMERAX_EXTENSIONS_ENABLED = "ro.camerax.extensions.enabled";
 
     public static final String GOOGLE_SETTINGS_QUERY =
             "content query --uri content://com.google.settings/partner";
@@ -69,6 +70,14 @@
     }
 
     /**
+     * Return the CameraX extensions enabled property value. If the read-only property is unset,
+     * the default value returned will be 'false'.
+     */
+    public static boolean areCameraXExtensionsEnabled() {
+        return getPropertyBoolean(CAMERAX_EXTENSIONS_ENABLED);
+    }
+
+    /**
      * Return the first API level for this product. If the read-only property is unset,
      * this means the first API level is the current API level, and the current API level
      * is returned.
@@ -186,6 +195,17 @@
     }
 
     /**
+     * Retrieves the desired boolean property, returning false if not found.
+     */
+    public static boolean getPropertyBoolean(String property) {
+        String value = getProperty(property);
+        if (value == null) {
+            return false;
+        }
+        return Boolean.parseBoolean(value);
+    }
+
+    /**
      * Retrieves the desired integer property, returning INT_VALUE_IF_UNSET if not found.
      */
     public static int getPropertyInt(String property) {
diff --git a/common/host-side/util-axt/src/com/android/compatibility/common/util/WindowManagerUtil.java b/common/host-side/util-axt/src/com/android/compatibility/common/util/WindowManagerUtil.java
index e03cb84..1b149a0 100644
--- a/common/host-side/util-axt/src/com/android/compatibility/common/util/WindowManagerUtil.java
+++ b/common/host-side/util-axt/src/com/android/compatibility/common/util/WindowManagerUtil.java
@@ -37,6 +37,7 @@
 
 public class WindowManagerUtil {
     private static final String SHELL_DUMPSYS_WINDOW = "dumpsys window --proto";
+    private static final String STATE_RESUMED = "RESUMED";
 
     @Nonnull
     public static WindowManagerServiceDumpProto getDump(@Nonnull ITestDevice device)
@@ -59,6 +60,33 @@
         return windows;
     }
 
+    @Nonnull
+    public static List<ActivityRecordProto> getActivityRecords(@Nonnull ITestDevice device)
+            throws Exception {
+        final WindowManagerServiceDumpProto windowManagerServiceDump = getDump(device);
+        final RootWindowContainerProto rootWindowContainer =
+                windowManagerServiceDump.getRootWindowContainer();
+        final WindowContainerProto windowContainer = rootWindowContainer.getWindowContainer();
+
+        final List<ActivityRecordProto> activityRecords = new ArrayList<>();
+        collectActivityRecords(windowContainer, activityRecords);
+
+        return activityRecords;
+    }
+
+    @Nonnull
+    public static List<String> getResumedActivities(@Nonnull ITestDevice device) throws Exception {
+        List<String> resumedActivities = new ArrayList<>();
+        List<ActivityRecordProto> activityRecords = getActivityRecords(device);
+        for (ActivityRecordProto activityRecord : activityRecords) {
+            if (STATE_RESUMED.equals(activityRecord.getState())) {
+                resumedActivities.add(activityRecord.getName());
+            }
+        }
+
+        return resumedActivities;
+    }
+
     @Nullable
     public static WindowStateProto getWindowWithTitle(@Nonnull ITestDevice device,
             @Nonnull String expectedTitle) throws Exception {
@@ -141,4 +169,45 @@
             }
         }
     }
+
+    private static void collectActivityRecords(@Nullable WindowContainerProto windowContainer,
+            @Nonnull List<ActivityRecordProto> out) {
+        if (windowContainer == null) return;
+
+        final List<WindowContainerChildProto> children = windowContainer.getChildrenList();
+        for (WindowContainerChildProto child : children) {
+            if (child.hasWindowContainer()) {
+                collectActivityRecords(child.getWindowContainer(), out);
+            } else if (child.hasDisplayContent()) {
+                final DisplayContentProto displayContent = child.getDisplayContent();
+                for (WindowTokenProto windowToken : displayContent.getOverlayWindowsList()) {
+                    collectActivityRecords(windowToken.getWindowContainer(), out);
+                }
+                if (displayContent.hasRootDisplayArea()) {
+                    final DisplayAreaProto displayArea = displayContent.getRootDisplayArea();
+                    collectActivityRecords(displayArea.getWindowContainer(), out);
+                }
+                collectActivityRecords(displayContent.getWindowContainer(), out);
+            } else if (child.hasDisplayArea()) {
+                final DisplayAreaProto displayArea = child.getDisplayArea();
+                collectActivityRecords(displayArea.getWindowContainer(), out);
+            } else if (child.hasTask()) {
+                final TaskProto task = child.getTask();
+                collectActivityRecords(task.getWindowContainer(), out);
+            } else if (child.hasActivity()) {
+                final ActivityRecordProto activity = child.getActivity();
+                out.add(activity);
+                if (activity.hasWindowToken()) {
+                    final WindowTokenProto windowToken = activity.getWindowToken();
+                    collectActivityRecords(windowToken.getWindowContainer(), out);
+                }
+            } else if (child.hasWindowToken()) {
+                final WindowTokenProto windowToken = child.getWindowToken();
+                collectActivityRecords(windowToken.getWindowContainer(), out);
+            } else if (child.hasWindow()) {
+                final WindowStateProto window = child.getWindow();
+                collectActivityRecords(window.getWindowContainer(), out);
+            }
+        }
+    }
 }
diff --git a/hostsidetests/appcompat/strictjavapackages/src/android/compat/sjp/cts/StrictJavaPackagesTest.java b/hostsidetests/appcompat/strictjavapackages/src/android/compat/sjp/cts/StrictJavaPackagesTest.java
index e9721b7..2685691 100644
--- a/hostsidetests/appcompat/strictjavapackages/src/android/compat/sjp/cts/StrictJavaPackagesTest.java
+++ b/hostsidetests/appcompat/strictjavapackages/src/android/compat/sjp/cts/StrictJavaPackagesTest.java
@@ -89,6 +89,7 @@
                     "Landroid/annotation/MainThread;",
                     "Landroid/annotation/NonNull;",
                     "Landroid/annotation/Nullable;",
+                    "Landroid/annotation/RequiresNoPermission;",
                     "Landroid/annotation/RequiresPermission;",
                     "Landroid/annotation/RequiresPermission$Read;",
                     "Landroid/annotation/RequiresPermission$Write;",
@@ -217,13 +218,6 @@
                     "Landroid/os/InputEventInjectionResult;",
                     "Landroid/os/InputEventInjectionSync;",
                     "Landroid/os/TouchOcclusionMode;",
-                    "Lcom/android/internal/protolog/common/BitmaskConversionException;",
-                    "Lcom/android/internal/protolog/common/InvalidFormatStringException;",
-                    "Lcom/android/internal/protolog/common/IProtoLogGroup;",
-                    "Lcom/android/internal/protolog/common/LogDataType;",
-                    "Lcom/android/internal/protolog/common/ProtoLog;",
-                    "Lcom/android/internal/protolog/ProtoLogImpl;",
-                    "Lcom/android/internal/protolog/ProtoLogViewerConfigReader;",
                     "Lcom/android/internal/util/FrameworkStatsLog;"
             );
 
diff --git a/hostsidetests/appsecurity/OWNERS b/hostsidetests/appsecurity/OWNERS
index f438e7b..a81604b 100644
--- a/hostsidetests/appsecurity/OWNERS
+++ b/hostsidetests/appsecurity/OWNERS
@@ -6,7 +6,7 @@
 per-file AppDataIsolationTests.java = rickywai@google.com,alanstokes@google.com
 per-file AppOpsTest.java = moltmann@google.com
 per-file AppSecurityTests.java = cbrubaker@google.com
-per-file AuthBoundKeyTest.java = cbrubaker@google.com
+per-file AuthBoundKeyTest.java = file:test-apps/AuthBoundKeyApp/OWNERS
 per-file BaseInstallMultiple.java = toddke@google.com
 per-file CorruptApkTests.java = rtmitchell@google.com
 per-file DeviceIdentifierTest.java = cbrubaker@google.com
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/ApkVerityInstallTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/ApkVerityInstallTest.java
index f829175..15e1279 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/ApkVerityInstallTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/ApkVerityInstallTest.java
@@ -29,7 +29,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -290,7 +289,6 @@
     }
 
     @Test
-    @Ignore("IncFs does not support STATX_ATTR_VERITY")
     public void testInstallBaseWithFsvSigIncrementally() throws Exception {
         assumeSecurityModelCompat();
         assumeIncrementalDeliveryFeature();
@@ -304,7 +302,6 @@
     }
 
     @Test
-    @Ignore("IncFs does not support STATX_ATTR_VERITY")
     public void testInstallEverythingWithFsvSigIncrementally() throws Exception {
         assumeSecurityModelCompat();
         assumeIncrementalDeliveryFeature();
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java
index 59e6838..67e4080 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java
@@ -93,8 +93,15 @@
     private static final Config MEDIA_29 = new Config("CtsMediaStorageApp29.apk",
             "com.android.cts.mediastorageapp29", MEDIA_CLAZZ);
 
-    private static final String PERM_READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE";
-    private static final String PERM_WRITE_EXTERNAL_STORAGE = "android.permission.WRITE_EXTERNAL_STORAGE";
+    private static final String PERM_ACCESS_MEDIA_LOCATION =
+            "android.permission.ACCESS_MEDIA_LOCATION";
+    private static final String PERM_READ_EXTERNAL_STORAGE =
+            "android.permission.READ_EXTERNAL_STORAGE";
+    private static final String PERM_WRITE_EXTERNAL_STORAGE =
+            "android.permission.WRITE_EXTERNAL_STORAGE";
+
+    private static final String APP_OPS_MANAGE_EXTERNAL_STORAGE = "android:manage_external_storage";
+    private static final String APP_OPS_MANAGE_MEDIA = "android:manage_media";
 
     /** Copied from PackageManager*/
     private static final String FEATURE_AUTOMOTIVE = "android.hardware.type.automotive";
@@ -721,6 +728,165 @@
         }
     }
 
+    /**
+     * Check the behavior when the app calls MediaStore#createTrashRequest,
+     * MediaStore#createDeleteRequest or MediaStore#createWriteRequest, the user
+     * click the deny button on confirmation dialog.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testCreateRequest_userDenied() throws Exception {
+        installPackage(MEDIA.apk);
+
+        int user = getDevice().getCurrentUser();
+
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalationWithDenied_RequestWrite", user);
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalationWithDenied_RequestDelete", user);
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalationWithDenied_RequestTrash", user);
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalationWithDenied_RequestUnTrash", user);
+    }
+
+    /**
+     * If the app is NOT granted {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
+     * and {@link android.Manifest.permission#MANAGE_EXTERNAL_STORAGE}
+     * when it calls MediaStore#createTrashRequest,
+     * MediaStore#createDeleteRequest, or MediaStore#createWriteRequest,
+     * the system will show the user confirmation dialog.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testCreateRequest_noRESAndMES_showConfirmDialog() throws Exception {
+        installPackage(MEDIA.apk);
+
+        int user = getDevice().getCurrentUser();
+
+        // grant permissions
+        updatePermissions(MEDIA.pkg, user, new String[] {
+                PERM_ACCESS_MEDIA_LOCATION,
+        }, true);
+        // revoke permissions
+        updatePermissions(MEDIA.pkg, user, new String[] {
+                PERM_READ_EXTERNAL_STORAGE,
+                PERM_WRITE_EXTERNAL_STORAGE,
+        }, false);
+
+
+        // revoke the app ops permission
+        updateAppOp(MEDIA.pkg, user, APP_OPS_MANAGE_EXTERNAL_STORAGE, false);
+
+        // grant the app ops permission
+        updateAppOp(MEDIA.pkg, user, APP_OPS_MANAGE_MEDIA, true);
+
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalation_RequestWrite_showConfirmDialog", user);
+    }
+
+    /**
+     * If the app is NOT granted {@link android.Manifest.permission#MANAGE_MEDIA},
+     * when it calls MediaStore#createTrashRequest,
+     * MediaStore#createDeleteRequest, or MediaStore#createWriteRequest,
+     * the system will show the user confirmation dialog.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testCreateRequest_noMANAGEMEDIA_showConfirmDialog() throws Exception {
+        installPackage(MEDIA.apk);
+
+        int user = getDevice().getCurrentUser();
+        // grant permissions
+        updatePermissions(MEDIA.pkg, user, new String[] {
+                PERM_READ_EXTERNAL_STORAGE,
+                PERM_ACCESS_MEDIA_LOCATION,
+        }, true);
+
+        // revoke the app ops permission
+        updateAppOp(MEDIA.pkg, user, APP_OPS_MANAGE_MEDIA, false);
+
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalation_RequestWrite_showConfirmDialog", user);
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalation_RequestTrash_showConfirmDialog", user);
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalation_RequestDelete_showConfirmDialog", user);
+    }
+
+    /**
+     * If the app is granted {@link android.Manifest.permission#MANAGE_MEDIA},
+     * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}, without
+     * {@link android.Manifest.permission#ACCESS_MEDIA_LOCATION},
+     * when it calls MediaStore#createTrashRequest or
+     * MediaStore#createDeleteRequest, The system will NOT show the user
+     * confirmation dialog. When it calls MediaStore#createWriteRequest, the
+     * system will show the user confirmation dialog.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testCreateRequest_withNoAML_showConfirmDialog() throws Exception {
+        installPackage(MEDIA.apk);
+
+        int user = getDevice().getCurrentUser();
+        // grant permissions
+        updatePermissions(MEDIA.pkg, user, new String[] {
+                PERM_READ_EXTERNAL_STORAGE,
+        }, true);
+        // revoke permission
+        updatePermissions(MEDIA.pkg, user, new String[] {
+                PERM_ACCESS_MEDIA_LOCATION,
+        }, false);
+
+        // grant the app ops permission
+        updateAppOp(MEDIA.pkg, user, APP_OPS_MANAGE_MEDIA, true);
+
+        // show confirm dialog in requestWrite
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalation_RequestWrite_showConfirmDialog", user);
+
+        // not show confirm dialog in requestTrash and requestDelete
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalation_RequestTrash_notShowConfirmDialog", user);
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalation_RequestDelete_notShowConfirmDialog", user);
+    }
+
+    /**
+     * If the app is granted {@link android.Manifest.permission#MANAGE_MEDIA},
+     * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}, and
+     * {@link android.Manifest.permission#ACCESS_MEDIA_LOCATION},
+     * when it calls MediaStore#createWriteRequest, MediaStore#createTrashRequest or
+     * MediaStore#createDeleteRequest, the system will NOT show the user confirmation dialog.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testCreateRequest_withPermission_notShowConfirmDialog() throws Exception {
+        installPackage(MEDIA.apk);
+
+        int user = getDevice().getCurrentUser();
+        // grant permissions
+        updatePermissions(MEDIA.pkg, user, new String[] {
+                PERM_READ_EXTERNAL_STORAGE,
+                PERM_ACCESS_MEDIA_LOCATION,
+        }, true);
+
+        // revoke the app ops permission
+        updateAppOp(MEDIA.pkg, user, APP_OPS_MANAGE_MEDIA, true);
+
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalation_RequestWrite_notShowConfirmDialog", user);
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalation_RequestTrash_notShowConfirmDialog", user);
+        runDeviceTests(MEDIA.pkg, MEDIA.clazz,
+                "testMediaEscalation_RequestDelete_notShowConfirmDialog", user);
+    }
+
     private <T extends MessageLite> T getDump(Parser<T> parser, String command) throws Exception {
         final CollectingByteOutputReceiver receiver = new CollectingByteOutputReceiver();
         getDevice().executeShellCommand(command, receiver);
diff --git a/hostsidetests/appsecurity/test-apps/AuthBoundKeyApp/OWNERS b/hostsidetests/appsecurity/test-apps/AuthBoundKeyApp/OWNERS
new file mode 100644
index 0000000..8fc3c4f
--- /dev/null
+++ b/hostsidetests/appsecurity/test-apps/AuthBoundKeyApp/OWNERS
@@ -0,0 +1,7 @@
+# Bug component: 533114
+hasinitg@google.com
+jbires@google.com
+jdanis@google.com
+swillden@google.com
+toddke@google.com
+zeuthen@google.com
diff --git a/hostsidetests/appsecurity/test-apps/AuthBoundKeyApp/src/com/android/cts/authboundkey/AuthBoundKeyAppTest.java b/hostsidetests/appsecurity/test-apps/AuthBoundKeyApp/src/com/android/cts/authboundkey/AuthBoundKeyAppTest.java
index 1f2adfd..5321a9f 100644
--- a/hostsidetests/appsecurity/test-apps/AuthBoundKeyApp/src/com/android/cts/authboundkey/AuthBoundKeyAppTest.java
+++ b/hostsidetests/appsecurity/test-apps/AuthBoundKeyApp/src/com/android/cts/authboundkey/AuthBoundKeyAppTest.java
@@ -74,11 +74,14 @@
         keyStore.load(null);
         try {
             SecretKey secretKey = (SecretKey) keyStore.getKey(KEY_NAME, null);
+            // In Keystore 2.0 we don't keep invalidated keys around. So we cannot diagnose that
+            // a key was invalidated. It simply does not exist. Thus we expect null.
+            if (secretKey == null) return;
         } catch (UnrecoverableKeyException e) {
-            // This is correct behavior
+            // This is correct behavior for Keystore 1.0
             return;
         }
-        fail("Expected an UnrecoverableKeyException");
+        fail("Expected an UnrecoverableKeyException or null");
     }
 
 }
diff --git a/hostsidetests/appsecurity/test-apps/ExternalStorageApp/TEST_MAPPING b/hostsidetests/appsecurity/test-apps/ExternalStorageApp/TEST_MAPPING
index 90a93b0..b08a98e 100644
--- a/hostsidetests/appsecurity/test-apps/ExternalStorageApp/TEST_MAPPING
+++ b/hostsidetests/appsecurity/test-apps/ExternalStorageApp/TEST_MAPPING
@@ -1,5 +1,5 @@
 {
-    "presubmit": [
+    "presubmit-large": [
         {
             "name": "CtsAppSecurityHostTestCases",
             "options": [
diff --git a/hostsidetests/appsecurity/test-apps/MediaStorageApp/AndroidManifest.xml b/hostsidetests/appsecurity/test-apps/MediaStorageApp/AndroidManifest.xml
index 4b09ae5..64f7657 100644
--- a/hostsidetests/appsecurity/test-apps/MediaStorageApp/AndroidManifest.xml
+++ b/hostsidetests/appsecurity/test-apps/MediaStorageApp/AndroidManifest.xml
@@ -36,6 +36,9 @@
     <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
          android:targetPackage="com.android.cts.mediastorageapp"/>
 
+    <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
+    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.MANAGE_MEDIA"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 
diff --git a/hostsidetests/appsecurity/test-apps/MediaStorageApp/TEST_MAPPING b/hostsidetests/appsecurity/test-apps/MediaStorageApp/TEST_MAPPING
index 90a93b0..b08a98e 100644
--- a/hostsidetests/appsecurity/test-apps/MediaStorageApp/TEST_MAPPING
+++ b/hostsidetests/appsecurity/test-apps/MediaStorageApp/TEST_MAPPING
@@ -1,5 +1,5 @@
 {
-    "presubmit": [
+    "presubmit-large": [
         {
             "name": "CtsAppSecurityHostTestCases",
             "options": [
diff --git a/hostsidetests/appsecurity/test-apps/MediaStorageApp/src/com/android/cts/mediastorageapp/GetResultActivity.java b/hostsidetests/appsecurity/test-apps/MediaStorageApp/src/com/android/cts/mediastorageapp/GetResultActivity.java
index a4ea510..4d42a34 100644
--- a/hostsidetests/appsecurity/test-apps/MediaStorageApp/src/com/android/cts/mediastorageapp/GetResultActivity.java
+++ b/hostsidetests/appsecurity/test-apps/MediaStorageApp/src/com/android/cts/mediastorageapp/GetResultActivity.java
@@ -66,12 +66,12 @@
     public Result getResult() {
         final Result result;
         try {
-            result = sResult.poll(30, TimeUnit.SECONDS);
+            result = sResult.poll(40, TimeUnit.SECONDS);
         } catch (InterruptedException e) {
             throw new RuntimeException(e);
         }
         if (result == null) {
-            throw new IllegalStateException("Activity didn't receive a Result in 30 seconds");
+            throw new IllegalStateException("Activity didn't receive a Result in 40 seconds");
         }
         return result;
     }
diff --git a/hostsidetests/appsecurity/test-apps/MediaStorageApp/src/com/android/cts/mediastorageapp/MediaStorageTest.java b/hostsidetests/appsecurity/test-apps/MediaStorageApp/src/com/android/cts/mediastorageapp/MediaStorageTest.java
index 8c4f29c..5b30cd1 100644
--- a/hostsidetests/appsecurity/test-apps/MediaStorageApp/src/com/android/cts/mediastorageapp/MediaStorageTest.java
+++ b/hostsidetests/appsecurity/test-apps/MediaStorageApp/src/com/android/cts/mediastorageapp/MediaStorageTest.java
@@ -26,7 +26,6 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeTrue;
 
 import android.app.Activity;
 import android.app.Instrumentation;
@@ -482,14 +481,44 @@
 
     @Test
     public void testMediaEscalation_RequestWrite() throws Exception {
-        doMediaEscalation_RequestWrite(MediaStorageTest::createAudio);
-        doMediaEscalation_RequestWrite(MediaStorageTest::createVideo);
-        doMediaEscalation_RequestWrite(MediaStorageTest::createImage);
-        doMediaEscalation_RequestWrite(MediaStorageTest::createPlaylist);
-        doMediaEscalation_RequestWrite(MediaStorageTest::createSubtitle);
+        doMediaEscalation_RequestWrite(true /* allowAccess */,
+                false /* shouldCheckDialogShownValue */, false /* isDialogShownExpected */);
     }
 
-    private void doMediaEscalation_RequestWrite(Callable<Uri> create) throws Exception {
+    @Test
+    public void testMediaEscalationWithDenied_RequestWrite() throws Exception {
+        doMediaEscalation_RequestWrite(false /* allowAccess */,
+                false /* shouldCheckDialogShownValue */, false /* isDialogShownExpected */);
+    }
+
+    @Test
+    public void testMediaEscalation_RequestWrite_showConfirmDialog() throws Exception {
+        doMediaEscalation_RequestWrite(true /* allowAccess */,
+                true /* shouldCheckDialogShownValue */, true /* isDialogShownExpected */);
+    }
+
+    @Test
+    public void testMediaEscalation_RequestWrite_notShowConfirmDialog() throws Exception {
+        doMediaEscalation_RequestWrite(true /* allowAccess */,
+                true /* shouldCheckDialogShownValue */, false /* isDialogShownExpected */);
+    }
+
+    private void doMediaEscalation_RequestWrite(boolean allowAccess,
+            boolean shouldCheckDialogShownValue, boolean isDialogShownExpected) throws Exception {
+        doMediaEscalation_RequestWrite(MediaStorageTest::createAudio, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+        doMediaEscalation_RequestWrite(MediaStorageTest::createVideo, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+        doMediaEscalation_RequestWrite(MediaStorageTest::createImage, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+        doMediaEscalation_RequestWrite(MediaStorageTest::createPlaylist, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+        doMediaEscalation_RequestWrite(MediaStorageTest::createSubtitle, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+    }
+
+    private void doMediaEscalation_RequestWrite(Callable<Uri> create, boolean allowAccess,
+            boolean shouldCheckDialogShownValue, boolean isDialogShownExpected) throws Exception {
         final Uri red = create.call();
         clearMediaOwner(red, mUserId);
 
@@ -498,30 +527,102 @@
         } catch (SecurityException expected) {
         }
 
-        doEscalation(MediaStore.createWriteRequest(mContentResolver, Arrays.asList(red)));
+        if (allowAccess) {
+            doEscalation(MediaStore.createWriteRequest(mContentResolver, Arrays.asList(red)),
+                    true /* allowAccess */, shouldCheckDialogShownValue, isDialogShownExpected);
 
-        try (ParcelFileDescriptor pfd = mContentResolver.openFileDescriptor(red, "w")) {
+            try (ParcelFileDescriptor pfd = mContentResolver.openFileDescriptor(red, "w")) {
+            }
+        } else {
+            doEscalation(MediaStore.createWriteRequest(mContentResolver, Arrays.asList(red)),
+                    false /* allowAccess */, shouldCheckDialogShownValue, isDialogShownExpected);
+            try (ParcelFileDescriptor pfd = mContentResolver.openFileDescriptor(red, "w")) {
+                fail("Expected write access to be blocked");
+            } catch (SecurityException expected) {
+            }
         }
     }
 
     @Test
-    public void testMediaEscalation_RequestTrash() throws Exception {
-        doMediaEscalation_RequestTrash(MediaStorageTest::createAudio);
-        doMediaEscalation_RequestTrash(MediaStorageTest::createVideo);
-        doMediaEscalation_RequestTrash(MediaStorageTest::createImage);
-        doMediaEscalation_RequestTrash(MediaStorageTest::createPlaylist);
-        doMediaEscalation_RequestTrash(MediaStorageTest::createSubtitle);
+    public void testMediaEscalationWithDenied_RequestUnTrash() throws Exception {
+        doMediaEscalationWithDenied_RequestUnTrash(MediaStorageTest::createAudio);
+        doMediaEscalationWithDenied_RequestUnTrash(MediaStorageTest::createVideo);
+        doMediaEscalationWithDenied_RequestUnTrash(MediaStorageTest::createImage);
+        doMediaEscalationWithDenied_RequestUnTrash(MediaStorageTest::createPlaylist);
+        doMediaEscalationWithDenied_RequestUnTrash(MediaStorageTest::createSubtitle);
     }
 
-    private void doMediaEscalation_RequestTrash(Callable<Uri> create) throws Exception {
+    private void doMediaEscalationWithDenied_RequestUnTrash(Callable<Uri> create) throws Exception {
         final Uri red = create.call();
         clearMediaOwner(red, mUserId);
 
         assertEquals("0", queryForSingleColumn(red, MediaColumns.IS_TRASHED));
-        doEscalation(MediaStore.createTrashRequest(mContentResolver, Arrays.asList(red), true));
+        doEscalation(
+                MediaStore.createTrashRequest(mContentResolver, Arrays.asList(red), true));
         assertEquals("1", queryForSingleColumn(red, MediaColumns.IS_TRASHED));
-        doEscalation(MediaStore.createTrashRequest(mContentResolver, Arrays.asList(red), false));
+        doEscalation(MediaStore.createTrashRequest(mContentResolver, Arrays.asList(red), false),
+                false /* allowAccess */, false /* shouldCheckDialogShownValue */,
+                false /* isDialogShownExpected */);
+        assertEquals("1", queryForSingleColumn(red, MediaColumns.IS_TRASHED));
+    }
+
+    @Test
+    public void testMediaEscalation_RequestTrash() throws Exception {
+        doMediaEscalation_RequestTrash(true /* allowAccess */,
+                false /* shouldCheckDialogShownValue */, false /* isDialogShownExpected */);
+    }
+
+    @Test
+    public void testMediaEscalationWithDenied_RequestTrash() throws Exception {
+        doMediaEscalation_RequestTrash(false /* allowAccess */,
+                false /* shouldCheckDialogShownValue */, false /* isDialogShownExpected */);
+    }
+
+    @Test
+    public void testMediaEscalation_RequestTrash_showConfirmDialog() throws Exception {
+        doMediaEscalation_RequestTrash(true /* allowAccess */,
+                true /* shouldCheckDialogShownValue */, true /* isDialogShownExpected */);
+    }
+
+    @Test
+    public void testMediaEscalation_RequestTrash_notShowConfirmDialog() throws Exception {
+        doMediaEscalation_RequestTrash(true /* allowAccess */,
+                true /* shouldCheckDialogShownValue */, false /* isDialogShownExpected */);
+    }
+
+    private void doMediaEscalation_RequestTrash(boolean allowAccess,
+            boolean shouldCheckDialogShownValue, boolean isDialogShownExpected) throws Exception {
+        doMediaEscalation_RequestTrash(MediaStorageTest::createAudio, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+        doMediaEscalation_RequestTrash(MediaStorageTest::createVideo, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+        doMediaEscalation_RequestTrash(MediaStorageTest::createImage, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+        doMediaEscalation_RequestTrash(MediaStorageTest::createPlaylist, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+        doMediaEscalation_RequestTrash(MediaStorageTest::createSubtitle, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+    }
+
+    private void doMediaEscalation_RequestTrash(Callable<Uri> create, boolean allowAccess,
+            boolean shouldCheckDialogShownValue, boolean isDialogShownExpected) throws Exception {
+        final Uri red = create.call();
+        clearMediaOwner(red, mUserId);
+
         assertEquals("0", queryForSingleColumn(red, MediaColumns.IS_TRASHED));
+
+        if (allowAccess) {
+            doEscalation(MediaStore.createTrashRequest(mContentResolver, Arrays.asList(red), true),
+                    true /* allowAccess */, shouldCheckDialogShownValue, isDialogShownExpected);
+            assertEquals("1", queryForSingleColumn(red, MediaColumns.IS_TRASHED));
+            doEscalation(MediaStore.createTrashRequest(mContentResolver, Arrays.asList(red), false),
+                    true /* allowAccess */, shouldCheckDialogShownValue, isDialogShownExpected);
+            assertEquals("0", queryForSingleColumn(red, MediaColumns.IS_TRASHED));
+        } else {
+            doEscalation(MediaStore.createTrashRequest(mContentResolver, Arrays.asList(red), true),
+                    false /* allowAccess */, shouldCheckDialogShownValue, isDialogShownExpected);
+            assertEquals("0", queryForSingleColumn(red, MediaColumns.IS_TRASHED));
+        }
     }
 
     @Test
@@ -546,23 +647,63 @@
 
     @Test
     public void testMediaEscalation_RequestDelete() throws Exception {
-        doMediaEscalation_RequestDelete(MediaStorageTest::createAudio);
-        doMediaEscalation_RequestDelete(MediaStorageTest::createVideo);
-        doMediaEscalation_RequestDelete(MediaStorageTest::createImage);
-        doMediaEscalation_RequestDelete(MediaStorageTest::createPlaylist);
-        doMediaEscalation_RequestDelete(MediaStorageTest::createSubtitle);
+        doMediaEscalation_RequestDelete(true /* allowAccess */,
+                false /* shouldCheckDialogShownValue */, false /* isDialogShownExpected */);
     }
 
-    private void doMediaEscalation_RequestDelete(Callable<Uri> create) throws Exception {
+    @Test
+    public void testMediaEscalationWithDenied_RequestDelete() throws Exception {
+        doMediaEscalation_RequestDelete(false /* allowAccess */,
+                false /* shouldCheckDialogShownValue */, false /* isDialogShownExpected */);
+    }
+
+    @Test
+    public void testMediaEscalation_RequestDelete_showConfirmDialog() throws Exception {
+        doMediaEscalation_RequestDelete(true /* allowAccess */,
+                true /* shouldCheckDialogShownValue */, true /* isDialogShownExpected */);
+    }
+
+    @Test
+    public void testMediaEscalation_RequestDelete_notShowConfirmDialog() throws Exception {
+        doMediaEscalation_RequestDelete(true /* allowAccess */,
+                true /* shouldCheckDialogShownValue */, false /* isDialogShownExpected */);
+    }
+
+    private void doMediaEscalation_RequestDelete(boolean allowAccess,
+            boolean shouldCheckDialogShownValue, boolean isDialogShownExpected) throws Exception {
+        doMediaEscalation_RequestDelete(MediaStorageTest::createAudio, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+        doMediaEscalation_RequestDelete(MediaStorageTest::createVideo, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+        doMediaEscalation_RequestDelete(MediaStorageTest::createImage, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+        doMediaEscalation_RequestDelete(MediaStorageTest::createPlaylist, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+        doMediaEscalation_RequestDelete(MediaStorageTest::createSubtitle, allowAccess,
+                shouldCheckDialogShownValue, isDialogShownExpected);
+    }
+
+    private void doMediaEscalation_RequestDelete(Callable<Uri> create, boolean allowAccess,
+            boolean shouldCheckDialogShownValue, boolean isDialogShownExpected) throws Exception {
         final Uri red = create.call();
         clearMediaOwner(red, mUserId);
 
         try (Cursor c = mContentResolver.query(red, null, null, null)) {
             assertEquals(1, c.getCount());
         }
-        doEscalation(MediaStore.createDeleteRequest(mContentResolver, Arrays.asList(red)));
-        try (Cursor c = mContentResolver.query(red, null, null, null)) {
-            assertEquals(0, c.getCount());
+
+        if (allowAccess) {
+            doEscalation(MediaStore.createDeleteRequest(mContentResolver, Arrays.asList(red)),
+                    true /* allowAccess */, shouldCheckDialogShownValue, isDialogShownExpected);
+            try (Cursor c = mContentResolver.query(red, null, null, null)) {
+                assertEquals(0, c.getCount());
+            }
+        } else {
+            doEscalation(MediaStore.createDeleteRequest(mContentResolver, Arrays.asList(red)),
+                    false /* allowAccess */, shouldCheckDialogShownValue, isDialogShownExpected);
+            try (Cursor c = mContentResolver.query(red, null, null, null)) {
+                assertEquals(1, c.getCount());
+            }
         }
     }
 
@@ -571,6 +712,12 @@
     }
 
     private void doEscalation(PendingIntent pi) throws Exception {
+        doEscalation(pi, true /* allowAccess */, false /* shouldCheckDialogShownValue */,
+                false /* isDialogShownExpectedExpected */);
+    }
+
+    private void doEscalation(PendingIntent pi, boolean allowAccess,
+            boolean shouldCheckDialogShownValue, boolean isDialogShownExpected) throws Exception {
         // Try launching the action to grant ourselves access
         final Instrumentation inst = InstrumentationRegistry.getInstrumentation();
         final Intent intent = new Intent(inst.getContext(), GetResultActivity.class);
@@ -582,22 +729,43 @@
         device.executeShellCommand("wm dismiss-keyguard");
 
         final GetResultActivity activity = (GetResultActivity) inst.startActivitySync(intent);
-        device.waitForIdle();
+        // Wait for the UI Thread to become idle.
+        inst.waitForIdleSync();
         activity.clearResult();
+        device.waitForIdle();
         activity.startIntentSenderForResult(pi.getIntentSender(), 42, null, 0, 0, 0);
 
         device.waitForIdle();
+        final long timeout = 5_000;
+        if (allowAccess) {
+            // Some dialogs may have granted access automatically, so we're willing
+            // to keep rolling forward if we can't find our grant button
+            final UiSelector grant = new UiSelector().textMatches("(?i)Allow");
+            final boolean grantExists = new UiObject(grant).waitForExists(timeout);
 
-        // Some dialogs may have granted access automatically, so we're willing
-        // to keep rolling forward if we can't find our grant button
-        final UiSelector grant = new UiSelector().textMatches("(?i)Allow");
-        if (new UiObject(grant).waitForExists(2_000)) {
-            device.findObject(grant).click();
+            if (shouldCheckDialogShownValue) {
+                assertThat(grantExists).isEqualTo(isDialogShownExpected);
+            }
+
+            if (grantExists) {
+                device.findObject(grant).click();
+            }
+            final GetResultActivity.Result res = activity.getResult();
+            // Verify that we now have access
+            assertEquals(Activity.RESULT_OK, res.resultCode);
+        } else {
+            // fine the Deny button
+            final UiSelector deny = new UiSelector().textMatches("(?i)Deny");
+            final boolean denyExists = new UiObject(deny).waitForExists(timeout);
+
+            assertThat(denyExists).isTrue();
+
+            device.findObject(deny).click();
+
+            final GetResultActivity.Result res = activity.getResult();
+            // Verify that we don't have access
+            assertEquals(Activity.RESULT_CANCELED, res.resultCode);
         }
-
-        // Verify that we now have access
-        final GetResultActivity.Result res = activity.getResult();
-        assertEquals(Activity.RESULT_OK, res.resultCode);
     }
 
     private static Uri createAudio() throws IOException {
@@ -676,7 +844,7 @@
         final ContentResolver resolver = InstrumentationRegistry.getTargetContext()
                 .getContentResolver();
         try (Cursor c = resolver.query(uri, new String[] { column }, null, null)) {
-            assertEquals(c.getCount(), 1);
+            assertEquals(1, c.getCount());
             assertTrue(c.moveToFirst());
             return c.getString(0);
         }
diff --git a/hostsidetests/appsecurity/test-apps/MultiUserStorageApp/TEST_MAPPING b/hostsidetests/appsecurity/test-apps/MultiUserStorageApp/TEST_MAPPING
index 90a93b0..b08a98e 100644
--- a/hostsidetests/appsecurity/test-apps/MultiUserStorageApp/TEST_MAPPING
+++ b/hostsidetests/appsecurity/test-apps/MultiUserStorageApp/TEST_MAPPING
@@ -1,5 +1,5 @@
 {
-    "presubmit": [
+    "presubmit-large": [
         {
             "name": "CtsAppSecurityHostTestCases",
             "options": [
diff --git a/hostsidetests/appsecurity/test-apps/ReadExternalStorageApp/TEST_MAPPING b/hostsidetests/appsecurity/test-apps/ReadExternalStorageApp/TEST_MAPPING
index 90a93b0..b08a98e 100644
--- a/hostsidetests/appsecurity/test-apps/ReadExternalStorageApp/TEST_MAPPING
+++ b/hostsidetests/appsecurity/test-apps/ReadExternalStorageApp/TEST_MAPPING
@@ -1,5 +1,5 @@
 {
-    "presubmit": [
+    "presubmit-large": [
         {
             "name": "CtsAppSecurityHostTestCases",
             "options": [
diff --git a/hostsidetests/appsecurity/test-apps/SplitApp/feature_rose/lint-baseline.xml b/hostsidetests/appsecurity/test-apps/SplitApp/feature_rose/lint-baseline.xml
new file mode 100644
index 0000000..06f2943
--- /dev/null
+++ b/hostsidetests/appsecurity/test-apps/SplitApp/feature_rose/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+    <issue
+        id="NewApi"
+        message="`android:statusBarColor` requires API level 21 (current min is 4)"
+        errorLine1="        &lt;item name=&quot;android:statusBarColor&quot;>@color/rose_status_bar_color&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/hostsidetests/appsecurity/test-apps/SplitApp/feature_rose/res/values/styles.xml"
+            line="21"
+            column="15"/>
+    </issue>
+
+</issues>
diff --git a/hostsidetests/appsecurity/test-apps/SplitApp/feature_warm/lint-baseline.xml b/hostsidetests/appsecurity/test-apps/SplitApp/feature_warm/lint-baseline.xml
new file mode 100644
index 0000000..5e46a6b
--- /dev/null
+++ b/hostsidetests/appsecurity/test-apps/SplitApp/feature_warm/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+    <issue
+        id="NewApi"
+        message="`android:statusBarColor` requires API level 21 (current min is 4)"
+        errorLine1="        &lt;item name=&quot;android:statusBarColor&quot;>@color/warm_status_bar_color&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/hostsidetests/appsecurity/test-apps/SplitApp/feature_warm/res/values/styles.xml"
+            line="21"
+            column="15"/>
+    </issue>
+
+</issues>
diff --git a/hostsidetests/appsecurity/test-apps/SplitApp/lint-baseline.xml b/hostsidetests/appsecurity/test-apps/SplitApp/lint-baseline.xml
new file mode 100644
index 0000000..8a6a9c6
--- /dev/null
+++ b/hostsidetests/appsecurity/test-apps/SplitApp/lint-baseline.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+    <issue
+        id="NewApi"
+        message="`@android:style/Theme.Material` requires API level 21 (current min is 4)"
+        errorLine1="    &lt;style name=&quot;Theme_Base&quot; parent=&quot;@android:style/Theme.Material&quot;>"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/hostsidetests/appsecurity/test-apps/SplitApp/res/values/styles.xml"
+            line="18"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:navigationBarColor` requires API level 21 (current min is 4)"
+        errorLine1="        &lt;item name=&quot;android:navigationBarColor&quot;>@color/navigation_bar_color&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/hostsidetests/appsecurity/test-apps/SplitApp/res/values/styles.xml"
+            line="21"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:statusBarColor` requires API level 21 (current min is 4)"
+        errorLine1="        &lt;item name=&quot;android:statusBarColor&quot;>@color/status_bar_color&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/hostsidetests/appsecurity/test-apps/SplitApp/res/values/styles.xml"
+            line="22"
+            column="15"/>
+    </issue>
+
+</issues>
diff --git a/hostsidetests/appsecurity/test-apps/StorageStatsApp/src/com/android/cts/storagestatsapp/StorageStatsTest.java b/hostsidetests/appsecurity/test-apps/StorageStatsApp/src/com/android/cts/storagestatsapp/StorageStatsTest.java
index 9ca02fb..3bfa0ec 100644
--- a/hostsidetests/appsecurity/test-apps/StorageStatsApp/src/com/android/cts/storagestatsapp/StorageStatsTest.java
+++ b/hostsidetests/appsecurity/test-apps/StorageStatsApp/src/com/android/cts/storagestatsapp/StorageStatsTest.java
@@ -81,7 +81,7 @@
      * option are enabled.
      */
     public void testVerify() throws Exception {
-        if (Build.VERSION.FIRST_SDK_INT >= Build.VERSION_CODES.P) {
+        if (Build.VERSION.DEVICE_INITIAL_SDK_INT >= Build.VERSION_CODES.P) {
             final StorageStatsManager stats = getContext()
                     .getSystemService(StorageStatsManager.class);
             assertTrue("Devices that first ship with P or newer must enable quotas to "
diff --git a/hostsidetests/appsecurity/test-apps/WriteExternalStorageApp/TEST_MAPPING b/hostsidetests/appsecurity/test-apps/WriteExternalStorageApp/TEST_MAPPING
index 90a93b0..b08a98e 100644
--- a/hostsidetests/appsecurity/test-apps/WriteExternalStorageApp/TEST_MAPPING
+++ b/hostsidetests/appsecurity/test-apps/WriteExternalStorageApp/TEST_MAPPING
@@ -1,5 +1,5 @@
 {
-    "presubmit": [
+    "presubmit-large": [
         {
             "name": "CtsAppSecurityHostTestCases",
             "options": [
diff --git a/hostsidetests/backup/src/android/cts/backup/BaseBackupHostSideTest.java b/hostsidetests/backup/src/android/cts/backup/BaseBackupHostSideTest.java
index 8991d3c..8467272 100644
--- a/hostsidetests/backup/src/android/cts/backup/BaseBackupHostSideTest.java
+++ b/hostsidetests/backup/src/android/cts/backup/BaseBackupHostSideTest.java
@@ -84,6 +84,7 @@
                 getBackupUtils().isBackupEnabled());
         assertEquals("LocalTransport should be selected at this point", LOCAL_TRANSPORT,
                 getCurrentTransport());
+        mBackupUtils.wakeAndUnlockDevice();
     }
 
     protected BackupUtils getBackupUtils() {
diff --git a/hostsidetests/blobstore/Android.bp b/hostsidetests/blobstore/Android.bp
index 6c8055f..61b9972 100644
--- a/hostsidetests/blobstore/Android.bp
+++ b/hostsidetests/blobstore/Android.bp
@@ -55,3 +55,51 @@
     "general-tests"
   ]
 }
+
+android_test_helper_app {
+  name: "CtsBlobStoreHostTestHelperPrivA",
+  srcs:  ["test-apps/BlobStoreHostTestHelper/src/**/*.java"],
+  static_libs: [
+    "compatibility-device-util-axt",
+    "androidx.test.ext.junit",
+    "androidx.test.rules",
+    "BlobStoreTestUtils",
+    "truth-prebuilt",
+    "testng",
+  ],
+  manifest : "test-apps/BlobStoreHostTestHelper/AndroidManifest_withPrivPerm.xml",
+  aaptflags: [
+    "--rename-manifest-package com.android.cts.device.blobA",
+    "--rename-instrumentation-target-package com.android.cts.device.blobA"
+  ],
+  sdk_version: "test_current",
+  // Tag this module as a cts test artifact
+  test_suites: [
+    "cts",
+    "general-tests"
+  ]
+}
+
+android_test_helper_app {
+  name: "CtsBlobStoreHostTestHelperPrivB",
+  srcs:  ["test-apps/BlobStoreHostTestHelper/src/**/*.java"],
+  static_libs: [
+    "compatibility-device-util-axt",
+    "androidx.test.ext.junit",
+    "androidx.test.rules",
+    "BlobStoreTestUtils",
+    "truth-prebuilt",
+    "testng",
+  ],
+  manifest : "test-apps/BlobStoreHostTestHelper/AndroidManifest_withPrivPerm.xml",
+  aaptflags: [
+    "--rename-manifest-package com.android.cts.device.blobB",
+    "--rename-instrumentation-target-package com.android.cts.device.blobB",
+  ],
+  sdk_version: "test_current",
+  // Tag this module as a cts test artifact
+  test_suites: [
+    "cts",
+    "general-tests"
+  ]
+}
diff --git a/hostsidetests/blobstore/AndroidTest.xml b/hostsidetests/blobstore/AndroidTest.xml
index b1b6d63..6460e1f 100644
--- a/hostsidetests/blobstore/AndroidTest.xml
+++ b/hostsidetests/blobstore/AndroidTest.xml
@@ -25,6 +25,9 @@
     </test>
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="test-file-name" value="CtsBlobStoreHostTestHelper.apk" />
+        <option name="test-file-name" value="CtsBlobStoreHostTestHelperPrivA.apk" />
+        <option name="test-file-name" value="CtsBlobStoreHostTestHelperPrivB.apk" />
+        <option name="install-arg" value="-t" />
         <option name="cleanup-apks" value="true" />
     </target_preparer>
 </configuration>
diff --git a/hostsidetests/blobstore/src/com/android/cts/host/blob/BaseBlobStoreHostTest.java b/hostsidetests/blobstore/src/com/android/cts/host/blob/BaseBlobStoreHostTest.java
index 8fefcb2..0ed223f 100644
--- a/hostsidetests/blobstore/src/com/android/cts/host/blob/BaseBlobStoreHostTest.java
+++ b/hostsidetests/blobstore/src/com/android/cts/host/blob/BaseBlobStoreHostTest.java
@@ -30,6 +30,12 @@
     protected static final String TARGET_APK = "CtsBlobStoreHostTestHelper.apk";
     protected static final String TARGET_PKG = "com.android.cts.device.blob";
 
+    protected static final String TARGET_APK_A = "CtsBlobStoreHostTestHelperPrivA.apk";
+    protected static final String TARGET_PKG_A = "com.android.cts.device.blobA";
+
+    protected static final String TARGET_APK_B = "CtsBlobStoreHostTestHelperPrivB.apk";
+    protected static final String TARGET_PKG_B = "com.android.cts.device.blobB";
+
     private static final long TIMEOUT_BOOT_COMPLETE_MS = 120_000;
     private static final long DEFAULT_INSTRUMENTATION_TIMEOUT_MS = 900_000; // 15min
 
diff --git a/hostsidetests/blobstore/src/com/android/cts/host/blob/BlobStoreMultiUserTest.java b/hostsidetests/blobstore/src/com/android/cts/host/blob/BlobStoreMultiUserTest.java
index d8cc1a0..ffd5da4 100644
--- a/hostsidetests/blobstore/src/com/android/cts/host/blob/BlobStoreMultiUserTest.java
+++ b/hostsidetests/blobstore/src/com/android/cts/host/blob/BlobStoreMultiUserTest.java
@@ -45,8 +45,10 @@
         mSecondaryUserId = getDevice().createUser("Test_User");
         assertThat(getDevice().startUser(mSecondaryUserId)).isTrue();
 
-        installPackageAsUser(TARGET_APK, true /* grantPermissions */, mPrimaryUserId);
-        installPackageAsUser(TARGET_APK, true /* grantPermissions */, mSecondaryUserId);
+        for (String apk : new String[] {TARGET_APK, TARGET_APK_A, TARGET_APK_B}) {
+            installPackageAsUser(apk, true /* grantPermissions */, mPrimaryUserId, "-t");
+            installPackageAsUser(apk, true /* grantPermissions */, mSecondaryUserId, "-t");
+        }
     }
 
     @After
@@ -84,4 +86,34 @@
         runDeviceTestAsUser(TARGET_PKG, TEST_CLASS, "testOpenBlob_shouldThrow", args,
                 mSecondaryUserId);
     }
+
+    @Test
+    public void testBlobAccessAcrossUsers() throws Exception {
+        Map<String, String> args = createArgs(Pair.create(KEY_ALLOW_PUBLIC, String.valueOf(1)));
+        // Commit a blob.
+        runDeviceTestAsUser(TARGET_PKG_A, TEST_CLASS, "testCommitBlob", args,
+                mPrimaryUserId);
+        Map<String, String> argsFromLastTestRun = createArgsFromLastTestRun();
+        // Verify that previously committed blob can be accessed.
+        runDeviceTestAsUser(TARGET_PKG, TEST_CLASS, "testOpenBlob", argsFromLastTestRun,
+                mPrimaryUserId);
+        // Verify that previously committed blob cannot be access from another user.
+        runDeviceTestAsUser(TARGET_PKG, TEST_CLASS, "testOpenBlob_shouldThrow", argsFromLastTestRun,
+                mSecondaryUserId);
+
+        // Verify that previously committed blob can be accessed from another user holding
+        // a priv permission.
+        runDeviceTestAsUser(TARGET_PKG_A, TEST_CLASS, "testOpenBlob", argsFromLastTestRun,
+                mSecondaryUserId);
+        runDeviceTestAsUser(TARGET_PKG_B, TEST_CLASS, "testOpenBlob", argsFromLastTestRun,
+                mSecondaryUserId);
+
+        // Recommit the blob on another user
+        argsFromLastTestRun.putAll(args);
+        runDeviceTestAsUser(TARGET_PKG_B, TEST_CLASS, "testRecommitBlob", argsFromLastTestRun,
+                mSecondaryUserId);
+        // Any package on another user should be able to access the blob
+        runDeviceTestAsUser(TARGET_PKG, TEST_CLASS, "testOpenBlob", argsFromLastTestRun,
+                mSecondaryUserId);
+    }
 }
diff --git a/hostsidetests/scopedstorage/signature/AndroidManifest.xml b/hostsidetests/blobstore/test-apps/BlobStoreHostTestHelper/AndroidManifest_withPrivPerm.xml
similarity index 68%
rename from hostsidetests/scopedstorage/signature/AndroidManifest.xml
rename to hostsidetests/blobstore/test-apps/BlobStoreHostTestHelper/AndroidManifest_withPrivPerm.xml
index 1f808f8..fb06cdf 100644
--- a/hostsidetests/scopedstorage/signature/AndroidManifest.xml
+++ b/hostsidetests/blobstore/test-apps/BlobStoreHostTestHelper/AndroidManifest_withPrivPerm.xml
@@ -14,16 +14,16 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="android.scopedstorage.cts.signature" >
-    <uses-permission android:name="android.permission.ACCESS_MTP" />
-    <application>
+          package="com.android.cts.device.blob">
+
+    <uses-permission android:name="android.permission.ACCESS_BLOBS_ACROSS_USERS" />
+
+    <application android:testOnly="true">
         <uses-library android:name="android.test.runner" />
     </application>
 
-    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
-                     android:targetPackage="android.scopedstorage.cts.signature"
-                     android:label="Signature app tests for scoped storage"/>
-
-</manifest>
+    <instrumentation
+            android:name="androidx.test.runner.AndroidJUnitRunner"
+            android:targetPackage="com.android.cts.device.blob"  />
+</manifest>
\ No newline at end of file
diff --git a/hostsidetests/blobstore/test-apps/BlobStoreHostTestHelper/src/com/android/cts/device/blob/DataCleanupTest.java b/hostsidetests/blobstore/test-apps/BlobStoreHostTestHelper/src/com/android/cts/device/blob/DataCleanupTest.java
index b01be92..03d16cc 100644
--- a/hostsidetests/blobstore/test-apps/BlobStoreHostTestHelper/src/com/android/cts/device/blob/DataCleanupTest.java
+++ b/hostsidetests/blobstore/test-apps/BlobStoreHostTestHelper/src/com/android/cts/device/blob/DataCleanupTest.java
@@ -26,6 +26,7 @@
 import android.os.ParcelFileDescriptor;
 
 import com.android.utils.blob.FakeBlobData;
+import com.android.utils.blob.Utils;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -116,6 +117,28 @@
                 () -> mBlobStoreManager.openBlob(blobHandle));
     }
 
+    @Test
+    public void testRecommitBlob() throws Exception {
+        final BlobHandle blobHandle = getBlobHandleFromArgs();
+        try (ParcelFileDescriptor pfd = mBlobStoreManager.openBlob(blobHandle)) {
+            assertThat(pfd).isNotNull();
+
+            final long sessionId = createSession(blobHandle);
+            assertThat(sessionId).isGreaterThan(0L);
+            try (BlobStoreManager.Session session = mBlobStoreManager.openSession(sessionId)) {
+                Utils.writeToSession(session, pfd);
+                if (getShouldAllowPublicFromArgs()) {
+                    session.allowPublicAccess();
+                }
+
+                final CompletableFuture<Integer> callback = new CompletableFuture<>();
+                session.commit(mContext.getMainExecutor(), callback::complete);
+                assertThat(callback.get(TIMEOUT_COMMIT_CALLBACK_MS, TimeUnit.MILLISECONDS))
+                        .isEqualTo(0);
+            }
+        }
+    }
+
     private void addSessionIdToResults(long sessionId) {
         final Bundle results = new Bundle();
         results.putLong(KEY_SESSION_ID, sessionId);
diff --git a/hostsidetests/calllog/app/src/android/provider/cts/contacts/testapp/CallLogDirectBootTest.java b/hostsidetests/calllog/app/src/android/provider/cts/contacts/testapp/CallLogDirectBootTest.java
index d16f0bd..d8ca24f 100644
--- a/hostsidetests/calllog/app/src/android/provider/cts/contacts/testapp/CallLogDirectBootTest.java
+++ b/hostsidetests/calllog/app/src/android/provider/cts/contacts/testapp/CallLogDirectBootTest.java
@@ -63,7 +63,8 @@
             Pair<Uri, CallLog.CallComposerLoggingException> result;
             try (InputStream inputStream =
                          mDe.getResources().openRawResource(R.drawable.cupcake)) {
-                CallLog.storeCallComposerPictureAsUser(mDe, android.os.Process.myUserHandle(),
+                CallLog.storeCallComposerPicture(
+                        mDe.createContextAsUser(android.os.Process.myUserHandle(), 0),
                         inputStream,
                         Executors.newSingleThreadExecutor(),
                         new OutcomeReceiver<Uri, CallLog.CallComposerLoggingException>() {
diff --git a/hostsidetests/calllog/src/android/provider/cts/contacts/hostside/ShadowCallLogTest.java b/hostsidetests/calllog/src/android/provider/cts/contacts/hostside/ShadowCallLogTest.java
index 086cf80..272a3df 100644
--- a/hostsidetests/calllog/src/android/provider/cts/contacts/hostside/ShadowCallLogTest.java
+++ b/hostsidetests/calllog/src/android/provider/cts/contacts/hostside/ShadowCallLogTest.java
@@ -29,12 +29,14 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import java.io.File;
 
 @RunWith(DeviceJUnit4ClassRunner.class)
+@Ignore("Runtime too long and may lock up device when it fails")
 public class ShadowCallLogTest extends BaseHostJUnit4Test {
     private static final String TAG = ShadowCallLogTest.class.getSimpleName();
 
diff --git a/hostsidetests/classloaders/useslibrary/app/src/com/android/cts/useslibrary/UsesLibraryTest.java b/hostsidetests/classloaders/useslibrary/app/src/com/android/cts/useslibrary/UsesLibraryTest.java
index 7f8f53e..7fdf2dc 100644
--- a/hostsidetests/classloaders/useslibrary/app/src/com/android/cts/useslibrary/UsesLibraryTest.java
+++ b/hostsidetests/classloaders/useslibrary/app/src/com/android/cts/useslibrary/UsesLibraryTest.java
@@ -47,7 +47,8 @@
     }
 
     /**
-     * Verify that we punt to run from apk when the shared libraries are missing.
+     * Verify that we still use an oat file (backed by a vdex-only file) when the shared
+     * libraries are missing.
      */
     public void testMissingLibrary() throws Exception {
         ClassLoader loader = getClass().getClassLoader();
@@ -59,12 +60,13 @@
             assertTrue(testDexElements != null && testDexElements.length == 1);
 
             DexFile testDexFile = getDexFileFromDexElement(testDexElements[0]);
-            assertFalse(isDexFileBackedByOatFile(testDexFile));
+            assertTrue(isDexFileBackedByOatFile(testDexFile));
         }
     }
 
     /**
-     * Verify that we punt to run from apk if the classpath generates a class collision failure.
+     * Verify that we still use an oat file (backed by a vdex-only file) if the classpath generates
+     * a class collision failure.
      */
     public void testDuplicateLibrary() throws Exception {
         ClassLoader loader = getClass().getClassLoader();
@@ -87,7 +89,7 @@
             assertEquals(Arrays.toString(testDexElements), 2, testDexElements.length);
 
             DexFile testDexFile = getDexFileFromDexElement(testDexElements[1]);
-            assertFalse(isDexFileBackedByOatFile(testDexFile));
+            assertTrue(isDexFileBackedByOatFile(testDexFile));
         }
     }
 
diff --git a/hostsidetests/devicepolicy/app/CertInstaller/src/com/android/cts/certinstaller/DirectDelegatedCertInstallerTest.java b/hostsidetests/devicepolicy/app/CertInstaller/src/com/android/cts/certinstaller/DirectDelegatedCertInstallerTest.java
index caa08f7..fa7a21e 100644
--- a/hostsidetests/devicepolicy/app/CertInstaller/src/com/android/cts/certinstaller/DirectDelegatedCertInstallerTest.java
+++ b/hostsidetests/devicepolicy/app/CertInstaller/src/com/android/cts/certinstaller/DirectDelegatedCertInstallerTest.java
@@ -31,6 +31,7 @@
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.os.Build;
+import android.os.Process;
 import android.security.AttestedKeyPair;
 import android.security.KeyChain;
 import android.security.keystore.KeyGenParameterSpec;
@@ -51,6 +52,7 @@
 import java.security.cert.CertificateFactory;
 import java.security.spec.PKCS8EncodedKeySpec;
 import java.util.List;
+import java.util.Map;
 
 /*
  * Tests the delegated certificate installer functionality.
@@ -236,7 +238,7 @@
                 /* requestAccess= */ true);
 
         assertThat(mDpm.getKeyPairGrants(TEST_ALIAS))
-                .isEqualTo(singleton(singleton(getContext().getPackageName())));
+                .isEqualTo(Map.of(Process.myUid(), singleton(getContext().getPackageName())));
     }
 
     public void testIsWifiGrant_default() {
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/latest/AndroidManifest.xml b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/latest/AndroidManifest.xml
index 2af83d7..e691e20 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/latest/AndroidManifest.xml
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/latest/AndroidManifest.xml
@@ -31,6 +31,7 @@
     <uses-permission android:name="android.permission.SET_WALLPAPER"/>
     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
     <uses-permission android:name="android.permission.CAMERA"/>
+    <uses-permission android:name="android.permission.MODIFY_QUIET_MODE"/>
     <!-- Needed to read the serial number during Device ID attestation tests -->
     <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
     <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/DevicePolicyLoggingTest.java b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/DevicePolicyLoggingTest.java
index 3acce6e..22c17a2 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/DevicePolicyLoggingTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/DevicePolicyLoggingTest.java
@@ -186,9 +186,9 @@
         mDevicePolicyManager.setUninstallBlocked(ADMIN_RECEIVER_COMPONENT, PACKAGE_NAME, false);
     }
 
-    public void testSetEnterpriseNetworkPreferenceEnabledLogged() {
-        mDevicePolicyManager.setEnterpriseNetworkPreferenceEnabled(true);
-        mDevicePolicyManager.setEnterpriseNetworkPreferenceEnabled(false);
+    public void testSetPreferentialNetworkServiceEnabledLogged() {
+        mDevicePolicyManager.setPreferentialNetworkServiceEnabled(true);
+        mDevicePolicyManager.setPreferentialNetworkServiceEnabled(false);
     }
 
     public void testDisallowAdjustVolumeMutedLogged() {
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/KeyManagementTest.java b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/KeyManagementTest.java
index 8b464fe..95d6b9c 100755
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/KeyManagementTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/KeyManagementTest.java
@@ -37,6 +37,7 @@
 import android.keystore.cts.AuthorizationList;
 import android.net.Uri;
 import android.os.Build;
+import android.os.Process;
 import android.security.AttestedKeyPair;
 import android.security.KeyChain;
 import android.security.KeyChainAliasCallback;
@@ -49,8 +50,6 @@
 
 import com.android.compatibility.common.util.FakeKeys.FAKE_RSA_1;
 
-import com.google.common.collect.Sets;
-
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -74,6 +73,8 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -755,7 +756,6 @@
         }
     }
 
-
     public void testCanSetKeyPairCert() throws Exception {
         final String alias = "com.android.test.set-ec-1";
         try {
@@ -854,7 +854,7 @@
                 TEST_ALIAS, /* requestAccess= */ true);
 
         assertThat(mDevicePolicyManager.getKeyPairGrants(TEST_ALIAS))
-                .isEqualTo(singleton(singleton(getWho().getPackageName())));
+                .isEqualTo(Map.of(Process.myUid(), singleton(getWho().getPackageName())));
     }
 
     public void testGetKeyPairGrants_GrantedExplicitly() {
@@ -863,7 +863,7 @@
         mDevicePolicyManager.grantKeyPairToApp(getWho(), TEST_ALIAS, getWho().getPackageName());
 
         assertThat(mDevicePolicyManager.getKeyPairGrants(TEST_ALIAS))
-                .isEqualTo(singleton(singleton(getWho().getPackageName())));
+                .isEqualTo(Map.of(Process.myUid(), singleton(getWho().getPackageName())));
     }
 
     public void testGetKeyPairGrants_Revoked() {
@@ -874,23 +874,27 @@
         assertThat(mDevicePolicyManager.getKeyPairGrants(TEST_ALIAS)).isEmpty();
     }
 
-    public void testGetKeyPairGrants_SharedUid() {
+    public void testGetKeyPairGrants_SharedUid() throws Exception {
         mDevicePolicyManager.installKeyPair(getWho(), mFakePrivKey, new Certificate[]{mFakeCert},
                 TEST_ALIAS, /* requestAccess= */ false);
         mDevicePolicyManager.grantKeyPairToApp(getWho(), TEST_ALIAS, SHARED_UID_APP1_PKG);
+        final int sharedUid = mContext.getPackageManager()
+                .getApplicationInfo(SHARED_UID_APP1_PKG, 0).uid;
 
         assertThat(mDevicePolicyManager.getKeyPairGrants(TEST_ALIAS))
-                .isEqualTo(singleton(Sets.newHashSet(SHARED_UID_APP1_PKG, SHARED_UID_APP2_PKG)));
+                .isEqualTo(Map.of(sharedUid, Set.of(SHARED_UID_APP1_PKG, SHARED_UID_APP2_PKG)));
     }
 
-    public void testGetKeyPairGrants_DifferentUids() {
+    public void testGetKeyPairGrants_DifferentUids() throws Exception {
         mDevicePolicyManager.installKeyPair(getWho(), mFakePrivKey, new Certificate[]{mFakeCert},
                 TEST_ALIAS, /* requestAccess= */ true);
         mDevicePolicyManager.grantKeyPairToApp(getWho(), TEST_ALIAS, SHARED_UID_APP1_PKG);
+        final int sharedUid = mContext.getPackageManager()
+                .getApplicationInfo(SHARED_UID_APP1_PKG, 0).uid;
 
-        assertThat(mDevicePolicyManager.getKeyPairGrants(TEST_ALIAS)).isEqualTo(Sets.newHashSet(
-                Sets.newHashSet(SHARED_UID_APP1_PKG, SHARED_UID_APP2_PKG),
-                singleton(getWho().getPackageName())));
+        assertThat(mDevicePolicyManager.getKeyPairGrants(TEST_ALIAS)).isEqualTo(Map.of(
+                Process.myUid(), singleton(getWho().getPackageName()),
+                sharedUid, Set.of(SHARED_UID_APP1_PKG, SHARED_UID_APP2_PKG)));
     }
 
     public void testIsWifiGrant_default() {
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/LockTaskTest.java b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/LockTaskTest.java
index 5ab2307..35e3ee2 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/LockTaskTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/LockTaskTest.java
@@ -24,6 +24,8 @@
 import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW;
 import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_SYSTEM_INFO;
 
+import static com.google.common.truth.Truth.assertWithMessage;
+
 import static org.junit.Assert.assertArrayEquals;
 import static org.testng.Assert.assertThrows;
 
@@ -43,9 +45,10 @@
 import android.view.KeyEvent;
 
 import androidx.test.InstrumentationRegistry;
-import androidx.test.runner.AndroidJUnit4;
 
 import java.time.Duration;
+import java.util.HashSet;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 public class LockTaskTest extends BaseDeviceAdminTest {
@@ -179,6 +182,48 @@
         assertFalse(mDevicePolicyManager.isLockTaskPermitted(TEST_PACKAGE));
     }
 
+    // When OEM defines policy-exempt apps, they are permitted on lock task mode
+    public void testIsLockTaskPermittedIncludesPolicyExemptApps() {
+        Set<String> policyExemptApps = mDevicePolicyManager.getPolicyExemptApps();
+        if (policyExemptApps.isEmpty()) {
+            Log.v(TAG, "OEM doesn't define any policy-exempt app");
+            return;
+        }
+
+        for (String app : policyExemptApps) {
+            assertWithMessage("isLockTaskPermitted(%s)", app)
+                    .that(mDevicePolicyManager.isLockTaskPermitted(app)).isTrue();
+        }
+    }
+
+    // Setting and unsetting the lock task packages when the OEM defines policy-exempt apps
+    public void testSetLockTaskPackagesIgnoresExemptApps() {
+        Set<String> policyExemptApps = mDevicePolicyManager.getPolicyExemptApps();
+        if (policyExemptApps.isEmpty()) {
+            Log.v(TAG, "OEM doesn't define any policy exempt app");
+            return;
+        }
+
+        assertWithMessage("lock task packages initially")
+                .that(mDevicePolicyManager.getLockTaskPackages(ADMIN_COMPONENT)).isEmpty();
+
+
+        String[] packages = new String[] { TEST_PACKAGE };
+        Set<String> expectedLockTaskPackages = new HashSet<>(policyExemptApps);
+        expectedLockTaskPackages.add(TEST_PACKAGE);
+
+        mDevicePolicyManager.setLockTaskPackages(ADMIN_COMPONENT, packages);
+
+        assertWithMessage("lock task packages after adding %s", TEST_PACKAGE)
+                .that(mDevicePolicyManager.getLockTaskPackages(ADMIN_COMPONENT)).asList()
+                .containsExactlyElementsIn(expectedLockTaskPackages);
+
+
+        mDevicePolicyManager.setLockTaskPackages(ADMIN_COMPONENT, new String[0]);
+        assertWithMessage("lock task packages after reset")
+                .that(mDevicePolicyManager.getLockTaskPackages(ADMIN_COMPONENT)).isEmpty();
+    }
+
     // Setting and unsetting the lock task features. The actual UI behavior is tested with CTS
     // verifier.
     public void testSetLockTaskFeatures() {
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/PersonalAppsSuspensionTest.java b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/PersonalAppsSuspensionTest.java
index e4f97fa..6fcd364 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/PersonalAppsSuspensionTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/PersonalAppsSuspensionTest.java
@@ -26,6 +26,9 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.SharedPreferences;
+import android.os.Process;
+import android.os.UserHandle;
+import android.os.UserManager;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
@@ -33,6 +36,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -69,6 +73,28 @@
     }
 
     @Test
+    public void testEnableQuietMode() {
+        requestQuietModeEnabledForProfile(true);
+    }
+
+    @Test
+    public void testDisableQuietMode() {
+        requestQuietModeEnabledForProfile(false);
+    }
+
+    private void requestQuietModeEnabledForProfile(boolean enabled) {
+        final UserManager userManager = UserManager.get(mContext);
+        final List<UserHandle> users = userManager.getUserProfiles();
+
+        // Should get primary user itself and its profile.
+        assertThat(users.size()).isEqualTo(2);
+        final UserHandle profileHandle =
+                users.get(0).equals(Process.myUserHandle()) ? users.get(1) : users.get(0);
+
+        userManager.requestQuietModeEnabled(enabled, profileHandle);
+    }
+
+    @Test
     public void testComplianceAcknowledgementRequiredReceived() {
         final SharedPreferences pref =
                 mContext.getSharedPreferences(COMPLIANCE_ACK_PREF_NAME, Context.MODE_PRIVATE);
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/EnterpriseNetworkPreferenceStatusTest.java b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/PreferentialNetworkServiceStatusTest.java
similarity index 61%
rename from hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/EnterpriseNetworkPreferenceStatusTest.java
rename to hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/PreferentialNetworkServiceStatusTest.java
index b118b2d..191704a 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/EnterpriseNetworkPreferenceStatusTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/PreferentialNetworkServiceStatusTest.java
@@ -19,8 +19,8 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class EnterpriseNetworkPreferenceStatusTest extends BaseDeviceAdminTest {
-    private static final String TAG = "EnterpriseNetworkPreferenceStatusTest";
+public class PreferentialNetworkServiceStatusTest extends BaseDeviceAdminTest {
+    private static final String TAG = "PreferentialNetworkServiceStatusTest";
 
     @Override
     public void setUp() throws Exception {
@@ -32,14 +32,14 @@
         super.tearDown();
     }
 
-    public void testGetSetEnterpriseNetworkPreferenceStatus() throws Exception {
+    public void testGetSetPreferentialNetworkServiceStatus() throws Exception {
         // Assert default status is true
-        assertTrue(mDevicePolicyManager.isEnterpriseNetworkPreferenceEnabled());
+        assertTrue(mDevicePolicyManager.isPreferentialNetworkServiceEnabled());
 
-        mDevicePolicyManager.setEnterpriseNetworkPreferenceEnabled(false);
-        assertFalse(mDevicePolicyManager.isEnterpriseNetworkPreferenceEnabled());
+        mDevicePolicyManager.setPreferentialNetworkServiceEnabled(false);
+        assertFalse(mDevicePolicyManager.isPreferentialNetworkServiceEnabled());
 
-        mDevicePolicyManager.setEnterpriseNetworkPreferenceEnabled(true);
-        assertTrue(mDevicePolicyManager.isEnterpriseNetworkPreferenceEnabled());
+        mDevicePolicyManager.setPreferentialNetworkServiceEnabled(true);
+        assertTrue(mDevicePolicyManager.isPreferentialNetworkServiceEnabled());
     }
 }
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/ResetPasswordWithTokenTest.java b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/ResetPasswordWithTokenTest.java
index b1f5f9f..a1ccb12 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/ResetPasswordWithTokenTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/ResetPasswordWithTokenTest.java
@@ -351,7 +351,7 @@
         resetComplexPasswordRestrictions();
 
         String caseDescription = "minimum Letters=0";
-        assertPasswordSucceeds("1234", caseDescription);
+        assertPasswordFails("1234", caseDescription); // Numeric PIN not allowed
         assertPasswordSucceeds("a123", caseDescription);
         assertPasswordSucceeds("abc1", caseDescription);
         assertPasswordSucceeds("abcd", caseDescription);
@@ -390,7 +390,7 @@
         assertPasswordSucceeds("abcd", caseDescription);
         assertPasswordSucceeds("1abc", caseDescription);
         assertPasswordSucceeds("123a", caseDescription);
-        assertPasswordSucceeds("1234", caseDescription);
+        assertPasswordFails("1234", caseDescription); // Numeric PIN not allowed
         assertPasswordFails("123", caseDescription); // too short
 
         mDevicePolicyManager.setPasswordMinimumNumeric(ADMIN_RECEIVER_COMPONENT, 1);
@@ -399,7 +399,7 @@
         assertPasswordFails("abcd", caseDescription);
         assertPasswordSucceeds("1abc", caseDescription);
         assertPasswordSucceeds("123a", caseDescription);
-        assertPasswordSucceeds("1234", caseDescription);
+        assertPasswordFails("1234", caseDescription); // Numeric PIN not allowed
         assertPasswordFails("123", caseDescription); // too short
 
         mDevicePolicyManager.setPasswordMinimumNumeric(ADMIN_RECEIVER_COMPONENT, 3);
@@ -408,7 +408,7 @@
         assertPasswordFails("abcd", caseDescription);
         assertPasswordFails("1abc", caseDescription);
         assertPasswordSucceeds("123a", caseDescription);
-        assertPasswordSucceeds("1234", caseDescription);
+        assertPasswordFails("1234", caseDescription); // Numeric PIN not allowed
         assertPasswordFails("123", caseDescription); // too short
     }
 
diff --git a/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/AdminActionBookkeepingTest.java b/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/AdminActionBookkeepingTest.java
index 9fc7078..401a2e7 100644
--- a/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/AdminActionBookkeepingTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/AdminActionBookkeepingTest.java
@@ -15,21 +15,33 @@
  */
 package com.android.cts.deviceowner;
 
+import static com.google.common.truth.Truth.assertWithMessage;
+
 import android.app.PendingIntent;
 import android.content.ContentResolver;
 import android.os.Process;
+import android.os.UserHandle;
 import android.provider.Settings;
+import android.util.Log;
 
 import com.android.cts.devicepolicy.TestCertificates;
 
+import com.google.common.collect.Range;
+
 import java.io.ByteArrayInputStream;
 import java.security.KeyStore;
 import java.security.cert.Certificate;
 import java.security.cert.CertificateFactory;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
 public class AdminActionBookkeepingTest extends BaseDeviceOwnerTest {
+
+    private static final String TAG = AdminActionBookkeepingTest.class.getSimpleName();
+
+    private static final int NOTIFICATION_TIMEOUT_MS = 5 * 60_000; // 5 minutes
+
     @Override
     protected void tearDown() throws Exception {
         mDevicePolicyManager.setSecurityLoggingEnabled(getWho(), false);
@@ -43,7 +55,9 @@
      * Test: Retrieving security logs should update the corresponding timestamp.
      */
     public void testRetrieveSecurityLogs() throws Exception {
-        Thread.sleep(1);
+        Log.i(TAG, "testRetrieveSecurityLogs()");
+
+        sleep(1);
         final long previousTimestamp = mDevicePolicyManager.getLastSecurityLogRetrievalTime();
 
         mDevicePolicyManager.setSecurityLoggingEnabled(getWho(), true);
@@ -53,11 +67,10 @@
         long timeAfter = System.currentTimeMillis();
 
         final long firstTimestamp = mDevicePolicyManager.getLastSecurityLogRetrievalTime();
-        assertTrue(firstTimestamp > previousTimestamp);
-        assertTrue(firstTimestamp >= timeBefore);
-        assertTrue(firstTimestamp <= timeAfter);
 
-        Thread.sleep(2);
+        assertTimeStamps(timeBefore, previousTimestamp, firstTimestamp, timeAfter);
+
+        sleep(2);
         timeBefore = System.currentTimeMillis();
         final boolean preBootSecurityLogsRetrieved =
                 mDevicePolicyManager.retrievePreRebootSecurityLogs(getWho()) != null;
@@ -67,13 +80,12 @@
         if (preBootSecurityLogsRetrieved) {
             // If the device supports pre-boot security logs, verify that retrieving them updates
             // the timestamp.
-            assertTrue(secondTimestamp > firstTimestamp);
-            assertTrue(secondTimestamp >= timeBefore);
-            assertTrue(secondTimestamp <= timeAfter);
+            assertTimeStamps(timeBefore, firstTimestamp, secondTimestamp, timeAfter);
         } else {
             // If the device does not support pre-boot security logs, verify that the attempt to
             // retrieve them does not update the timestamp.
-            assertEquals(firstTimestamp, secondTimestamp);
+            assertWithMessage("timestamp when device does not support pre-boot security logs")
+                    .that(firstTimestamp).isEqualTo(secondTimestamp);
         }
     }
 
@@ -81,11 +93,13 @@
      * Test: Requesting a bug report should update the corresponding timestamp.
      */
     public void testRequestBugreport() throws Exception {
+        Log.i(TAG, "testRequestBugreport()");
+
         // This test leaves a notification which will block future tests that request bug reports
         // to fix this - we dismiss the bug report before returning
         CountDownLatch notificationDismissedLatch = initTestRequestBugreport();
 
-        Thread.sleep(1);
+        sleep(1);
         final long previousTimestamp = mDevicePolicyManager.getLastBugReportRequestTime();
 
         final long timeBefore = System.currentTimeMillis();
@@ -93,9 +107,7 @@
         final long timeAfter = System.currentTimeMillis();
 
         final long newTimestamp = mDevicePolicyManager.getLastBugReportRequestTime();
-        assertTrue(newTimestamp > previousTimestamp);
-        assertTrue(newTimestamp >= timeBefore);
-        assertTrue(newTimestamp <= timeAfter);
+        assertTimeStamps(timeBefore, previousTimestamp, newTimestamp, timeAfter);
 
         cleanupTestRequestBugreport(notificationDismissedLatch);
     }
@@ -103,6 +115,7 @@
     private CountDownLatch initTestRequestBugreport() {
         CountDownLatch notificationDismissedLatch = new CountDownLatch(1);
         NotificationListener.getInstance().addListener((sbt) -> {
+            Log.i(TAG, "Received notification: " + sbt);
             // The notification we are looking for is the one which confirms the bug report is
             // ready and asks for consent to send it
             if (sbt.getPackageName().equals("android") &&
@@ -113,7 +126,9 @@
                     sbt.getNotification().actions[0].actionIntent.send();
                     notificationDismissedLatch.countDown();
                 } catch (PendingIntent.CanceledException e) {
-                    fail("Could not dismiss bug report notification");
+                    String msg = "Could not dismiss bug report notification";
+                    Log.e(TAG, msg, e);
+                    fail(msg);
                 }
             }
         });
@@ -122,7 +137,13 @@
 
     private void cleanupTestRequestBugreport(CountDownLatch notificationDismissedLatch)
             throws Exception {
-        notificationDismissedLatch.await();
+        Log.d(TAG, "Waiting " + NOTIFICATION_TIMEOUT_MS + "ms for bugreport notification");
+        if (!notificationDismissedLatch.await(NOTIFICATION_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
+            String msg = "Didn't receive bugreport notification in " + NOTIFICATION_TIMEOUT_MS
+                    + " ms";
+            Log.e(TAG, msg);
+            fail(msg);
+        }
         NotificationListener.getInstance().clearListeners();
     }
 
@@ -130,7 +151,9 @@
      * Test: Retrieving network logs should update the corresponding timestamp.
      */
     public void testGetLastNetworkLogRetrievalTime() throws Exception {
-        Thread.sleep(1);
+        Log.i(TAG, "testGetLastNetworkLogRetrievalTime()");
+
+        sleep(1);
         final long previousTimestamp = mDevicePolicyManager.getLastSecurityLogRetrievalTime();
 
         mDevicePolicyManager.setNetworkLoggingEnabled(getWho(), true);
@@ -140,9 +163,7 @@
         long timeAfter = System.currentTimeMillis();
 
         final long newTimestamp = mDevicePolicyManager.getLastNetworkLogRetrievalTime();
-        assertTrue(newTimestamp > previousTimestamp);
-        assertTrue(newTimestamp >= timeBefore);
-        assertTrue(newTimestamp <= timeAfter);
+        assertTimeStamps(timeBefore, previousTimestamp, newTimestamp, timeAfter);
     }
 
     /**
@@ -150,48 +171,63 @@
      * managing the device.
      */
     public void testDeviceOwnerOrganizationName() throws Exception {
+        Log.i(TAG, "testDeviceOwnerOrganizationName()");
+
         mDevicePolicyManager.setOrganizationName(getWho(), null);
-        assertNull(mDevicePolicyManager.getDeviceOwnerOrganizationName());
+        assertWithMessage("dpm.getDeviceOwnerOrganizationName()")
+                .that(mDevicePolicyManager.getDeviceOwnerOrganizationName()).isNull();
 
         mDevicePolicyManager.setOrganizationName(getWho(), "organization");
-        assertEquals("organization", mDevicePolicyManager.getDeviceOwnerOrganizationName());
+        assertWithMessage("dpm.getDeviceOwnerOrganizationName()")
+                .that(mDevicePolicyManager.getDeviceOwnerOrganizationName())
+                .isEqualTo("organization");
 
         mDevicePolicyManager.setOrganizationName(getWho(), null);
-        assertNull(mDevicePolicyManager.getDeviceOwnerOrganizationName());
+        assertWithMessage("dpm.getDeviceOwnerOrganizationName()")
+                .that(mDevicePolicyManager.getDeviceOwnerOrganizationName()).isNull();
     }
 
     /**
      * Test: When a Device Owner is set, isDeviceManaged() should return true.
      */
     public void testIsDeviceManaged() throws Exception {
-        assertTrue(mDevicePolicyManager.isDeviceManaged());
+        Log.i(TAG, "testIsDeviceManaged()");
+
+        assertWithMessage("dpm.isDeviceManaged()").that(mDevicePolicyManager.isDeviceManaged())
+                .isTrue();
     }
 
     /**
      * Test: It should be recored whether the Device Owner or the user set the current IME.
      */
     public void testIsDefaultInputMethodSet() throws Exception {
-        final String setting = Settings.Secure.DEFAULT_INPUT_METHOD;
-        final ContentResolver resolver = getContext().getContentResolver();
-        final String ime = Settings.Secure.getString(resolver, setting);
+        Log.i(TAG, "testIsDefaultInputMethodSet()");
 
-        Settings.Secure.putString(resolver, setting, "com.test.1");
-        Thread.sleep(500);
-        assertFalse(mDevicePolicyManager.isCurrentInputMethodSetByOwner());
+        final String setting = Settings.Secure.DEFAULT_INPUT_METHOD;
+        final String ime = getSecureSettings(setting);
+
+        setSecureSettings(setting, "com.test.1");
+        sleep(500);
+        assertWithMessage("dpm.isCurrentInputMethodSetByOwner()")
+                .that(mDevicePolicyManager.isCurrentInputMethodSetByOwner()).isFalse();
 
         mDevicePolicyManager.setSecureSetting(getWho(), setting, "com.test.2");
-        Thread.sleep(500);
-        assertTrue(mDevicePolicyManager.isCurrentInputMethodSetByOwner());
+        sleep(500);
+        assertWithMessage("%s.isCurrentInputMethodSetByOwner()", mDevicePolicyManager)
+                .that(mDevicePolicyManager.isCurrentInputMethodSetByOwner()).isTrue();
 
-        Settings.Secure.putString(resolver, setting, ime);
-        Thread.sleep(500);
-        assertFalse(mDevicePolicyManager.isCurrentInputMethodSetByOwner());
+        setSecureSettings(setting, ime);
+        sleep(500);
+        assertWithMessage("%s.isCurrentInputMethodSetByOwner()", mDevicePolicyManager)
+                .that(mDevicePolicyManager.isCurrentInputMethodSetByOwner()).isFalse();
     }
 
     /**
      * Test: It should be recored whether the Device Owner or the user installed a CA cert.
      */
     public void testGetPolicyInstalledCaCerts() throws Exception {
+        Log.i(TAG, "testGetPolicyInstalledCaCerts()");
+
         final byte[] rawCert = TestCertificates.TEST_CA.getBytes();
         final Certificate cert = CertificateFactory.getInstance("X.509")
                 .generateCertificate(new ByteArrayInputStream(rawCert));
@@ -199,10 +235,12 @@
         // Install a CA cert.
         KeyStore keyStore = KeyStore.getInstance("AndroidCAStore");
         keyStore.load(null, null);
-        assertNull(keyStore.getCertificateAlias(cert));
-        assertTrue(mDevicePolicyManager.installCaCert(getWho(), rawCert));
+        assertWithMessage("keystore.getCertificateAlias()").that(keyStore.getCertificateAlias(cert))
+                .isNull();
+        assertWithMessage("dpm.installCaCert()")
+                .that(mDevicePolicyManager.installCaCert(getWho(), rawCert)).isTrue();
         final String alias = keyStore.getCertificateAlias(cert);
-        assertNotNull(alias);
+        assertWithMessage("keystore.getCertificateAlias()").that(alias).isNotNull();
 
         // Verify that the CA cert was marked as installed by the Device Owner.
         verifyOwnerInstalledStatus(alias, true);
@@ -215,9 +253,44 @@
     }
 
     private void verifyOwnerInstalledStatus(String alias, boolean expectOwnerInstalled) {
+        final UserHandle user = Process.myUserHandle();
         final List<String> ownerInstalledCerts =
-                mDevicePolicyManager.getOwnerInstalledCaCerts(Process.myUserHandle());
-        assertNotNull(ownerInstalledCerts);
-        assertEquals(expectOwnerInstalled, ownerInstalledCerts.contains(alias));
+                mDevicePolicyManager.getOwnerInstalledCaCerts(user);
+        assertWithMessage("dpm.getOwnerInstalledCaCerts(%s)", user).that(ownerInstalledCerts)
+                .isNotNull();
+        if (expectOwnerInstalled) {
+            assertWithMessage("dpm.getOwnerInstalledCaCerts(%s)", user).that(ownerInstalledCerts)
+                    .contains(alias);
+        } else {
+            assertWithMessage("dpm.getOwnerInstalledCaCerts(%s)", user).that(ownerInstalledCerts)
+                    .doesNotContain(alias);
+        }
+    }
+
+    private void sleep(int durationMs) throws InterruptedException {
+        Log.v(TAG, "Sleeping for " + durationMs + " ms on thread " + Thread.currentThread());
+        Thread.sleep(durationMs);
+        Log.v(TAG, "Woke up");
+    }
+
+    private void assertTimeStamps(long before, long timeStamp1, long timeStamp2, long after) {
+        assertWithMessage("first and second timestamp order").that(timeStamp2)
+                .isGreaterThan(timeStamp1);
+        assertWithMessage("second timestamp range").that(timeStamp2)
+                .isIn(Range.closed(before, after));
+    }
+
+    private void setSecureSettings(String name, String value) {
+        final ContentResolver resolver = getContext().getContentResolver();
+        Log.d(TAG, "Setting '" + name + "'='" + value + "' on user " + getContext().getUserId());
+        Settings.Secure.putString(resolver, name , value);
+        Log.v(TAG, "Set");
+    }
+
+    private String getSecureSettings(String name) {
+        final ContentResolver resolver = getContext().getContentResolver();
+        String value = Settings.Secure.getString(resolver, name);
+        Log.d(TAG, "Got '" + name + "' for user " + getContext().getUserId() + ": " + value);
+        return value;
     }
 }
diff --git a/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/PrivateDnsPolicyTest.java b/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/PrivateDnsPolicyTest.java
index c0b0eab..1847889 100644
--- a/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/PrivateDnsPolicyTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/PrivateDnsPolicyTest.java
@@ -16,7 +16,6 @@
 
 package com.android.cts.deviceowner;
 
-import static android.app.admin.DevicePolicyManager.PRIVATE_DNS_MODE_OFF;
 import static android.app.admin.DevicePolicyManager.PRIVATE_DNS_MODE_OPPORTUNISTIC;
 import static android.app.admin.DevicePolicyManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
 
@@ -60,11 +59,10 @@
     }
 
     private void setUserRestriction(String restriction, boolean add) {
-        DevicePolicyManager dpm = mContext.getSystemService(DevicePolicyManager.class);
         if (add) {
-            dpm.addUserRestriction(getWho(), restriction);
+            mDevicePolicyManager.addUserRestriction(getWho(), restriction);
         } else {
-            dpm.clearUserRestriction(getWho(), restriction);
+            mDevicePolicyManager.clearUserRestriction(getWho(), restriction);
         }
     }
 
diff --git a/hostsidetests/devicepolicy/app/TestLauncher/Android.bp b/hostsidetests/devicepolicy/app/TestLauncher/Android.bp
deleted file mode 100644
index f13f2bd..0000000
--- a/hostsidetests/devicepolicy/app/TestLauncher/Android.bp
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (C) 2020 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 {
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-android_test_helper_app {
-    name: "TestLauncher",
-    defaults: ["cts_defaults"],
-    srcs: ["src/**/*.java"],
-    static_libs: [
-        "cts-devicepolicy-suspensionchecker",
-    ],
-    test_suites: [
-        "arcts",
-        "cts",
-        "general-tests",
-        "mts",
-    ],
-}
diff --git a/hostsidetests/devicepolicy/app/TestLauncher/AndroidManifest.xml b/hostsidetests/devicepolicy/app/TestLauncher/AndroidManifest.xml
deleted file mode 100644
index 596fcd0..0000000
--- a/hostsidetests/devicepolicy/app/TestLauncher/AndroidManifest.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 2020, 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.
- */
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-     package="com.android.cts.testlauncher">
-    <application android:label="Test Launcher">
-        <activity android:name="android.app.Activity"
-            android:exported="true">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN"/>
-                <category android:name="android.intent.category.HOME"/>
-                <category android:name="android.intent.category.DEFAULT"/>
-            </intent-filter>
-        </activity>
-        <activity android:name=".QuietModeToggleActivity"
-             android:exported="true"/>
-    </application>
-
-    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
-         android:targetPackage="com.android.cts.testlauncher">
-        <meta-data android:name="listener"
-             android:value="com.android.cts.runner.CtsTestRunListener"/>
-    </instrumentation>
-</manifest>
diff --git a/hostsidetests/devicepolicy/app/TestLauncher/src/com/android/cts/dummylauncher/QuietModeToggleActivity.java b/hostsidetests/devicepolicy/app/TestLauncher/src/com/android/cts/dummylauncher/QuietModeToggleActivity.java
deleted file mode 100644
index fd2a280..0000000
--- a/hostsidetests/devicepolicy/app/TestLauncher/src/com/android/cts/dummylauncher/QuietModeToggleActivity.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2020 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.cts.testlauncher;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.os.Process;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.util.Log;
-
-import java.util.List;
-
-public class QuietModeToggleActivity extends Activity {
-    private static final String TAG = "QuietModeToggleActivity";
-    private static final String EXTRA_QUIET_MODE_STATE =
-            "com.android.cts.testactivity.QUIET_MODE_STATE";
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        toggleQuietMode();
-        finish();
-    }
-
-    private void toggleQuietMode() {
-        final boolean quietModeState = getIntent().getBooleanExtra(EXTRA_QUIET_MODE_STATE, false);
-        final UserManager userManager = UserManager.get(this);
-
-        final List<UserHandle> users = userManager.getUserProfiles();
-        if (users.size() != 2) {
-            Log.e(TAG, "Unexpected number of profiles: " + users.size());
-            return;
-        }
-
-        final UserHandle profileHandle =
-                users.get(0).equals(Process.myUserHandle()) ? users.get(1) : users.get(0);
-
-        final String quietModeStateString = quietModeState ? "enabled" : "disabled";
-        if (userManager.isQuietModeEnabled(profileHandle) == quietModeState) {
-            Log.w(TAG, "Quiet mode is already " + quietModeStateString);
-            return;
-        }
-
-        userManager.requestQuietModeEnabled(quietModeState, profileHandle);
-        Log.i(TAG, "Quiet mode for user " + profileHandle + " was set to " + quietModeStateString);
-    }
-}
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/AccountCheckHostSideTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/AccountCheckHostSideTest.java
index 17154bc..7078bf9 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/AccountCheckHostSideTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/AccountCheckHostSideTest.java
@@ -18,6 +18,7 @@
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
 
 import android.platform.test.annotations.LargeTest;
 
@@ -28,6 +29,12 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+/**
+ * Set of tests to test setting DO and PO when there is account on the user.
+ *
+ * <p>For example, setting DO or PO shall fail at DPMS.hasIncompatibleAccountsOrNonAdbNoLock when
+ * there was incompatible account on the user.
+ */
 public class AccountCheckHostSideTest extends BaseDevicePolicyTest {
     private static final String APK_NON_TEST_ONLY = "CtsAccountCheckNonTestOnlyOwnerApp.apk";
     private static final String APK_TEST_ONLY = "CtsAccountCheckTestOnlyOwnerApp.apk";
@@ -48,10 +55,40 @@
     private static final String TEST_CLASS =
             "com.android.cts.devicepolicy.accountcheck.AccountCheckTest";
 
+    private static final String DISALLOW_MODIFY_ACCOUNTS = "no_modify_accounts";
+
+    private boolean mDeviceOwnerCanHaveAccounts;
+    private boolean mProfileOwnerCanHaveAccounts;
+    private int mProfileOwnerUserId;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        mProfileOwnerUserId = mPrimaryUserId;
+        mDeviceOwnerCanHaveAccounts = !isRestrictionSetOnUser(mDeviceOwnerUserId,
+                DISALLOW_MODIFY_ACCOUNTS);
+        // Optimization to avoid running dumpsys again
+        if (mProfileOwnerUserId == mDeviceOwnerUserId) {
+            mProfileOwnerCanHaveAccounts = mDeviceOwnerCanHaveAccounts;
+        } else {
+            mProfileOwnerCanHaveAccounts = !isRestrictionSetOnUser(mProfileOwnerUserId,
+                    DISALLOW_MODIFY_ACCOUNTS);
+        }
+        CLog.d("mDeviceOwnerUserId: " +  mDeviceOwnerUserId
+                + " mDeviceOwnerCanHaveAccounts: " + mDeviceOwnerCanHaveAccounts
+                + " mProfileOwnerUserId: " + mProfileOwnerUserId
+                + " mProfileOwnerCanHaveAccounts: " + mProfileOwnerCanHaveAccounts);
+        assumeTrue("Neither primary user or device owner user is allowed to add accounts",
+                mDeviceOwnerCanHaveAccounts || mProfileOwnerCanHaveAccounts);
+    }
+
     @Override
     public void tearDown() throws Exception {
         if (getDevice().getInstalledPackageNames().contains(PACKAGE_AUTH)) {
-            runCleanupTestOnlyOwnerAllowingFailure();
+            runCleanupTestOnlyOwnerAllowingFailure(mProfileOwnerUserId);
+            if (mDeviceOwnerUserId != mProfileOwnerUserId) {
+                runCleanupTestOnlyOwnerAllowingFailure(mDeviceOwnerUserId);
+            }
             runCleanupNonTestOnlyOwnerAllowingFailure();
 
             // This shouldn't be needed since we're uninstalling the authenticator,
@@ -67,16 +104,23 @@
     }
 
     private void runTest(String method) throws Exception {
-        runDeviceTests(PACKAGE_AUTH, TEST_CLASS, method);
+        runTestAsUser(method, mProfileOwnerUserId);
+        if (mDeviceOwnerCanHaveAccounts && mProfileOwnerUserId != mDeviceOwnerUserId) {
+            runTestAsUser(method, mDeviceOwnerUserId);
+        }
     }
 
-    private void runCleanupTestOnlyOwner() throws Exception {
-        assertTrue(removeAdmin(OWNER_TEST_ONLY, mPrimaryUserId));
+    private void runTestAsUser(String method, int userId) throws Exception {
+        runDeviceTestsAsUser(PACKAGE_AUTH, TEST_CLASS, method, userId);
     }
 
-    private void runCleanupTestOnlyOwnerAllowingFailure() throws Exception {
+    private void runCleanupTestOnlyOwner(int userId) throws Exception {
+        assertTrue(removeAdmin(OWNER_TEST_ONLY, userId));
+    }
+
+    private void runCleanupTestOnlyOwnerAllowingFailure(int userId) throws Exception {
         try {
-            runCleanupTestOnlyOwner();
+            runCleanupTestOnlyOwner(userId);
         } catch (AssertionError ignore) {
         }
     }
@@ -104,35 +148,47 @@
     }
 
     private void assertTestOnlyInstallable() throws Exception {
-        setDeviceOwnerOrFail(OWNER_TEST_ONLY, mPrimaryUserId);
-        runCleanupTestOnlyOwner();
-
-        setProfileOwnerOrFail(OWNER_TEST_ONLY, mPrimaryUserId);
-        runCleanupTestOnlyOwner();
+        if (mDeviceOwnerCanHaveAccounts) {
+            setDeviceOwnerOrFail(OWNER_TEST_ONLY, mDeviceOwnerUserId);
+            runCleanupTestOnlyOwner(mDeviceOwnerUserId);
+        }
+        if (mProfileOwnerCanHaveAccounts) {
+            setProfileOwnerOrFail(OWNER_TEST_ONLY, mProfileOwnerUserId);
+            runCleanupTestOnlyOwner(mProfileOwnerUserId);
+        }
     }
 
     private void assertNonTestOnlyInstallable() throws Exception {
-        setDeviceOwnerOrFail(OWNER_NON_TEST_ONLY, mPrimaryUserId);
-        runCleanupNonTestOnlyOwner();
-
-        setProfileOwnerOrFail(OWNER_NON_TEST_ONLY, mPrimaryUserId);
-        runCleanupNonTestOnlyOwner();
+        if (mDeviceOwnerCanHaveAccounts) {
+            setDeviceOwnerOrFail(OWNER_NON_TEST_ONLY, mDeviceOwnerUserId);
+            runCleanupNonTestOnlyOwner();
+        }
+        if (mProfileOwnerCanHaveAccounts) {
+            setProfileOwnerOrFail(OWNER_NON_TEST_ONLY, mProfileOwnerUserId);
+            runCleanupNonTestOnlyOwner();
+        }
     }
 
     private void assertTestOnlyNotInstallable() throws Exception {
-        setDeviceOwnerExpectingFailure(OWNER_TEST_ONLY, mPrimaryUserId);
-        runCleanupTestOnlyOwnerAllowingFailure();
-
-        setProfileOwnerExpectingFailure(OWNER_TEST_ONLY, mPrimaryUserId);
-        runCleanupTestOnlyOwnerAllowingFailure();
+        if (mDeviceOwnerCanHaveAccounts) {
+            setDeviceOwnerExpectingFailure(OWNER_TEST_ONLY, mDeviceOwnerUserId);
+            runCleanupTestOnlyOwnerAllowingFailure(mDeviceOwnerUserId);
+        }
+        if (mProfileOwnerCanHaveAccounts) {
+            setProfileOwnerExpectingFailure(OWNER_TEST_ONLY, mProfileOwnerUserId);
+            runCleanupTestOnlyOwnerAllowingFailure(mProfileOwnerUserId);
+        }
     }
 
     private void assertNonTestOnlyNotInstallable() throws Exception {
-        setDeviceOwnerExpectingFailure(OWNER_NON_TEST_ONLY, mPrimaryUserId);
-        runCleanupNonTestOnlyOwnerAllowingFailure();
-
-        setProfileOwnerExpectingFailure(OWNER_NON_TEST_ONLY, mPrimaryUserId);
-        runCleanupNonTestOnlyOwnerAllowingFailure();
+        if (mDeviceOwnerCanHaveAccounts) {
+            setDeviceOwnerExpectingFailure(OWNER_NON_TEST_ONLY, mDeviceOwnerUserId);
+            runCleanupNonTestOnlyOwnerAllowingFailure();
+        }
+        if (mProfileOwnerCanHaveAccounts) {
+            setProfileOwnerExpectingFailure(OWNER_NON_TEST_ONLY, mProfileOwnerUserId);
+            runCleanupNonTestOnlyOwnerAllowingFailure();
+        }
     }
 
     private boolean hasAccounts() throws Exception {
@@ -151,14 +207,28 @@
         return Integer.parseInt(count) > 0;
     }
 
+    /**
+     * This set of tests will test whether DO and PO can be set on the user when
+     * there is/are different types of accounts added on the target test user.
+     */
     @Test
     @LargeTest
     public void testAccountCheck() throws Exception {
-        installAppAsUser(APK_AUTH, mPrimaryUserId);
-        installAppAsUser(APK_NON_TEST_ONLY, mPrimaryUserId);
-        installAppAsUser(APK_TEST_ONLY, mPrimaryUserId);
+        installAppAsUser(APK_AUTH, mProfileOwnerUserId);
+        installAppAsUser(APK_NON_TEST_ONLY, mProfileOwnerUserId);
+        installAppAsUser(APK_TEST_ONLY, mProfileOwnerUserId);
+        runCleanupTestOnlyOwnerAllowingFailure(mProfileOwnerUserId);
 
-        runCleanupTestOnlyOwnerAllowingFailure();
+        // For tests in headless system user mode, test packages need to be installed for
+        // system user even for PO tests since PO will be set via adb command which will require
+        // TestAuthenticator installed on system user.
+        if (mDeviceOwnerUserId != mProfileOwnerUserId) {
+            installAppAsUser(APK_AUTH, mDeviceOwnerUserId);
+            installAppAsUser(APK_NON_TEST_ONLY, mDeviceOwnerUserId);
+            installAppAsUser(APK_TEST_ONLY, mDeviceOwnerUserId);
+            runCleanupTestOnlyOwnerAllowingFailure(mDeviceOwnerUserId);
+        }
+
         runCleanupNonTestOnlyOwnerAllowingFailure();
         removeAllAccountsAllowingFailure();
         try {
@@ -244,11 +314,11 @@
      */
     @Test
     public void testInheritTestOnly() throws Exception {
-        installAppAsUser(APK_TEST_ONLY, mPrimaryUserId);
+        installAppAsUser(APK_TEST_ONLY, mDeviceOwnerUserId);
 
         // Set as DO.
         try {
-            setDeviceOwnerOrFail(OWNER_TEST_ONLY, mPrimaryUserId);
+            setDeviceOwnerOrFail(OWNER_TEST_ONLY, mDeviceOwnerUserId);
         } catch (Throwable e) {
             CLog.e("Unable to install DO, can't continue the test. Skipping.  hasAccounts="
                     + hasAccounts());
@@ -257,17 +327,17 @@
         try {
 
             // Override with a package that's not test-only.
-            installAppAsUser(APK_TEST_ONLY_UPDATE, mPrimaryUserId);
+            installAppAsUser(APK_TEST_ONLY_UPDATE, mDeviceOwnerUserId);
 
             // But DPMS keeps the original test-only flag, so it's still removable.
-            runCleanupTestOnlyOwner();
+            runCleanupTestOnlyOwner(mDeviceOwnerUserId);
 
             return;
         } catch (Throwable e) {
             // If failed, re-install the APK with test-only=true.
             try {
-                installAppAsUser(APK_TEST_ONLY, mPrimaryUserId);
-                runCleanupTestOnlyOwner();
+                installAppAsUser(APK_TEST_ONLY, mDeviceOwnerUserId);
+                runCleanupTestOnlyOwner(mDeviceOwnerUserId);
             } catch (Exception inner) {
                 CLog.e("Unable to clean up after a failure: " + e.getMessage());
             }
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/BaseDevicePolicyTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/BaseDevicePolicyTest.java
index c28da3b..9e852a5 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/BaseDevicePolicyTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/BaseDevicePolicyTest.java
@@ -507,6 +507,13 @@
             stopUserAsync(userId);
         }
         for (int userId : usersCreatedByTests) {
+            removeTestAddedUser(userId);
+        }
+    }
+
+    private void removeTestAddedUser(int userId) throws Exception  {
+        // Don't remove system user or initial user.
+        if (userId != USER_SYSTEM && userId != mInitialUserId) {
             removeUser(userId);
         }
     }
@@ -798,9 +805,8 @@
     protected void setProfileOwnerOrFail(String componentName, int userId)
             throws Exception {
         if (!setProfileOwner(componentName, userId, /*expectFailure*/ false)) {
-            if (userId != 0) { // don't remove system user.
-                removeUser(userId);
-            }
+            // Don't remove system user or initial user that tests require to run on.
+            removeTestAddedUser(userId);
             fail("Failed to set profile owner");
         }
     }
@@ -808,9 +814,7 @@
     protected void setProfileOwnerExpectingFailure(String componentName, int userId)
             throws Exception {
         if (setProfileOwner(componentName, userId, /* expectFailure =*/ true)) {
-            if (userId != 0) { // don't remove system user.
-                removeUser(userId);
-            }
+            removeTestAddedUser(userId);
             fail("Setting profile owner should have failed.");
         }
     }
@@ -1199,6 +1203,57 @@
                 + "broadcasts to user 0", deviceAdminPkg, userId);
         executeShellCommand("pm grant --user %d %s android.permission.INTERACT_ACROSS_USERS",
                 userId, deviceAdminPkg);
+
+        CLog.i("Granting WRITE_SECURE_SETTINGS package (%s) on user %d as some tests might need it",
+                deviceAdminPkg, userId);
+        executeShellCommand("pm grant --user %d %s android.permission.WRITE_SECURE_SETTINGS",
+                userId, deviceAdminPkg);
+    }
+
+    /** Find effective restriction for user */
+    protected boolean isRestrictionSetOnUser(int userId, String restriction) throws Exception {
+        String commandOutput = getDevice().executeShellCommand("dumpsys user");
+        String[] outputLines = commandOutput.split("\\n");
+        Pattern userPattern = Pattern.compile("(^.*)UserInfo\\{" + userId + ":.*$");
+        Pattern restrictionPattern = Pattern.compile("(^.*)Effective\\srestrictions\\:.*$");
+
+        boolean userFound = false;
+        boolean restrictionsFound = false;
+        int lastIndent = -1;
+
+        for (String line : outputLines) {
+            // Starting a new block of user infos
+            if (!line.startsWith(" ".repeat(lastIndent + 1))) {
+                CLog.d("User %d restrictions found, no matched restriction.", userId);
+                return false;
+            }
+            //First, try matching user pattern
+            Matcher userMatcher = userPattern.matcher(line);
+            if (userMatcher.find()) {
+                CLog.d("User %d found in dumpsys, finding restrictions.", userId);
+                userFound = true;
+                lastIndent = userMatcher.group(1).length();
+            }
+
+            // Second, try matching restriction
+            Matcher restrictionMatcher = restrictionPattern.matcher(line);
+            if (userFound && restrictionMatcher.find()) {
+                CLog.d("User %d restrictions found, finding exact restriction.", userId);
+                restrictionsFound = true;
+                lastIndent = restrictionMatcher.group(1).length();
+            }
+
+            if (restrictionsFound && line.contains(restriction)) {
+                return true;
+            }
+        }
+        if (!userFound) {
+            CLog.e("User %d not found in dumpsys.", userId);
+        }
+        if (!restrictionsFound) {
+            CLog.d("User %d found in dumpsys, but restrictions not found.", userId);
+        }
+        return false;
     }
 
     /**
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/DeviceAdminFeaturesCheckerRule.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/DeviceAdminFeaturesCheckerRule.java
index e75056f..b66099e 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/DeviceAdminFeaturesCheckerRule.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/DeviceAdminFeaturesCheckerRule.java
@@ -206,5 +206,7 @@
     @Retention(RetentionPolicy.RUNTIME)
     @Target({ElementType.METHOD})
     public static @interface TemporaryIgnoreOnHeadlessSystemUserMode {
+        String bugId();
+        String reason();
     }
 }
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/DeviceOwnerTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/DeviceOwnerTest.java
index 0177cf3..60a397e 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/DeviceOwnerTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/DeviceOwnerTest.java
@@ -100,13 +100,15 @@
     }
 
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
+    @TemporaryIgnoreOnHeadlessSystemUserMode(bugId = "185498043",
+            reason = "automotive doesn't have IProxyService")
     public void testProxyStaticProxyTest() throws Exception {
         executeDeviceOwnerTest("proxy.StaticProxyTest");
     }
 
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
+    @TemporaryIgnoreOnHeadlessSystemUserMode(bugId = "185498043",
+            reason = "automotive doesn't have IProxyService")
     public void testProxyPacProxyTest() throws Exception {
         executeDeviceOwnerTest("proxy.PacProxyTest");
     }
@@ -453,7 +455,6 @@
 
     @FlakyTest(bugId = 127101449)
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
     public void testWifiConfigLockdown() throws Exception {
         assumeHasWifiFeature();
 
@@ -470,7 +471,6 @@
      * Execute WifiSetHttpProxyTest as device owner.
      */
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
     public void testWifiSetHttpProxyTest() throws Exception {
         assumeHasWifiFeature();
         try (LocationModeSetter locationModeSetter = new LocationModeSetter(getDevice())) {
@@ -501,7 +501,6 @@
 
     // Execute HardwarePropertiesManagerTest as a device owner.
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
     public void testHardwarePropertiesManagerAsDeviceOwner() throws Exception {
 
         executeDeviceTestMethod(".HardwarePropertiesManagerTest", "testHardwarePropertiesManager");
@@ -533,7 +532,8 @@
 
     @FlakyTest(bugId = 137096267)
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
+    @TemporaryIgnoreOnHeadlessSystemUserMode(bugId = "132361856", reason = "3 failures such as "
+            + "missing activity handling bugreport intent")
     public void testAdminActionBookkeeping() throws Exception {
         executeDeviceOwnerTest("AdminActionBookkeepingTest");
         assertMetricsLogged(getDevice(), () -> {
@@ -552,7 +552,6 @@
     }
 
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
     public void testBluetoothRestriction() throws Exception {
         executeDeviceOwnerTest("BluetoothRestrictionTest");
     }
@@ -563,7 +562,8 @@
     }
 
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
+    @TemporaryIgnoreOnHeadlessSystemUserMode(bugId = "185523465",
+            reason = "need to decide how to support it")
     public void testSetLocationEnabled() throws Exception {
         executeDeviceOwnerTest("SetLocationEnabledTest");
     }
@@ -579,7 +579,6 @@
     }
 
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
     public void testDisallowFactoryReset() throws Exception {
         int adminVersion = 24;
         changeUserRestrictionOrFail("no_factory_reset", true, mPrimaryUserId,
@@ -608,7 +607,6 @@
     }
 
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
     public void testDeviceOwnerCanGetDeviceIdentifiers() throws Exception {
         // The Device Owner should have access to all device identifiers.
         executeDeviceTestMethod(".DeviceIdentifiersTest",
@@ -616,7 +614,6 @@
     }
 
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
     public void testPackageInstallCache() throws Exception {
         CompatibilityBuildHelper buildHelper = new CompatibilityBuildHelper(getBuild());
         final File apk = buildHelper.getTestFile(TEST_APP_APK);
@@ -727,7 +724,6 @@
 
     @FlakyTest(bugId = 134487729)
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
     public void testPrivateDnsPolicy() throws Exception {
         executeDeviceOwnerTest("PrivateDnsPolicyTest");
     }
@@ -767,7 +763,6 @@
     }
 
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode
     public void testNoHiddenActivityFoundTest() throws Exception {
         try {
             // Install app to primary user
@@ -913,7 +908,6 @@
                 "testListForegroundAffiliatedUsers_onlyForegroundUser");
     }
 
-    @TemporaryIgnoreOnHeadlessSystemUserMode
     @Test
     public void testWifiNetworkConfigurationWithoutFineLocationPermission() throws Exception {
         getDevice().executeShellCommand(String.format(
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedDeviceOwnerTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedDeviceOwnerTest.java
index ad6ca63..2b49d1c 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedDeviceOwnerTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedDeviceOwnerTest.java
@@ -118,6 +118,18 @@
     }
 
     @Test
+    public void testIsLockTaskPermitted_includesPolicyExemptApps() throws Exception {
+        runDeviceTestsAsUser(DEVICE_ADMIN_PKG, ".LockTaskTest",
+                "testIsLockTaskPermittedIncludesPolicyExemptApps", mDeviceOwnerUserId);
+    }
+
+    @Test
+    public void testLockTask_policyExemptApps() throws Exception {
+        runDeviceTestsAsUser(DEVICE_ADMIN_PKG, ".LockTaskTest",
+                "testSetLockTaskPackagesIgnoresExemptApps", mDeviceOwnerUserId);
+    }
+
+    @Test
     public void testDelegatedCertInstallerDeviceIdAttestation() throws Exception {
         setUpDelegatedCertInstallerAndRunTests(() ->
                 runDeviceTestsAsUser("com.android.cts.certinstaller",
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedManagedProfileOwnerTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedManagedProfileOwnerTest.java
index cc7e599..bb1a66b 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedManagedProfileOwnerTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedManagedProfileOwnerTest.java
@@ -138,22 +138,22 @@
     }
 
     @Test
-    public void testSetGetEnterpriseNetworkPreferenceStatus() throws Exception {
-        executeDeviceTestMethod(".EnterpriseNetworkPreferenceStatusTest",
-                "testGetSetEnterpriseNetworkPreferenceStatus");
+    public void testSetGetPreferentialNetworkServiceStatus() throws Exception {
+        executeDeviceTestMethod(".PreferentialNetworkServiceStatusTest",
+                "testGetSetPreferentialNetworkServiceStatus");
     }
 
     @Test
-    public void testSetEnterpriseNetworkPreferenceStatusLogged() throws Exception {
+    public void testSetPreferentialNetworkServiceStatusLogged() throws Exception {
         DevicePolicyEventLogVerifier.assertMetricsLogged(getDevice(), () -> {
             executeDeviceTestMethod(".DevicePolicyLoggingTest",
-                    "testSetEnterpriseNetworkPreferenceEnabledLogged");
+                    "testSetPreferentialNetworkServiceEnabledLogged");
         }, new DevicePolicyEventWrapper.Builder(
-                EventId.SET_ENTERPRISE_NETWORK_PREFERENCE_ENABLED_VALUE)
+                EventId.SET_PREFERENTIAL_NETWORK_SERVICE_ENABLED_VALUE)
                 .setBoolean(true)
                 .build(),
         new DevicePolicyEventWrapper.Builder(
-                EventId.SET_ENTERPRISE_NETWORK_PREFERENCE_ENABLED_VALUE)
+                EventId.SET_PREFERENTIAL_NETWORK_SERVICE_ENABLED_VALUE)
                 .setBoolean(false)
                 .build());
     }
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/OrgOwnedProfileOwnerTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/OrgOwnedProfileOwnerTest.java
index 0fd3f3d..408ca48 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/OrgOwnedProfileOwnerTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/OrgOwnedProfileOwnerTest.java
@@ -65,19 +65,11 @@
     private static final String TEST_LAUNCHER_APK = "TestLauncher.apk";
     private static final String TEST_LAUNCHER_COMPONENT =
             "com.android.cts.testlauncher/android.app.Activity";
-    private static final String QUIET_MODE_TOGGLE_ACTIVITY =
-            "com.android.cts.testlauncher/.QuietModeToggleActivity";
-    private static final String EXTRA_QUIET_MODE_STATE =
-            "com.android.cts.testactivity.QUIET_MODE_STATE";
     public static final String SUSPENSION_CHECKER_CLASS =
             "com.android.cts.suspensionchecker.ActivityLaunchTest";
 
-    private static final String ACTION_ACKNOWLEDGEMENT_REQUIRED =
-            "com.android.cts.deviceandprofileowner.action.ACKNOWLEDGEMENT_REQUIRED";
-    private static final String ACTION_ARGUMENT = "broadcast-action";
-
     private static final String USER_IS_NOT_STARTED = "User is not started";
-    private static final long USER_STOP_TIMEOUT_SEC = 30;
+    private static final long USER_STOP_TIMEOUT_SEC = 60;
 
     protected int mUserId;
     private static final String DISALLOW_CONFIG_LOCATION = "no_config_location";
@@ -608,22 +600,15 @@
         runDeviceTestsAsUser(DEVICE_ADMIN_PKG, ".PersonalAppsSuspensionTest",
                 "testSetManagedProfileMaximumTimeOff1Sec", mUserId);
 
-        final String defaultLauncher = getDefaultLauncher();
-        try {
-            installAppAsUser(TEST_LAUNCHER_APK, true, true, mPrimaryUserId);
-            setAndStartLauncher(TEST_LAUNCHER_COMPONENT);
-            toggleQuietMode(true);
-            // Verify that at some point personal app becomes impossible to launch.
-            runDeviceTestsAsUser(DEVICE_ADMIN_PKG, SUSPENSION_CHECKER_CLASS,
-                    "testWaitForActivityNotLaunchable", mPrimaryUserId);
-            toggleQuietMode(false);
-            // Ensure the profile is properly started before wipe broadcast is sent in teardown.
-            waitForUserUnlock(mUserId);
-            runDeviceTestsAsUser(DEVICE_ADMIN_PKG, ".PersonalAppsSuspensionTest",
-                    "testPersonalAppsSuspendedByTimeout", mUserId);
-        } finally {
-            setAndStartLauncher(defaultLauncher);
-        }
+        toggleQuietMode(true);
+        // Verify that at some point personal app becomes impossible to launch.
+        runDeviceTestsAsUser(DEVICE_ADMIN_PKG, SUSPENSION_CHECKER_CLASS,
+                "testWaitForActivityNotLaunchable", mPrimaryUserId);
+        toggleQuietMode(false);
+        // Ensure the profile is properly started before wipe broadcast is sent in teardown.
+        waitForUserUnlock(mUserId);
+        runDeviceTestsAsUser(DEVICE_ADMIN_PKG, ".PersonalAppsSuspensionTest",
+                "testPersonalAppsSuspendedByTimeout", mUserId);
     }
 
     @Test
@@ -634,10 +619,7 @@
         runDeviceTestsAsUser(DEVICE_ADMIN_PKG, ".PersonalAppsSuspensionTest",
                 "testSetManagedProfileMaximumTimeOff1Year", mUserId);
 
-        final String defaultLauncher = getDefaultLauncher();
         try {
-            installAppAsUser(TEST_LAUNCHER_APK, true, true, mPrimaryUserId);
-            setAndStartLauncher(TEST_LAUNCHER_COMPONENT);
             toggleQuietMode(true);
             waitForUserStopped(mUserId);
             toggleQuietMode(false);
@@ -652,7 +634,6 @@
                     "testComplianceAcknowledgementNotRequired", mUserId);
 
         } finally {
-            setAndStartLauncher(defaultLauncher);
             runDeviceTestsAsUser(DEVICE_ADMIN_PKG, ".PersonalAppsSuspensionTest",
                     "testClearComplianceSharedPreference", mUserId);
         }
@@ -669,10 +650,7 @@
         runDeviceTestsAsUser(DEVICE_ADMIN_PKG, ".PersonalAppsSuspensionTest",
                 "testSetOverrideOnComplianceAcknowledgementRequired", mUserId);
 
-        final String defaultLauncher = getDefaultLauncher();
         try {
-            installAppAsUser(TEST_LAUNCHER_APK, true, true, mPrimaryUserId);
-            setAndStartLauncher(TEST_LAUNCHER_COMPONENT);
             toggleQuietMode(true);
             waitForUserStopped(mUserId);
             toggleQuietMode(false);
@@ -686,7 +664,6 @@
             runDeviceTestsAsUser(DEVICE_ADMIN_PKG, ".PersonalAppsSuspensionTest",
                     "testAcknowledgeCompliance", mUserId);
         } finally {
-            setAndStartLauncher(defaultLauncher);
             runDeviceTestsAsUser(DEVICE_ADMIN_PKG, ".PersonalAppsSuspensionTest",
                     "testClearComplianceSharedPreference", mUserId);
         }
@@ -786,18 +763,8 @@
     }
 
     private void toggleQuietMode(boolean quietModeEnable) throws Exception {
-        final String str;
-        // TV launcher uses intent filter priority to prevent 3p launchers replacing it
-        // this causes the activity that toggles quiet mode to be suspended
-        // and the profile would never start
-        if (isTv()) {
-            str = quietModeEnable ? String.format("am stop-user -f %d", mUserId)
-                    : String.format("am start-user %d", mUserId);
-        } else {
-            str = String.format("am start-activity -n %s --ez %s %s",
-                    QUIET_MODE_TOGGLE_ACTIVITY, EXTRA_QUIET_MODE_STATE, quietModeEnable);
-        }
-        executeShellCommand(str);
+        runDeviceTestsAsUser(DEVICE_ADMIN_PKG, ".PersonalAppsSuspensionTest",
+                quietModeEnable ? "testEnableQuietMode" : "testDisableQuietMode", mPrimaryUserId);
     }
 
     private void setAndStartLauncher(String component) throws Exception {
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/ProfileOwnerTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/ProfileOwnerTest.java
index b2f93d8..eae5c48 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/ProfileOwnerTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/ProfileOwnerTest.java
@@ -57,19 +57,22 @@
     }
 
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode // TODO(b/183020176): decide if it's needed or fix it
+    @TemporaryIgnoreOnHeadlessSystemUserMode(bugId = "183020176",
+            reason = "decide if it's needed or fix it")
     public void testManagement() throws Exception {
         executeProfileOwnerTest("ManagementTest");
     }
 
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode // TODO(b/183020176): decide if it's needed or fix it
+    @TemporaryIgnoreOnHeadlessSystemUserMode(bugId = "183020176",
+            reason = "decide if it's needed or fix it")
     public void testAdminActionBookkeeping() throws Exception {
         executeProfileOwnerTest("AdminActionBookkeepingTest");
     }
 
     @Test
-    @TemporaryIgnoreOnHeadlessSystemUserMode // TODO(b/183020176): decide if it's needed or fix it
+    @TemporaryIgnoreOnHeadlessSystemUserMode(bugId = "183020176",
+            reason = "decide if it's needed or fix it")
     public void testAppUsageObserver() throws Exception {
         executeProfileOwnerTest("AppUsageObserverTest");
     }
diff --git a/hostsidetests/hdmicec/README.md b/hostsidetests/hdmicec/README.md
index 4364e6c..b774e46 100644
--- a/hostsidetests/hdmicec/README.md
+++ b/hostsidetests/hdmicec/README.md
@@ -20,7 +20,13 @@
 *   HDMI Display (aka a TV) with CEC disabled to avoid interference, or an HDMI fake plug
 
 It is recommended that the playback device has an HDMI physical address of `1.0.0.0` while running
-the tests.
+the tests. In case the DUT takes a physical address other than `1.0.0.0` and this is unavoidable,
+the tests can be configured to expect a different physical address by appending these arguments to
+the tradefed command:
+```
+--module-arg CtsHdmiCecHostTestCases:set-option:cec-phy-addr:<address_in_decimal>
+```
+Thus, for a device that is taking an address `3.0.0.0`, pass `12288` as the `cec-phy-addr` argument.
 
 The CEC adapter may also be installed in-between the TV and the playback device.
 
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/BaseHdmiCecCtsTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/BaseHdmiCecCtsTest.java
index d774d27..2f19320 100644
--- a/hostsidetests/hdmicec/src/android/hdmicec/cts/BaseHdmiCecCtsTest.java
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/BaseHdmiCecCtsTest.java
@@ -240,7 +240,7 @@
 
     public boolean isLanguageEditable() throws Exception {
         String val = getDevice().executeShellCommand(
-                "getprop ro.hdmi.cec.source.set_menu_language.enabled");
+                "getprop ro.hdmi.set_menu_language");
         return val.trim().equals("true") ? true : false;
     }
 }
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/tv/HdmiCecSystemInformationTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/tv/HdmiCecSystemInformationTest.java
new file mode 100644
index 0000000..777c5ca
--- /dev/null
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/tv/HdmiCecSystemInformationTest.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2020 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.hdmicec.cts.tv;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.hdmicec.cts.BaseHdmiCecCtsTest;
+import android.hdmicec.cts.CecMessage;
+import android.hdmicec.cts.CecOperand;
+import android.hdmicec.cts.LogicalAddress;
+
+import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.runner.RunWith;
+
+import java.util.Locale;
+
+/** HDMI CEC system information tests (Section 11.1.6) */
+@RunWith(DeviceJUnit4ClassRunner.class)
+public final class HdmiCecSystemInformationTest extends BaseHdmiCecCtsTest {
+
+    @Rule
+    public RuleChain ruleChain =
+            RuleChain.outerRule(CecRules.requiresCec(this))
+                    .around(CecRules.requiresLeanback(this))
+                    .around(CecRules.requiresDeviceType(this, LogicalAddress.TV))
+                    .around(hdmiCecClient);
+
+    public HdmiCecSystemInformationTest() {
+        super(LogicalAddress.TV);
+    }
+
+    /**
+     * Test 11.1.6-5
+     *
+     * <p>Tests that the device responds correctly to a {@code <Get Menu Language>} message coming
+     * from various logical addresses (1, 3, 4, 5, 13, 14 and 15).
+     */
+    @Test
+    public void cect_11_1_6_5_DutRespondsToGetMenuLanguage() throws Exception {
+        final String tvLanguage = new Locale(extractLanguage(getSystemLocale())).getISO3Language();
+        String message;
+        LogicalAddress sources[] = {
+            LogicalAddress.RECORDER_1,
+            LogicalAddress.TUNER_1,
+            LogicalAddress.PLAYBACK_1,
+            LogicalAddress.AUDIO_SYSTEM,
+            LogicalAddress.RESERVED_2,
+            LogicalAddress.SPECIFIC_USE,
+            LogicalAddress.BROADCAST
+        };
+        for (LogicalAddress source : sources) {
+            hdmiCecClient.sendCecMessage(source, CecOperand.GET_MENU_LANGUAGE);
+            message = hdmiCecClient.checkExpectedOutput(CecOperand.SET_MENU_LANGUAGE);
+            assertThat(CecMessage.getAsciiString(message)).isEqualTo(tvLanguage);
+        }
+    }
+}
diff --git a/hostsidetests/jvmti/base/host/src/android/jvmti/cts/JvmtiHostTest.java b/hostsidetests/jvmti/base/host/src/android/jvmti/cts/JvmtiHostTest.java
index 0fee0ec..cecb6ed 100644
--- a/hostsidetests/jvmti/base/host/src/android/jvmti/cts/JvmtiHostTest.java
+++ b/hostsidetests/jvmti/base/host/src/android/jvmti/cts/JvmtiHostTest.java
@@ -77,9 +77,17 @@
         mAbi = arg0;
     }
 
+    // Constant returned to indicate get-current-user failed. See comment at/near
+    // https://cs.android.com/android/_/android/platform/tools/tradefederation/+/android11-release:device_build_interfaces/com/android/tradefed/device/ITestDevice.java;l=780
+    private static final int GET_USER_FAILURE = -10000;
+
+    // Try getting current user and throw an exception immediately if we fail.
     @Override
     protected void setUp() throws Exception {
         mCurrentUser = getDevice().getCurrentUser();
+        if (mCurrentUser == GET_USER_FAILURE) {
+            throw new RuntimeException("am get-current-user failed!");
+        }
     }
 
     public void testJvmti() throws Exception {
diff --git a/hostsidetests/media/app/MediaMetricsTest/Android.bp b/hostsidetests/media/app/MediaMetricsTest/Android.bp
index 7ac3324..3e7d643 100644
--- a/hostsidetests/media/app/MediaMetricsTest/Android.bp
+++ b/hostsidetests/media/app/MediaMetricsTest/Android.bp
@@ -16,6 +16,25 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
+cc_test_library {
+    name: "libCtsMediaMetricsHostTestAppJni",
+    srcs: ["jni/aaudio_stream.cpp"],
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+    header_libs: ["jni_headers"],
+    shared_libs: [
+        "libaaudio",
+    ],
+    static_libs: [
+        "libnativetesthelper_jni",
+    ],
+    stl: "c++_static",
+    gtest: false,
+    sdk_version: "current",
+}
+
 android_test_helper_app {
     name: "CtsMediaMetricsHostTestApp",
     defaults: ["cts_defaults"],
@@ -26,10 +45,14 @@
     srcs: [
         "src/**/*.java",
     ],
+    jni_libs: [
+        "libCtsMediaMetricsHostTestAppJni",
+    ],
     static_libs: [
         "androidx.test.rules",
         "truth-prebuilt",
     ],
     sdk_version: "test_current",
     min_sdk_version: "30",
+    compile_multilib: "both",
 }
diff --git a/hostsidetests/media/app/MediaMetricsTest/AndroidManifest.xml b/hostsidetests/media/app/MediaMetricsTest/AndroidManifest.xml
index fc46782..78b5954 100644
--- a/hostsidetests/media/app/MediaMetricsTest/AndroidManifest.xml
+++ b/hostsidetests/media/app/MediaMetricsTest/AndroidManifest.xml
@@ -18,6 +18,7 @@
      package="android.media.metrics.cts"
      android:targetSandboxVersion="2">
 
+    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
     <uses-sdk android:minSdkVersion="30"/>
 
     <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
diff --git a/hostsidetests/media/app/MediaMetricsTest/jni/aaudio_stream.cpp b/hostsidetests/media/app/MediaMetricsTest/jni/aaudio_stream.cpp
new file mode 100644
index 0000000..699d9ea
--- /dev/null
+++ b/hostsidetests/media/app/MediaMetricsTest/jni/aaudio_stream.cpp
@@ -0,0 +1,68 @@
+/*
+ * 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.
+ *
+ */
+
+#define LOG_NDEBUG 0
+#define LOG_TAG "AAudioStreamAtom-JNI"
+
+#include <jni.h>
+
+#include <aaudio/AAudio.h>
+#include <gtest/gtest.h>
+
+void tryOpeningStream(aaudio_direction_t direction, aaudio_performance_mode_t performanceMode) {
+    AAudioStreamBuilder *builder = nullptr;
+    ASSERT_EQ(AAUDIO_OK, AAudio_createStreamBuilder(&builder));
+    ASSERT_NE(nullptr, builder);
+    AAudioStreamBuilder_setDirection(builder, direction);
+    AAudioStreamBuilder_setPerformanceMode(builder, performanceMode);
+
+    AAudioStream *stream = nullptr;
+    ASSERT_EQ(AAUDIO_OK, AAudioStreamBuilder_openStream(builder, &stream));
+    ASSERT_NE(nullptr, stream);
+    ASSERT_EQ(direction, AAudioStream_getDirection(stream));
+
+    ASSERT_EQ(AAUDIO_OK, AAudioStream_requestStart(stream));
+    ASSERT_EQ(AAUDIO_OK, AAudioStream_requestStop(stream));
+
+    // Cleanup
+    ASSERT_EQ(AAUDIO_OK, AAudioStreamBuilder_delete(builder));
+    ASSERT_EQ(AAUDIO_OK, AAudioStream_close(stream));
+}
+
+extern "C" JNIEXPORT void JNICALL
+Java_android_media_metrics_cts_MediaMetricsAtomHostSideTests_testAAudioMmapOutputStream(
+        JNIEnv *, jobject /* this */) {
+    tryOpeningStream(AAUDIO_DIRECTION_OUTPUT, AAUDIO_PERFORMANCE_MODE_LOW_LATENCY);
+}
+
+extern "C" JNIEXPORT void JNICALL
+Java_android_media_metrics_cts_MediaMetricsAtomHostSideTests_testAAudioMmapInputStream(
+        JNIEnv *, jobject /* this */) {
+    tryOpeningStream(AAUDIO_DIRECTION_INPUT, AAUDIO_PERFORMANCE_MODE_LOW_LATENCY);
+}
+
+extern "C" JNIEXPORT void JNICALL
+Java_android_media_metrics_cts_MediaMetricsAtomHostSideTests_testAAudioLegacyOutputStream(
+        JNIEnv *, jobject /* this */) {
+    tryOpeningStream(AAUDIO_DIRECTION_OUTPUT, AAUDIO_PERFORMANCE_MODE_NONE);
+}
+
+extern "C" JNIEXPORT void JNICALL
+Java_android_media_metrics_cts_MediaMetricsAtomHostSideTests_testAAudioLegacyInputStream(
+        JNIEnv *, jobject /* this */) {
+    tryOpeningStream(AAUDIO_DIRECTION_INPUT, AAUDIO_PERFORMANCE_MODE_NONE);
+}
diff --git a/hostsidetests/media/app/MediaMetricsTest/src/android/media/metrics/cts/MediaMetricsAtomHostSideTests.java b/hostsidetests/media/app/MediaMetricsTest/src/android/media/metrics/cts/MediaMetricsAtomHostSideTests.java
index a252fa7..442386d 100644
--- a/hostsidetests/media/app/MediaMetricsTest/src/android/media/metrics/cts/MediaMetricsAtomHostSideTests.java
+++ b/hostsidetests/media/app/MediaMetricsTest/src/android/media/metrics/cts/MediaMetricsAtomHostSideTests.java
@@ -36,6 +36,10 @@
 
 public class MediaMetricsAtomHostSideTests {
 
+    static {
+        System.loadLibrary("CtsMediaMetricsHostTestAppJni");
+    }
+
     @Test
     public void testPlaybackStateEvent() throws Exception {
         Context context = InstrumentationRegistry.getContext();
@@ -149,4 +153,28 @@
         assertThat(idObj).isNotEqualTo(null);
         assertThat(idObj.getStringId().length()).isGreaterThan(0);
     }
+
+    /**
+     * Open aaudio mmap output stream and then close
+     */
+    @Test
+    public native void testAAudioMmapOutputStream();
+
+    /**
+     * Open aaudio mmap input stream and then close
+     */
+    @Test
+    public native void testAAudioMmapInputStream();
+
+    /**
+     * Open aaudio legacy output stream and then close
+     */
+    @Test
+    public native void testAAudioLegacyOutputStream();
+
+    /**
+     * Open aaudio legacy input stream and then close
+     */
+    @Test
+    public native void testAAudioLegacyInputStream();
 }
diff --git a/hostsidetests/media/src/android/media/metrics/cts/MediaMetricsAtomTests.java b/hostsidetests/media/src/android/media/metrics/cts/MediaMetricsAtomTests.java
index 313bc16..defde84 100644
--- a/hostsidetests/media/src/android/media/metrics/cts/MediaMetricsAtomTests.java
+++ b/hostsidetests/media/src/android/media/metrics/cts/MediaMetricsAtomTests.java
@@ -32,11 +32,16 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Base64;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 public class MediaMetricsAtomTests extends DeviceTestCase implements IBuildReceiver {
     public static final String TEST_APK = "CtsMediaMetricsHostTestApp.apk";
     public static final String TEST_PKG = "android.media.metrics.cts";
+    private static final String FEATURE_AUDIO_OUTPUT = "android.hardware.audio.output";
+    private static final String FEATURE_MICROPHONE = "android.hardware.microphone";
+    private static final int MAX_BUFFER_CAPACITY = 30 * 1024 * 1024; // 30M
     private IBuildInfo mCtsBuild;
 
     @Override
@@ -221,4 +226,94 @@
         List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice());
         assertThat(data.size()).isEqualTo(0);
    }
+
+    private void validateAAudioStreamAtom(int direction) throws Exception {
+        Set<Integer> directionSet = new HashSet<>(Arrays.asList(direction));
+        List<Set<Integer>> directionList = Arrays.asList(directionSet);
+
+        List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice());
+        AtomTestUtils.assertStatesOccurred(directionList, data, 0,
+                atom -> atom.getMediametricsAaudiostreamReported().getDirection().getNumber());
+
+        for (StatsLog.EventMetricData event : data) {
+            AtomsProto.MediametricsAAudioStreamReported atom =
+                    event.getAtom().getMediametricsAaudiostreamReported();
+            assertThat(atom.getBufferCapacity()).isGreaterThan(0);
+            assertThat(atom.getBufferCapacity()).isLessThan(MAX_BUFFER_CAPACITY);
+            assertThat(atom.getBufferSize()).isGreaterThan(0);
+            assertThat(atom.getBufferSize()).isAtMost(atom.getBufferCapacity());
+            assertThat(atom.getFramesPerBurst()).isGreaterThan(0);
+            assertThat(atom.getFramesPerBurst()).isLessThan(atom.getBufferCapacity());
+        }
+    }
+
+    private void runAAudioTestAndValidate(
+            String requiredFeature, int direction, String testFunctionName) throws Exception {
+        if (!DeviceUtils.hasFeature(getDevice(), requiredFeature)) {
+            return;
+        }
+        ConfigUtils.uploadConfigForPushedAtom(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG,
+                AtomsProto.Atom.MEDIAMETRICS_AAUDIOSTREAM_REPORTED_FIELD_NUMBER);
+
+        DeviceUtils.runDeviceTests(
+                getDevice(),
+                TEST_PKG,
+                "android.media.metrics.cts.MediaMetricsAtomHostSideTests",
+                testFunctionName);
+        Thread.sleep(AtomTestUtils.WAIT_TIME_LONG);
+
+        validateAAudioStreamAtom(direction);
+    }
+
+    /**
+     * The test try to create and then close aaudio input stream with mmap path via media metrics
+     * atom host side test app on the DUT.
+     * After that, the event metric data for MediametricsAAudioStreamReported is pushed to verify
+     * the data is collected correctly.
+     */
+    public void testAAudioMmapInputStream() throws Exception {
+        runAAudioTestAndValidate(
+                FEATURE_MICROPHONE,
+                AtomsProto.MediametricsAAudioStreamReported.Direction.DIRECTION_INPUT_VALUE,
+                "testAAudioMmapInputStream");
+    }
+
+    /**
+     * The test try to create and then close aaudio output stream with mmap path via media metrics
+     * atom host side test app on the DUT.
+     * After that, the event metric data for MediametricsAAudioStreamReported is pushed to verify
+     * the data is collected correctly.
+     */
+    public void testAAudioMmapOutputStream() throws Exception {
+        runAAudioTestAndValidate(
+                FEATURE_AUDIO_OUTPUT,
+                AtomsProto.MediametricsAAudioStreamReported.Direction.DIRECTION_OUTPUT_VALUE,
+                "testAAudioMmapOutputStream");
+    }
+
+    /**
+     * The test try to create and then close aaudio input stream with legacy path via media metrics
+     * atom host side test app on the DUT.
+     * After that, the event metric data for MediametricsAAudioStreamReported is pushed to verify
+     * the data is collected correctly.
+     */
+    public void testAAudioLegacyInputStream() throws Exception {
+        runAAudioTestAndValidate(
+                FEATURE_MICROPHONE,
+                AtomsProto.MediametricsAAudioStreamReported.Direction.DIRECTION_INPUT_VALUE,
+                "testAAudioLegacyInputStream");
+    }
+
+    /**
+     * The test try to create and then close aaudio output stream with legacy path via media metrics
+     * atom host side test app on the DUT.
+     * After that, the event metric data for MediametricsAAudioStreamReported is pushed to verify
+     * the data is collected correctly.
+     */
+    public void testAAudioLegacyOutputStream() throws Exception {
+        runAAudioTestAndValidate(
+                FEATURE_AUDIO_OUTPUT,
+                AtomsProto.MediametricsAAudioStreamReported.Direction.DIRECTION_OUTPUT_VALUE,
+                "testAAudioLegacyOutputStream");
+    }
 }
diff --git a/hostsidetests/multiuser/TEST_MAPPING b/hostsidetests/multiuser/TEST_MAPPING
index 592aaad..f130cf2 100644
--- a/hostsidetests/multiuser/TEST_MAPPING
+++ b/hostsidetests/multiuser/TEST_MAPPING
@@ -1,5 +1,5 @@
 {
-  "presubmit": [
+  "presubmit-large": [
     {
       "name": "CtsMultiUserHostTestCases"
     }
diff --git a/hostsidetests/os/src/android/os/cts/QuiescentBootTests.java b/hostsidetests/os/src/android/os/cts/QuiescentBootTests.java
index fad7f25..af062db 100644
--- a/hostsidetests/os/src/android/os/cts/QuiescentBootTests.java
+++ b/hostsidetests/os/src/android/os/cts/QuiescentBootTests.java
@@ -16,7 +16,6 @@
 
 package android.os.cts;
 
-
 import static android.os.PowerManagerInternalProto.Wakefulness.WAKEFULNESS_ASLEEP;
 import static android.os.PowerManagerInternalProto.Wakefulness.WAKEFULNESS_AWAKE;
 
@@ -29,6 +28,7 @@
 
 import com.android.compatibility.common.util.PropertyUtil;
 import com.android.compatibility.common.util.ProtoUtils;
+import com.android.compatibility.common.util.WindowManagerUtil;
 import com.android.server.power.PowerManagerServiceDumpProto;
 import com.android.tradefed.device.ITestDevice;
 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
@@ -39,6 +39,9 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @RunWith(DeviceJUnit4ClassRunner.class)
 public class QuiescentBootTests extends BaseHostJUnit4Test {
     private static final int REBOOT_TIMEOUT = 60000;
@@ -101,6 +104,15 @@
         assertEquals("Expected to boot in awake state.", WAKEFULNESS_AWAKE, getWakefulness());
     }
 
+    @Test
+    public void testQuiescentBoot_activitiesNotResumedAfterBoot() throws Exception {
+        mDevice.executeAdbCommand("reboot", "quiescent");
+        mDevice.waitForBootComplete(REBOOT_TIMEOUT);
+
+        List<String> resumedActivities = WindowManagerUtil.getResumedActivities(getDevice());
+        assertEquals("Expected no resumed activities", 0, resumedActivities.size());
+    }
+
     private Wakefulness getWakefulness() throws Exception {
         return ((PowerManagerServiceDumpProto) ProtoUtils.getProto(getDevice(),
                 PowerManagerServiceDumpProto.parser(),
diff --git a/hostsidetests/packagemanager/domainverification/apps/calling/src/com/android/cts/packagemanager/verify/domain/callingapp/DomainVerificationIntentHostTimedTests.kt b/hostsidetests/packagemanager/domainverification/apps/calling/src/com/android/cts/packagemanager/verify/domain/callingapp/DomainVerificationIntentHostTimedTests.kt
index 0d2a790..0526f2e 100644
--- a/hostsidetests/packagemanager/domainverification/apps/calling/src/com/android/cts/packagemanager/verify/domain/callingapp/DomainVerificationIntentHostTimedTests.kt
+++ b/hostsidetests/packagemanager/domainverification/apps/calling/src/com/android/cts/packagemanager/verify/domain/callingapp/DomainVerificationIntentHostTimedTests.kt
@@ -28,7 +28,7 @@
 import org.junit.runners.Parameterized
 
 @RunWith(Parameterized::class)
-class DomainVerificationIntentHostTimedTests : DomainVerificationIntentTestBase() {
+class DomainVerificationIntentHostTimedTests : DomainVerificationIntentTestBase(DOMAIN_1) {
 
     @Test
     fun multipleVerifiedTakeLastFirstInstall() {
diff --git a/hostsidetests/packagemanager/domainverification/device/src/com/android/cts/packagemanager/verify/domain/device/DomainVerificationIntentInvalidHostTests.kt b/hostsidetests/packagemanager/domainverification/device/src/com/android/cts/packagemanager/verify/domain/device/DomainVerificationIntentInvalidHostTests.kt
new file mode 100644
index 0000000..f57d599
--- /dev/null
+++ b/hostsidetests/packagemanager/domainverification/device/src/com/android/cts/packagemanager/verify/domain/device/DomainVerificationIntentInvalidHostTests.kt
@@ -0,0 +1,34 @@
+/*
+ * 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.cts.packagemanager.verify.domain.device
+
+import com.android.cts.packagemanager.verify.domain.android.DomainUtils.DECLARING_PKG_1_COMPONENT
+import com.android.cts.packagemanager.verify.domain.android.DomainUtils.DECLARING_PKG_2_COMPONENT
+import com.android.cts.packagemanager.verify.domain.android.DomainVerificationIntentTestBase
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@RunWith(Parameterized::class)
+class DomainVerificationIntentInvalidHostTests :
+    DomainVerificationIntentTestBase("invalid1", assertResolvesToBrowsersInBefore = false) {
+
+    @Test
+    fun launchInvalidHttpUri() {
+        assertResolvesTo(browsers + DECLARING_PKG_1_COMPONENT + DECLARING_PKG_2_COMPONENT)
+    }
+}
diff --git a/hostsidetests/packagemanager/domainverification/device/src/com/android/cts/packagemanager/verify/domain/device/DomainVerificationIntentStandaloneTests.kt b/hostsidetests/packagemanager/domainverification/device/src/com/android/cts/packagemanager/verify/domain/device/DomainVerificationIntentStandaloneTests.kt
index 8923993..dd456fa 100644
--- a/hostsidetests/packagemanager/domainverification/device/src/com/android/cts/packagemanager/verify/domain/device/DomainVerificationIntentStandaloneTests.kt
+++ b/hostsidetests/packagemanager/domainverification/device/src/com/android/cts/packagemanager/verify/domain/device/DomainVerificationIntentStandaloneTests.kt
@@ -30,7 +30,7 @@
 import org.junit.runners.Parameterized
 
 @RunWith(Parameterized::class)
-class DomainVerificationIntentStandaloneTests : DomainVerificationIntentTestBase() {
+class DomainVerificationIntentStandaloneTests : DomainVerificationIntentTestBase(DOMAIN_1) {
 
     @Test
     fun launchVerified() {
diff --git a/hostsidetests/packagemanager/domainverification/lib/constants/android/src/com/android/cts/packagemanager/verify/domain/android/DomainVerificationIntentTestBase.kt b/hostsidetests/packagemanager/domainverification/lib/constants/android/src/com/android/cts/packagemanager/verify/domain/android/DomainVerificationIntentTestBase.kt
index 7c02587..283332c 100644
--- a/hostsidetests/packagemanager/domainverification/lib/constants/android/src/com/android/cts/packagemanager/verify/domain/android/DomainVerificationIntentTestBase.kt
+++ b/hostsidetests/packagemanager/domainverification/lib/constants/android/src/com/android/cts/packagemanager/verify/domain/android/DomainVerificationIntentTestBase.kt
@@ -30,7 +30,6 @@
 import com.android.cts.packagemanager.verify.domain.java.DomainUtils
 import com.android.cts.packagemanager.verify.domain.java.DomainUtils.DECLARING_PKG_NAME_1
 import com.android.cts.packagemanager.verify.domain.java.DomainUtils.DECLARING_PKG_NAME_2
-import com.android.cts.packagemanager.verify.domain.java.DomainUtils.DOMAIN_1
 import com.android.cts.packagemanager.verify.domain.java.DomainUtils.DOMAIN_UNHANDLED
 import com.google.common.truth.Truth.assertThat
 import org.junit.After
@@ -40,7 +39,10 @@
 import org.junit.runners.Parameterized
 
 @RunWith(Parameterized::class)
-abstract class DomainVerificationIntentTestBase {
+abstract class DomainVerificationIntentTestBase(
+    private val domain: String,
+    private val assertResolvesToBrowsersInBefore: Boolean = true
+) {
 
     companion object {
 
@@ -65,7 +67,7 @@
 
     @Before
     fun findBrowsers() {
-        intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://$DOMAIN_1"))
+        intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://$domain"))
             .applyIntentVariant(intentVariant)
 
         browsers = Intent(Intent.ACTION_VIEW, Uri.parse("https://$DOMAIN_UNHANDLED"))
@@ -88,7 +90,10 @@
         }
 
         this.allResults = allResults
-        assertResolvesTo(browsers)
+
+        if (assertResolvesToBrowsersInBefore) {
+            assertResolvesTo(browsers)
+        }
     }
 
     @Before
@@ -103,19 +108,19 @@
 
     protected fun assertResolvesTo(result: ComponentName) = assertResolvesTo(listOf(result))
 
-    protected fun assertResolvesTo(packageNames: Collection<ComponentName>) {
+    protected fun assertResolvesTo(components: Collection<ComponentName>) {
         // Pass MATCH_DEFAULT_ONLY to mirror startActivity resolution
         assertThat(packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
             .map { it.activityInfo }
             .map { ComponentName(it.packageName, it.name) })
-            .containsExactlyElementsIn(packageNames)
+            .containsExactlyElementsIn(components)
 
         if (intent.hasCategory(Intent.CATEGORY_DEFAULT)) {
             // Verify explicit DEFAULT mirrors MATCH_DEFAULT_ONLY
             assertThat(packageManager.queryIntentActivities(intent, 0)
                 .map { it.activityInfo }
                 .map { ComponentName(it.packageName, it.name) })
-                .containsExactlyElementsIn(packageNames)
+                .containsExactlyElementsIn(components)
         } else {
             // Verify that non-DEFAULT match returns all results
             assertThat(packageManager.queryIntentActivities(intent, 0)
diff --git a/hostsidetests/scopedstorage/Android.bp b/hostsidetests/scopedstorage/Android.bp
index c2c0e82..7fa469b 100644
--- a/hostsidetests/scopedstorage/Android.bp
+++ b/hostsidetests/scopedstorage/Android.bp
@@ -170,17 +170,6 @@
     ]
 }
 
-android_test {
-    name: "SignatureStorageTest",
-    manifest: "signature/AndroidManifest.xml",
-    srcs: ["signature/src/**/*.java"],
-    static_libs: ["truth-prebuilt", "cts-scopedstorage-lib"],
-    compile_multilib: "both",
-    test_suites: ["general-tests", "mts", "cts"],
-    sdk_version: "test_current",
-    certificate: "platform",
-}
-
 java_test_host {
     name: "CtsScopedStorageCoreHostTest",
     srcs:  [
diff --git a/hostsidetests/scopedstorage/AndroidManifest.xml b/hostsidetests/scopedstorage/AndroidManifest.xml
index 9c3653b..2f16b9c 100644
--- a/hostsidetests/scopedstorage/AndroidManifest.xml
+++ b/hostsidetests/scopedstorage/AndroidManifest.xml
@@ -20,7 +20,6 @@
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
-    <uses-permission android:name="android.permission.ACCESS_MTP" />
     <application android:requestRawExternalStorageAccess="true">
         <uses-library android:name="android.test.runner" />
     </application>
diff --git a/hostsidetests/scopedstorage/AndroidTest.xml b/hostsidetests/scopedstorage/AndroidTest.xml
index 560ad48..8749087 100644
--- a/hostsidetests/scopedstorage/AndroidTest.xml
+++ b/hostsidetests/scopedstorage/AndroidTest.xml
@@ -23,7 +23,6 @@
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true" />
         <option name="test-file-name" value="ScopedStorageTest.apk" />
-        <option name="test-file-name" value="SignatureStorageTest.apk" />
         <option name="test-file-name" value="LegacyStorageTest.apk" />
         <option name="test-file-name" value="CtsScopedStorageTestAppA.apk" />
         <option name="test-file-name" value="CtsScopedStorageTestAppB.apk" />
diff --git a/hostsidetests/scopedstorage/PublicVolumeTest.xml b/hostsidetests/scopedstorage/PublicVolumeTest.xml
index e6c1cee..1dc4017 100644
--- a/hostsidetests/scopedstorage/PublicVolumeTest.xml
+++ b/hostsidetests/scopedstorage/PublicVolumeTest.xml
@@ -18,7 +18,6 @@
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true" />
         <option name="test-file-name" value="ScopedStorageTest.apk" />
-        <option name="test-file-name" value="SignatureStorageTest.apk" />
         <option name="test-file-name" value="LegacyStorageTest.apk" />
         <option name="test-file-name" value="CtsScopedStorageTestAppA.apk" />
         <option name="test-file-name" value="CtsScopedStorageTestAppB.apk" />
diff --git a/hostsidetests/scopedstorage/device/src/android/scopedstorage/cts/device/ScopedStorageBaseDeviceTest.java b/hostsidetests/scopedstorage/device/src/android/scopedstorage/cts/device/ScopedStorageBaseDeviceTest.java
index 5299188..7cad3db 100644
--- a/hostsidetests/scopedstorage/device/src/android/scopedstorage/cts/device/ScopedStorageBaseDeviceTest.java
+++ b/hostsidetests/scopedstorage/device/src/android/scopedstorage/cts/device/ScopedStorageBaseDeviceTest.java
@@ -25,6 +25,7 @@
 import static androidx.test.InstrumentationRegistry.getContext;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
 import android.provider.MediaStore;
 import android.scopedstorage.cts.lib.TestUtils;
@@ -35,6 +36,8 @@
 import java.util.List;
 
 class ScopedStorageBaseDeviceTest {
+    private static final String VOLUME_PUBLIC = "volume_public";
+
     @BeforeClass
     public static void setup() throws Exception {
         createPublicVolume();
@@ -44,9 +47,11 @@
     private static void createPublicVolume() throws Exception {
         if (TestUtils.getCurrentPublicVolumeName() == null) {
             TestUtils.createNewPublicVolume();
+            assertWithMessage("Expected newly created public volume name to be not null")
+                    .that(TestUtils.getCurrentPublicVolumeName())
+                    .isNotNull();
         }
     }
-
     private static void setupStorage() throws Exception {
         if (!getContext().getPackageManager().isInstantApp()) {
             pollForExternalStorageState();
@@ -60,7 +65,11 @@
             resetDefaultExternalStorageVolume();
             TestUtils.assertDefaultVolumeIsPrimary();
         } else {
-            setExternalStorageVolume(volumeName);
+            final String publicVolumeName = TestUtils.getCurrentPublicVolumeName();
+            assertWithMessage("Expected public volume name to be not null")
+                    .that(publicVolumeName)
+                    .isNotNull();
+            setExternalStorageVolume(publicVolumeName);
             TestUtils.assertDefaultVolumeIsPublic();
         }
         setupDefaultDirectories();
@@ -69,7 +78,7 @@
     static List<String> getTestParameters() {
         return Arrays.asList(
                 MediaStore.VOLUME_EXTERNAL,
-                TestUtils.getCurrentPublicVolumeName()
+                VOLUME_PUBLIC
         );
     }
 }
diff --git a/hostsidetests/scopedstorage/device/src/android/scopedstorage/cts/device/ScopedStorageDeviceTest.java b/hostsidetests/scopedstorage/device/src/android/scopedstorage/cts/device/ScopedStorageDeviceTest.java
index 17f5bc7..014c516 100644
--- a/hostsidetests/scopedstorage/device/src/android/scopedstorage/cts/device/ScopedStorageDeviceTest.java
+++ b/hostsidetests/scopedstorage/device/src/android/scopedstorage/cts/device/ScopedStorageDeviceTest.java
@@ -35,6 +35,7 @@
 import static android.scopedstorage.cts.lib.TestUtils.assertCantRenameFile;
 import static android.scopedstorage.cts.lib.TestUtils.assertDirectoryContains;
 import static android.scopedstorage.cts.lib.TestUtils.assertFileContent;
+import static android.scopedstorage.cts.lib.TestUtils.assertMountMode;
 import static android.scopedstorage.cts.lib.TestUtils.assertThrows;
 import static android.scopedstorage.cts.lib.TestUtils.canOpen;
 import static android.scopedstorage.cts.lib.TestUtils.canOpenFileAs;
@@ -125,6 +126,7 @@
 import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Intent;
+import android.content.pm.ProviderInfo;
 import android.database.Cursor;
 import android.media.ExifInterface;
 import android.net.Uri;
@@ -133,6 +135,8 @@
 import android.os.FileUtils;
 import android.os.ParcelFileDescriptor;
 import android.os.Process;
+import android.os.storage.StorageManager;
+import android.provider.DocumentsContract;
 import android.provider.MediaStore;
 import android.system.ErrnoException;
 import android.system.Os;
@@ -3069,6 +3073,35 @@
         testTransformsDirCommon(file);
     }
 
+
+    /**
+     * Test mount modes for a platform signed app with ACCESS_MTP permission.
+     */
+    @Test
+    public void testMTPAppWithPlatformSignatureMountMode() throws Exception {
+        final String shellPackageName = "com.android.shell";
+        final int uid = getContext().getPackageManager().getPackageUid(shellPackageName, 0);
+        assertMountMode(shellPackageName, uid, StorageManager.MOUNT_MODE_EXTERNAL_ANDROID_WRITABLE);
+    }
+
+    /**
+     * Test mount modes for ExternalStorageProvider and DownloadsProvider.
+     */
+    @Test
+    public void testExternalStorageProviderAndDownloadsProvider() throws Exception {
+        assertWritableMountModeForProvider(DocumentsContract.EXTERNAL_STORAGE_PROVIDER_AUTHORITY);
+        assertWritableMountModeForProvider(DocumentsContract.DOWNLOADS_PROVIDER_AUTHORITY);
+    }
+
+    private void assertWritableMountModeForProvider(String auth) {
+        final ProviderInfo provider = getContext().getPackageManager()
+                .resolveContentProvider(auth, 0);
+        int uid = provider.applicationInfo.uid;
+        final String packageName = provider.applicationInfo.packageName;
+
+        assertMountMode(packageName, uid, StorageManager.MOUNT_MODE_EXTERNAL_ANDROID_WRITABLE);
+    }
+
     private Uri shareAndGetRedactedUri(File file, TestApp testApp) {
         final Uri redactedUri = getRedactedUri(file);
         getContext().grantUriPermission(testApp.getPackageName(), redactedUri,
diff --git a/hostsidetests/scopedstorage/host/src/android/scopedstorage/cts/host/ScopedStorageHostTest.java b/hostsidetests/scopedstorage/host/src/android/scopedstorage/cts/host/ScopedStorageHostTest.java
index 7eba789..f1236b6 100644
--- a/hostsidetests/scopedstorage/host/src/android/scopedstorage/cts/host/ScopedStorageHostTest.java
+++ b/hostsidetests/scopedstorage/host/src/android/scopedstorage/cts/host/ScopedStorageHostTest.java
@@ -59,15 +59,6 @@
             .setDisableIsolatedStorage(true));
     }
 
-    /**
-     * Runs the given phase of SignatureStorageTest by calling into the device.
-     * Throws an exception if the test phase fails.
-     */
-    void runDeviceTestWithPlatformSignature(String phase) throws Exception {
-        assertThat(runDeviceTests("android.scopedstorage.cts.signature",
-                "android.scopedstorage.cts.signature.SignatureStorageTest", phase)).isTrue();
-    }
-
     private void setupExternalStorage() throws Exception {
         if (!mIsExternalStorageSetup) {
             runDeviceTest("setupExternalStorage");
@@ -158,21 +149,6 @@
     }
 
     @Test
-    public void testMTPAppWithoutPlatformSignatureCannotAccessAndroidDirs() throws Exception {
-        runDeviceTest("testMTPAppWithoutPlatformSignatureCannotAccessAndroidDirs");
-    }
-
-    @Test
-    public void testMTPAppWithPlatformSignatureCanAccessAndroidDirs() throws Exception {
-        runDeviceTestWithPlatformSignature("testMTPAppWithPlatformSignatureCanAccessAndroidDirs");
-    }
-
-    @Test
-    public void testExternalStorageProviderAndDownloadsProvider() throws Exception {
-        runDeviceTest("testExternalStorageProviderAndDownloadsProvider");
-    }
-
-    @Test
     public void testManageExternalStorageQueryOtherAppsFile() throws Exception {
         allowAppOps("android:manage_external_storage");
         try {
diff --git a/hostsidetests/scopedstorage/signature/src/android/scopedstorage/cts/signature/SignatureStorageTest.java b/hostsidetests/scopedstorage/signature/src/android/scopedstorage/cts/signature/SignatureStorageTest.java
deleted file mode 100644
index 0c29dab..0000000
--- a/hostsidetests/scopedstorage/signature/src/android/scopedstorage/cts/signature/SignatureStorageTest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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 android.scopedstorage.cts.signature;
-
-import static android.scopedstorage.cts.lib.TestUtils.adoptShellPermissionIdentity;
-import static android.scopedstorage.cts.lib.TestUtils.assertCanAccessPrivateAppAndroidDataDir;
-import static android.scopedstorage.cts.lib.TestUtils.assertCanAccessPrivateAppAndroidObbDir;
-import static android.scopedstorage.cts.lib.TestUtils.assertMountMode;
-import static android.scopedstorage.cts.lib.TestUtils.dropShellPermissionIdentity;
-
-import static androidx.test.InstrumentationRegistry.getContext;
-
-import android.os.storage.StorageManager;
-
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.cts.install.lib.TestApp;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Runs the scoped storage tests as Signature app on primary external storage.
- *
- * <p>These tests are also run on a public volume by {@link PublicVolumeTest}.
- */
-@RunWith(AndroidJUnit4.class)
-public class SignatureStorageTest {
-    static final String THIS_PACKAGE_NAME = getContext().getPackageName();
-    // An app with no permissions
-    private static final TestApp APP_B_NO_PERMS = new TestApp("TestAppB",
-            "android.scopedstorage.cts.testapp.B.noperms", 1, false,
-            "CtsScopedStorageTestAppB.apk");
-    /**
-     * To help avoid flaky tests, give ourselves a unique nonce to be used for
-     * all filesystem paths, so that we don't risk conflicting with previous
-     * test runs.
-     */
-    static final String NONCE = String.valueOf(System.nanoTime());
-
-    static final String NONMEDIA_FILE_NAME = "SignatureStorageTest_file_" + NONCE + ".pdf";
-    /**
-     * Test that signature apps with ACCESS_MTP can access app's private directories in
-     * Android/data and Android/obb
-     */
-    @Test
-    @Ignore("b/183377919")
-    public void testMTPAppWithPlatformSignatureCanAccessAndroidDirs() throws Exception {
-        adoptShellPermissionIdentity(android.Manifest.permission.ACCESS_MTP);
-        try {
-            assertCanAccessPrivateAppAndroidDataDir(true /*canAccess*/, APP_B_NO_PERMS,
-                    THIS_PACKAGE_NAME, NONMEDIA_FILE_NAME);
-            assertCanAccessPrivateAppAndroidObbDir(true /*canAccess*/, APP_B_NO_PERMS,
-                    THIS_PACKAGE_NAME, NONMEDIA_FILE_NAME);
-            final int uid = getContext().getPackageManager().getPackageUid(THIS_PACKAGE_NAME, 0);
-            assertMountMode(THIS_PACKAGE_NAME, uid,
-                    StorageManager.MOUNT_MODE_EXTERNAL_ANDROID_WRITABLE);
-        } finally {
-            dropShellPermissionIdentity();
-        }
-    }
-}
diff --git a/hostsidetests/scopedstorage/src/android/scopedstorage/cts/ScopedStorageTest.java b/hostsidetests/scopedstorage/src/android/scopedstorage/cts/ScopedStorageTest.java
index 48ab8cd..78fc347 100644
--- a/hostsidetests/scopedstorage/src/android/scopedstorage/cts/ScopedStorageTest.java
+++ b/hostsidetests/scopedstorage/src/android/scopedstorage/cts/ScopedStorageTest.java
@@ -76,13 +76,11 @@
 
 import android.Manifest;
 import android.app.WallpaperManager;
-import android.content.pm.ProviderInfo;
 import android.net.Uri;
 import android.os.Environment;
 import android.os.ParcelFileDescriptor;
 import android.os.storage.StorageManager;
 import android.platform.test.annotations.AppModeInstant;
-import android.provider.DocumentsContract;
 import android.provider.MediaStore;
 import android.system.ErrnoException;
 import android.system.Os;
@@ -178,33 +176,6 @@
     }
 
     @Test
-    public void testMTPAppWithoutPlatformSignatureCannotAccessAndroidDirs() throws Exception {
-        // TODO(b/183377919): Grant ACCESS_MTP permission via Shell
-        assertCanAccessPrivateAppAndroidDataDir(false /*canAccess*/, APP_B_NO_PERMS,
-                THIS_PACKAGE_NAME, NONMEDIA_FILE_NAME);
-        assertCanAccessPrivateAppAndroidObbDir(false /*canAccess*/, APP_B_NO_PERMS,
-                THIS_PACKAGE_NAME, NONMEDIA_FILE_NAME);
-    }
-
-    /**
-     * Test mount modes for ExternalStorageProvider and DownloadsProvider.
-     */
-    @Test
-    public void testExternalStorageProviderAndDownloadsProvider() throws Exception {
-        assertWritableMountModeForProvider(DocumentsContract.EXTERNAL_STORAGE_PROVIDER_AUTHORITY);
-        assertWritableMountModeForProvider(DocumentsContract.DOWNLOADS_PROVIDER_AUTHORITY);
-    }
-
-    private void assertWritableMountModeForProvider(String auth) {
-        final ProviderInfo provider = getContext().getPackageManager()
-                .resolveContentProvider(auth, 0);
-        int uid = provider.applicationInfo.uid;
-        final String packageName = provider.applicationInfo.packageName;
-
-        assertMountMode(packageName, uid, StorageManager.MOUNT_MODE_EXTERNAL_ANDROID_WRITABLE);
-    }
-
-    @Test
     public void testManageExternalStorageCanCreateFilesAnywhere() throws Exception {
         pollForManageExternalStorageAllowed();
 
diff --git a/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java b/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java
index 8acb38f..23b59cc 100644
--- a/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java
+++ b/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java
@@ -1329,7 +1329,7 @@
     @CddTest(requirement="9.7")
     @Test
     public void testKeystoreDomain() throws DeviceNotAvailableException {
-        assertDomainOne("u:r:keystore:s0", "/system/bin/keystore");
+        assertDomainOne("u:r:keystore:s0", "/system/bin/keystore2");
     }
 
     /* System server better be running :-P */
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2020-0072/Android.bp b/hostsidetests/securitybulletin/securityPatch/CVE-2020-0072/Android.bp
new file mode 100644
index 0000000..9bf90d3
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2020-0072/Android.bp
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ *
+ */
+
+cc_test {
+    name: "CVE-2020-0072",
+    defaults: ["cts_hostsidetests_securitybulletin_defaults"],
+    srcs: [
+        "poc.cpp",
+    ],
+    compile_multilib: "64",
+    shared_libs: [
+        "libnfc-nci",
+    ],
+    include_dirs: [
+        "system/nfc/src/nfc/include",
+        "system/nfc/src/gki/common",
+        "system/nfc/src/gki/ulinux",
+        "system/nfc/src/include",
+    ],
+}
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2020-0072/poc.cpp b/hostsidetests/securitybulletin/securityPatch/CVE-2020-0072/poc.cpp
new file mode 100644
index 0000000..048c6c7
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2020-0072/poc.cpp
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ */
+
+#include "../includes/common.h"
+#include <stdlib.h>
+
+#include <nfc_api.h>
+#include <rw_int.h>
+
+#define NUM_BYTES 1
+
+extern tRW_CB rw_cb;
+void rw_init(void);
+void rw_t2t_handle_rsp(uint8_t *p_data);
+
+void poc_cback(tRW_EVENT event, tRW_DATA *p_rw_data) {
+  (void)event;
+  (void)p_rw_data;
+}
+
+int main() {
+  tRW_T2T_CB *p_t2t = &rw_cb.tcb.t2t;
+  rw_init();
+  rw_cb.p_cback = &poc_cback;
+  p_t2t->state = RW_T2T_STATE_DETECT_TLV;
+  p_t2t->tlv_detect = TAG_LOCK_CTRL_TLV;
+  p_t2t->substate = RW_T2T_SUBSTATE_WAIT_READ_TLV_VALUE;
+  p_t2t->found_tlv = TAG_LOCK_CTRL_TLV;
+  p_t2t->bytes_count = NUM_BYTES;
+  p_t2t->tlv_value[1] = 0;
+  int index = p_t2t->num_lock_tlvs;
+  uint8_t data[T2T_READ_DATA_LEN];
+  rw_t2t_handle_rsp(data);
+  int ret = (p_t2t->lock_tlv[index].num_bits == p_t2t->tlv_value[1])
+                ? EXIT_VULNERABLE
+                : EXIT_SUCCESS;
+  return ret;
+}
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2021-0473/Android.bp b/hostsidetests/securitybulletin/securityPatch/CVE-2021-0473/Android.bp
new file mode 100644
index 0000000..7119250
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2021-0473/Android.bp
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ *
+ */
+
+cc_test {
+    name: "CVE-2021-0473",
+    defaults: ["cts_hostsidetests_securitybulletin_defaults"],
+    srcs: [
+        "poc.cpp",
+    ],
+    compile_multilib: "64",
+    shared_libs: [
+        "libnfc-nci",
+    ],
+    include_dirs: [
+        "system/nfc/src/nfc/include",
+        "system/nfc/src/gki/common",
+        "system/nfc/src/gki/ulinux",
+        "system/nfc/src/include",
+    ],
+}
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2021-0473/poc.cpp b/hostsidetests/securitybulletin/securityPatch/CVE-2021-0473/poc.cpp
new file mode 100644
index 0000000..d7650ad
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2021-0473/poc.cpp
@@ -0,0 +1,118 @@
+/*
+ * 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.
+ */
+
+#include "../includes/common.h"
+#include <dlfcn.h>
+#include <nfc_int.h>
+#include <rw_int.h>
+#include <vector>
+
+using namespace std;
+
+extern tRW_CB rw_cb;
+extern tNFC_CB nfc_cb;
+void rw_init(void);
+
+tNFC_STATUS rw_t3t_select(uint8_t peerNfcID[NCI_RF_F_UID_LEN],
+                          uint8_t mrtiCheck, uint8_t mrtiUpdate);
+
+static void (*real_GKI_freebuf)(void *ptr) = nullptr;
+static void *(*real_GKI_getpoolbuf)(uint8_t pool_id) = nullptr;
+bool kIsInitialized = false;
+bool kIsVulnerable = false;
+
+struct myPtr {
+  void *ptr = nullptr;
+  bool isFreed = false;
+};
+
+struct myPtr vulnerablePtr;
+
+enum {
+  RW_T3T_STATE_NOT_ACTIVATED,
+  RW_T3T_STATE_IDLE,
+  RW_T3T_STATE_COMMAND_PENDING
+};
+
+void poc_cback(tRW_EVENT, tRW_DATA *) {}
+
+void GKI_start_timer(uint8_t, int32_t, bool) {}
+
+void GKI_stop_timer(uint8_t) {}
+
+void init(void) {
+  real_GKI_freebuf = (void (*)(void *))dlsym(RTLD_NEXT, "_Z11GKI_freebufPv");
+  if (!real_GKI_freebuf) {
+    return;
+  }
+  real_GKI_getpoolbuf =
+      (void *(*)(uint8_t))dlsym(RTLD_NEXT, "_Z14GKI_getpoolbufh");
+  if (!real_GKI_freebuf) {
+    return;
+  }
+  kIsInitialized = true;
+}
+
+void *GKI_getpoolbuf(uint8_t pool_id) {
+  if (!kIsInitialized) {
+    init();
+  }
+  void *ptr = real_GKI_getpoolbuf(pool_id);
+  if (pool_id == NFC_RW_POOL_ID) {
+    vulnerablePtr.ptr = ptr;
+  }
+  return ptr;
+}
+
+void GKI_freebuf(void *ptr) {
+  if (!kIsInitialized) {
+    init();
+  }
+  if (ptr == vulnerablePtr.ptr) {
+    if (vulnerablePtr.isFreed) {
+      kIsVulnerable = true;
+    } else {
+      vulnerablePtr.isFreed = true;
+    }
+  }
+  real_GKI_freebuf(ptr);
+}
+
+int main() {
+  tRW_T3T_CB *p_t3t = &rw_cb.tcb.t3t;
+
+  GKI_init();
+  rw_init();
+  rw_cb.p_cback = &poc_cback;
+
+  uint8_t peerNfcID[NCI_RF_F_UID_LEN];
+  uint8_t mrtiCheck = 1, mrtiUpdate = 1;
+  if (rw_t3t_select(peerNfcID, mrtiCheck, mrtiUpdate) != NFC_STATUS_OK) {
+    return EXIT_FAILURE;
+  }
+
+  tNFC_CONN p_data = {};
+  NFC_HDR nfcHdr = {};
+  p_data.data.p_data = &nfcHdr;
+
+  tNFC_CONN_CB *p_cb = &nfc_cb.conn_cb[NFC_RF_CONN_ID];
+  p_t3t->rw_state = RW_T3T_STATE_COMMAND_PENDING;
+
+  uint8_t conn_id = NFC_RF_CONN_ID;
+  tNFC_CONN_EVT event = NFC_ERROR_CEVT;
+  p_cb->p_cback(conn_id, event, &p_data);
+  return (kIsVulnerable) ? EXIT_VULNERABLE : EXIT_SUCCESS;
+}
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/AdbUtils.java b/hostsidetests/securitybulletin/src/android/security/cts/AdbUtils.java
index eaba89f..912ba28 100644
--- a/hostsidetests/securitybulletin/src/android/security/cts/AdbUtils.java
+++ b/hostsidetests/securitybulletin/src/android/security/cts/AdbUtils.java
@@ -68,6 +68,7 @@
         ITestDevice device;
         CrashUtils.Config config;
         List<String> inputFiles = Collections.emptyList();
+        boolean checkCrash = true;
 
         pocConfig(String binaryName, ITestDevice device) {
             this.binaryName = binaryName;
@@ -688,10 +689,12 @@
                 removeResources(inputFiles, testConfig.inputFilesDestination, testConfig.device);
             }
         }
-        if (testConfig.config == null) {
-            testConfig.config = new CrashUtils.Config();
+        if(testConfig.checkCrash) {
+            if (testConfig.config == null) {
+                testConfig.config = new CrashUtils.Config();
+            }
+            assertNoCrashes(testConfig.device, testConfig.config);
         }
-        assertNoCrashes(testConfig.device, testConfig.config);
     }
 
     /**
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/CVE_2020_0072.java b/hostsidetests/securitybulletin/src/android/security/cts/CVE_2020_0072.java
new file mode 100644
index 0000000..4f355d3
--- /dev/null
+++ b/hostsidetests/securitybulletin/src/android/security/cts/CVE_2020_0072.java
@@ -0,0 +1,40 @@
+/*
+ * 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 android.security.cts;
+
+import android.platform.test.annotations.SecurityTest;
+import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(DeviceJUnit4ClassRunner.class)
+public class CVE_2020_0072 extends SecurityTestCase {
+
+    /**
+     * b/147310271
+     * Vulnerability Behaviour: EXIT_VULNERABLE (113)
+     */
+    @SecurityTest(minPatchLevel = "2020-04")
+    @Test
+    public void testPocCVE_2020_0072() throws Exception {
+        AdbUtils.assumeHasNfc(getDevice());
+        pocPusher.only64();
+        AdbUtils.pocConfig testConfig = new AdbUtils.pocConfig("CVE-2020-0072", getDevice());
+        testConfig.checkCrash = false;
+        AdbUtils.runPocAssertNoCrashesNotVulnerable(testConfig);
+    }
+}
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/CVE_2021_0473.java b/hostsidetests/securitybulletin/src/android/security/cts/CVE_2021_0473.java
new file mode 100644
index 0000000..d2dc169
--- /dev/null
+++ b/hostsidetests/securitybulletin/src/android/security/cts/CVE_2021_0473.java
@@ -0,0 +1,40 @@
+/*
+ * 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 android.security.cts;
+
+import android.platform.test.annotations.SecurityTest;
+import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(DeviceJUnit4ClassRunner.class)
+public class CVE_2021_0473 extends SecurityTestCase {
+
+    /**
+     * b/179687208
+     * Vulnerability Behavior: EXIT_VULNERABLE (113)
+     */
+    @SecurityTest(minPatchLevel = "2021-05")
+    @Test
+    public void testPocCVE_2021_0473() throws Exception {
+        AdbUtils.assumeHasNfc(getDevice());
+        pocPusher.only64();
+        AdbUtils.pocConfig testConfig = new AdbUtils.pocConfig("CVE-2021-0473", getDevice());
+        testConfig.checkCrash = false;
+        AdbUtils.runPocAssertNoCrashesNotVulnerable(testConfig);
+    }
+}
diff --git a/hostsidetests/settings/app/DeviceOwnerApp/Android.bp b/hostsidetests/settings/app/DeviceOwnerApp/Android.bp
index 4b4f661..ec63294 100644
--- a/hostsidetests/settings/app/DeviceOwnerApp/Android.bp
+++ b/hostsidetests/settings/app/DeviceOwnerApp/Android.bp
@@ -38,6 +38,7 @@
         "ub-uiautomator",
         "truth-prebuilt",
         "cts-wm-util",
+        "DpmWrapper",
     ],
     // tag this module as a cts test artifact
     test_suites: [
diff --git a/hostsidetests/settings/app/DeviceOwnerApp/AndroidManifest.xml b/hostsidetests/settings/app/DeviceOwnerApp/AndroidManifest.xml
index be53c0c..049e294 100644
--- a/hostsidetests/settings/app/DeviceOwnerApp/AndroidManifest.xml
+++ b/hostsidetests/settings/app/DeviceOwnerApp/AndroidManifest.xml
@@ -17,6 +17,11 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.google.android.cts.deviceowner">
 
+    <!-- TODO(b/176993670): needed by DevicePolicyManagerWrapper to send ordered broadcast from
+         current user to system user on devices running on headless system user mode. Should be
+         removed once tests are refactored to use the proper IPC between theses users.  -->
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
+
     <application android:label="Privacy Settings for Device Owner CTS host side app"
          android:testOnly="true">
 
@@ -40,6 +45,11 @@
                 <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
             </intent-filter>
         </receiver>
+
+         <!--  TODO(b/176993670): remove if DpmWrapperManagerWrapper goes away -->
+        <receiver android:name="com.android.bedstead.dpmwrapper.TestAppCallbacksReceiver"
+             android:exported="true">
+        </receiver>
     </application>
 
     <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
diff --git a/hostsidetests/settings/app/DeviceOwnerApp/src/com/google/android/cts/deviceowner/DeviceOwnerTest.java b/hostsidetests/settings/app/DeviceOwnerApp/src/com/google/android/cts/deviceowner/DeviceOwnerTest.java
index 6581614..ede4b88 100644
--- a/hostsidetests/settings/app/DeviceOwnerApp/src/com/google/android/cts/deviceowner/DeviceOwnerTest.java
+++ b/hostsidetests/settings/app/DeviceOwnerApp/src/com/google/android/cts/deviceowner/DeviceOwnerTest.java
@@ -17,6 +17,8 @@
 
 import static android.server.wm.WindowManagerState.STATE_RESUMED;
 
+import static com.google.common.truth.Truth.assertWithMessage;
+
 import android.app.admin.DeviceAdminReceiver;
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
@@ -30,24 +32,44 @@
 import android.support.test.uiautomator.UiDevice;
 import android.support.test.uiautomator.Until;
 import android.test.InstrumentationTestCase;
+import android.util.Log;
+
 import androidx.test.InstrumentationRegistry;
 
+import com.android.bedstead.dpmwrapper.DeviceOwnerHelper;
+import com.android.bedstead.dpmwrapper.TestAppSystemServiceFactory;
+import com.android.compatibility.common.util.enterprise.DeviceAdminReceiverUtils;
+
 /**
  * Class for device-owner based tests.
  *
  * <p>This class handles making sure that the test is the device owner and that it has an active
  * admin registered if necessary. The admin component can be accessed through {@link #getWho()}.
  */
-public class DeviceOwnerTest extends InstrumentationTestCase {
+public final class DeviceOwnerTest extends InstrumentationTestCase {
 
-    public static final int TIMEOUT = 2000;
+    private static final String TAG = DeviceOwnerTest.class.getSimpleName();
+
+    private static final String WORK_POLICY_INFO_TEXT = "Your work policy info";
+
+    public static final int TIMEOUT_MS = 2_000;
 
     protected Context mContext;
     protected UiDevice mDevice;
 
     /** Device Admin receiver for DO. */
-    public static class BasicAdminReceiver extends DeviceAdminReceiver {
-        /* empty */
+    public static final class BasicAdminReceiver extends DeviceAdminReceiver {
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            // Ignore intents used by DpmWrapper IPC between current and system users
+            if (DeviceOwnerHelper.runManagerMethod(this, context, intent)) return;
+
+            // Hack used to manually disable the admin during development
+            if (DeviceAdminReceiverUtils.disableSelf(context, intent)) return;
+
+            super.onReceive(context, intent);
+        }
     }
 
     static final String PACKAGE_NAME = DeviceOwnerTest.class.getPackage().getName();
@@ -64,15 +86,19 @@
         mContext = getInstrumentation().getContext();
         mDevice = UiDevice.getInstance(getInstrumentation());
         mPackageManager = mContext.getPackageManager();
-        mDevicePolicyManager =
-                (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
+        mDevicePolicyManager = TestAppSystemServiceFactory.getDevicePolicyManager(mContext,
+                BasicAdminReceiver.class);
 
         mIsDeviceOwner = mDevicePolicyManager.isDeviceOwnerApp(PACKAGE_NAME);
+        Log.d(TAG, "setup(): dpm=" + mDevicePolicyManager + ", isDO: " + mIsDeviceOwner);
+
         if (mIsDeviceOwner) {
-            assertTrue(mDevicePolicyManager.isAdminActive(RECEIVER_COMPONENT));
+            assertWithMessage("isAdminActive(%s)", RECEIVER_COMPONENT)
+                    .that(mDevicePolicyManager.isAdminActive(RECEIVER_COMPONENT)).isTrue();
 
             // Note DPM.getDeviceOwner() now always returns null on non-DO users as of NYC.
-            assertEquals(PACKAGE_NAME, mDevicePolicyManager.getDeviceOwner());
+            assertWithMessage("%s.getDeviceOwner()", mDevicePolicyManager)
+                    .that(mDevicePolicyManager.getDeviceOwner()).isEqualTo(PACKAGE_NAME);
         }
 
         try {
@@ -93,7 +119,7 @@
     protected void tearDown() throws Exception {
         mDevice.pressBack();
         mDevice.pressHome();
-        mDevice.waitForIdle(TIMEOUT); // give UI time to finish animating
+        mDevice.waitForIdle(TIMEOUT_MS); // give UI time to finish animating
     }
 
     private boolean launchPrivacyAndCheckWorkPolicyInfo() throws Exception {
@@ -101,9 +127,11 @@
         launchSettingsPage(InstrumentationRegistry.getContext(), Settings.ACTION_PRIVACY_SETTINGS);
 
         // Wait for loading permission usage data.
-        mDevice.waitForIdle(TIMEOUT);
+        mDevice.waitForIdle(TIMEOUT_MS);
 
-        return (null != mDevice.wait(Until.findObject(By.text("Your work policy info")), TIMEOUT));
+        Log.d(TAG, "Waiting " + TIMEOUT_MS + "ms for the '" + WORK_POLICY_INFO_TEXT + "' message");
+
+        return (null != mDevice.wait(Until.findObject(By.text(WORK_POLICY_INFO_TEXT)), TIMEOUT_MS));
     }
 
     private void launchSettingsPage(Context ctx, String pageName) throws Exception {
@@ -128,15 +156,24 @@
                         PackageManager.DONT_KILL_APP);
     }
 
+    private void launchPrivacySettingsAndAssertWorkPolicyInfoIsShowing() throws Exception {
+        assertWithMessage("Work policy info (%s) on settings entry", WORK_POLICY_INFO_TEXT)
+                .that(launchPrivacyAndCheckWorkPolicyInfo()).isTrue();
+    }
+
+    private void launchPrivacySettingsAndAssertWorkPolicyInfoIsNotShowing() throws Exception {
+        assertWithMessage("Work policy info (%s) on settings entry", WORK_POLICY_INFO_TEXT)
+                .that(launchPrivacyAndCheckWorkPolicyInfo()).isFalse();
+    }
+
     /**
      * If the app is the active device owner and has work policy info, then we should have a Privacy
      * entry for it.
      */
     public void testDeviceOwnerWithInfo() throws Exception {
-        assertTrue(mIsDeviceOwner);
-        assertTrue(
-                "Couldn't find work policy info settings entry",
-                launchPrivacyAndCheckWorkPolicyInfo());
+        assertWithMessage("is device owner").that(mIsDeviceOwner).isTrue();
+
+        launchPrivacySettingsAndAssertWorkPolicyInfoIsShowing();
     }
 
     /**
@@ -144,11 +181,11 @@
      * have a Privacy entry for it.
      */
     public void testDeviceOwnerWithoutInfo() throws Exception {
-        assertTrue(mIsDeviceOwner);
+        assertWithMessage("is device owner").that(mIsDeviceOwner).isTrue();
+
         disableWorkPolicyInfoActivity();
-        assertFalse(
-                "Work policy info settings entry shouldn't be present",
-                launchPrivacyAndCheckWorkPolicyInfo());
+
+        launchPrivacySettingsAndAssertWorkPolicyInfoIsNotShowing();
     }
 
     /**
@@ -156,10 +193,9 @@
      * policy info.
      */
     public void testNonDeviceOwnerWithInfo() throws Exception {
-        assertFalse(mIsDeviceOwner);
-        assertFalse(
-                "Work policy info settings entry shouldn't be present",
-                launchPrivacyAndCheckWorkPolicyInfo());
+        assertWithMessage("is device owner").that(mIsDeviceOwner).isFalse();
+
+        launchPrivacySettingsAndAssertWorkPolicyInfoIsNotShowing();
     }
 
     /**
@@ -167,10 +203,10 @@
      * not have a Privacy entry for work policy info.
      */
     public void testNonDeviceOwnerWithoutInfo() throws Exception {
-        assertFalse(mIsDeviceOwner);
+        assertWithMessage("is device owner").that(mIsDeviceOwner).isFalse();
+
         disableWorkPolicyInfoActivity();
-        assertFalse(
-                "Work policy info settings entry shouldn't be present",
-                launchPrivacyAndCheckWorkPolicyInfo());
+
+        launchPrivacySettingsAndAssertWorkPolicyInfoIsNotShowing();
     }
 }
diff --git a/hostsidetests/settings/src/com/google/android/cts/settings/PrivacyDeviceOwnerTest.java b/hostsidetests/settings/src/com/google/android/cts/settings/PrivacyDeviceOwnerTest.java
index da7d873..8bac012 100644
--- a/hostsidetests/settings/src/com/google/android/cts/settings/PrivacyDeviceOwnerTest.java
+++ b/hostsidetests/settings/src/com/google/android/cts/settings/PrivacyDeviceOwnerTest.java
@@ -21,6 +21,7 @@
 import com.android.ddmlib.testrunner.TestResult.TestStatus;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.device.DeviceNotAvailableException;
+import com.android.tradefed.device.ITestDevice;
 import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.result.CollectingTestListener;
 import com.android.tradefed.result.TestDescription;
@@ -47,6 +48,9 @@
     private static final String ADMIN_RECEIVER_TEST_CLASS = ".DeviceOwnerTest$BasicAdminReceiver";
     private static final String CLEAR_DEVICE_OWNER_TEST_CLASS = ".ClearDeviceOwnerTest";
 
+    // TODO (b/174775905) move to ITestDevice.
+    private static final int USER_SYSTEM = 0;
+
     /**
      * The defined timeout (in milliseconds) is used as a maximum waiting time when expecting the
      * command output from the device. At any time, if the shell command does not output anything
@@ -66,6 +70,9 @@
     protected boolean mHasFeature;
     protected IBuildInfo mCtsBuild;
 
+    private int mDeviceOwnerUserId;
+    private int mTestUserId;
+
     @Override
     public void setBuild(IBuildInfo buildInfo) {
         mCtsBuild = buildInfo;
@@ -76,8 +83,19 @@
         super.setUp();
 
         mHasFeature = hasDeviceFeature("android.software.device_admin");
-        if (mHasFeature) {
-            installPackage(DEVICE_OWNER_APK);
+        if (!mHasFeature) return;
+
+        mTestUserId = getDevice().getCurrentUser();
+        if (isHeadlessSystemUserMode()) {
+            mDeviceOwnerUserId = USER_SYSTEM;
+        } else {
+            mDeviceOwnerUserId = mTestUserId;
+        }
+
+        installPackage(mDeviceOwnerUserId, DEVICE_OWNER_APK);
+
+        if (isHeadlessSystemUserMode()) {
+            grantDpmWrapperPermissions(mTestUserId);
         }
     }
 
@@ -137,20 +155,22 @@
                 runDeviceTests(DEVICE_OWNER_PKG, testClass, testMethodName));
     }
 
-    protected void installPackage(String appFileName)
+    protected void installPackage(int userId, String appFileName)
             throws FileNotFoundException, DeviceNotAvailableException {
-        CLog.d("Installing app " + appFileName);
+        CLog.d("Installing app %s on user %d", appFileName, userId);
         CompatibilityBuildHelper buildHelper = new CompatibilityBuildHelper(mCtsBuild);
         List<String> extraArgs = new LinkedList<>();
         extraArgs.add("-t");
         String result =
                 getDevice()
-                        .installPackage(
+                        .installPackageForUser(
                                 buildHelper.getTestFile(appFileName),
                                 true,
                                 true,
+                                userId,
                                 extraArgs.toArray(new String[extraArgs.size()]));
-        assertNull("Failed to install " + appFileName + ": " + result, result);
+        assertNull("Failed to install " + appFileName + " on user " + userId + ": " + result,
+                result);
     }
 
     protected boolean runDeviceTests(
@@ -172,7 +192,9 @@
         }
 
         CollectingTestListener listener = new CollectingTestListener();
-        boolean runResult = getDevice().runInstrumentationTests(testRunner, listener);
+        CLog.i("Running %s.%s on user %d", testClassName, testMethodName, mTestUserId);
+        boolean runResult = getDevice().runInstrumentationTestsAsUser(testRunner, mTestUserId,
+                listener);
 
         final TestRunResult result = listener.getCurrentRunResults();
         if (result.isRunFailure()) {
@@ -234,4 +256,30 @@
         }
         return result;
     }
+
+    protected void grantDpmWrapperPermissions(int userId) throws Exception {
+        // TODO(b/176993670): INTERACT_ACROSS_USERS is needed by DevicePolicyManagerWrapper to
+        // get the current user; the permission is available on mDeviceOwnerUserId because it
+        // was installed with -g, but not on mPrimaryUserId as the app is intalled by code
+        // (DPMS.manageUserUnchecked(), which don't grant it (as this is a privileged permission
+        // that's not available to 3rd party apps). If we get rid of DevicePolicyManagerWrapper,
+        // we won't need to grant it anymore.
+        CLog.i("Granting INTERACT_ACROSS_USERS to DO %s on user %d as it will need to send ordered "
+                + "broadcasts to user 0", DEVICE_OWNER_PKG, userId);
+        getDevice().executeShellCommand("pm grant --user " + userId + " " + DEVICE_OWNER_PKG
+                + " android.permission.INTERACT_ACROSS_USERS");
+    }
+
+    // TODO (b/174775905) remove after exposing the check from ITestDevice.
+    boolean isHeadlessSystemUserMode() throws DeviceNotAvailableException {
+        return isHeadlessSystemUserMode(getDevice());
+    }
+
+    // TODO (b/174775905) remove after exposing the check from ITestDevice.
+    public static boolean isHeadlessSystemUserMode(ITestDevice device)
+            throws DeviceNotAvailableException {
+        final String result = device
+                .executeShellCommand("getprop ro.fw.mu.headless_system_user").trim();
+        return "true".equalsIgnoreCase(result);
+    }
 }
diff --git a/hostsidetests/statsdatom/src/android/cts/statsdatom/incremental/AppErrorAtomTests.java b/hostsidetests/statsdatom/src/android/cts/statsdatom/incremental/AppErrorAtomTests.java
index 6cc063d..e3204d2 100644
--- a/hostsidetests/statsdatom/src/android/cts/statsdatom/incremental/AppErrorAtomTests.java
+++ b/hostsidetests/statsdatom/src/android/cts/statsdatom/incremental/AppErrorAtomTests.java
@@ -60,6 +60,10 @@
 
     @Before
     public void setUp() throws Exception {
+        if (!getDevice().hasFeature(FEATURE_INCREMENTAL_DELIVERY)) {
+            return;
+        }
+        super.setUp();
         ConfigUtils.removeConfig(getDevice());
         ReportUtils.clearReports(getDevice());
         CompatibilityBuildHelper buildHelper = new CompatibilityBuildHelper(mCtsBuild);
@@ -94,6 +98,7 @@
         }
         getDevice().uninstallPackage(DeviceUtils.STATSD_ATOM_TEST_PKG);
         assertFalse(getDevice().isPackageInstalled(DeviceUtils.STATSD_ATOM_TEST_PKG));
+        super.tearDown();
     }
 
     public void testAppCrashOnIncremental() throws Exception {
diff --git a/hostsidetests/statsdatom/src/android/cts/statsdatom/lib/ConfigUtils.java b/hostsidetests/statsdatom/src/android/cts/statsdatom/lib/ConfigUtils.java
index 0452161..5671afb 100644
--- a/hostsidetests/statsdatom/src/android/cts/statsdatom/lib/ConfigUtils.java
+++ b/hostsidetests/statsdatom/src/android/cts/statsdatom/lib/ConfigUtils.java
@@ -71,6 +71,7 @@
                 // TODO(b/134091167): Fix bluetooth source name issue in Auto platform.
                 .addAllowedLogSource("com.android.bluetooth")
                 .addAllowedLogSource("AID_LMKD")
+                .addAllowedLogSource("AID_MEDIA")
                 .addAllowedLogSource("AID_RADIO")
                 .addAllowedLogSource("AID_ROOT")
                 .addAllowedLogSource("AID_STATSD")
diff --git a/hostsidetests/statsdatom/src/android/cts/statsdatom/lib/DeviceUtils.java b/hostsidetests/statsdatom/src/android/cts/statsdatom/lib/DeviceUtils.java
index e937823..4f2f897 100644
--- a/hostsidetests/statsdatom/src/android/cts/statsdatom/lib/DeviceUtils.java
+++ b/hostsidetests/statsdatom/src/android/cts/statsdatom/lib/DeviceUtils.java
@@ -352,6 +352,10 @@
         return device.executeShellCommand("getprop " + prop).replace("\n", "");
     }
 
+    public static boolean isDebuggable(ITestDevice device) throws Exception {
+        return Integer.parseInt(getProperty(device, "ro.debuggable")) == 1;
+    }
+
     public static boolean checkDeviceFor(ITestDevice device, String methodName) throws Exception {
         try {
             runDeviceTestsOnStatsdApp(device, ".Checkers", methodName);
diff --git a/hostsidetests/statsdatom/src/android/cts/statsdatom/statsd/UidAtomTests.java b/hostsidetests/statsdatom/src/android/cts/statsdatom/statsd/UidAtomTests.java
index 0d377ec..81fe295 100644
--- a/hostsidetests/statsdatom/src/android/cts/statsdatom/statsd/UidAtomTests.java
+++ b/hostsidetests/statsdatom/src/android/cts/statsdatom/statsd/UidAtomTests.java
@@ -83,6 +83,7 @@
     private static final String FEATURE_LEANBACK_ONLY = "android.software.leanback_only";
     private static final String FEATURE_LOCATION_GPS = "android.hardware.location.gps";
     private static final String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture";
+    private static final String FEATURE_TV = "android.hardware.type.television";
 
     private IBuildInfo mCtsBuild;
 
@@ -208,6 +209,12 @@
     }
 
     public void testAppCrashOccurredNative() throws Exception {
+        if (DeviceUtils.hasFeature(getDevice(), FEATURE_TV)
+                && DeviceUtils.isDebuggable(getDevice())) {
+            // Skip TVs that are debuggable because ActivityManager does not properly terminate
+            // the activity in the event of a native crash.
+            return;
+        }
         final int atomTag = Atom.APP_CRASH_OCCURRED_FIELD_NUMBER;
         ConfigUtils.uploadConfigForPushedAtomWithUid(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG,
                 atomTag,  /*uidInAttributionChain=*/false);
diff --git a/hostsidetests/tagging/common/Android.bp b/hostsidetests/tagging/common/Android.bp
index 468940e..147cbde 100644
--- a/hostsidetests/tagging/common/Android.bp
+++ b/hostsidetests/tagging/common/Android.bp
@@ -40,14 +40,10 @@
 
 android_test_helper_app {
     name: "DeviceKernelHelpers",
-    defaults: ["cts_defaults"],
-    compile_multilib: "both",
+    defaults: ["cts_tagging_app_defaults"],
     test_suites: [
         "cts",
         "general-tests",
     ],
-    static_libs: ["tagging-common-devicesidelib"],
-    jni_libs: ["libtagging-common-devicesidelib-jni"],
     srcs: ["src/**/DeviceKernelHelpers.java"],
-    sdk_version: "current",
 }
diff --git a/hostsidetests/tagging/common/AndroidManifest.xml b/hostsidetests/tagging/common/AndroidManifest.xml
index 41d0459..dc5ec58 100644
--- a/hostsidetests/tagging/common/AndroidManifest.xml
+++ b/hostsidetests/tagging/common/AndroidManifest.xml
@@ -21,16 +21,11 @@
 
     <application android:debuggable="true"
                  android:allowNativeHeapPointerTagging="true">
-        <activity android:name=".DeviceKernelHelpers">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
+        <uses-library android:name="android.test.runner" />
     </application>
 
     <instrumentation
-        android:name="android.test.InstrumentationTestRunner"
+        android:name="androidx.test.runner.AndroidJUnitRunner"
         android:targetPackage="android.cts.tagging.support" />
 </manifest>
 
diff --git a/hostsidetests/tagging/common/src/android/cts/tagging/support/DeviceKernelHelpers.java b/hostsidetests/tagging/common/src/android/cts/tagging/support/DeviceKernelHelpers.java
index 2453192..bb956bd 100644
--- a/hostsidetests/tagging/common/src/android/cts/tagging/support/DeviceKernelHelpers.java
+++ b/hostsidetests/tagging/common/src/android/cts/tagging/support/DeviceKernelHelpers.java
@@ -16,18 +16,20 @@
 
 package android.cts.tagging.support;
 
-import android.app.Activity;
 import android.cts.tagging.Utils;
-import android.os.Bundle;
 import android.util.Log;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+import org.junit.Test;
+import org.junit.runner.RunWith;
 
-public class DeviceKernelHelpers extends Activity {
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class DeviceKernelHelpers {
     private static final String TAG = DeviceKernelHelpers.class.getSimpleName();
 
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
+    @Test
+    public void logKernelTaggedAddressABISupport() {
         if (Utils.kernelSupportsTaggedPointers()) {
             Log.i(TAG, "Kernel supports tagged pointers: true");
         } else {
diff --git a/hostsidetests/tagging/src/com/android/cts/tagging/TaggingBaseTest.java b/hostsidetests/tagging/src/com/android/cts/tagging/TaggingBaseTest.java
index 30d6841..6fa5cd9 100644
--- a/hostsidetests/tagging/src/com/android/cts/tagging/TaggingBaseTest.java
+++ b/hostsidetests/tagging/src/com/android/cts/tagging/TaggingBaseTest.java
@@ -25,9 +25,9 @@
     private static final String DEVICE_KERNEL_HELPER_CLASS_NAME = "DeviceKernelHelpers";
     private static final String DEVICE_KERNEL_HELPER_APK_NAME = "DeviceKernelHelpers.apk";
     private static final String DEVICE_KERNEL_HELPER_PKG_NAME = "android.cts.tagging.support";
-    private static final String KERNEL_HELPER_START_COMMAND =
-            String.format("am start -W -a android.intent.action.MAIN -n %s/.%s",
-                    DEVICE_KERNEL_HELPER_PKG_NAME, DEVICE_KERNEL_HELPER_CLASS_NAME);
+    private static final String KERNEL_HELPER_START_COMMAND = String.format(
+        "am instrument -w -e package %1$s %1$s/androidx.test.runner.AndroidJUnitRunner",
+        DEVICE_KERNEL_HELPER_PKG_NAME);
 
     protected static final long NATIVE_HEAP_POINTER_TAGGING_CHANGE_ID = 135754954;
     protected static final String DEVICE_TEST_CLASS_NAME = ".TaggingTest";
diff --git a/tests/AlarmManager/app/src/android/alarmmanager/alarmtestapp/cts/TestAlarmScheduler.java b/tests/AlarmManager/app/src/android/alarmmanager/alarmtestapp/cts/TestAlarmScheduler.java
index 991e165..d9db0b0 100644
--- a/tests/AlarmManager/app/src/android/alarmmanager/alarmtestapp/cts/TestAlarmScheduler.java
+++ b/tests/AlarmManager/app/src/android/alarmmanager/alarmtestapp/cts/TestAlarmScheduler.java
@@ -16,6 +16,7 @@
 
 package android.alarmmanager.alarmtestapp.cts;
 
+import android.app.Activity;
 import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
@@ -35,8 +36,8 @@
     public static final String ACTION_SET_ALARM = PACKAGE_NAME + ".action.SET_ALARM";
     public static final String EXTRA_TRIGGER_TIME = PACKAGE_NAME + ".extra.TRIGGER_TIME";
     public static final String EXTRA_REPEAT_INTERVAL = PACKAGE_NAME + ".extra.REPEAT_INTERVAL";
+    public static final String EXTRA_WINDOW_LENGTH = PACKAGE_NAME + ".extra.WINDOW_LENGTH";
     public static final String EXTRA_TYPE = PACKAGE_NAME + ".extra.TYPE";
-    public static final String EXTRA_ALLOW_WHILE_IDLE = PACKAGE_NAME + ".extra.ALLOW_WHILE_IDLE";
     public static final String ACTION_SET_ALARM_CLOCK = PACKAGE_NAME + ".action.SET_ALARM_CLOCK";
     public static final String EXTRA_ALARM_CLOCK_INFO = PACKAGE_NAME + ".extra.ALARM_CLOCK_INFO";
     public static final String ACTION_CANCEL_ALL_ALARMS = PACKAGE_NAME + ".action.CANCEL_ALARMS";
@@ -62,6 +63,7 @@
                         intent.getParcelableExtra(EXTRA_ALARM_CLOCK_INFO);
                 Log.d(TAG, "Setting alarm clock " + alarmClockInfo + " id: " + id);
                 am.setAlarmClock(alarmClockInfo, alarmClockSender);
+                setResult(Activity.RESULT_OK, null, null);
                 break;
             case ACTION_SET_ALARM:
                 if (!intent.hasExtra(EXTRA_TYPE) || !intent.hasExtra(EXTRA_TRIGGER_TIME)) {
@@ -71,25 +73,26 @@
                 final int type = intent.getIntExtra(EXTRA_TYPE, 0);
                 final long triggerTime = intent.getLongExtra(EXTRA_TRIGGER_TIME, 0);
                 final long interval = intent.getLongExtra(EXTRA_REPEAT_INTERVAL, 0);
-                final boolean allowWhileIdle = intent.getBooleanExtra(EXTRA_ALLOW_WHILE_IDLE,
-                        false);
-                Log.d(TAG, "Setting alarm: id=" + id + " type=" + type + ", triggerTime=" + triggerTime
-                        + ", interval=" + interval + ", allowWhileIdle=" + allowWhileIdle);
+                final long window = intent.getLongExtra(EXTRA_WINDOW_LENGTH, 1);
+
+                Log.d(TAG, "Setting alarm: id=" + id + " type=" + type + ", triggerTime="
+                        + triggerTime + ", interval=" + interval + " window=" + window);
                 if (interval > 0) {
                     am.setRepeating(type, triggerTime, interval, alarmSender);
-                } else if (allowWhileIdle) {
-                    am.setExactAndAllowWhileIdle(type, triggerTime, alarmSender);
                 } else {
-                    am.setExact(type, triggerTime, alarmSender);
+                    am.setWindow(type, triggerTime, window, alarmSender);
                 }
+                setResult(Activity.RESULT_OK, null, null);
                 break;
             case ACTION_CANCEL_ALL_ALARMS:
                 Log.d(TAG, "Cancelling all alarms");
                 am.cancel(alarmClockSender);
                 am.cancel(alarmSender);
+                setResult(Activity.RESULT_OK, null, null);
                 break;
             default:
                 Log.e(TAG, "Unspecified action " + intent.getAction());
+                setResult(Activity.RESULT_CANCELED, null, null);
                 break;
         }
     }
diff --git a/tests/AlarmManager/src/android/alarmmanager/cts/AlarmManagerDeviceConfigHelper.java b/tests/AlarmManager/src/android/alarmmanager/cts/AlarmManagerDeviceConfigHelper.java
new file mode 100644
index 0000000..66457a9
--- /dev/null
+++ b/tests/AlarmManager/src/android/alarmmanager/cts/AlarmManagerDeviceConfigHelper.java
@@ -0,0 +1,96 @@
+/*
+ * 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 android.alarmmanager.cts;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.provider.DeviceConfig;
+
+import com.android.compatibility.common.util.PollingCheck;
+import com.android.compatibility.common.util.SystemUtil;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+public class AlarmManagerDeviceConfigHelper {
+    private static final DeviceConfig.Properties EMPTY_PROPERTIES = new DeviceConfig.Properties(
+            DeviceConfig.NAMESPACE_ALARM_MANAGER, Collections.emptyMap());
+    private static final long UPDATE_TIMEOUT = 30_000;
+
+    private volatile Map<String, String> mCommittedMap = Collections.emptyMap();
+    private final Map<String, String> mPropertyMap = new HashMap<>();
+
+    AlarmManagerDeviceConfigHelper with(String key, long value) {
+        mPropertyMap.put(key, Long.toString(value));
+        return this;
+    }
+
+    AlarmManagerDeviceConfigHelper with(String key, int value) {
+        mPropertyMap.put(key, Integer.toString(value));
+        return this;
+    }
+
+    AlarmManagerDeviceConfigHelper with(String key, boolean value) {
+        mPropertyMap.put(key, Boolean.toString(value));
+        return this;
+    }
+
+    AlarmManagerDeviceConfigHelper with(String key, String value) {
+        mPropertyMap.put(key, value);
+        return this;
+    }
+
+    AlarmManagerDeviceConfigHelper without(String key) {
+        mPropertyMap.remove(key);
+        return this;
+    }
+
+    private static int getCurrentConfigVersion() {
+        final String output = SystemUtil.runShellCommand("cmd alarm get-config-version").trim();
+        return Integer.parseInt(output);
+    }
+
+    private static void commitAndAwaitPropagation(DeviceConfig.Properties propertiesToSet) {
+        final int currentVersion = getCurrentConfigVersion();
+        SystemUtil.runWithShellPermissionIdentity(
+                () -> assertTrue(DeviceConfig.setProperties(propertiesToSet)));
+        PollingCheck.waitFor(UPDATE_TIMEOUT, () -> (getCurrentConfigVersion() > currentVersion),
+                "Could not update config within " + UPDATE_TIMEOUT + "ms. Current version: "
+                        + currentVersion);
+    }
+
+    void commitAndAwaitPropagation() {
+        if (mPropertyMap.equals(mCommittedMap)) {
+            // This will not cause any change. We assume the initial set of properties is empty.
+            return;
+        }
+        commitAndAwaitPropagation(
+                new DeviceConfig.Properties(DeviceConfig.NAMESPACE_ALARM_MANAGER, mPropertyMap));
+        mCommittedMap = Collections.unmodifiableMap(new HashMap<>(mPropertyMap));
+    }
+
+    void deleteAll() {
+        if (mCommittedMap.isEmpty()) {
+            // If nothing got committed, then this is redundant.
+            return;
+        }
+        commitAndAwaitPropagation(EMPTY_PROPERTIES);
+        mCommittedMap = Collections.emptyMap();
+    }
+}
diff --git a/tests/AlarmManager/src/android/alarmmanager/cts/AppStandbyTests.java b/tests/AlarmManager/src/android/alarmmanager/cts/AppStandbyTests.java
index e26578b..07c93c8 100644
--- a/tests/AlarmManager/src/android/alarmmanager/cts/AppStandbyTests.java
+++ b/tests/AlarmManager/src/android/alarmmanager/cts/AppStandbyTests.java
@@ -24,7 +24,7 @@
 
 import android.alarmmanager.alarmtestapp.cts.TestAlarmReceiver;
 import android.alarmmanager.alarmtestapp.cts.TestAlarmScheduler;
-import android.app.AlarmManager;
+import android.app.Activity;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -33,7 +33,6 @@
 import android.os.BatteryManager;
 import android.os.SystemClock;
 import android.platform.test.annotations.AppModeFull;
-import android.provider.DeviceConfig;
 import android.support.test.uiautomator.UiDevice;
 import android.util.Log;
 import android.util.LongArray;
@@ -43,7 +42,6 @@
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.compatibility.common.util.AppStandbyUtils;
-import com.android.compatibility.common.util.DeviceConfigStateHelper;
 
 import org.junit.After;
 import org.junit.AfterClass;
@@ -53,7 +51,10 @@
 import org.junit.runner.RunWith;
 
 import java.io.IOException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.BooleanSupplier;
 
 /**
  * Tests that app standby imposes the appropriate restrictions on alarms
@@ -63,7 +64,7 @@
 @RunWith(AndroidJUnit4.class)
 public class AppStandbyTests {
     private static final String TAG = AppStandbyTests.class.getSimpleName();
-    private static final String TEST_APP_PACKAGE = "android.alarmmanager.alarmtestapp.cts";
+    static final String TEST_APP_PACKAGE = "android.alarmmanager.alarmtestapp.cts";
     private static final String TEST_APP_RECEIVER = TEST_APP_PACKAGE + ".TestAlarmScheduler";
 
     private static final long DEFAULT_WAIT = 2_000;
@@ -83,6 +84,7 @@
     };
 
     private static final long APP_STANDBY_WINDOW = 10_000;
+    private static final long MIN_WINDOW = 100;
     private static final String[] APP_BUCKET_QUOTA_KEYS = {
             "standby_quota_working",
             "standby_quota_frequent",
@@ -98,12 +100,13 @@
     private static boolean sOrigAppStandbyEnabled;
     // Test app's alarm history to help predict when a subsequent alarm is going to get deferred.
     private static TestAlarmHistory sAlarmHistory;
+    private static Context sContext = InstrumentationRegistry.getTargetContext();
+    private static UiDevice sUiDevice = UiDevice.getInstance(
+            InstrumentationRegistry.getInstrumentation());
 
-    private Context mContext;
     private ComponentName mAlarmScheduler;
-    private UiDevice mUiDevice;
     private AtomicInteger mAlarmCount;
-    private DeviceConfigStateHelper mAlarmManagerDeviceConfigStateHelper;
+    private AlarmManagerDeviceConfigHelper mConfigHelper = new AlarmManagerDeviceConfigHelper();
 
     private final BroadcastReceiver mAlarmStateReceiver = new BroadcastReceiver() {
         @Override
@@ -129,42 +132,37 @@
 
     @Before
     public void setUp() throws Exception {
-        mContext = InstrumentationRegistry.getTargetContext();
-        mUiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
         mAlarmScheduler = new ComponentName(TEST_APP_PACKAGE, TEST_APP_RECEIVER);
         mAlarmCount = new AtomicInteger(0);
-        mAlarmManagerDeviceConfigStateHelper =
-                new DeviceConfigStateHelper(DeviceConfig.NAMESPACE_ALARM_MANAGER);
         updateAlarmManagerConstants();
         updateBackgroundSettleTime();
         setBatteryCharging(false);
         final IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction(TestAlarmReceiver.ACTION_REPORT_ALARM_EXPIRED);
-        mContext.registerReceiver(mAlarmStateReceiver, intentFilter);
+        sContext.registerReceiver(mAlarmStateReceiver, intentFilter);
         assumeTrue("App Standby not enabled on device", AppStandbyUtils.isAppStandbyEnabled());
     }
 
-    private void scheduleAlarm(long triggerMillis, long interval) {
+    private void scheduleAlarm(long triggerMillis, long interval) throws InterruptedException {
         final Intent setAlarmIntent = new Intent(TestAlarmScheduler.ACTION_SET_ALARM);
         setAlarmIntent.setComponent(mAlarmScheduler);
         setAlarmIntent.putExtra(TestAlarmScheduler.EXTRA_TYPE, ELAPSED_REALTIME_WAKEUP);
         setAlarmIntent.putExtra(TestAlarmScheduler.EXTRA_TRIGGER_TIME, triggerMillis);
+        setAlarmIntent.putExtra(TestAlarmScheduler.EXTRA_WINDOW_LENGTH, MIN_WINDOW);
         setAlarmIntent.putExtra(TestAlarmScheduler.EXTRA_REPEAT_INTERVAL, interval);
         setAlarmIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-        mContext.sendBroadcast(setAlarmIntent);
-    }
-
-    private void scheduleAlarmClock(long triggerRTC) {
-        AlarmManager.AlarmClockInfo alarmInfo = new AlarmManager.AlarmClockInfo(triggerRTC, null);
-
-        final Intent setAlarmClockIntent = new Intent(TestAlarmScheduler.ACTION_SET_ALARM_CLOCK);
-        setAlarmClockIntent.setComponent(mAlarmScheduler);
-        setAlarmClockIntent.putExtra(TestAlarmScheduler.EXTRA_ALARM_CLOCK_INFO, alarmInfo);
-        mContext.sendBroadcast(setAlarmClockIntent);
+        final CountDownLatch resultLatch = new CountDownLatch(1);
+        sContext.sendOrderedBroadcast(setAlarmIntent, null, new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                resultLatch.countDown();
+            }
+        }, null, Activity.RESULT_CANCELED, null, null);
+        assertTrue("Request did not complete", resultLatch.await(10, TimeUnit.SECONDS));
     }
 
     public void testSimpleQuotaDeferral(int bucketIndex) throws Exception {
-        setAppStandbyBucket(APP_BUCKET_TAGS[bucketIndex]);
+        setTestAppStandbyBucket(APP_BUCKET_TAGS[bucketIndex]);
         final int quota = APP_STANDBY_QUOTAS[bucketIndex];
 
         long startElapsed = SystemClock.elapsedRealtime();
@@ -196,7 +194,7 @@
 
     @Test
     public void testActiveQuota() throws Exception {
-        setAppStandbyBucket("active");
+        setTestAppStandbyBucket("active");
         long nextTrigger = SystemClock.elapsedRealtime() + MIN_FUTURITY;
         for (int i = 0; i < 3; i++) {
             scheduleAlarm(nextTrigger, 0);
@@ -223,7 +221,7 @@
 
     @Test
     public void testNeverQuota() throws Exception {
-        setAppStandbyBucket("never");
+        setTestAppStandbyBucket("never");
         final long expectedTrigger = SystemClock.elapsedRealtime() + MIN_FUTURITY;
         scheduleAlarm(expectedTrigger, 0);
         Thread.sleep(10_000);
@@ -231,17 +229,8 @@
     }
 
     @Test
-    public void testAlarmClockUnaffected() throws Exception {
-        setAppStandbyBucket("never");
-        final long trigger = System.currentTimeMillis() + MIN_FUTURITY;
-        scheduleAlarmClock(trigger);
-        Thread.sleep(MIN_FUTURITY);
-        assertTrue("Alarm clock not received as expected", waitForAlarm());
-    }
-
-    @Test
     public void testPowerWhitelistedAlarmNotBlocked() throws Exception {
-        setAppStandbyBucket(APP_BUCKET_TAGS[RARE_INDEX]);
+        setTestAppStandbyBucket(APP_BUCKET_TAGS[RARE_INDEX]);
         setPowerWhitelisted(true);
         final long triggerTime = SystemClock.elapsedRealtime() + MIN_FUTURITY;
         scheduleAlarm(triggerTime, 0);
@@ -255,11 +244,11 @@
         setPowerWhitelisted(false);
         setBatteryCharging(true);
         resetBackgroundSettleTime();
-        mAlarmManagerDeviceConfigStateHelper.restoreOriginalValues();
+        mConfigHelper.deleteAll();
         final Intent cancelAlarmsIntent = new Intent(TestAlarmScheduler.ACTION_CANCEL_ALL_ALARMS);
         cancelAlarmsIntent.setComponent(mAlarmScheduler);
-        mContext.sendBroadcast(cancelAlarmsIntent);
-        mContext.unregisterReceiver(mAlarmStateReceiver);
+        sContext.sendBroadcast(cancelAlarmsIntent);
+        sContext.unregisterReceiver(mAlarmStateReceiver);
         // Broadcast unregister may race with the next register in setUp
         Thread.sleep(500);
     }
@@ -272,22 +261,23 @@
     }
 
     private void updateAlarmManagerConstants() {
-        mAlarmManagerDeviceConfigStateHelper.set("min_futurity", String.valueOf(MIN_FUTURITY));
-        mAlarmManagerDeviceConfigStateHelper.set("app_standby_window",
-                String.valueOf(APP_STANDBY_WINDOW));
+        mConfigHelper.with("min_futurity", MIN_FUTURITY)
+                .with("app_standby_window", APP_STANDBY_WINDOW)
+                .with("min_window", MIN_WINDOW)
+                .with("exact_alarm_deny_list", TEST_APP_PACKAGE);
         for (int i = 0; i < APP_STANDBY_QUOTAS.length; i++) {
-            mAlarmManagerDeviceConfigStateHelper.set(APP_BUCKET_QUOTA_KEYS[i],
-                    String.valueOf(APP_STANDBY_QUOTAS[i]));
+            mConfigHelper.with(APP_BUCKET_QUOTA_KEYS[i], APP_STANDBY_QUOTAS[i]);
         }
+        mConfigHelper.commitAndAwaitPropagation();
     }
 
     private void updateBackgroundSettleTime() throws IOException {
-        mUiDevice.executeShellCommand(
+        sUiDevice.executeShellCommand(
                 "settings put global activity_manager_constants background_settle_time=0");
     }
 
     private void resetBackgroundSettleTime() throws IOException {
-        mUiDevice.executeShellCommand("settings delete global activity_manager_constants");
+        sUiDevice.executeShellCommand("settings delete global activity_manager_constants");
     }
 
     private void setPowerWhitelisted(boolean whitelist) throws IOException {
@@ -297,12 +287,12 @@
         executeAndLog(cmd.toString());
     }
 
-    private void setAppStandbyBucket(String bucket) throws IOException {
+    static void setTestAppStandbyBucket(String bucket) throws IOException {
         executeAndLog("am set-standby-bucket " + TEST_APP_PACKAGE + " " + bucket);
     }
 
     private void setBatteryCharging(final boolean charging) throws Exception {
-        final BatteryManager bm = mContext.getSystemService(BatteryManager.class);
+        final BatteryManager bm = sContext.getSystemService(BatteryManager.class);
         if (charging) {
             executeAndLog("dumpsys battery reset");
         } else {
@@ -313,8 +303,8 @@
         }
     }
 
-    private String executeAndLog(String cmd) throws IOException {
-        final String output = mUiDevice.executeShellCommand(cmd).trim();
+    private static String executeAndLog(String cmd) throws IOException {
+        final String output = sUiDevice.executeShellCommand(cmd).trim();
         Log.d(TAG, "command: [" + cmd + "], output: [" + output + "]");
         return output;
     }
@@ -325,12 +315,12 @@
         return success;
     }
 
-    private boolean waitUntil(Condition condition, long timeout) throws InterruptedException {
+    private boolean waitUntil(BooleanSupplier condition, long timeout) throws InterruptedException {
         final long deadLine = SystemClock.uptimeMillis() + timeout;
-        while (!condition.isMet() && SystemClock.uptimeMillis() < deadLine) {
+        while (!condition.getAsBoolean() && SystemClock.uptimeMillis() < deadLine) {
             Thread.sleep(POLL_INTERVAL);
         }
-        return condition.isMet();
+        return condition.getAsBoolean();
     }
 
     private static final class TestAlarmHistory {
@@ -350,9 +340,4 @@
             return mHistory.get(mHistory.size() - x);
         }
     }
-
-    @FunctionalInterface
-    interface Condition {
-        boolean isMet();
-    }
 }
diff --git a/tests/AlarmManager/src/android/alarmmanager/cts/BackgroundRestrictedAlarmsTest.java b/tests/AlarmManager/src/android/alarmmanager/cts/BackgroundRestrictedAlarmsTest.java
index ed18226..23a1ede 100644
--- a/tests/AlarmManager/src/android/alarmmanager/cts/BackgroundRestrictedAlarmsTest.java
+++ b/tests/AlarmManager/src/android/alarmmanager/cts/BackgroundRestrictedAlarmsTest.java
@@ -29,7 +29,6 @@
 import android.content.IntentFilter;
 import android.os.SystemClock;
 import android.platform.test.annotations.AppModeFull;
-import android.provider.DeviceConfig;
 import android.support.test.uiautomator.UiDevice;
 import android.util.Log;
 
@@ -37,8 +36,6 @@
 import androidx.test.filters.LargeTest;
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.compatibility.common.util.DeviceConfigStateHelper;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -67,7 +64,7 @@
 
     private Context mContext;
     private ComponentName mAlarmScheduler;
-    private DeviceConfigStateHelper mDeviceConfigStateHelper;
+    private AlarmManagerDeviceConfigHelper mConfigHelper = new AlarmManagerDeviceConfigHelper();
     private UiDevice mUiDevice;
     private volatile int mAlarmCount;
 
@@ -87,8 +84,6 @@
         mUiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
         mAlarmScheduler = new ComponentName(TEST_APP_PACKAGE, TEST_APP_RECEIVER);
         mAlarmCount = 0;
-        mDeviceConfigStateHelper =
-                new DeviceConfigStateHelper(DeviceConfig.NAMESPACE_ALARM_MANAGER);
         updateAlarmManagerConstants();
         updateBackgroundSettleTime();
         setAppOpsMode(APP_OP_MODE_IGNORED);
@@ -168,12 +163,14 @@
     }
 
     private void updateAlarmManagerConstants() {
-        mDeviceConfigStateHelper.set("min_futurity", "0");
-        mDeviceConfigStateHelper.set("min_interval", String.valueOf(MIN_REPEATING_INTERVAL));
+        mConfigHelper.with("min_futurity", 0L)
+                .with("min_interval", MIN_REPEATING_INTERVAL)
+                .with("min_window", 0)
+                .commitAndAwaitPropagation();
     }
 
     private void deleteAlarmManagerConstants() {
-        mDeviceConfigStateHelper.restoreOriginalValues();
+        mConfigHelper.deleteAll();
     }
 
     private void setAppStandbyBucket(String bucket) throws IOException {
diff --git a/tests/AlarmManager/src/android/alarmmanager/cts/BasicApiTests.java b/tests/AlarmManager/src/android/alarmmanager/cts/BasicApiTests.java
index dee9b74..e70a2d1 100644
--- a/tests/AlarmManager/src/android/alarmmanager/cts/BasicApiTests.java
+++ b/tests/AlarmManager/src/android/alarmmanager/cts/BasicApiTests.java
@@ -21,6 +21,7 @@
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import android.app.AlarmManager;
@@ -31,20 +32,25 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Build;
+import android.os.PowerManager;
 import android.os.SystemClock;
-import android.provider.DeviceConfig;
+import android.os.WorkSource;
+import android.platform.test.annotations.AppModeFull;
 import android.util.Log;
 
+import androidx.annotation.GuardedBy;
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.LargeTest;
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.compatibility.common.util.ApiLevelUtil;
-import com.android.compatibility.common.util.DeviceConfigStateHelper;
 import com.android.compatibility.common.util.PollingCheck;
+import com.android.compatibility.common.util.SystemUtil;
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -52,8 +58,10 @@
  * General API tests earlier present at CtsAppTestCases:AlarmManagerTest
  */
 @LargeTest
+@AppModeFull
 @RunWith(AndroidJUnit4.class)
 public class BasicApiTests {
+    private static final String TAG = BasicApiTests.class.getSimpleName();
     public static final String MOCKACTION = "android.app.AlarmManagerTest.TEST_ALARMRECEIVER";
     public static final String MOCKACTION2 = "android.app.AlarmManagerTest.TEST_ALARMRECEIVER2";
 
@@ -73,17 +81,18 @@
 
     private static final int TIME_DELTA = 1000;
     private static final int TIME_DELAY = 10_000;
-    private static final int REPEAT_PERIOD = 30_000;
 
-    // Constants used for validating exact vs inexact alarm batching immunity.
-    private static final long TEST_WINDOW_LENGTH = 8_000L;
     private static final long TEST_ALARM_FUTURITY = 2_000L;
     private static final long FAIL_DELTA = 50;
-    private static final long NUM_TRIALS = 5;
-    private static final long MAX_NEAR_DELIVERIES = 0;
+    private static final long PRIORITY_ALARM_DELAY = 6_000;
+    private static final long REPEAT_PERIOD = 30_000;
     private Context mContext = InstrumentationRegistry.getTargetContext();
-    private final DeviceConfigStateHelper mDeviceConfigHelper = new DeviceConfigStateHelper(
-            DeviceConfig.NAMESPACE_ALARM_MANAGER);
+    private final AlarmManagerDeviceConfigHelper mDeviceConfigHelper =
+            new AlarmManagerDeviceConfigHelper();
+    private PowerManager mPowerManager = mContext.getSystemService(PowerManager.class);
+
+    @Rule
+    public DumpLoggerRule mFailLoggerRule = new DumpLoggerRule(TAG);
 
     @Before
     public void setUp() throws Exception {
@@ -105,16 +114,19 @@
         IntentFilter filter2 = new IntentFilter(mIntent2.getAction());
         mContext.registerReceiver(mMockAlarmReceiver2, filter2);
 
-        mDeviceConfigHelper.set("min_futurity", "0");
-        mDeviceConfigHelper.set("min_interval", String.valueOf(REPEAT_PERIOD));
-        mDeviceConfigHelper.set("min_window", "0");
+        mDeviceConfigHelper.with("min_futurity", 0L)
+                .with("min_interval", REPEAT_PERIOD)
+                .with("min_window", 0L)
+                .with("priority_alarm_delay", PRIORITY_ALARM_DELAY)
+                .commitAndAwaitPropagation();
     }
 
     @After
     public void tearDown() throws Exception {
-        mDeviceConfigHelper.restoreOriginalValues();
+        mDeviceConfigHelper.deleteAll();
         mContext.unregisterReceiver(mMockAlarmReceiver);
         mContext.unregisterReceiver(mMockAlarmReceiver2);
+        toggleIdleMode(false);
     }
 
     @Test
@@ -123,28 +135,29 @@
         // device becomes interactive
 
         // test parameter type is RTC_WAKEUP
-        mMockAlarmReceiver.setAlarmedFalse();
+        mMockAlarmReceiver.reset();
         mWakeupTime = System.currentTimeMillis() + SNOOZE_DELAY;
         mAm.setExact(AlarmManager.RTC_WAKEUP, mWakeupTime, mSender);
+
         new PollingCheck(SNOOZE_DELAY + TIME_DELAY) {
             @Override
             protected boolean check() {
-                return mMockAlarmReceiver.alarmed;
+                return mMockAlarmReceiver.isAlarmed();
             }
         }.run();
-        assertEquals(mMockAlarmReceiver.rtcTime, mWakeupTime, TIME_DELTA);
+        assertEquals(mMockAlarmReceiver.getRtcTime(), mWakeupTime, TIME_DELTA);
 
         // test parameter type is ELAPSED_REALTIME_WAKEUP
-        mMockAlarmReceiver.setAlarmedFalse();
+        mMockAlarmReceiver.reset();
         mWakeupTime = SystemClock.elapsedRealtime() + SNOOZE_DELAY;
         mAm.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, mWakeupTime, mSender);
         new PollingCheck(SNOOZE_DELAY + TIME_DELAY) {
             @Override
             protected boolean check() {
-                return mMockAlarmReceiver.alarmed;
+                return mMockAlarmReceiver.isAlarmed();
             }
         }.run();
-        assertEquals(mMockAlarmReceiver.elapsedTime, mWakeupTime, TIME_DELTA);
+        assertEquals(mMockAlarmReceiver.getElapsedTime(), mWakeupTime, TIME_DELTA);
     }
 
     @Test
@@ -152,13 +165,13 @@
         // An alarm with a negative wakeup time should be triggered immediately.
         // This exercises a workaround for a limitation of the /dev/alarm driver
         // that would instead cause such alarms to never be triggered.
-        mMockAlarmReceiver.setAlarmedFalse();
+        mMockAlarmReceiver.reset();
         mWakeupTime = -1000;
         mAm.set(AlarmManager.RTC_WAKEUP, mWakeupTime, mSender);
         new PollingCheck(TIME_DELAY) {
             @Override
             protected boolean check() {
-                return mMockAlarmReceiver.alarmed;
+                return mMockAlarmReceiver.isAlarmed();
             }
         }.run();
     }
@@ -169,53 +182,75 @@
      * statistically significant -- i.e. that the two alarms are not being coalesced.
      */
     @Test
-    public void testExactAlarmBatching() {
+    public void testExactAlarmBatching() throws InterruptedException {
+        final long windowLength = 6_000;
         int deliveriesTogether = 0;
-        for (int i = 0; i < NUM_TRIALS; i++) {
-            final long now = System.currentTimeMillis();
-            final long windowStart = now + TEST_ALARM_FUTURITY;
-            final long exactStart = windowStart + TEST_WINDOW_LENGTH / 2;
+        for (int i = 0; i < 5; i++) {
+            mMockAlarmReceiver.reset();
+            mMockAlarmReceiver2.reset();
 
-            mMockAlarmReceiver.setAlarmedFalse();
-            mMockAlarmReceiver2.setAlarmedFalse();
-            mAm.setWindow(AlarmManager.RTC_WAKEUP, windowStart, TEST_WINDOW_LENGTH, mSender);
-            mAm.setExact(AlarmManager.RTC_WAKEUP, exactStart, mSender2);
+            final long now = SystemClock.elapsedRealtime();
+            final long windowStart = now + 1000;
+            final long exactStart = windowStart + windowLength / 2;
 
-            // Wait until a half-second beyond its target window, just to provide a
-            // little safety slop.
-            new PollingCheck(TEST_WINDOW_LENGTH + (windowStart - now) + 500) {
-                @Override
-                protected boolean check() {
-                    return mMockAlarmReceiver.alarmed;
-                }
-            }.run();
+            mAm.setWindow(AlarmManager.ELAPSED_REALTIME_WAKEUP, windowStart, windowLength, mSender);
+            mAm.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, exactStart, mSender2);
 
-            // Now wait until 1 sec beyond the expected exact alarm fire time, or for at
-            // least one second if we're already past the nominal exact alarm fire time
-            long timeToExact = Math.max(exactStart - System.currentTimeMillis() + 1000, 1000);
-            new PollingCheck(timeToExact) {
-                @Override
-                protected boolean check() {
-                    return mMockAlarmReceiver2.alarmed;
-                }
-            }.run();
+            // Wait until the end of the window.
+            Thread.sleep(windowStart - now + windowLength);
+            PollingCheck.waitFor(1000, mMockAlarmReceiver::isAlarmed,
+                    "Inexact alarm did not fire by the end of the window");
 
-            // Success when we observe that the exact and windowed alarm are not being often
-            // delivered close together -- that is, when we can be confident that they are not
-            // being coalesced.
-            final long delta = Math.abs(mMockAlarmReceiver2.rtcTime - mMockAlarmReceiver.rtcTime);
-            Log.i("testExactAlarmBatching", "[" + i + "]  delta = " + delta);
+            // If needed, wait until the time of the exact alarm.
+            final long timeToExact = Math.max(exactStart - SystemClock.elapsedRealtime(), 0);
+            Thread.sleep(timeToExact);
+            PollingCheck.waitFor(1000, mMockAlarmReceiver2::isAlarmed,
+                    "Exact alarm did not fire as expected");
+
+            final long delta = Math.abs(
+                    mMockAlarmReceiver2.getElapsedTime() - mMockAlarmReceiver.getElapsedTime());
+            Log.i(TAG, "testExactAlarmBatching: [" + i + "]  delta = " + delta);
             if (delta < FAIL_DELTA) {
                 deliveriesTogether++;
-                assertTrue("Exact alarms appear to be coalescing with inexact alarms",
-                        deliveriesTogether <= MAX_NEAR_DELIVERIES);
+                if (deliveriesTogether > 1) {
+                    fail("More than 1 deliveries with exact alarms close to inexact alarms");
+                }
             }
         }
     }
 
     @Test
+    public void testSetExactWithWorkSource() throws Exception {
+        final int myUid = mContext.getPackageManager().getPackageUid(mContext.getOpPackageName(),
+                0);
+        final long futurityMs = 1000;
+        mMockAlarmReceiver.reset();
+
+        SystemUtil.runWithShellPermissionIdentity(
+                () -> mAm.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP,
+                        SystemClock.elapsedRealtime() + futurityMs, "test-tag", r -> r.run(),
+                        new WorkSource(myUid), mMockAlarmReceiver));
+
+        Thread.sleep(futurityMs);
+        PollingCheck.waitFor(2000, mMockAlarmReceiver::isAlarmed,
+                "Exact alarm with work source did not fire as expected");
+    }
+
+    @Test
+    public void testSetExact() throws Exception {
+        final long futurityMs = 1000;
+        mMockAlarmReceiver.reset();
+        mAm.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP,
+                SystemClock.elapsedRealtime() + futurityMs, "test-tag", mMockAlarmReceiver, null);
+
+        Thread.sleep(futurityMs);
+        PollingCheck.waitFor(2000, mMockAlarmReceiver::isAlarmed,
+                "Exact alarm with work source did not fire as expected");
+    }
+
+    @Test
     public void testSetRepeating() {
-        mMockAlarmReceiver.setAlarmedFalse();
+        mMockAlarmReceiver.reset();
         mWakeupTime = System.currentTimeMillis() + TEST_ALARM_FUTURITY;
         mAm.setRepeating(AlarmManager.RTC_WAKEUP, mWakeupTime, REPEAT_PERIOD, mSender);
 
@@ -224,28 +259,97 @@
         new PollingCheck(TEST_ALARM_FUTURITY + REPEAT_PERIOD) {
             @Override
             protected boolean check() {
-                return mMockAlarmReceiver.alarmed;
+                return mMockAlarmReceiver.isAlarmed();
             }
         }.run();
-        assertTrue(mMockAlarmReceiver.alarmed);
 
         // Now reset the receiver and wait for the intended repeat alarm to fire as expected
-        mMockAlarmReceiver.setAlarmedFalse();
+        mMockAlarmReceiver.reset();
         new PollingCheck(REPEAT_PERIOD * 2) {
             @Override
             protected boolean check() {
-                return mMockAlarmReceiver.alarmed;
+                return mMockAlarmReceiver.isAlarmed();
             }
         }.run();
-        assertTrue(mMockAlarmReceiver.alarmed);
 
         mAm.cancel(mSender);
     }
 
+    private static final String DOZE_ON_OUTPUT = "deep idle mode";
+    private static final String DOZE_OFF_OUTPUT = "deep state: ACTIVE";
+
+    private void toggleIdleMode(boolean on) {
+        SystemUtil.runShellCommand("cmd deviceidle " + (on ? "force-idle deep" : "unforce"),
+                output -> output.contains(on ? DOZE_ON_OUTPUT : DOZE_OFF_OUTPUT));
+        PollingCheck.waitFor(10_000, () -> (on == mPowerManager.isDeviceIdleMode()),
+                "Could not set doze state to " + on);
+    }
+
+    @Test(expected = SecurityException.class)
+    public void testSetPrioritizedWithoutPermission() {
+        mAm.setPrioritized(AlarmManager.ELAPSED_REALTIME_WAKEUP, 20, 10,
+                "testSetPrioritizedWithoutPermission", r -> r.run(), mMockAlarmReceiver);
+    }
+
+    @Test
+    @Ignore("Fails on cuttlefish")  // TODO (b/182835530): Investigate and fix.
+    public void testSetPrioritized() throws InterruptedException {
+        mMockAlarmReceiver.reset();
+        mMockAlarmReceiver2.reset();
+
+        final long trigger1 = SystemClock.elapsedRealtime() + 1000;
+        final long trigger2 = SystemClock.elapsedRealtime() + 2000;
+        SystemUtil.runWithShellPermissionIdentity(
+                () -> mAm.setPrioritized(AlarmManager.ELAPSED_REALTIME_WAKEUP, trigger1, 10,
+                        "test-1", r -> r.run(), mMockAlarmReceiver));
+        SystemUtil.runWithShellPermissionIdentity(
+                () -> mAm.setPrioritized(AlarmManager.ELAPSED_REALTIME_WAKEUP, trigger2, 10,
+                        "test-2", r -> r.run(), mMockAlarmReceiver2));
+
+        Thread.sleep(2010);
+        PollingCheck.waitFor(1000,
+                () -> (mMockAlarmReceiver.isAlarmed() && mMockAlarmReceiver2.isAlarmed()));
+
+        toggleIdleMode(true);
+        // Ensure no previous alarm in doze throttles the next one.
+        Thread.sleep(PRIORITY_ALARM_DELAY);
+        mMockAlarmReceiver.reset();
+        mMockAlarmReceiver2.reset();
+
+        final long trigger3 = SystemClock.elapsedRealtime() + 1000;
+        final long trigger4 = SystemClock.elapsedRealtime() + 2000;
+        SystemUtil.runWithShellPermissionIdentity(
+                () -> mAm.setPrioritized(AlarmManager.ELAPSED_REALTIME_WAKEUP, trigger3, 10,
+                        "test-3", r -> r.run(), mMockAlarmReceiver));
+        SystemUtil.runWithShellPermissionIdentity(
+                () -> mAm.setPrioritized(AlarmManager.ELAPSED_REALTIME_WAKEUP, trigger4, 10,
+                        "test-4", r -> r.run(), mMockAlarmReceiver2));
+        Thread.sleep(1010);
+        PollingCheck.waitFor(1000, mMockAlarmReceiver::isAlarmed,
+                "First alarm not received as expected in doze");
+
+        Thread.sleep(1000);
+        assertFalse("Second alarm fired prematurely while in doze",
+                mMockAlarmReceiver2.isAlarmed());
+
+        final long timeToNextAlarm = mMockAlarmReceiver.getElapsedTime() + PRIORITY_ALARM_DELAY
+                - SystemClock.elapsedRealtime();
+        Thread.sleep(Math.max(0, timeToNextAlarm));
+        PollingCheck.waitFor(1000, mMockAlarmReceiver2::isAlarmed,
+                "Second alarm not received as expected in doze");
+
+
+        final long firstAlarmTime = mMockAlarmReceiver.getElapsedTime();
+        final long secondAlarmTime = mMockAlarmReceiver2.getElapsedTime();
+        assertTrue("First alarm: " + firstAlarmTime + " and second alarm: " + secondAlarmTime
+                        + " not separated enough",
+                (secondAlarmTime - firstAlarmTime) > (PRIORITY_ALARM_DELAY - FAIL_DELTA));
+    }
+
     @Test
     public void testCancel() {
-        mMockAlarmReceiver.setAlarmedFalse();
-        mMockAlarmReceiver2.setAlarmedFalse();
+        mMockAlarmReceiver.reset();
+        mMockAlarmReceiver2.reset();
 
         // set two alarms
         final long now = System.currentTimeMillis();
@@ -261,20 +365,19 @@
         new PollingCheck(when2 - now + TIME_DELAY) {
             @Override
             protected boolean check() {
-                return mMockAlarmReceiver2.alarmed;
+                return mMockAlarmReceiver2.isAlarmed();
             }
         }.run();
 
-        assertFalse(mMockAlarmReceiver.alarmed);
-        assertTrue(mMockAlarmReceiver2.alarmed);
+        assertFalse(mMockAlarmReceiver.isAlarmed());
     }
 
     @Test
     public void testSetAlarmClock() {
         assumeTrue(ApiLevelUtil.isAtLeast(Build.VERSION_CODES.LOLLIPOP));
 
-        mMockAlarmReceiver.setAlarmedFalse();
-        mMockAlarmReceiver2.setAlarmedFalse();
+        mMockAlarmReceiver.reset();
+        mMockAlarmReceiver2.reset();
 
         // Set first alarm clock.
         final long wakeupTimeFirst = System.currentTimeMillis()
@@ -309,19 +412,19 @@
         assertNull(nextAlarmClock.getShowIntent());
 
         // Wait for first alarm to trigger.
-        assertFalse(mMockAlarmReceiver.alarmed);
+        assertFalse(mMockAlarmReceiver.isAlarmed());
         new PollingCheck(2 * TEST_ALARM_FUTURITY + TIME_DELAY) {
             @Override
             protected boolean check() {
-                return mMockAlarmReceiver.alarmed;
+                return mMockAlarmReceiver.isAlarmed();
             }
         }.run();
 
         // Verify first alarm fired at the right time.
-        assertEquals(mMockAlarmReceiver.rtcTime, wakeupTimeFirst, TIME_DELTA);
+        assertEquals(mMockAlarmReceiver.getRtcTime(), wakeupTimeFirst, TIME_DELTA);
 
         // Verify second alarm didn't fire.
-        assertFalse(mMockAlarmReceiver2.alarmed);
+        assertFalse(mMockAlarmReceiver2.isAlarmed());
 
         // Verify the next alarm is not returning neither the first nor the second alarm.
         nextAlarmClock = mAm.getNextAlarmClock();
@@ -334,13 +437,17 @@
     /**
      * this class receives alarm from AlarmManagerTest
      */
-    public static class MockAlarmReceiver extends BroadcastReceiver {
+    public static class MockAlarmReceiver extends BroadcastReceiver
+            implements AlarmManager.OnAlarmListener {
         private final Object mSync = new Object();
         public final String mTargetAction;
 
-        public volatile boolean alarmed = false;
-        public volatile long elapsedTime;
-        public volatile long rtcTime;
+        @GuardedBy("mSync")
+        private boolean mAlarmed = false;
+        @GuardedBy("mSync")
+        private long mElapsedTime = 0;
+        @GuardedBy("mSync")
+        private long mRtcTime = 0;
 
         public MockAlarmReceiver(String targetAction) {
             mTargetAction = targetAction;
@@ -351,17 +458,41 @@
             final String action = intent.getAction();
             if (action.equals(mTargetAction)) {
                 synchronized (mSync) {
-                    alarmed = true;
-                    elapsedTime = SystemClock.elapsedRealtime();
-                    rtcTime = System.currentTimeMillis();
+                    mAlarmed = true;
+                    mElapsedTime = SystemClock.elapsedRealtime();
+                    mRtcTime = System.currentTimeMillis();
                 }
             }
         }
 
-        public void setAlarmedFalse() {
+        public long getElapsedTime() {
             synchronized (mSync) {
-                alarmed = false;
+                return mElapsedTime;
             }
         }
+
+        public long getRtcTime() {
+            synchronized (mSync) {
+                return mRtcTime;
+            }
+        }
+
+        public void reset() {
+            synchronized (mSync) {
+                mAlarmed = false;
+                mRtcTime = mElapsedTime = 0;
+            }
+        }
+
+        public boolean isAlarmed() {
+            synchronized (mSync) {
+                return mAlarmed;
+            }
+        }
+
+        @Override
+        public void onAlarm() {
+            onReceive(null, new Intent(mTargetAction));
+        }
     }
 }
diff --git a/tests/AlarmManager/src/android/alarmmanager/cts/DumpLoggerRule.java b/tests/AlarmManager/src/android/alarmmanager/cts/DumpLoggerRule.java
new file mode 100644
index 0000000..7d04899
--- /dev/null
+++ b/tests/AlarmManager/src/android/alarmmanager/cts/DumpLoggerRule.java
@@ -0,0 +1,39 @@
+/*
+ * 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 android.alarmmanager.cts;
+
+import android.util.Log;
+
+import com.android.compatibility.common.util.SystemUtil;
+
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
+
+public class DumpLoggerRule extends TestWatcher {
+
+    private final String mTag;
+
+    DumpLoggerRule(String tag) {
+        mTag = tag;
+    }
+
+    @Override
+    protected void failed(Throwable e, Description description) {
+        Log.i(mTag, "Debugging info for failed test: " + description.getMethodName());
+        Log.i(mTag, SystemUtil.runShellCommand("dumpsys alarm"));
+    }
+}
diff --git a/tests/AlarmManager/src/android/alarmmanager/cts/ExactAlarmsTest.java b/tests/AlarmManager/src/android/alarmmanager/cts/ExactAlarmsTest.java
index b6db105..aa415cd 100644
--- a/tests/AlarmManager/src/android/alarmmanager/cts/ExactAlarmsTest.java
+++ b/tests/AlarmManager/src/android/alarmmanager/cts/ExactAlarmsTest.java
@@ -16,6 +16,12 @@
 
 package android.alarmmanager.cts;
 
+import static android.alarmmanager.cts.AppStandbyTests.TEST_APP_PACKAGE;
+import static android.alarmmanager.cts.AppStandbyTests.setTestAppStandbyBucket;
+import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_ACTIVE;
+import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_WORKING_SET;
+
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -31,7 +37,6 @@
 import android.os.Process;
 import android.os.SystemClock;
 import android.platform.test.annotations.AppModeFull;
-import android.provider.DeviceConfig;
 import android.provider.Settings;
 import android.util.Log;
 
@@ -39,7 +44,7 @@
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.compatibility.common.util.AppOpsUtils;
-import com.android.compatibility.common.util.DeviceConfigStateHelper;
+import com.android.compatibility.common.util.AppStandbyUtils;
 import com.android.compatibility.common.util.SystemUtil;
 
 import org.junit.After;
@@ -47,7 +52,6 @@
 import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 import org.junit.runner.RunWith;
 
@@ -88,16 +92,15 @@
     private final PowerWhitelistManager mWhitelistManager = sContext.getSystemService(
             PowerWhitelistManager.class);
 
-    private final DeviceConfigStateHelper mDeviceConfigHelper = new DeviceConfigStateHelper(
-            DeviceConfig.NAMESPACE_ALARM_MANAGER);
+    private final AlarmManagerDeviceConfigHelper mDeviceConfigHelper =
+            new AlarmManagerDeviceConfigHelper();
     private final Random mIdGenerator = new Random(6789);
 
     @Rule
-    public TestWatcher mFailLoggerRule = new TestWatcher() {
+    public DumpLoggerRule mFailLoggerRule = new DumpLoggerRule(TAG) {
         @Override
         protected void failed(Throwable e, Description description) {
-            Log.i(TAG, "Debugging info for failed test: " + description.getMethodName());
-            Log.i(TAG, SystemUtil.runShellCommand("dumpsys alarm"));
+            super.failed(e, description);
             AlarmReceiver.dumpState();
         }
     };
@@ -110,12 +113,12 @@
 
     @Before
     public void updateAlarmManagerConstants() {
-        mDeviceConfigHelper.set("min_futurity", "0");
-        mDeviceConfigHelper.set("allow_while_idle_quota", String.valueOf(ALLOW_WHILE_IDLE_QUOTA));
-        mDeviceConfigHelper.set("allow_while_idle_compat_quota",
-                String.valueOf(ALLOW_WHILE_IDLE_COMPAT_QUOTA));
-        mDeviceConfigHelper.set("allow_while_idle_window", String.valueOf(ALLOW_WHILE_IDLE_WINDOW));
-        mDeviceConfigHelper.set("crash_non_clock_apps", "true");
+        mDeviceConfigHelper.with("min_futurity", 0L)
+                .with("allow_while_idle_quota", ALLOW_WHILE_IDLE_QUOTA)
+                .with("allow_while_idle_compat_quota", ALLOW_WHILE_IDLE_COMPAT_QUOTA)
+                .with("allow_while_idle_window", ALLOW_WHILE_IDLE_WINDOW)
+                .with("crash_non_clock_apps", true)
+                .commitAndAwaitPropagation();
     }
 
     @Before
@@ -153,7 +156,7 @@
 
     @After
     public void restoreAlarmManagerConstants() {
-        mDeviceConfigHelper.restoreOriginalValues();
+        mDeviceConfigHelper.deleteAll();
     }
 
     private static void revokeAppOp() throws IOException {
@@ -174,6 +177,28 @@
     @Test
     public void hasPermissionByDefault() {
         assertTrue(mAlarmManager.canScheduleExactAlarms());
+
+        mDeviceConfigHelper.with("exact_alarm_deny_list", sContext.getOpPackageName())
+                .commitAndAwaitPropagation();
+        assertFalse(mAlarmManager.canScheduleExactAlarms());
+    }
+
+    @Test
+    // TODO (b/185181884): Remove once standby buckets can be reliably manipulated from tests.
+    @Ignore("Cannot reliably test bucket manipulation yet")
+    public void exactAlarmPermissionElevatesBucket() throws Exception {
+        mDeviceConfigHelper.without("exact_alarm_deny_list").commitAndAwaitPropagation();
+
+        setTestAppStandbyBucket("active");
+        assertEquals(STANDBY_BUCKET_ACTIVE, AppStandbyUtils.getAppStandbyBucket(TEST_APP_PACKAGE));
+
+        setTestAppStandbyBucket("frequent");
+        assertEquals(STANDBY_BUCKET_WORKING_SET,
+                AppStandbyUtils.getAppStandbyBucket(TEST_APP_PACKAGE));
+
+        setTestAppStandbyBucket("rare");
+        assertEquals(STANDBY_BUCKET_WORKING_SET,
+                AppStandbyUtils.getAppStandbyBucket(TEST_APP_PACKAGE));
     }
 
     @Test
@@ -187,6 +212,10 @@
         AppOpsUtils.setOpMode(sContext.getOpPackageName(), AppOpsManager.OPSTR_SCHEDULE_EXACT_ALARM,
                 AppOpsManager.MODE_ALLOWED);
         assertTrue(mAlarmManager.canScheduleExactAlarms());
+
+        mDeviceConfigHelper.with("exact_alarm_deny_list", sContext.getOpPackageName())
+                .commitAndAwaitPropagation();
+        assertTrue(mAlarmManager.canScheduleExactAlarms());
     }
 
     @Test(expected = SecurityException.class)
diff --git a/tests/AlarmManager/src/android/alarmmanager/cts/InstantAppsTests.java b/tests/AlarmManager/src/android/alarmmanager/cts/InstantAppsTests.java
index c1b63dc..5daabeb 100644
--- a/tests/AlarmManager/src/android/alarmmanager/cts/InstantAppsTests.java
+++ b/tests/AlarmManager/src/android/alarmmanager/cts/InstantAppsTests.java
@@ -16,6 +16,9 @@
 
 package android.alarmmanager.cts;
 
+import static android.app.AlarmManager.ELAPSED_REALTIME_WAKEUP;
+import static android.app.AlarmManager.RTC_WAKEUP;
+
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assume.assumeTrue;
 
@@ -23,13 +26,10 @@
 import android.content.Context;
 import android.os.SystemClock;
 import android.platform.test.annotations.AppModeInstant;
-import android.provider.DeviceConfig;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.compatibility.common.util.DeviceConfigStateHelper;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -45,19 +45,25 @@
 @RunWith(AndroidJUnit4.class)
 public class InstantAppsTests {
     private static final String TAG = "AlarmManagerInstantTests";
+    private static final long WINDOW_LENGTH = 500;
+    private static final long WAIT_TIMEOUT = 5_000;
 
     private AlarmManager mAlarmManager;
     private Context mContext;
-    private DeviceConfigStateHelper mDeviceConfigStateHelper;
+    private AlarmManagerDeviceConfigHelper mConfigHelper = new AlarmManagerDeviceConfigHelper();
 
     @Before
     public void setUp() {
         mContext = InstrumentationRegistry.getTargetContext();
         mAlarmManager = mContext.getSystemService(AlarmManager.class);
-        mDeviceConfigStateHelper =
-                new DeviceConfigStateHelper(DeviceConfig.NAMESPACE_ALARM_MANAGER);
         assumeTrue(mContext.getPackageManager().isInstantApp());
-        updateAlarmManagerSettings();
+    }
+
+    @Before
+    public void updateAlarmManagerSettings() {
+        mConfigHelper.with("min_futurity", 0L)
+                .with("min_window", 0L)
+                .commitAndAwaitPropagation();
     }
 
     @Test
@@ -65,10 +71,11 @@
         final long futurity = 2500;
         final long triggerElapsed = SystemClock.elapsedRealtime() + futurity;
         final CountDownLatch latch = new CountDownLatch(1);
-        mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME, triggerElapsed, TAG,
+        mAlarmManager.setWindow(ELAPSED_REALTIME_WAKEUP, triggerElapsed, WINDOW_LENGTH, TAG,
                 () -> latch.countDown(), null);
-        Thread.sleep(futurity);
-        assertTrue("Alarm did not fire as expected", latch.await(500, TimeUnit.MILLISECONDS));
+        Thread.sleep(futurity + WINDOW_LENGTH);
+        assertTrue("Alarm did not fire as expected",
+                latch.await(WAIT_TIMEOUT, TimeUnit.MILLISECONDS));
     }
 
     @Test
@@ -76,17 +83,15 @@
         final long futurity = 2500;
         final long triggerRtc = System.currentTimeMillis() + futurity;
         final CountDownLatch latch = new CountDownLatch(1);
-        mAlarmManager.setExact(AlarmManager.RTC, triggerRtc, TAG, () -> latch.countDown(), null);
-        Thread.sleep(futurity);
-        assertTrue("Alarm did not fire as expected", latch.await(500, TimeUnit.MILLISECONDS));
+        mAlarmManager.setWindow(RTC_WAKEUP, triggerRtc, WINDOW_LENGTH, TAG, () -> latch.countDown(),
+                null);
+        Thread.sleep(futurity + WINDOW_LENGTH);
+        assertTrue("Alarm did not fire as expected",
+                latch.await(WAIT_TIMEOUT, TimeUnit.MILLISECONDS));
     }
 
     @After
     public void deleteAlarmManagerSettings() {
-        mDeviceConfigStateHelper.restoreOriginalValues();
-    }
-
-    private void updateAlarmManagerSettings() {
-        mDeviceConfigStateHelper.set("min_futurity", "0");
+        mConfigHelper.deleteAll();
     }
 }
diff --git a/tests/AlarmManager/src/android/alarmmanager/cts/TimeChangeTests.java b/tests/AlarmManager/src/android/alarmmanager/cts/TimeChangeTests.java
index 2d7397d..f4b74de 100644
--- a/tests/AlarmManager/src/android/alarmmanager/cts/TimeChangeTests.java
+++ b/tests/AlarmManager/src/android/alarmmanager/cts/TimeChangeTests.java
@@ -30,7 +30,6 @@
 import android.content.IntentFilter;
 import android.os.SystemClock;
 import android.platform.test.annotations.AppModeFull;
-import android.provider.DeviceConfig;
 import android.util.Log;
 
 import androidx.test.InstrumentationRegistry;
@@ -38,7 +37,6 @@
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.compatibility.common.util.BatteryUtils;
-import com.android.compatibility.common.util.DeviceConfigStateHelper;
 import com.android.compatibility.common.util.SystemUtil;
 
 import org.junit.After;
@@ -58,12 +56,12 @@
 public class TimeChangeTests {
     private static final String TAG = TimeChangeTests.class.getSimpleName();
     private static final String ACTION_ALARM = "android.alarmmanager.cts.ACTION_ALARM";
-    private static final long DEFAULT_WAIT_MILLIS = 1_000;
+    private static final long DEFAULT_WAIT_MILLIS = 5_000;
     private static final long MILLIS_IN_MINUTE = 60_000;
 
     private final Context mContext = InstrumentationRegistry.getTargetContext();
     private final AlarmManager mAlarmManager = mContext.getSystemService(AlarmManager.class);
-    private DeviceConfigStateHelper mDeviceConfigStateHelper;
+    private AlarmManagerDeviceConfigHelper mConfigHelper = new AlarmManagerDeviceConfigHelper();
     private PendingIntent mAlarmPi;
     private long mTestStartRtc;
     private long mTestStartElapsed;
@@ -106,9 +104,7 @@
         mAlarmPi = PendingIntent.getBroadcast(mContext, 0, alarmIntent, PendingIntent.FLAG_MUTABLE);
         final IntentFilter alarmFilter = new IntentFilter(ACTION_ALARM);
         mContext.registerReceiver(mAlarmReceiver, alarmFilter);
-        mDeviceConfigStateHelper =
-                new DeviceConfigStateHelper(DeviceConfig.NAMESPACE_ALARM_MANAGER);
-        mDeviceConfigStateHelper.set("min_futurity", "500");
+        mConfigHelper.with("min_futurity", 0L).commitAndAwaitPropagation();
         BatteryUtils.runDumpsysBatteryUnplug();
         mTestStartRtc = System.currentTimeMillis();
         mTestStartElapsed = SystemClock.elapsedRealtime();
@@ -146,7 +142,7 @@
 
     @After
     public void tearDown() {
-        mDeviceConfigStateHelper.restoreOriginalValues();
+        mConfigHelper.deleteAll();
         BatteryUtils.runDumpsysBatteryReset();
         if (mTimeChanged) {
             // Make an attempt at resetting the clock to normal
diff --git a/tests/AlarmManager/src/android/alarmmanager/cts/UidCapTests.java b/tests/AlarmManager/src/android/alarmmanager/cts/UidCapTests.java
index f96de32..8b2a17c 100644
--- a/tests/AlarmManager/src/android/alarmmanager/cts/UidCapTests.java
+++ b/tests/AlarmManager/src/android/alarmmanager/cts/UidCapTests.java
@@ -17,8 +17,6 @@
 
 package android.alarmmanager.cts;
 
-import static com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity;
-
 import static org.junit.Assert.fail;
 
 import android.app.AlarmManager;
@@ -26,21 +24,17 @@
 import android.content.Context;
 import android.content.Intent;
 import android.platform.test.annotations.AppModeFull;
-import android.provider.DeviceConfig;
 import android.util.Log;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.compatibility.common.util.DeviceConfigStateHelper;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import java.util.ArrayList;
-import java.util.concurrent.atomic.AtomicReference;
 
 @AppModeFull
 @RunWith(AndroidJUnit4.class)
@@ -58,28 +52,18 @@
 
     private AlarmManager mAlarmManager;
     private Context mContext;
-    private DeviceConfigStateHelper mDeviceConfigStateHelper;
+    private AlarmManagerDeviceConfigHelper mConfigHelper = new AlarmManagerDeviceConfigHelper();
     private ArrayList<PendingIntent> mAlarmsSet = new ArrayList<>();
 
     @Before
     public void setUp() {
         mContext = InstrumentationRegistry.getTargetContext();
         mAlarmManager = mContext.getSystemService(AlarmManager.class);
-        mDeviceConfigStateHelper =
-                new DeviceConfigStateHelper(DeviceConfig.NAMESPACE_ALARM_MANAGER);
     }
 
     @Test
     public void sufficientAlarmsAllowedByDefault() {
-        // Remove any set config values so we can test the underlying defaults.
-        final AtomicReference<DeviceConfig.Properties> reference = new AtomicReference<>();
-        runWithShellPermissionIdentity(
-                () -> reference.set(
-                        DeviceConfig.getProperties(DeviceConfig.NAMESPACE_ALARM_MANAGER)),
-                "android.permission.READ_DEVICE_CONFIG");
-        for (String key : reference.get().getKeyset()) {
-            mDeviceConfigStateHelper.set(key, null);
-        }
+        mConfigHelper.without("max_alarms_per_uid").commitAndAwaitPropagation();
 
         for (int i = 1; i <= SUFFICIENT_NUM_ALARMS; i++) {
             try {
@@ -119,7 +103,7 @@
     }
 
     private void setMaxAlarmsPerUid(int maxAlarmsPerUid) {
-        mDeviceConfigStateHelper.set("max_alarms_per_uid", String.valueOf(maxAlarmsPerUid));
+        mConfigHelper.with("max_alarms_per_uid", maxAlarmsPerUid).commitAndAwaitPropagation();
     }
 
     @After
@@ -132,6 +116,6 @@
 
     @After
     public void deleteAlarmManagerConstants() {
-        mDeviceConfigStateHelper.restoreOriginalValues();
+        mConfigHelper.deleteAll();
     }
 }
diff --git a/tests/MediaProviderTranscode/src/android/mediaprovidertranscode/cts/TranscodeTest.java b/tests/MediaProviderTranscode/src/android/mediaprovidertranscode/cts/TranscodeTest.java
index 8c132e7..7fa8f1f 100644
--- a/tests/MediaProviderTranscode/src/android/mediaprovidertranscode/cts/TranscodeTest.java
+++ b/tests/MediaProviderTranscode/src/android/mediaprovidertranscode/cts/TranscodeTest.java
@@ -97,9 +97,11 @@
 
     @Before
     public void setUp() throws Exception {
-        Assume.assumeTrue(SystemProperties.getBoolean("sys.fuse.transcode_enabled", false));
-        // TODO(b/182846329): GSI doesn't support transcoding yet, maybe a transcoding issue
-        Assume.assumeFalse(SystemProperties.get("ro.product.system.device").contains("generic"));
+        Assume.assumeTrue("Media transcoding disabled",
+                SystemProperties.getBoolean("sys.fuse.transcode_enabled", false));
+        // TODO(b/182846329): GSI doesn't support transcoding yet
+        Assume.assumeFalse(
+                "Using GSI", SystemProperties.get("ro.build.product").contains("generic"));
 
         TranscodeTestUtils.pollForExternalStorageState();
         TranscodeTestUtils.grantPermission(getContext().getPackageName(),
diff --git a/tests/accessibility/src/android/view/accessibility/cts/AccessibilityShortcutTargetActivity.java b/tests/accessibility/src/android/view/accessibility/cts/AccessibilityShortcutTargetActivity.java
index 921a769..95f17f8 100644
--- a/tests/accessibility/src/android/view/accessibility/cts/AccessibilityShortcutTargetActivity.java
+++ b/tests/accessibility/src/android/view/accessibility/cts/AccessibilityShortcutTargetActivity.java
@@ -16,16 +16,13 @@
 
 package android.view.accessibility.cts;
 
-import android.app.Activity;
-import android.app.KeyguardManager;
-import android.content.Context;
 import android.os.Bundle;
 import android.view.accessibility.cts.R;
 
 /**
  * The accessibility shortcut target activity.
  */
-public class AccessibilityShortcutTargetActivity extends Activity {
+public class AccessibilityShortcutTargetActivity extends AccessibilityTestActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
diff --git a/tests/accessibility/src/android/view/accessibility/cts/AccessibilityTestActivity.java b/tests/accessibility/src/android/view/accessibility/cts/AccessibilityTestActivity.java
new file mode 100644
index 0000000..95fe97b
--- /dev/null
+++ b/tests/accessibility/src/android/view/accessibility/cts/AccessibilityTestActivity.java
@@ -0,0 +1,36 @@
+/*
+ * 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 android.view.accessibility.cts;
+
+import android.app.Activity;
+import android.app.KeyguardManager;
+import android.os.Bundle;
+
+public abstract class AccessibilityTestActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        turnOnScreen();
+        super.onCreate(savedInstanceState);
+    }
+
+    private void turnOnScreen() {
+        setTurnScreenOn(true);
+        setShowWhenLocked(true);
+        KeyguardManager keyguardManager = getSystemService(KeyguardManager.class);
+        keyguardManager.requestDismissKeyguard(this, null);
+    }
+}
diff --git a/tests/accessibility/src/android/view/accessibility/cts/DummyActivity.java b/tests/accessibility/src/android/view/accessibility/cts/DummyActivity.java
index b184fe8..ef70887 100644
--- a/tests/accessibility/src/android/view/accessibility/cts/DummyActivity.java
+++ b/tests/accessibility/src/android/view/accessibility/cts/DummyActivity.java
@@ -16,7 +16,4 @@
 
 package android.view.accessibility.cts;
 
-import android.app.Activity;
-
-public class DummyActivity extends Activity {
-}
+public class DummyActivity extends AccessibilityTestActivity {}
diff --git a/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityEmbeddedDisplayTest.java b/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityEmbeddedDisplayTest.java
index 30b878c..03324b8 100644
--- a/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityEmbeddedDisplayTest.java
+++ b/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityEmbeddedDisplayTest.java
@@ -247,7 +247,7 @@
         assertNotNull(mEmbeddedDisplayActivity);
     }
 
-    public static class EmbeddedDisplayParentActivity extends Activity {
+    public static class EmbeddedDisplayParentActivity extends AccessibilityTestActivity {
         private ActivityView mActivityView;
 
         @Override
diff --git a/tests/admin/src/android/admin/cts/DevicePolicyManagerTest.java b/tests/admin/src/android/admin/cts/DevicePolicyManagerTest.java
index e10ea6b..b0ff422 100644
--- a/tests/admin/src/android/admin/cts/DevicePolicyManagerTest.java
+++ b/tests/admin/src/android/admin/cts/DevicePolicyManagerTest.java
@@ -116,17 +116,17 @@
         assertTrue(mDevicePolicyManager.isAdminActive(mComponent));
     }
 
-    public void testSetGetEnterpriseNetworkPreferenceEnabled() {
+    public void testSetGetPreferentialNetworkServiceEnabled() {
         if (!mDeviceAdmin) {
-            Log.w(TAG, "Skipping testSetGetEnterpriseNetworkPreferenceEnabled");
+            Log.w(TAG, "Skipping testSetGetPreferentialNetworkServiceEnabled");
             return;
         }
         try {
             mDevicePolicyManager.clearProfileOwner(DeviceAdminInfoTest.getProfileOwnerComponent());
             assertThrows(SecurityException.class,
-                    () -> mDevicePolicyManager.setEnterpriseNetworkPreferenceEnabled(true));
+                    () -> mDevicePolicyManager.setPreferentialNetworkServiceEnabled(true));
             assertThrows(SecurityException.class,
-                    () -> mDevicePolicyManager.isEnterpriseNetworkPreferenceEnabled());
+                    () -> mDevicePolicyManager.isPreferentialNetworkServiceEnabled());
         }  catch (SecurityException se) {
             Log.w(TAG, "Test is not a profile owner and there is no need to clear.");
         } finally {
diff --git a/tests/app/Android.bp b/tests/app/Android.bp
index f34ff7a..b3e421b 100644
--- a/tests/app/Android.bp
+++ b/tests/app/Android.bp
@@ -88,6 +88,9 @@
     min_sdk_version: "14",
     manifest: "DownloadManagerApi28Test/AndroidManifest.xml",
     test_config: "DownloadManagerApi28Test/AndroidTest.xml",
+    lint: {
+    	baseline_filename: "lint-baseline-api-28.xml",
+    },
 }
 
 android_test {
@@ -122,6 +125,9 @@
     min_sdk_version: "14",
     manifest: "DownloadManagerInstallerTest/AndroidManifest.xml",
     test_config: "DownloadManagerInstallerTest/AndroidTest.xml",
+    lint: {
+    	baseline_filename: "lint-baseline-installer.xml",
+    },
 }
 
 android_test {
diff --git a/tests/app/app/src/android/app/stubs/BubbledActivity.java b/tests/app/app/src/android/app/stubs/BubbledActivity.java
index 79530a5..f498038 100644
--- a/tests/app/app/src/android/app/stubs/BubbledActivity.java
+++ b/tests/app/app/src/android/app/stubs/BubbledActivity.java
@@ -17,7 +17,6 @@
 package android.app.stubs;
 
 import android.app.Activity;
-import android.content.Intent;
 import android.content.LocusId;
 import android.os.Bundle;
 
@@ -27,8 +26,6 @@
  */
 public class BubbledActivity extends Activity {
 
-    boolean mIsBubbled = false;
-
     public static final String EXTRA_LOCUS_ID = "EXTRA_ID_LOCUS_ID";
     private LocusId mLocusId;
 
@@ -37,17 +34,12 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
 
-        mIsBubbled = getIntent().getBooleanExtra(Intent.EXTRA_IS_BUBBLED, false);
         Bundle b = getIntent().getExtras();
         String locus = b != null ? b.getString(EXTRA_LOCUS_ID, null) : null;
         mLocusId = locus != null ? new LocusId(locus) : null;
         setLocusContext(mLocusId, null /* bundle */);
     }
 
-    public boolean isBubbled() {
-        return mIsBubbled;
-    }
-
     public LocusId getLocusId() {
         return mLocusId;
     }
diff --git a/tests/app/lint-baseline-api-28.xml b/tests/app/lint-baseline-api-28.xml
new file mode 100644
index 0000000..57e7aee
--- /dev/null
+++ b/tests/app/lint-baseline-api-28.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+    <issue
+        id="NewApi"
+        message="`@android:style/Theme.Material.Dialog` requires API level 21 (current min is 14)"
+        errorLine1="    &lt;style name=&quot;DialogTheme_Test&quot; parent=&quot;@android:style/Theme.Material.Dialog&quot;>"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/app/app/res/values/styles.xml"
+            line="168"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="View requires API level 21 (current min is 14): `&lt;Toolbar>`"
+        errorLine1="&lt;Toolbar android:id=&quot;@+id/toolbar&quot;"
+        errorLine2=" ~~~~~~~">
+        <location
+            file="cts/tests/app/app/res/layout/toolbar_activity.xml"
+            line="23"
+            column="2"/>
+    </issue>
+
+</issues>
diff --git a/tests/app/lint-baseline-installer.xml b/tests/app/lint-baseline-installer.xml
new file mode 100644
index 0000000..57e7aee
--- /dev/null
+++ b/tests/app/lint-baseline-installer.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+    <issue
+        id="NewApi"
+        message="`@android:style/Theme.Material.Dialog` requires API level 21 (current min is 14)"
+        errorLine1="    &lt;style name=&quot;DialogTheme_Test&quot; parent=&quot;@android:style/Theme.Material.Dialog&quot;>"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/app/app/res/values/styles.xml"
+            line="168"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="View requires API level 21 (current min is 14): `&lt;Toolbar>`"
+        errorLine1="&lt;Toolbar android:id=&quot;@+id/toolbar&quot;"
+        errorLine2=" ~~~~~~~">
+        <location
+            file="cts/tests/app/app/res/layout/toolbar_activity.xml"
+            line="23"
+            column="2"/>
+    </issue>
+
+</issues>
diff --git a/tests/app/lint-baseline.xml b/tests/app/lint-baseline.xml
new file mode 100644
index 0000000..9bd7004
--- /dev/null
+++ b/tests/app/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+    <issue
+        id="NewApi"
+        message="`&lt;vector>` requires API level 21 (current min is 14) or building with Android Gradle plugin 1.4 or higher"
+        errorLine1="&lt;vector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
+        errorLine2=" ~~~~~~">
+        <location
+            file="cts/tests/app/res/drawable/ic_android.xml"
+            line="17"
+            column="2"/>
+    </issue>
+
+</issues>
diff --git a/tests/app/shared/lint-baseline.xml b/tests/app/shared/lint-baseline.xml
new file mode 100644
index 0000000..83c4740
--- /dev/null
+++ b/tests/app/shared/lint-baseline.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `new java.util.concurrent.CompletableFuture`"
+        errorLine1="            new CompletableFuture&lt;>();"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/app/shared/src/android/app/stubs/shared/AppAccessibilityService.java"
+            line="36"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `android.content.Context#getSystemService`"
+        errorLine1="        mWindowManager = getSystemService(WindowManager.class);"
+        errorLine2="                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/app/shared/src/android/app/stubs/shared/AppAccessibilityService.java"
+            line="54"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.concurrent.CompletableFuture#obtrudeValue`"
+        errorLine1="        sServiceFuture.obtrudeValue(this);"
+        errorLine2="                       ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/app/shared/src/android/app/stubs/shared/AppAccessibilityService.java"
+            line="71"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `new java.util.concurrent.CompletableFuture`"
+        errorLine1="        sServiceFuture = new CompletableFuture&lt;>();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/app/shared/src/android/app/stubs/shared/AppAccessibilityService.java"
+            line="86"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `android.content.Context#getSystemService`"
+        errorLine1="        mNotificationManager = getSystemService(NotificationManager.class);"
+        errorLine2="                               ~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/app/shared/src/android/app/stubs/shared/CloseSystemDialogsTestService.java"
+            line="60"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `new android.app.Notification.Builder`"
+        errorLine1="                new Notification.Builder(this, NOTIFICATION_CHANNEL_ID)"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/app/shared/src/android/app/stubs/shared/CloseSystemDialogsTestService.java"
+            line="135"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `android.app.Notification.Builder#build`"
+        errorLine1="                        .build();"
+        errorLine2="                         ~~~~~">
+        <location
+            file="cts/tests/app/shared/src/android/app/stubs/shared/CloseSystemDialogsTestService.java"
+            line="138"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `new android.app.NotificationChannel`"
+        errorLine1="        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID,"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/app/shared/src/android/app/stubs/shared/CloseSystemDialogsTestService.java"
+            line="139"
+            column="51"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationManager#createNotificationChannel`"
+        errorLine1="        mNotificationManager.createNotificationChannel(notificationChannel);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/app/shared/src/android/app/stubs/shared/CloseSystemDialogsTestService.java"
+            line="141"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.app.Activity#requireViewById`"
+        errorLine1="        get() = requireViewById&lt;FrameLayout>(R.id.content).getChildAt(0)"
+        errorLine2="                ~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/app/shared/src/android/app/stubs/shared/NotificationHostActivity.kt"
+            line="39"
+            column="17"/>
+    </issue>
+
+</issues>
diff --git a/tests/app/src/android/app/cts/BroadcastOptionsTest.java b/tests/app/src/android/app/cts/BroadcastOptionsTest.java
index ee976da..c3b4e89 100644
--- a/tests/app/src/android/app/cts/BroadcastOptionsTest.java
+++ b/tests/app/src/android/app/cts/BroadcastOptionsTest.java
@@ -20,6 +20,7 @@
 import static junit.framework.Assert.assertNull;
 
 import android.app.BroadcastOptions;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.PowerExemptionManager;
 
@@ -146,4 +147,19 @@
 
         assertBroadcastOption_noTemporaryAppAllowList(bo);
     }
+
+    @Test
+    public void testMaxManifestReceiverApiLevel() {
+        final BroadcastOptions bo = BroadcastOptions.makeBasic();
+        // No MaxManifestReceiverApiLevel set, the default value should be CUR_DEVELOPMENT.
+        assertEquals(Build.VERSION_CODES.CUR_DEVELOPMENT, bo.getMaxManifestReceiverApiLevel());
+
+        // Set MaxManifestReceiverApiLevel to P.
+        bo.setMaxManifestReceiverApiLevel(Build.VERSION_CODES.P);
+        assertEquals(Build.VERSION_CODES.P, bo.getMaxManifestReceiverApiLevel());
+
+        // Clone the BroadcastOptions and check it too.
+        final BroadcastOptions cloned = cloneViaBundle(bo);
+        assertEquals(Build.VERSION_CODES.P, bo.getMaxManifestReceiverApiLevel());
+    }
 }
diff --git a/tests/app/src/android/app/cts/NotificationManagerTest.java b/tests/app/src/android/app/cts/NotificationManagerTest.java
index 2b769af..3f37566 100644
--- a/tests/app/src/android/app/cts/NotificationManagerTest.java
+++ b/tests/app/src/android/app/cts/NotificationManagerTest.java
@@ -61,9 +61,11 @@
 
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertThrows;
 
 import android.Manifest;
 import android.app.ActivityManager;
+import android.app.ActivityOptions;
 import android.app.AutomaticZenRule;
 import android.app.Instrumentation;
 import android.app.KeyguardManager;
@@ -3669,14 +3671,7 @@
             createDynamicShortcut();
             setUpNotifListener();
 
-            // Make a bubble
             SendBubbleActivity a = startSendBubbleActivity();
-            a.sendBubble(BUBBLE_NOTIF_ID,
-                    false /* autoExpand */,
-                    false /* suppressNotif */,
-                    true /* suppressBubble */);
-
-            verifyNotificationBubbleState(BUBBLE_NOTIF_ID, true /* shouldBeBubble */);
 
             // Prep to find bubbled activity
             Class clazz = BubbledActivity.class;
@@ -3690,10 +3685,8 @@
 
             verifyNotificationBubbleState(BUBBLE_NOTIF_ID, true /* shouldBeBubble */);
 
-            InstrumentationRegistry.getInstrumentation().waitForIdleSync();
-
             BubbledActivity activity = (BubbledActivity) monitor.waitForActivity();
-            assertTrue(activity.isBubbled());
+            assertTrue(activity.isLaunchedFromBubble());
         } finally {
             deleteShortcuts();
             cleanupSendBubbleActivity();
@@ -3715,14 +3708,7 @@
             createDynamicShortcut();
             setUpNotifListener();
 
-            // Make a bubble
             SendBubbleActivity a = startSendBubbleActivity();
-            a.sendBubble(BUBBLE_NOTIF_ID,
-                    false /* autoExpand */,
-                    false /* suppressNotif */,
-                    true /* suppressBubble */);
-
-            verifyNotificationBubbleState(BUBBLE_NOTIF_ID, true /* shouldBeBubble */);
 
             // Prep to find bubbled activity
             Class clazz = BubbledActivity.class;
@@ -3732,17 +3718,16 @@
                     new Instrumentation.ActivityMonitor(clazz.getName(), result, false);
             InstrumentationRegistry.getInstrumentation().addMonitor(monitor);
 
-            a.sendBubble(BUBBLE_NOTIF_ID,
-                    true /* autoExpand */,
+            a.sendBubble(BUBBLE_NOTIF_ID, true /* autoExpand */,
                     false /* suppressNotif */,
-                    true /* useShortcut */);
+                    false /* suppressBubble */,
+                    true /* useShortcut */,
+                    true /* setLocus */);
 
             verifyNotificationBubbleState(BUBBLE_NOTIF_ID, true /* shouldBeBubble */);
 
-            InstrumentationRegistry.getInstrumentation().waitForIdleSync();
-
             BubbledActivity activity = (BubbledActivity) monitor.waitForActivity();
-            assertTrue(activity.isBubbled());
+            assertTrue(activity.isLaunchedFromBubble());
         } finally {
             deleteShortcuts();
             cleanupSendBubbleActivity();
@@ -4042,6 +4027,27 @@
         }
     }
 
+    /** Verifies that a regular activity can't specify a bubble in ActivityOptions */
+    public void testNotificationManagerBubble_launchBubble_activityOptions_fails()
+            throws Exception {
+        try {
+            // Start test activity
+            SendBubbleActivity activity = startSendBubbleActivity();
+            assertFalse(activity.isLaunchedFromBubble());
+
+            // Should have exception
+            assertThrows(SecurityException.class, () -> {
+                Intent i = new Intent(mContext, BubbledActivity.class);
+                ActivityOptions options = ActivityOptions.makeBasic();
+                Bundle b = options.toBundle();
+                b.putBoolean("android.activity.launchTypeBubble", true);
+                activity.startActivity(i, b);
+            });
+        } finally {
+            cleanupSendBubbleActivity();
+        }
+    }
+
     public void testOriginalChannelImportance() {
         NotificationChannel channel = new NotificationChannel(mId, "my channel", IMPORTANCE_HIGH);
 
diff --git a/tests/app/src/android/app/cts/NotificationTemplateTest.kt b/tests/app/src/android/app/cts/NotificationTemplateTest.kt
index c3c85d9..0917767 100644
--- a/tests/app/src/android/app/cts/NotificationTemplateTest.kt
+++ b/tests/app/src/android/app/cts/NotificationTemplateTest.kt
@@ -556,6 +556,28 @@
         }
     }
 
+    fun testCallStyle_forIncomingCall_isVideo_hasCorrectActions() {
+        val namedPerson = Person.Builder().setName("Named Person").build()
+        val builder = Notification.Builder(mContext, NOTIFICATION_CHANNEL_ID)
+                .setSmallIcon(R.drawable.ic_media_play)
+                .setStyle(Notification.CallStyle
+                        .forIncomingCall(namedPerson, pendingIntent, pendingIntent)
+                        .setIsVideo(true))
+        val notification = builder.build()
+        assertThat(notification).isNotNull()
+        assertThat(notification.extras.getBoolean(Notification.EXTRA_CALL_IS_VIDEO)).isTrue()
+        val answerText = mContext.getString(
+                getAndroidRString("call_notification_answer_video_action"))
+        val declineText = mContext.getString(getAndroidRString("call_notification_decline_action"))
+        val hangUpText = mContext.getString(getAndroidRString("call_notification_hang_up_action"))
+        val views = builder.createBigContentView()
+        checkViews(views) {
+            assertThat(requireViewWithText(answerText).visibility).isEqualTo(View.VISIBLE)
+            assertThat(requireViewWithText(declineText).visibility).isEqualTo(View.VISIBLE)
+            assertThat(findViewWithText(hangUpText)).isNull()
+        }
+    }
+
     @SmallTest
     fun testCallStyle_forOngoingCall_validatesArguments() {
         val namedPerson = Person.Builder().setName("Named Person").build()
diff --git a/tests/app/src/android/app/cts/UserHandleTest.java b/tests/app/src/android/app/cts/UserHandleTest.java
index 4f4b829..ec7cc40 100644
--- a/tests/app/src/android/app/cts/UserHandleTest.java
+++ b/tests/app/src/android/app/cts/UserHandleTest.java
@@ -60,15 +60,15 @@
     public void testGetUid() {
         assertEquals(
                 UserHandle.getUid(UserHandle.USER_ALL, TEST_APP_ID),
-                UserHandle.getUid(UserHandle.ALL, TEST_APP_ID));
+                UserHandle.ALL.getUid(TEST_APP_ID));
         assertEquals(
                 UserHandle.getUid(UserHandle.USER_SYSTEM, TEST_APP_ID),
-                UserHandle.getUid(UserHandle.SYSTEM, TEST_APP_ID));
+                UserHandle.SYSTEM.getUid(TEST_APP_ID));
         assertEquals(
-                UserHandle.getUid(UserHandle.USER_ALL, TEST_APP_ID),
+                UserHandle.ALL.getUid(TEST_APP_ID),
                 UserHandle.getUid(UserHandle.ALL.getIdentifier(), TEST_APP_ID));
         assertEquals(
-                UserHandle.getUid(UserHandle.USER_SYSTEM, TEST_APP_ID),
+                UserHandle.SYSTEM.getUid(TEST_APP_ID),
                 UserHandle.getUid(UserHandle.SYSTEM.getIdentifier(), TEST_APP_ID));
     }
 }
diff --git a/tests/appsearch/src/com/android/cts/appsearch/external/AppSearchMigratorTest.java b/tests/appsearch/src/com/android/cts/appsearch/external/AppSearchMigratorTest.java
new file mode 100644
index 0000000..f0a916d1
--- /dev/null
+++ b/tests/appsearch/src/com/android/cts/appsearch/external/AppSearchMigratorTest.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright 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 android.app.appsearch.cts;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.annotation.NonNull;
+import android.app.appsearch.GenericDocument;
+import android.app.appsearch.Migrator;
+
+import org.junit.Test;
+
+public class AppSearchMigratorTest {
+
+    @Test
+    public void testOnUpgrade() {
+        Migrator migrator =
+                new Migrator() {
+                    @Override
+                    public boolean shouldMigrate(int currentVersion, int finalVersion) {
+                        return true;
+                    }
+
+                    @NonNull
+                    @Override
+                    public GenericDocument onUpgrade(
+                            int currentVersion,
+                            int finalVersion,
+                            @NonNull GenericDocument document) {
+                        return new GenericDocument.Builder<>(
+                                        document.getNamespace(),
+                                        document.getUri(),
+                                        document.getSchemaType())
+                                .setCreationTimestampMillis(document.getCreationTimestampMillis())
+                                .setScore(document.getScore())
+                                .setTtlMillis(document.getTtlMillis())
+                                .setPropertyString(
+                                        "migration",
+                                        "Upgrade the document from version "
+                                                + currentVersion
+                                                + " to version "
+                                                + finalVersion)
+                                .build();
+                    }
+
+                    @NonNull
+                    @Override
+                    public GenericDocument onDowngrade(
+                            int currentVersion,
+                            int finalVersion,
+                            @NonNull GenericDocument document) {
+                        return document;
+                    }
+                };
+
+        GenericDocument input =
+                new GenericDocument.Builder<>("namespace", "uri", "schemaType")
+                        .setCreationTimestampMillis(12345L)
+                        .setScore(100)
+                        .setTtlMillis(54321L)
+                        .build();
+
+        GenericDocument expected =
+                new GenericDocument.Builder<>("namespace", "uri", "schemaType")
+                        .setCreationTimestampMillis(12345L)
+                        .setScore(100)
+                        .setTtlMillis(54321L)
+                        .setPropertyString(
+                                "migration", "Upgrade the document from version 3 to version 5")
+                        .build();
+
+        GenericDocument output =
+                migrator.onUpgrade(/*currentVersion=*/ 3, /*finalVersion=*/ 5, input);
+        assertThat(output).isEqualTo(expected);
+    }
+
+    @Test
+    public void testOnDowngrade() {
+        Migrator migrator =
+                new Migrator() {
+                    @Override
+                    public boolean shouldMigrate(int currentVersion, int finalVersion) {
+                        return true;
+                    }
+
+                    @NonNull
+                    @Override
+                    public GenericDocument onUpgrade(
+                            int currentVersion,
+                            int finalVersion,
+                            @NonNull GenericDocument document) {
+                        return document;
+                    }
+
+                    @NonNull
+                    @Override
+                    public GenericDocument onDowngrade(
+                            int currentVersion,
+                            int finalVersion,
+                            @NonNull GenericDocument document) {
+                        return new GenericDocument.Builder<>(
+                                        document.getNamespace(),
+                                        document.getUri(),
+                                        document.getSchemaType())
+                                .setCreationTimestampMillis(document.getCreationTimestampMillis())
+                                .setScore(document.getScore())
+                                .setTtlMillis(document.getTtlMillis())
+                                .setPropertyString(
+                                        "migration",
+                                        "Downgrade the document from version "
+                                                + currentVersion
+                                                + " to version "
+                                                + finalVersion)
+                                .build();
+                    }
+                };
+
+        GenericDocument input =
+                new GenericDocument.Builder<>("namespace", "uri", "schemaType")
+                        .setCreationTimestampMillis(12345L)
+                        .setScore(100)
+                        .setTtlMillis(54321L)
+                        .build();
+
+        GenericDocument expected =
+                new GenericDocument.Builder<>("namespace", "uri", "schemaType")
+                        .setCreationTimestampMillis(12345L)
+                        .setScore(100)
+                        .setTtlMillis(54321L)
+                        .setPropertyString(
+                                "migration", "Downgrade the document from version 6 to version 4")
+                        .build();
+
+        GenericDocument output =
+                migrator.onDowngrade(/*currentVersion=*/ 6, /*finalVersion=*/ 4, input);
+        assertThat(output).isEqualTo(expected);
+    }
+}
diff --git a/tests/appsearch/src/com/android/cts/appsearch/external/AppSearchSessionCtsTestBase.java b/tests/appsearch/src/com/android/cts/appsearch/external/AppSearchSessionCtsTestBase.java
index c018951..dd445e0 100644
--- a/tests/appsearch/src/com/android/cts/appsearch/external/AppSearchSessionCtsTestBase.java
+++ b/tests/appsearch/src/com/android/cts/appsearch/external/AppSearchSessionCtsTestBase.java
@@ -57,7 +57,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import java.util.ArrayList;
diff --git a/tests/appsearch/src/com/android/cts/appsearch/external/GenericDocumentCtsTest.java b/tests/appsearch/src/com/android/cts/appsearch/external/GenericDocumentCtsTest.java
index 121438d..92094c3 100644
--- a/tests/appsearch/src/com/android/cts/appsearch/external/GenericDocumentCtsTest.java
+++ b/tests/appsearch/src/com/android/cts/appsearch/external/GenericDocumentCtsTest.java
@@ -279,11 +279,22 @@
     }
 
     @Test
+    public void testDocument_setEmptyValues() {
+        GenericDocument document =
+                new GenericDocument.Builder<>("namespace", "uri1", "schemaType1")
+                        .setPropertyBoolean("testKey")
+                        .build();
+        assertThat(document.getPropertyBooleanArray("testKey")).isEmpty();
+    }
+
+    @Test
     public void testDocumentInvalid() {
         GenericDocument.Builder<?> builder =
                 new GenericDocument.Builder<>("namespace", "uri1", "schemaType1");
+        String nullString = null;
+
         expectThrows(
                 IllegalArgumentException.class,
-                () -> builder.setPropertyBoolean("test", new boolean[] {}));
+                () -> builder.setPropertyString("testKey", "string1", nullString));
     }
 }
diff --git a/tests/autofillservice/AndroidTest.xml b/tests/autofillservice/AndroidTest.xml
index 7aec376..3186d47 100644
--- a/tests/autofillservice/AndroidTest.xml
+++ b/tests/autofillservice/AndroidTest.xml
@@ -65,10 +65,4 @@
     <option name="collect-on-run-ended-only" value="true" />
     <option name="clean-up" value="false" />
   </metrics_collector>
-  <!-- Automotive tests run on user 10 -->
-  <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
-    <option name="directory-keys" value="/storage/emulated/10/CtsAutoFillServiceTestCases" />
-    <option name="collect-on-run-ended-only" value="true" />
-    <option name="clean-up" value="false" />
-  </metrics_collector>
 </configuration>
diff --git a/tests/autofillservice/res/raw/scenery.jpg b/tests/autofillservice/res/raw/scenery.jpg
deleted file mode 100644
index 7d1f5e1..0000000
--- a/tests/autofillservice/res/raw/scenery.jpg
+++ /dev/null
Binary files differ
diff --git a/tests/autofillservice/src/android/autofillservice/cts/commontests/ClientSuggestionsCommonTestCase.java b/tests/autofillservice/src/android/autofillservice/cts/commontests/ClientSuggestionsCommonTestCase.java
index af4dea1..442ef4b 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/commontests/ClientSuggestionsCommonTestCase.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/commontests/ClientSuggestionsCommonTestCase.java
@@ -23,10 +23,12 @@
 import android.autofillservice.cts.R;
 import android.autofillservice.cts.activities.ClientSuggestionsActivity;
 import android.autofillservice.cts.testcore.AutofillActivityTestRule;
+import android.autofillservice.cts.testcore.CannedFillResponse;
 import android.autofillservice.cts.testcore.CannedFillResponse.CannedDataset;
 import android.autofillservice.cts.testcore.ClientAutofillRequestCallback;
 import android.autofillservice.cts.testcore.OneTimeTextWatcher;
 import android.autofillservice.cts.testcore.UiBot;
+import android.os.Bundle;
 import android.platform.test.annotations.AppModeFull;
 import android.widget.EditText;
 
@@ -78,12 +80,162 @@
     }
 
     @Test
+    public void testAutoFillNoDatasets_fallbackDefaultService() throws Exception {
+        // Set service.
+        enableService();
+
+        // Set expectations.
+        sReplier.addResponse(new CannedDataset.Builder()
+                .setField(ID_USERNAME, "dude")
+                .setField(ID_PASSWORD, "sweet")
+                .setPresentation("The Dude", isInlineMode())
+                .build());
+
+        mClientReplier.addResponse(NO_RESPONSE);
+
+        // Trigger autofill.
+        mUiBot.selectByRelativeId(ID_USERNAME);
+        mUiBot.waitForIdle();
+        sReplier.getNextFillRequest();
+        mClientReplier.assertReceivedRequest();
+
+        mActivity.expectAutoFill("dude", "sweet");
+
+        // Select the dataset.
+        mUiBot.selectDataset("The Dude");
+
+        // Check the results.
+        mActivity.assertAutoFilled();
+    }
+
+    @Test
+    @AppModeFull(reason = "testAutoFillNoDatasets_fallbackDefaultService() is enough")
+    public void testManualRequestAfterFallbackDefaultService() throws Exception {
+        // Set service.
+        enableService();
+
+        // Set expectations.
+        sReplier.addResponse(new CannedDataset.Builder()
+                .setField(ID_USERNAME, "dude")
+                .setField(ID_PASSWORD, "sweet")
+                .setPresentation("The Dude", isInlineMode())
+                .build());
+
+        mClientReplier.addResponse(NO_RESPONSE);
+
+        // Trigger autofill.
+        mUiBot.selectByRelativeId(ID_USERNAME);
+        mUiBot.waitForIdle();
+        sReplier.getNextFillRequest();
+        mClientReplier.assertReceivedRequest();
+
+        // The dataset shown.
+        mUiBot.assertDatasets("The Dude");
+
+        // Set expectations.
+        sReplier.addResponse(new CannedDataset.Builder()
+                .setField(ID_USERNAME, "DUDE")
+                .setField(ID_PASSWORD, "SWEET")
+                .setPresentation("THE DUDE", isInlineMode())
+                .build());
+
+        // Trigger autofill.
+        mActivity.forceAutofillOnUsername();
+        mUiBot.waitForIdle();
+        sReplier.getNextFillRequest();
+        mClientReplier.assertNoUnhandledFillRequests();
+
+        mActivity.expectAutoFill("DUDE", "SWEET");
+
+        // Select the dataset.
+        mUiBot.selectDataset("THE DUDE");
+
+        // Check the results.
+        mActivity.assertAutoFilled();
+    }
+
+    @Test
+    @AppModeFull(reason = "testAutoFillNoDatasets_fallbackDefaultService() is enough")
+    public void testNewFieldAddedAfterFallbackDefaultService() throws Exception {
+        // Set service.
+        enableService();
+
+        // Set expectations.
+        sReplier.addResponse(new CannedDataset.Builder()
+                .setField(ID_USERNAME, "dude")
+                .setField(ID_PASSWORD, "sweet")
+                .setPresentation("The Dude", isInlineMode())
+                .build());
+
+        mClientReplier.addResponse(NO_RESPONSE);
+
+        // Trigger autofill.
+        mUiBot.selectByRelativeId(ID_USERNAME);
+        mUiBot.waitForIdle();
+        sReplier.getNextFillRequest();
+        mClientReplier.assertReceivedRequest();
+
+        // The dataset shown.
+        mUiBot.assertDatasets("The Dude");
+
+        // Try again, in a field that was added after the first request
+        final EditText child = new EditText(mActivity);
+        child.setId(R.id.empty);
+        mActivity.addChild(child, ID_EMPTY);
+        final OneTimeTextWatcher watcher = new OneTimeTextWatcher("child", child,
+                "new view on the block");
+        child.addTextChangedListener(watcher);
+        sReplier.addResponse(new CannedDataset.Builder()
+                .setField(ID_USERNAME, "dude")
+                .setField(ID_PASSWORD, "sweet")
+                .setField(ID_EMPTY, "new view on the block")
+                .setPresentation("The Dude", isInlineMode())
+                .build());
+
+        mActivity.syncRunOnUiThread(() -> child.requestFocus());
+        mUiBot.waitForIdle();
+        sReplier.getNextFillRequest();
+        mClientReplier.assertNoUnhandledFillRequests();
+
+        mActivity.expectAutoFill("dude", "sweet");
+
+        // Select the dataset.
+        mUiBot.selectDataset("The Dude");
+        mUiBot.waitForIdle();
+
+        // Check the results.
+        mActivity.assertAutoFilled();
+        watcher.assertAutoFilled();
+    }
+
+    @Test
+    public void testNoDatasetsAfterFallbackDefaultService() throws Exception {
+        // Set service.
+        enableService();
+
+        // Set expectations.
+        sReplier.addResponse(NO_RESPONSE);
+        mClientReplier.addResponse(NO_RESPONSE);
+
+        // Trigger autofill.
+        mUiBot.selectByRelativeId(ID_USERNAME);
+        mUiBot.waitForIdle();
+
+        mClientReplier.assertReceivedRequest();
+        sReplier.getNextFillRequest();
+
+        // Make sure UI is not shown.
+        mUiBot.assertNoDatasetsEver();
+    }
+
+    @Test
+    @AppModeFull(reason = "testAutoFillOneDataset() is enough")
     public void testAutoFillNoDatasets() throws Exception {
         // Set service.
         enableService();
 
         // Set expectations.
-        mClientReplier.addResponse(NO_RESPONSE);
+        setEmptyClientResponse();
 
         // Trigger autofill.
         mUiBot.selectByRelativeId(ID_USERNAME);
@@ -101,7 +253,7 @@
         enableService();
 
         // Set expectations.
-        mClientReplier.addResponse(NO_RESPONSE);
+        setEmptyClientResponse();
 
         // Trigger autofill.
         mUiBot.selectByRelativeId(ID_USERNAME);
@@ -151,4 +303,10 @@
             }
         };
     }
+
+    private void setEmptyClientResponse() {
+        mClientReplier.addResponse(new CannedFillResponse.Builder()
+                .setExtras(new Bundle())
+                .build());
+    }
 }
diff --git a/tests/autofillservice/src/android/autofillservice/cts/inline/InlineAugmentedContentTest.java b/tests/autofillservice/src/android/autofillservice/cts/inline/InlineAugmentedContentTest.java
index eaad897..a8800c8 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/inline/InlineAugmentedContentTest.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/inline/InlineAugmentedContentTest.java
@@ -21,7 +21,6 @@
 import static android.autofillservice.cts.testcore.CannedFillResponse.NO_RESPONSE;
 import static android.autofillservice.cts.testcore.Helper.ID_USERNAME;
 
-import android.autofillservice.cts.R;
 import android.autofillservice.cts.activities.AugmentedAuthActivity;
 import android.autofillservice.cts.activities.AugmentedLoginActivity;
 import android.autofillservice.cts.commontests.AugmentedAutofillAutoActivityLaunchTestCase;
@@ -31,14 +30,9 @@
 import android.content.ClipData;
 import android.content.ContentResolver;
 import android.content.IntentSender;
-import android.content.res.AssetFileDescriptor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
 import android.net.Uri;
 import android.platform.test.annotations.Presubmit;
-import android.provider.MediaStore;
 import android.service.autofill.Dataset;
-import android.util.Log;
 import android.view.ContentInfo;
 import android.view.OnReceiveContentListener;
 import android.view.View;
@@ -120,8 +114,8 @@
     @Test
     public void testFillContent_contentUri() throws Exception {
         final String suggestionTitle = "Sample Image";
-        final Uri suggestionUri = createSampleImageInMediaStore();
-        final String suggestionMimeType = mContentResolver.getType(suggestionUri);
+        final Uri suggestionUri = sampleContentUri();
+        final String suggestionMimeType = "image/png";
 
         // Set expectations
         final EditText targetField = mActivity.getUsername();
@@ -154,8 +148,8 @@
     @Test
     public void testFillContent_contentUri_authFlow() throws Exception {
         final String suggestionTitle = "Sample Image";
-        final Uri suggestionUri = createSampleImageInMediaStore();
-        final String suggestionMimeType = mContentResolver.getType(suggestionUri);
+        final Uri suggestionUri = sampleContentUri();
+        final String suggestionMimeType = "image/png";
 
         // Set expectations
         final EditText targetField = mActivity.getUsername();
@@ -235,14 +229,9 @@
                 .build();
     }
 
-    private Uri createSampleImageInMediaStore() {
+    private static Uri sampleContentUri() {
         String uniqueSuffix = System.currentTimeMillis() + "_" + SUFFIX_COUNTER.getAndIncrement();
-        String title = "Scenery " + uniqueSuffix;
-        String description = "Scenery description " + uniqueSuffix;
-        Bitmap src = BitmapFactory.decodeResource(mContext.getResources(), R.raw.scenery);
-        String uriStr = MediaStore.Images.Media.insertImage(mContentResolver, src,
-                title, description);
-        return Uri.parse(uriStr);
+        return Uri.parse(ContentResolver.SCHEME_CONTENT + "://example/" + uniqueSuffix);
     }
 
     private static final class MyContentReceiver implements OnReceiveContentListener {
@@ -259,7 +248,6 @@
                 }
                 ClipData.Item item = clip.getItemAt(i);
                 if (item.getUri() != null) {
-                    receiveUri(view, item.getUri());
                     sb.append(TEXT_FILLED_FOR_URI);
                 } else {
                     sb.append(item.getText());
@@ -268,17 +256,5 @@
             ((TextView) view).setText(sb.toString());
             return null;
         }
-
-        private void receiveUri(View view, Uri uri) {
-            ContentResolver contentResolver = view.getContext().getContentResolver();
-            try (AssetFileDescriptor fd = contentResolver.openAssetFileDescriptor(uri, "r")) {
-                long sizeInBytes = fd.getLength();
-                String mimeType = contentResolver.getType(uri);
-                Log.d(TAG, "Read URI [" + uri + "] of type [" + mimeType + "]: " + sizeInBytes
-                        + " bytes");
-            } catch (Exception e) {
-                throw new IllegalStateException("Cannot read URI: " + uri, e);
-            }
-        }
     }
 }
diff --git a/tests/camera/src/android/hardware/camera2/cts/CameraExtensionCharacteristicsTest.java b/tests/camera/src/android/hardware/camera2/cts/CameraExtensionCharacteristicsTest.java
index 4c778a4..5f8c8f9 100644
--- a/tests/camera/src/android/hardware/camera2/cts/CameraExtensionCharacteristicsTest.java
+++ b/tests/camera/src/android/hardware/camera2/cts/CameraExtensionCharacteristicsTest.java
@@ -27,6 +27,8 @@
 
 import androidx.test.InstrumentationRegistry;
 
+import com.android.compatibility.common.util.PropertyUtil;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -123,6 +125,7 @@
 
     @Test
     public void testExtensionAvailability() throws Exception {
+        boolean extensionsAdvertised = false;
         for (String id : mTestRule.getCameraIdsUnderTest()) {
             StaticMetadata staticMeta =
                     new StaticMetadata(mTestRule.getCameraManager().getCameraCharacteristics(id));
@@ -133,6 +136,9 @@
                     mTestRule.getCameraManager().getCameraExtensionCharacteristics(id);
             ArrayList<Integer> unsupportedExtensions = new ArrayList<>(EXTENSIONS);
             List<Integer> supportedExtensions = extensionChars.getSupportedExtensions();
+            if (!extensionsAdvertised && !supportedExtensions.isEmpty()) {
+                extensionsAdvertised = true;
+            }
             for (Integer extension : supportedExtensions) {
                 verifySupportedExtension(extensionChars, id, extension, SurfaceTexture.class);
                 unsupportedExtensions.remove(extension);
@@ -143,6 +149,10 @@
                 verifyUnsupportedExtension(extensionChars, extension, SurfaceTexture.class);
             }
         }
+        boolean extensionsEnabledProp = PropertyUtil.areCameraXExtensionsEnabled();
+        assertEquals("Extensions system property : " + extensionsEnabledProp + " does not match " +
+                "with the advertised extensions: " + extensionsAdvertised, extensionsEnabledProp,
+                extensionsAdvertised);
     }
 
     @Test
diff --git a/tests/camera/src/android/hardware/camera2/cts/CaptureResultTest.java b/tests/camera/src/android/hardware/camera2/cts/CaptureResultTest.java
index c334724..d015959 100644
--- a/tests/camera/src/android/hardware/camera2/cts/CaptureResultTest.java
+++ b/tests/camera/src/android/hardware/camera2/cts/CaptureResultTest.java
@@ -669,7 +669,7 @@
             // Radial distortion doesn't need to be present for new devices, or old devices that
             // opt in the new lens distortion tag.
             CameraCharacteristics c = staticInfo.getCharacteristics();
-            if (Build.VERSION.FIRST_SDK_INT > Build.VERSION_CODES.O_MR1 ||
+            if (Build.VERSION.DEVICE_INITIAL_SDK_INT > Build.VERSION_CODES.O_MR1 ||
                     c.get(CameraCharacteristics.LENS_DISTORTION) != null) {
                 waiverKeys.add(CaptureResult.LENS_RADIAL_DISTORTION);
             }
diff --git a/tests/camera/src/android/hardware/camera2/cts/ExtendedCameraCharacteristicsTest.java b/tests/camera/src/android/hardware/camera2/cts/ExtendedCameraCharacteristicsTest.java
index e792521..d30349e 100644
--- a/tests/camera/src/android/hardware/camera2/cts/ExtendedCameraCharacteristicsTest.java
+++ b/tests/camera/src/android/hardware/camera2/cts/ExtendedCameraCharacteristicsTest.java
@@ -2549,7 +2549,7 @@
     private float[] getLensDistortion(CameraCharacteristics c) {
         float[] distortion = null;
         float[] newDistortion = c.get(CameraCharacteristics.LENS_DISTORTION);
-        if (Build.VERSION.FIRST_SDK_INT > Build.VERSION_CODES.O_MR1 || newDistortion != null) {
+        if (Build.VERSION.DEVICE_INITIAL_SDK_INT > Build.VERSION_CODES.O_MR1 || newDistortion != null) {
             // New devices need to use fixed radial distortion definition; old devices can
             // opt-in to it
             if (newDistortion != null && newDistortion.length == 5) {
diff --git a/tests/devicepolicy/Android.bp b/tests/devicepolicy/Android.bp
index a71dec7..9ae1302 100644
--- a/tests/devicepolicy/Android.bp
+++ b/tests/devicepolicy/Android.bp
@@ -38,8 +38,5 @@
         "vts10",
         "general-tests",
     ],
-    test_options: {
-        extra_test_configs: ["DevicePolicyWorkProfileTest.xml", "DevicePolicySecondaryUserTest.xml"]
-    },
     sdk_version: "test_current",
 }
diff --git a/tests/devicepolicy/AndroidTest.xml b/tests/devicepolicy/AndroidTest.xml
index 2cff288..1e16d2e 100644
--- a/tests/devicepolicy/AndroidTest.xml
+++ b/tests/devicepolicy/AndroidTest.xml
@@ -21,6 +21,7 @@
     <option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
     <option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
     <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
+    <option name="config-descriptor:metadata" key="parameter" value="multiuser" />
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true" />
         <option name="install-arg" value="-t" />
diff --git a/tests/devicepolicy/DevicePolicySecondaryUserTest.xml b/tests/devicepolicy/DevicePolicySecondaryUserTest.xml
deleted file mode 100644
index 798f52e..0000000
--- a/tests/devicepolicy/DevicePolicySecondaryUserTest.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2020 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.
-  -->
-<configuration description="Config for CTS Device Policy test cases on a secondary user">
-    <option name="test-suite-tag" value="cts" />
-    <option name="config-descriptor:metadata" key="component" value="framework" />
-    <!-- Instant apps can never be device admin / profile owner / device owner so positive tests
-         here are not applicable -->
-    <option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
-    <option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
-    <option name="config-descriptor:metadata" key="parameter" value="not_secondary_user" />
-    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
-        <option name="cleanup-apks" value="true" />
-        <option name="install-arg" value="-t" />
-        <option name="test-file-name" value="CtsDevicePolicyTestCases.apk" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.RunOnSecondaryUserTargetPreparer">
-        <option name="test-package-name" value="android.devicepolicy.cts" />
-    </target_preparer>
-    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
-        <option name="package" value="android.devicepolicy.cts" />
-        <option name="include-annotation" value="com.android.bedstead.harrier.annotations.RequireRunOnSecondaryUser" />
-        <!--        <option name="instrumentation-arg" key="skip-test-teardown" value="true" />-->
-        <option name="hidden-api-checks" value="false" />
-    </test>
-</configuration>
\ No newline at end of file
diff --git a/tests/devicepolicy/DevicePolicyWorkProfileTest.xml b/tests/devicepolicy/DevicePolicyWorkProfileTest.xml
deleted file mode 100644
index 1e45241..0000000
--- a/tests/devicepolicy/DevicePolicyWorkProfileTest.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2020 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.
--->
-<configuration description="Config for CTS Device Policy test cases on a work profile">
-    <option name="test-suite-tag" value="cts" />
-    <option name="config-descriptor:metadata" key="component" value="framework" />
-    <!-- Instant apps can never be device admin / profile owner / device owner so positive tests
-         here are not applicable -->
-    <option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
-    <option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
-    <option name="config-descriptor:metadata" key="parameter" value="not_secondary_user" />
-    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
-        <option name="cleanup-apks" value="true" />
-        <option name="install-arg" value="-t" />
-        <option name="test-file-name" value="CtsDevicePolicyTestCases.apk" />
-    </target_preparer>
-    <target_preparer class="com.android.tradefed.targetprep.RunOnWorkProfileTargetPreparer">
-        <option name="test-package-name" value="android.devicepolicy.cts" />
-    </target_preparer>
-    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
-        <option name="package" value="android.devicepolicy.cts" />
-        <option name="include-annotation" value="com.android.bedstead.harrier.annotations.RequireRunOnWorkProfile" />
-<!--        <option name="instrumentation-arg" key="skip-test-teardown" value="true" />-->
-        <option name="hidden-api-checks" value="false" />
-    </test>
-</configuration>
\ No newline at end of file
diff --git a/tests/devicepolicy/src/android/devicepolicy/cts/AdminPermissionControlParamsTests.java b/tests/devicepolicy/src/android/devicepolicy/cts/AdminPermissionControlParamsTests.java
index 1719c94..f7eb651 100644
--- a/tests/devicepolicy/src/android/devicepolicy/cts/AdminPermissionControlParamsTests.java
+++ b/tests/devicepolicy/src/android/devicepolicy/cts/AdminPermissionControlParamsTests.java
@@ -23,14 +23,13 @@
 import android.os.Parcel;
 import android.permission.AdminPermissionControlParams;
 
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
+import com.android.bedstead.harrier.BedsteadJUnit4;
 import com.android.bedstead.harrier.annotations.Postsubmit;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-@RunWith(AndroidJUnit4.class)
+@RunWith(BedsteadJUnit4.class)
 public class AdminPermissionControlParamsTests {
     private static final String PKG = "somePackage";
     private static final String PERMISSION = "somePackage";
diff --git a/tests/devicepolicy/src/android/devicepolicy/cts/AppUriAuthenticationPolicyTest.java b/tests/devicepolicy/src/android/devicepolicy/cts/AppUriAuthenticationPolicyTest.java
index 388178d..b990f6b 100644
--- a/tests/devicepolicy/src/android/devicepolicy/cts/AppUriAuthenticationPolicyTest.java
+++ b/tests/devicepolicy/src/android/devicepolicy/cts/AppUriAuthenticationPolicyTest.java
@@ -24,16 +24,17 @@
 import android.os.Parcel;
 import android.security.AppUriAuthenticationPolicy;
 
-import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
+import com.android.bedstead.harrier.BedsteadJUnit4;
+
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import java.util.Map;
 
 @SmallTest
-@RunWith(AndroidJUnit4.class)
+@RunWith(BedsteadJUnit4.class)
 public final class AppUriAuthenticationPolicyTest {
 
     private final static String PACKAGE_NAME = "com.android.test";
diff --git a/tests/devicepolicy/src/android/devicepolicy/cts/CredentialManagementAppTest.java b/tests/devicepolicy/src/android/devicepolicy/cts/CredentialManagementAppTest.java
index ff33035..d70179a 100644
--- a/tests/devicepolicy/src/android/devicepolicy/cts/CredentialManagementAppTest.java
+++ b/tests/devicepolicy/src/android/devicepolicy/cts/CredentialManagementAppTest.java
@@ -39,10 +39,10 @@
 import android.security.keystore.KeyProperties;
 
 import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.platform.app.InstrumentationRegistry;
 
 import com.android.activitycontext.ActivityContext;
+import com.android.bedstead.harrier.BedsteadJUnit4;
 import com.android.bedstead.harrier.annotations.Postsubmit;
 import com.android.compatibility.common.util.BlockingCallback;
 import com.android.compatibility.common.util.FakeKeys;
@@ -67,7 +67,7 @@
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-@RunWith(AndroidJUnit4.class)
+@RunWith(BedsteadJUnit4.class)
 public class CredentialManagementAppTest {
 
     private static final PrivateKey PRIVATE_KEY =
diff --git a/tests/devicepolicy/src/android/devicepolicy/cts/CrossProfileAppsTest.java b/tests/devicepolicy/src/android/devicepolicy/cts/CrossProfileAppsTest.java
index e867aae..c7e8c07 100644
--- a/tests/devicepolicy/src/android/devicepolicy/cts/CrossProfileAppsTest.java
+++ b/tests/devicepolicy/src/android/devicepolicy/cts/CrossProfileAppsTest.java
@@ -19,10 +19,8 @@
 import static com.android.bedstead.harrier.DeviceState.UserType.PRIMARY_USER;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
 
-import static junit.framework.Assert.assertNotNull;
-
-import static org.junit.Assert.assertEquals;
 import static org.testng.Assert.assertThrows;
 
 import android.content.ComponentName;
@@ -32,13 +30,13 @@
 import android.os.UserManager;
 
 import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.uiautomator.By;
 import androidx.test.uiautomator.UiDevice;
 import androidx.test.uiautomator.UiObject2;
 import androidx.test.uiautomator.Until;
 
+import com.android.bedstead.harrier.BedsteadJUnit4;
 import com.android.bedstead.harrier.DeviceState;
 import com.android.bedstead.harrier.annotations.EnsureHasSecondaryUser;
 import com.android.bedstead.harrier.annotations.EnsureHasWorkProfile;
@@ -46,17 +44,21 @@
 import com.android.bedstead.harrier.annotations.RequireRunOnPrimaryUser;
 import com.android.bedstead.harrier.annotations.RequireRunOnSecondaryUser;
 import com.android.bedstead.harrier.annotations.RequireRunOnWorkProfile;
+import com.android.bedstead.harrier.annotations.enterprise.PositivePolicyTest;
+import com.android.bedstead.harrier.annotations.parameterized.IncludeRunOnNonAffiliatedDeviceOwnerSecondaryUser;
+import com.android.bedstead.harrier.policies.TestPolicy;
 
 import org.junit.ClassRule;
 import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
 
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-@RunWith(AndroidJUnit4.class)
+@RunWith(BedsteadJUnit4.class)
 public final class CrossProfileAppsTest {
 
     private static final String ID_USER_TEXTVIEW =
@@ -160,11 +162,12 @@
                 .wait(
                         Until.findObject(By.res(ID_USER_TEXTVIEW)),
                         TIMEOUT_WAIT_UI);
-        assertNotNull("Failed to start activity in target user", textView);
+        assertWithMessage("Failed to start activity in target user")
+                .that(textView).isNotNull();
         // Look for the text in textview, it should be the serial number of target user.
-        assertEquals("Activity is started in wrong user",
-                String.valueOf(sUserManager.getSerialNumberForUser(user)),
-                textView.getText());
+        assertWithMessage("Activity is started in wrong user")
+                .that(textView.getText())
+                .isEqualTo(String.valueOf(sUserManager.getSerialNumberForUser(user)));
     }
 
     @Test
diff --git a/tests/devicepolicy/src/android/devicepolicy/cts/DevicePolicyManagerTest.java b/tests/devicepolicy/src/android/devicepolicy/cts/DevicePolicyManagerTest.java
index b17ec08..c28b2c9 100644
--- a/tests/devicepolicy/src/android/devicepolicy/cts/DevicePolicyManagerTest.java
+++ b/tests/devicepolicy/src/android/devicepolicy/cts/DevicePolicyManagerTest.java
@@ -40,13 +40,13 @@
 import android.provider.Settings;
 
 import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.platform.app.InstrumentationRegistry;
 
 import com.android.bedstead.deviceadminapp.DeviceAdminApp;
-import com.android.bedstead.harrier.annotations.Postsubmit;
-import com.android.bedstead.harrier.annotations.EnsureHasNoWorkProfile;
+import com.android.bedstead.harrier.BedsteadJUnit4;
 import com.android.bedstead.harrier.DeviceState;
+import com.android.bedstead.harrier.annotations.EnsureHasNoWorkProfile;
+import com.android.bedstead.harrier.annotations.Postsubmit;
 import com.android.bedstead.harrier.annotations.RequireFeatures;
 import com.android.bedstead.harrier.annotations.RequireRunOnPrimaryUser;
 import com.android.bedstead.nene.TestApis;
@@ -65,7 +65,7 @@
 import java.util.concurrent.Callable;
 import java.util.stream.Collectors;
 
-@RunWith(AndroidJUnit4.class)
+@RunWith(BedsteadJUnit4.class)
 public final class DevicePolicyManagerTest {
     private static final Context sContext = ApplicationProvider.getApplicationContext();
     private static final DevicePolicyManager sDevicePolicyManager =
@@ -560,7 +560,6 @@
         }
     }
 
-
     @RequireFeatures(PackageManager.FEATURE_DEVICE_ADMIN)
     @Test
     public void getPolicyExemptAppsCanOnlyBeDefinedOnAutomotiveBuilds() throws Exception {
diff --git a/tests/devicepolicy/src/android/devicepolicy/cts/LauncherAppsTests.java b/tests/devicepolicy/src/android/devicepolicy/cts/LauncherAppsTests.java
index 46cf1ec..a7dfc6f 100644
--- a/tests/devicepolicy/src/android/devicepolicy/cts/LauncherAppsTests.java
+++ b/tests/devicepolicy/src/android/devicepolicy/cts/LauncherAppsTests.java
@@ -25,12 +25,13 @@
 import android.os.Process;
 
 import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.bedstead.harrier.BedsteadJUnit4;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-@RunWith(AndroidJUnit4.class)
+@RunWith(BedsteadJUnit4.class)
 public final class LauncherAppsTests {
     private final Context sContext = ApplicationProvider.getApplicationContext();
     private final LauncherApps sLauncherApps = sContext.getSystemService(LauncherApps.class);
diff --git a/tests/devicepolicy/src/android/devicepolicy/cts/NegativeCallAuthorizationTest.java b/tests/devicepolicy/src/android/devicepolicy/cts/NegativeCallAuthorizationTest.java
index 53b58e5..a759dcd 100644
--- a/tests/devicepolicy/src/android/devicepolicy/cts/NegativeCallAuthorizationTest.java
+++ b/tests/devicepolicy/src/android/devicepolicy/cts/NegativeCallAuthorizationTest.java
@@ -23,9 +23,9 @@
 import android.content.pm.PackageManager;
 
 import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
+import com.android.bedstead.harrier.BedsteadJUnit4;
 import com.android.bedstead.harrier.DeviceState;
 import com.android.bedstead.harrier.annotations.RequireFeatures;
 
@@ -42,7 +42,7 @@
  * so it is critical that the app is not owner. These APIs are tested here.
  */
 @SmallTest
-@RunWith(AndroidJUnit4.class)
+@RunWith(BedsteadJUnit4.class)
 public class NegativeCallAuthorizationTest {
     private static final String ALIAS = "some-alias";
     private static final Context sContext = ApplicationProvider.getApplicationContext();
diff --git a/tests/devicepolicy/src/android/devicepolicy/cts/StartProfilesTest.java b/tests/devicepolicy/src/android/devicepolicy/cts/StartProfilesTest.java
index 614f41c..e710611 100644
--- a/tests/devicepolicy/src/android/devicepolicy/cts/StartProfilesTest.java
+++ b/tests/devicepolicy/src/android/devicepolicy/cts/StartProfilesTest.java
@@ -19,7 +19,6 @@
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assertWithMessage;
 
-import static org.junit.Assume.assumeTrue;
 import static org.testng.Assert.assertThrows;
 
 import android.app.ActivityManager;
@@ -27,14 +26,12 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
-import android.os.UserHandle;
 import android.os.UserManager;
-import android.util.ArraySet;
 
 import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.platform.app.InstrumentationRegistry;
 
+import com.android.bedstead.harrier.BedsteadJUnit4;
 import com.android.bedstead.harrier.DeviceState;
 import com.android.bedstead.harrier.annotations.EnsureHasSecondaryUser;
 import com.android.bedstead.harrier.annotations.EnsureHasTvProfile;
@@ -54,7 +51,7 @@
 
 import java.util.function.Function;
 
-@RunWith(AndroidJUnit4.class)
+@RunWith(BedsteadJUnit4.class)
 public final class StartProfilesTest {
 
     // We set this to 30 seconds because if the total test time goes over 66 seconds then it causes
diff --git a/tests/devicepolicy/src/android/devicepolicy/cts/UnsafeStateExceptionTest.java b/tests/devicepolicy/src/android/devicepolicy/cts/UnsafeStateExceptionTest.java
index 1a37e41..16b9c59 100644
--- a/tests/devicepolicy/src/android/devicepolicy/cts/UnsafeStateExceptionTest.java
+++ b/tests/devicepolicy/src/android/devicepolicy/cts/UnsafeStateExceptionTest.java
@@ -24,11 +24,14 @@
 
 import android.app.admin.UnsafeStateException;
 
+import com.android.bedstead.harrier.BedsteadJUnit4;
 import com.android.bedstead.harrier.annotations.Postsubmit;
 
 import org.junit.Test;
+import org.junit.runner.RunWith;
 
 // TODO(b/174859111): move to automotive-specific section
+@RunWith(BedsteadJUnit4.class)
 public final class UnsafeStateExceptionTest {
 
     private static final int VALID_OPERATION = Integer.MAX_VALUE; // Value doesn't really matter...
diff --git a/tests/devicestate/AndroidTest.xml b/tests/devicestate/AndroidTest.xml
index 3b7eadd..ca0266c 100644
--- a/tests/devicestate/AndroidTest.xml
+++ b/tests/devicestate/AndroidTest.xml
@@ -39,10 +39,4 @@
         <option name="collect-on-run-ended-only" value="true" />
         <option name="clean-up" value="false" />
     </metrics_collector>
-    <!-- Automotive tests run on user 10 -->
-    <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
-        <option name="directory-keys" value="/storage/emulated/10/CtsDeviceStateManagerTestCases" />
-        <option name="collect-on-run-ended-only" value="true" />
-        <option name="clean-up" value="false" />
-    </metrics_collector>
 </configuration>
diff --git a/tests/framework/base/windowmanager/AndroidManifest.xml b/tests/framework/base/windowmanager/AndroidManifest.xml
index 6789804..6ce8352 100644
--- a/tests/framework/base/windowmanager/AndroidManifest.xml
+++ b/tests/framework/base/windowmanager/AndroidManifest.xml
@@ -258,7 +258,10 @@
              android:launchMode="singleTask"
              android:taskAffinity=".t1"/>
         <activity android:name="android.server.wm.intent.Activities$SingleInstancePerTaskActivity"
-                  android:launchMode="singleInstancePerTask"/>
+             android:launchMode="singleInstancePerTask"/>
+        <activity android:name="android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity"
+             android:launchMode="singleInstancePerTask"
+             android:documentLaunchMode="never"/>
         <activity android:name="android.server.wm.intent.Activities$TaskAffinity1Activity"
              android:allowTaskReparenting="true"
              android:launchMode="standard"
@@ -475,6 +478,15 @@
             <meta-data android:name="android.supports_size_changes"
                        android:value="true"/>
         </activity>
+
+        <service android:name="android.server.wm.WindowContextTests$TestWindowService"
+                 android:exported="true"
+                 android:enabled="true" />
+        <activity android:name="android.server.wm.WindowContextTests$TestActivity"
+                  android:exported="true"
+                  android:resizeableActivity="true"
+                  android:supportsPictureInPicture="true"
+                  android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|colorMode|density|touchscreen"/>
     </application>
 
     <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
diff --git a/tests/framework/base/windowmanager/OWNERS b/tests/framework/base/windowmanager/OWNERS
index a6c6805..aa788b8 100644
--- a/tests/framework/base/windowmanager/OWNERS
+++ b/tests/framework/base/windowmanager/OWNERS
@@ -1,5 +1,31 @@
-# Bug component: 316125
-include ../OWNERS
-louischang@google.com
-riddlehsu@google.com
-winsonc@google.com
\ No newline at end of file
+# animation & tranistion
+# Bug template url: https://b.corp.google.com/issues/new?component=316275&template=1018192 = per-file *Transition*, SplashscreenTests.java
+# foldables
+# Bug template url: https://b.corp.google.com/issues/new?component=943781&template=1502790 = per-file *WindowContext*, *WindowMetrics*
+# insets & cutout
+# Bug template url: https://b.corp.google.com/issues/new?component=339570&template=1037597 = per-file *Inset*, *Cutout*, *RoundedCorner*, ForceRelayoutTest.java
+# shell
+# Bug template url: https://b.corp.google.com/issues/new?component=928594&template=1490782 = per-file DragDropTest.java
+# surface
+# Bug template url: https://b.corp.google.com/issues/new?component=316245&template=1018194 = per-file DisplayHashManagerTest.java, *Surface*
+# activity
+# Bug template url: https://b.corp.google.com/issues/new?component=316020&template=1018174 = per-file *Config*, Activity*, AmStartOptionsTests.java, AspectRatioTests.java, AssistantStackTests.java, CloseOnOutsideTests.java
+# multi-display
+# Bug template url: https://b.corp.google.com/issues/new?component=316280&template=1018196 = per-file MultiDisplay*, *DisplayTest*, PresentationTest.java
+# pip
+# Bug template url: https://b.corp.google.com/issues/new?component=316251&template=1018197 = per-file PinnedStackTests.java
+# bubbles
+# Bug template url: https://b.corp.google.com/issues/new?component=555586&template=1210986 = per-file ActivityViewTest.java
+# split-screen
+# Bug template url: https://b.corp.google.com/issues/new?component=928697&template=1490890 = per-file MultiWindowTests.java, ReplaceWindowTests.java
+# app-compat
+# Bug template url: https://b.corp.google.com/issues/new?component=970984&template=1516678 = per-file *Compat*, DeprecatedTargetSdkTest.java, DisplaySizeTest.java, PrereleaseSdkTest.java
+# freeform
+# Bug template url: https://b.corp.google.com/issues/new?component=929241&template=1490914 = per-file *Freeform*
+# input
+# Bug template url: https://b.corp.google.com/issues/new?component=136048&template=115201 = per-file *Input*, *Touch*
+# Ime
+# Bug template url: https://b.corp.google.com/issues/new?component=34867&template=195938 = per-file *Ime*
+# others
+# Bug template url: https://b.corp.google.com/issues/new?component=316125&template=1018199
+include platform/frameworks/base:/services/core/java/com/android/server/wm/OWNERS
diff --git a/tests/framework/base/windowmanager/intent_tests/singleInstancePerTask/test-10.json b/tests/framework/base/windowmanager/intent_tests/singleInstancePerTask/test-10.json
new file mode 100644
index 0000000..4d3da8d
--- /dev/null
+++ b/tests/framework/base/windowmanager/intent_tests/singleInstancePerTask/test-10.json
@@ -0,0 +1,45 @@
+{
+    "comment": "Verify the SingleInstancePerTask with documentLaunchMode-never Activity won't be started in new task via NEW_DOCUMENT",
+    "setup": {
+        "initialIntents": [
+            {
+                "flags": "FLAG_ACTIVITY_NEW_TASK",
+                "class": "android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                "package": "android.server.wm.cts",
+                "startForResult": false
+            }
+        ],
+        "act": [
+            {
+                "flags": "FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_NEW_DOCUMENT",
+                "class": "android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                "package": "android.server.wm.cts",
+                "startForResult": false
+            }
+        ]
+    },
+    "initialState": {
+        "tasks": [
+            {
+                "activities": [
+                    {
+                        "name": "android.server.wm.cts/android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                        "state": "RESUMED"
+                    }
+                ]
+            }
+        ]
+    },
+    "endState": {
+        "tasks": [
+            {
+                "activities": [
+                    {
+                        "name": "android.server.wm.cts/android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                        "state": "RESUMED"
+                    }
+                ]
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/tests/framework/base/windowmanager/intent_tests/singleInstancePerTask/test-11.json b/tests/framework/base/windowmanager/intent_tests/singleInstancePerTask/test-11.json
new file mode 100644
index 0000000..fe99a1b
--- /dev/null
+++ b/tests/framework/base/windowmanager/intent_tests/singleInstancePerTask/test-11.json
@@ -0,0 +1,45 @@
+{
+    "comment": "Verify the SingleInstancePerTask with documentLaunchMode-never Activity won't be started in new task via NEW_DOCUMENT and MULTIPLE_TASK",
+    "setup": {
+        "initialIntents": [
+            {
+                "flags": "FLAG_ACTIVITY_NEW_TASK",
+                "class": "android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                "package": "android.server.wm.cts",
+                "startForResult": false
+            }
+        ],
+        "act": [
+            {
+                "flags": "FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_NEW_DOCUMENT | FLAG_ACTIVITY_MULTIPLE_TASK",
+                "class": "android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                "package": "android.server.wm.cts",
+                "startForResult": false
+            }
+        ]
+    },
+    "initialState": {
+        "tasks": [
+            {
+                "activities": [
+                    {
+                        "name": "android.server.wm.cts/android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                        "state": "RESUMED"
+                    }
+                ]
+            }
+        ]
+    },
+    "endState": {
+        "tasks": [
+            {
+                "activities": [
+                    {
+                        "name": "android.server.wm.cts/android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                        "state": "RESUMED"
+                    }
+                ]
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/tests/framework/base/windowmanager/intent_tests/singleInstancePerTask/test-12.json b/tests/framework/base/windowmanager/intent_tests/singleInstancePerTask/test-12.json
new file mode 100644
index 0000000..46616b3
--- /dev/null
+++ b/tests/framework/base/windowmanager/intent_tests/singleInstancePerTask/test-12.json
@@ -0,0 +1,53 @@
+{
+    "comment": "Verify the SingleInstancePerTask with documentLaunchMode-never Activity can be created in a new task with MULTIPLE_TASK flag",
+    "setup": {
+        "initialIntents": [
+            {
+                "flags": "FLAG_ACTIVITY_NEW_TASK",
+                "class": "android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                "package": "android.server.wm.cts",
+                "startForResult": false
+            }
+        ],
+        "act": [
+            {
+                "flags": "FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK",
+                "class": "android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                "package": "android.server.wm.cts",
+                "startForResult": false
+            }
+        ]
+    },
+    "initialState": {
+        "tasks": [
+            {
+                "activities": [
+                    {
+                        "name": "android.server.wm.cts/android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                        "state": "RESUMED"
+                    }
+                ]
+            }
+        ]
+    },
+    "endState": {
+        "tasks": [
+            {
+                "activities": [
+                    {
+                        "name": "android.server.wm.cts/android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                        "state": "RESUMED"
+                    }
+                ]
+            },
+            {
+                "activities": [
+                    {
+                        "name": "android.server.wm.cts/android.server.wm.intent.Activities$SingleInstancePerTaskDocumentNeverActivity",
+                        "state": "STOPPED"
+                    }
+                ]
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/tests/framework/base/windowmanager/jetpack/OWNERS b/tests/framework/base/windowmanager/jetpack/OWNERS
new file mode 100644
index 0000000..72fa917
--- /dev/null
+++ b/tests/framework/base/windowmanager/jetpack/OWNERS
@@ -0,0 +1,2 @@
+# Bug template url: https://b.corp.google.com/issues/new?component=812646&template=1393556
+akulian@google.com
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/ActivityMetricsLoggerTests.java b/tests/framework/base/windowmanager/src/android/server/wm/ActivityMetricsLoggerTests.java
index 94a2cad..abde1df 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/ActivityMetricsLoggerTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/ActivityMetricsLoggerTests.java
@@ -64,7 +64,6 @@
 import android.os.SystemClock;
 import android.platform.test.annotations.Presubmit;
 import android.server.wm.CommandSession.ActivitySessionClient;
-import android.server.wm.ConfigChangeTests.FontScaleSession;
 import android.support.test.metricshelper.MetricsAsserts;
 import android.util.EventLog.Event;
 
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/ActivityVisibilityTests.java b/tests/framework/base/windowmanager/src/android/server/wm/ActivityVisibilityTests.java
index 96e6c8b..522b889 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/ActivityVisibilityTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/ActivityVisibilityTests.java
@@ -19,9 +19,6 @@
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
 import static android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME;
 import static android.server.wm.CliIntentExtra.extraString;
@@ -160,7 +157,7 @@
             boolean showWhenLocked, int sleepMsInOnCreate) {
         ActivitySession activity = sleepDeviceAndLaunchTurnScreenOnActivity(lockScreenSession,
                 activitySessionClient, useWindowFlags, showWhenLocked, sleepMsInOnCreate,
-                WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY);
+                WINDOWING_MODE_FULLSCREEN);
 
         mWmState.assertVisibility(TURN_SCREEN_ON_ACTIVITY, true);
         assertTrue("Display turns on by " + (useWindowFlags ? "flags" : "APIs"),
@@ -485,8 +482,7 @@
 
         final LockScreenSession lockScreenSession = createManagedLockScreenSession();
         lockScreenSession.disableLockScreen().sleepDevice();
-        launchActivity(TURN_SCREEN_ON_ATTR_ACTIVITY,
-                WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY);
+        launchActivity(TURN_SCREEN_ON_ATTR_ACTIVITY, WINDOWING_MODE_FULLSCREEN);
         mWmState.assertVisibility(TURN_SCREEN_ON_ATTR_ACTIVITY, true);
         assertTrue("Display turns on", isDisplayOn(DEFAULT_DISPLAY));
     }
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/AppConfigurationTests.java b/tests/framework/base/windowmanager/src/android/server/wm/AppConfigurationTests.java
index 14d1f20..bd14a2d 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/AppConfigurationTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/AppConfigurationTests.java
@@ -19,8 +19,7 @@
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
+import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
 import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
@@ -32,14 +31,14 @@
 import static android.server.wm.app.Components.DIALOG_WHEN_LARGE_ACTIVITY;
 import static android.server.wm.app.Components.LANDSCAPE_ORIENTATION_ACTIVITY;
 import static android.server.wm.app.Components.LAUNCHING_ACTIVITY;
-import static android.server.wm.app.Components.NIGHT_MODE_ACTIVITY;
-import static android.server.wm.app.Components.PORTRAIT_ORIENTATION_ACTIVITY;
-import static android.server.wm.app.Components.RESIZEABLE_ACTIVITY;
-import static android.server.wm.app.Components.TEST_ACTIVITY;
 import static android.server.wm.app.Components.LandscapeOrientationActivity.EXTRA_APP_CONFIG_INFO;
 import static android.server.wm.app.Components.LandscapeOrientationActivity.EXTRA_CONFIG_INFO_IN_ON_CREATE;
 import static android.server.wm.app.Components.LandscapeOrientationActivity.EXTRA_DISPLAY_REAL_SIZE;
 import static android.server.wm.app.Components.LandscapeOrientationActivity.EXTRA_SYSTEM_RESOURCES_CONFIG_INFO;
+import static android.server.wm.app.Components.NIGHT_MODE_ACTIVITY;
+import static android.server.wm.app.Components.PORTRAIT_ORIENTATION_ACTIVITY;
+import static android.server.wm.app.Components.RESIZEABLE_ACTIVITY;
+import static android.server.wm.app.Components.TEST_ACTIVITY;
 import static android.server.wm.translucentapp26.Components.SDK26_TRANSLUCENT_LANDSCAPE_ACTIVITY;
 import static android.view.Surface.ROTATION_0;
 import static android.view.Surface.ROTATION_180;
@@ -51,8 +50,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeFalse;
 import static org.junit.Assume.assumeTrue;
@@ -62,6 +59,7 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Point;
+import android.graphics.Rect;
 import android.hardware.display.DisplayManager;
 import android.os.Bundle;
 import android.platform.test.annotations.Presubmit;
@@ -101,11 +99,11 @@
         assumeTrue("Skipping test: no multi-window support", supportsSplitScreenMultiWindow());
 
         separateTestJournal();
-        launchActivity(RESIZEABLE_ACTIVITY, WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY);
+        launchActivity(RESIZEABLE_ACTIVITY, WINDOWING_MODE_FULLSCREEN);
         final SizeInfo fullscreenSizes = getLastReportedSizesForActivity(RESIZEABLE_ACTIVITY);
 
         separateTestJournal();
-        setActivityTaskWindowingMode(RESIZEABLE_ACTIVITY, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+        putActivityInPrimarySplit(RESIZEABLE_ACTIVITY);
         final SizeInfo dockedSizes = getLastReportedSizesForActivity(RESIZEABLE_ACTIVITY);
 
         assertSizesAreSane(fullscreenSizes, dockedSizes);
@@ -120,11 +118,13 @@
         assumeTrue("Skipping test: no multi-window support", supportsSplitScreenMultiWindow());
 
         separateTestJournal();
-        launchActivity(RESIZEABLE_ACTIVITY, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+        launchActivitiesInSplitScreen(
+                getLaunchActivityBuilder().setTargetActivity(RESIZEABLE_ACTIVITY),
+                getLaunchActivityBuilder().setTargetActivity(TEST_ACTIVITY));
         final SizeInfo dockedSizes = getLastReportedSizesForActivity(RESIZEABLE_ACTIVITY);
 
         separateTestJournal();
-        setActivityTaskWindowingMode(RESIZEABLE_ACTIVITY, WINDOWING_MODE_FULLSCREEN);
+        dismissSplitScreen(true /* primaryOnTop */);
         final SizeInfo fullscreenSizes = getLastReportedSizesForActivity(RESIZEABLE_ACTIVITY);
 
         assertSizesAreSane(fullscreenSizes, dockedSizes);
@@ -145,7 +145,7 @@
         resizeableActivityClient.startActivity(getLaunchActivityBuilder()
                         .setUseInstrumentation()
                         .setTargetActivity(RESIZEABLE_ACTIVITY)
-                        .setWindowingMode(WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY));
+                        .setWindowingMode(WINDOWING_MODE_FULLSCREEN));
         final SizeInfo initialSizes = getLastReportedSizesForActivity(RESIZEABLE_ACTIVITY);
 
         rotateAndCheckSizes(rotationSession, resizeableActivityClient, initialSizes);
@@ -265,7 +265,7 @@
 
         // Move the task to the primary split task.
         separateTestJournal();
-        mTaskOrganizer.putTaskInSplitPrimary(mWmState.getTaskByActivity(activityName).mTaskId);
+        putActivityInPrimarySplit(activityName);
         // Currently launchActivityInPrimarySplit launches the target activity and then move it
         // to split task, so it requires waiting of lifecycle to get the stable initial size.
         if (relaunch) {
@@ -300,19 +300,19 @@
     public void testDialogWhenLargeSplitSmall() {
         assumeTrue("Skipping test: no multi-window support", supportsSplitScreenMultiWindow());
 
-        launchActivity(DIALOG_WHEN_LARGE_ACTIVITY, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
-        final WindowManagerState.ActivityTask stack = mWmState
-                .getStandardStackByWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
-        final WindowManagerState.DisplayContent display =
-                mWmState.getDisplay(stack.mDisplayId);
+        launchActivitiesInSplitScreen(
+                getLaunchActivityBuilder().setTargetActivity(DIALOG_WHEN_LARGE_ACTIVITY),
+                getLaunchActivityBuilder().setTargetActivity(TEST_ACTIVITY));
+        int displayId = mWmState.getDisplayByActivity(DIALOG_WHEN_LARGE_ACTIVITY);
+        final WindowManagerState.DisplayContent display = mWmState.getDisplay(displayId);
         final int density = display.getDpi();
         final int smallWidthPx = dpToPx(SMALL_WIDTH_DP, density);
         final int smallHeightPx = dpToPx(SMALL_HEIGHT_DP, density);
 
-        resizePrimarySplitScreen(0, 0, smallWidthPx, smallHeightPx);
+        mTaskOrganizer.setRootPrimaryTaskBounds(new Rect(0, 0, smallWidthPx, smallHeightPx));
         mWmState.waitForValidState(
                 new WaitForValidActivityState.Builder(DIALOG_WHEN_LARGE_ACTIVITY)
-                        .setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY)
+                        .setWindowingMode(WINDOWING_MODE_MULTI_WINDOW)
                         .setActivityType(ACTIVITY_TYPE_STANDARD)
                         .build());
     }
@@ -938,15 +938,15 @@
         final ActivitySession activitySession = createManagedActivityClientSession()
                 .startActivity(getLaunchActivityBuilder()
                         .setUseInstrumentation()
-                        .setTargetActivity(RESIZEABLE_ACTIVITY)
-                        .setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY));
+                        .setTargetActivity(RESIZEABLE_ACTIVITY));
+        putActivityInPrimarySplit(RESIZEABLE_ACTIVITY);
         SizeInfo dockedActivitySizes = getActivitySizeInfo(activitySession);
         SizeInfo applicationSizes = getAppSizeInfo(activitySession);
         assertSizesAreSame(dockedActivitySizes, applicationSizes);
 
         // Move the activity to fullscreen and check that the size was updated
         separateTestJournal();
-        setActivityTaskWindowingMode(RESIZEABLE_ACTIVITY, WINDOWING_MODE_FULLSCREEN);
+        mTaskOrganizer.dismissedSplitScreen(true /* primaryOnTop */);
         waitForOrFail("Activity and application configuration must match",
                 () -> activityAndAppSizesMatch(activitySession));
         final SizeInfo fullscreenSizes = getLastReportedSizesForActivity(RESIZEABLE_ACTIVITY);
@@ -956,7 +956,7 @@
 
         // Move the activity to docked size again, check if the sizes were updated
         separateTestJournal();
-        setActivityTaskWindowingMode(RESIZEABLE_ACTIVITY, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+        putActivityInPrimarySplit(RESIZEABLE_ACTIVITY);
         waitForOrFail("Activity and application configuration must match",
                 () -> activityAndAppSizesMatch(activitySession));
         dockedActivitySizes = getActivitySizeInfo(activitySession);
@@ -986,8 +986,8 @@
                         .setUseInstrumentation()
                         .setTargetActivity(RESIZEABLE_ACTIVITY)
                         .setNewTask(true)
-                        .setMultipleTask(true)
-                        .setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY));
+                        .setMultipleTask(true));
+        putActivityInPrimarySplit(RESIZEABLE_ACTIVITY);
         waitForOrFail("Activity and application configuration must match",
                 () -> activityAndAppSizesMatch(secondActivitySession));
         SizeInfo dockedActivitySizes = getActivitySizeInfo(secondActivitySession);
@@ -1002,8 +1002,8 @@
                         .setUseInstrumentation()
                         .setTargetActivity(RESIZEABLE_ACTIVITY)
                         .setNewTask(true)
-                        .setMultipleTask(true)
-                        .setWindowingMode(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY));
+                        .setMultipleTask(true));
+        putActivityInPrimarySplit(RESIZEABLE_ACTIVITY);
         waitForOrFail("Activity and application configuration must match",
                 () -> activityAndAppSizesMatch(thirdActivitySession));
         SizeInfo secondarySplitActivitySizes = getActivitySizeInfo(thirdActivitySession);
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/AssistantStackTests.java b/tests/framework/base/windowmanager/src/android/server/wm/AssistantStackTests.java
index 25f9152..4eb6389 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/AssistantStackTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/AssistantStackTests.java
@@ -20,7 +20,6 @@
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 import static android.server.wm.CliIntentExtra.extraString;
 import static android.server.wm.ComponentNameUtils.getActivityName;
@@ -145,7 +144,7 @@
                 getLaunchActivityBuilder().setTargetActivity(DOCKED_ACTIVITY),
                 getLaunchActivityBuilder().setTargetActivity(TEST_ACTIVITY));
 
-        assertAssistantStackCanLaunchAndReturnFromNewTask(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+        //assertAssistantStackCanLaunchAndReturnFromNewTask(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
     }
 
     private void assertAssistantStackCanLaunchAndReturnFromNewTask(int expectedWindowingMode)
@@ -238,8 +237,7 @@
             assistantSession.setVoiceInteractionService(ASSISTANT_VOICE_INTERACTION_SERVICE);
 
             // Go home, launch the assistant and check to see that home is visible
-            removeRootTasksInWindowingModes(WINDOWING_MODE_FULLSCREEN,
-                    WINDOWING_MODE_SPLIT_SCREEN_SECONDARY);
+            removeRootTasksInWindowingModes(WINDOWING_MODE_FULLSCREEN);
             pressHomeButton();
             resumeAppSwitches();
             launchActivityNoWait(LAUNCH_ASSISTANT_ACTIVITY_INTO_STACK,
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/ConfigChangeTests.java b/tests/framework/base/windowmanager/src/android/server/wm/ConfigChangeTests.java
index 515f737..a546e21 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/ConfigChangeTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/ConfigChangeTests.java
@@ -235,17 +235,8 @@
         }
     }
 
-    /** Helper class to save, set, and restore font_scale preferences. */
-    static class FontScaleSession extends SettingsSession<Float> {
-        FontScaleSession() {
-            super(Settings.System.getUriFor(Settings.System.FONT_SCALE),
-                    Settings.System::getFloat,
-                    Settings.System::putFloat);
-        }
-    }
-
     private void testChangeFontScale(ComponentName activityName, boolean relaunch) {
-        final FontScaleSession fontScaleSession = mObjectTracker.manage(new FontScaleSession());
+        final FontScaleSession fontScaleSession = createFontScaleSession();
         fontScaleSession.set(1.0f);
         separateTestJournal();
         launchActivity(activityName);
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/KeyguardTests.java b/tests/framework/base/windowmanager/src/android/server/wm/KeyguardTests.java
index 056f446..ab2a53c 100755
--- a/tests/framework/base/windowmanager/src/android/server/wm/KeyguardTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/KeyguardTests.java
@@ -16,8 +16,7 @@
 
 package android.server.wm;
 
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
+import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
 import static android.server.wm.ComponentNameUtils.getWindowName;
@@ -60,6 +59,7 @@
 import androidx.test.filters.FlakyTest;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -231,6 +231,8 @@
      */
     @Test
     @Presubmit
+    // TODO (b/169271554): Temporarily switch activity to fullscreen when needing to showWhenLocked
+    @Ignore
     public void testShowWhenLockedActivityWhileSplit() {
         assumeTrue(supportsSplitScreenMultiWindow());
 
@@ -245,8 +247,8 @@
         mWmState.computeState(SHOW_WHEN_LOCKED_ACTIVITY);
         mWmState.assertVisibility(SHOW_WHEN_LOCKED_ACTIVITY, true);
         mWmState.assertKeyguardShowingAndOccluded();
-        mWmState.assertDoesNotContainStack("Activity must be full screen.",
-                WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD);
+        WindowManagerState.Activity activity = mWmState.getActivity(SHOW_WHEN_LOCKED_ACTIVITY);
+        assertFalse(activity.getWindowingMode() == WINDOWING_MODE_MULTI_WINDOW);
     }
 
     /**
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/ManifestLayoutTests.java b/tests/framework/base/windowmanager/src/android/server/wm/ManifestLayoutTests.java
index e05c2ca..083b9b1 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/ManifestLayoutTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/ManifestLayoutTests.java
@@ -17,9 +17,8 @@
 package android.server.wm;
 
 import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.server.wm.WindowManagerState.dpToPx;
 import static android.server.wm.ComponentNameUtils.getWindowName;
+import static android.server.wm.WindowManagerState.dpToPx;
 import static android.server.wm.app.Components.BOTTOM_LEFT_LAYOUT_ACTIVITY;
 import static android.server.wm.app.Components.BOTTOM_RIGHT_LAYOUT_ACTIVITY;
 import static android.server.wm.app.Components.TEST_ACTIVITY;
@@ -93,7 +92,7 @@
     public void testMinimalSizeFreeform() throws Exception {
         assumeTrue("Skipping test: no freeform support", supportsFreeform());
 
-        testMinimalSize(WINDOWING_MODE_FREEFORM);
+        testMinimalSize(true /* freeform */);
     }
 
     @Test
@@ -101,13 +100,13 @@
     public void testMinimalSizeDocked() throws Exception {
         assumeTrue("Skipping test: no multi-window support", supportsSplitScreenMultiWindow());
 
-        testMinimalSize(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+        testMinimalSize(false /* freeform */);
     }
 
-    private void testMinimalSize(int windowingMode) throws Exception {
+    private void testMinimalSize(boolean freeform) throws Exception {
         // Issue command to resize to <0,0,1,1>. We expect the size to be floored at
         // MIN_WIDTH_DPxMIN_HEIGHT_DP.
-        if (windowingMode == WINDOWING_MODE_FREEFORM) {
+        if (freeform) {
             launchActivity(BOTTOM_RIGHT_LAYOUT_ACTIVITY, WINDOWING_MODE_FREEFORM);
             resizeActivityTask(BOTTOM_RIGHT_LAYOUT_ACTIVITY, 0, 0, 1, 1);
         } else { // stackId == DOCKED_STACK_ID
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/MultiWindowTests.java b/tests/framework/base/windowmanager/src/android/server/wm/MultiWindowTests.java
index 630056c..1651a0a 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/MultiWindowTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/MultiWindowTests.java
@@ -222,8 +222,7 @@
 
         // Move to primary split.
         separateTestJournal();
-        final int primaryTaskId = mWmState.getTaskByActivity(NO_RELAUNCH_ACTIVITY).mTaskId;
-        mTaskOrganizer.putTaskInSplitPrimary(primaryTaskId);
+        putActivityInPrimarySplit(NO_RELAUNCH_ACTIVITY);
 
         ActivityLifecycleCounts lifecycleCounts =
                 waitForOnMultiWindowModeChanged(NO_RELAUNCH_ACTIVITY);
@@ -235,8 +234,7 @@
         // Make sure primary split is focused. This way when we dismiss it later fullscreen stack
         // will come up.
         launchActivity(LAUNCHING_ACTIVITY, WINDOWING_MODE_FULLSCREEN);
-        final int secondaryTaskId = mWmState.getTaskByActivity(LAUNCHING_ACTIVITY).mTaskId;
-        mTaskOrganizer.putTaskInSplitSecondary(secondaryTaskId);
+        putActivityInSecondarySplit(LAUNCHING_ACTIVITY);
 
         launchActivity(NO_RELAUNCH_ACTIVITY);
 
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/ParentChildTestBase.java b/tests/framework/base/windowmanager/src/android/server/wm/ParentChildTestBase.java
index 40c2d86..93f581c 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/ParentChildTestBase.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/ParentChildTestBase.java
@@ -16,10 +16,10 @@
 
 package android.server.wm;
 
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.server.wm.StateLogger.log;
 import static android.server.wm.DialogFrameTestActivity.EXTRA_TEST_CASE;
+import static android.server.wm.StateLogger.log;
+
+import static org.junit.Assert.assertTrue;
 
 import android.app.Activity;
 import android.content.ComponentName;
@@ -42,7 +42,8 @@
 
     private void startTestCaseDocked(String testCase) throws Exception {
         startTestCase(testCase);
-        setActivityTaskWindowingMode(activityName(), WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+        mWmState.computeState(activityName());
+        putActivityInPrimarySplit(activityName());
     }
 
     abstract ComponentName activityName();
@@ -67,9 +68,9 @@
         doSingleTest(t);
         activityRule().finishActivity();
 
-        mWmState.waitForWithAmState(amState -> !amState.containsStack(
-                WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD),
-                "docked stack to be removed");
+        mWmState.waitFor(wmState -> !wmState.containsActivity(activityName()),
+                "activity must be removed");
+        assertTrue(mTaskOrganizer.getPrimarySplitTaskCount() == 0);
     }
 
     void doParentChildTest(String testCase, ParentChildTest t) throws Exception {
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java b/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java
index f5cd8f1..4fc4c3a 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java
@@ -81,6 +81,7 @@
 import static org.hamcrest.Matchers.lessThan;
 import static org.hamcrest.Matchers.lessThanOrEqualTo;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
@@ -167,14 +168,14 @@
     }
 
     @Test
-    public void testMinimumDeviceSize() throws Exception {
+    public void testMinimumDeviceSize() {
         mWmState.assertDeviceDefaultDisplaySizeForMultiWindow(
                 "Devices supporting picture-in-picture must be larger than the default minimum"
                         + " task size");
     }
 
     @Test
-    public void testEnterPictureInPictureMode() throws Exception {
+    public void testEnterPictureInPictureMode() {
         pinnedStackTester(getAmStartCmd(PIP_ACTIVITY, extraString(EXTRA_ENTER_PIP, "true")),
                 PIP_ACTIVITY, PIP_ACTIVITY, false /* isFocusable */);
     }
@@ -182,7 +183,7 @@
     // This test is black-listed in cts-known-failures.xml (b/35314835).
     @Ignore
     @Test
-    public void testAlwaysFocusablePipActivity() throws Exception {
+    public void testAlwaysFocusablePipActivity() {
         pinnedStackTester(getAmStartCmd(ALWAYS_FOCUSABLE_PIP_ACTIVITY),
                 ALWAYS_FOCUSABLE_PIP_ACTIVITY, ALWAYS_FOCUSABLE_PIP_ACTIVITY,
                 true /* isFocusable */);
@@ -191,14 +192,14 @@
     // This test is black-listed in cts-known-failures.xml (b/35314835).
     @Ignore
     @Test
-    public void testLaunchIntoPinnedStack() throws Exception {
+    public void testLaunchIntoPinnedStack() {
         pinnedStackTester(getAmStartCmd(LAUNCH_INTO_PINNED_STACK_PIP_ACTIVITY),
                 LAUNCH_INTO_PINNED_STACK_PIP_ACTIVITY, ALWAYS_FOCUSABLE_PIP_ACTIVITY,
                 true /* isFocusable */);
     }
 
     @Test
-    public void testNonTappablePipActivity() throws Exception {
+    public void testNonTappablePipActivity() {
         // Launch the tap-to-finish activity at a specific place
         launchActivity(PIP_ACTIVITY, extraString(EXTRA_ENTER_PIP, "true"),
                 extraString(EXTRA_TAP_TO_FINISH, "true"));
@@ -239,7 +240,7 @@
     }
 
     @Test
-    public void testEnterPipToOtherOrientation() throws Exception {
+    public void testEnterPipToOtherOrientation() {
         // Launch a portrait only app on the fullscreen stack
         launchActivity(TEST_ACTIVITY,
                 extraString(EXTRA_FIXED_ORIENTATION, String.valueOf(ORIENTATION_PORTRAIT)));
@@ -280,7 +281,7 @@
 
     @Test
     @SecurityTest(minPatchLevel="2021-03")
-    public void testEnterPipWithTinyMinimalSize() throws Exception {
+    public void testEnterPipWithTinyMinimalSize() {
         // Launch a PiP activity with minimal size specified and smaller than allowed minimum
         launchActivity(PIP_ACTIVITY_WITH_TINY_MINIMAL_SIZE, extraString(EXTRA_ENTER_PIP, "true"));
         // Wait for animation complete since we are comparing size
@@ -303,16 +304,16 @@
     }
 
     @Test
-    public void testEnterPipAspectRatioMin() throws Exception {
+    public void testEnterPipAspectRatioMin() {
         testEnterPipAspectRatio(MIN_ASPECT_RATIO_NUMERATOR, MIN_ASPECT_RATIO_DENOMINATOR);
     }
 
     @Test
-    public void testEnterPipAspectRatioMax() throws Exception {
+    public void testEnterPipAspectRatioMax() {
         testEnterPipAspectRatio(MAX_ASPECT_RATIO_NUMERATOR, MAX_ASPECT_RATIO_DENOMINATOR);
     }
 
-    private void testEnterPipAspectRatio(int num, int denom) throws Exception {
+    private void testEnterPipAspectRatio(int num, int denom) {
         // Launch a test activity so that we're not over home
         launchActivity(TEST_ACTIVITY);
 
@@ -331,16 +332,16 @@
     }
 
     @Test
-    public void testResizePipAspectRatioMin() throws Exception {
+    public void testResizePipAspectRatioMin() {
         testResizePipAspectRatio(MIN_ASPECT_RATIO_NUMERATOR, MIN_ASPECT_RATIO_DENOMINATOR);
     }
 
     @Test
-    public void testResizePipAspectRatioMax() throws Exception {
+    public void testResizePipAspectRatioMax() {
         testResizePipAspectRatio(MAX_ASPECT_RATIO_NUMERATOR, MAX_ASPECT_RATIO_DENOMINATOR);
     }
 
-    private void testResizePipAspectRatio(int num, int denom) throws Exception {
+    private void testResizePipAspectRatio(int num, int denom) {
         // Launch a test activity so that we're not over home
         launchActivity(TEST_ACTIVITY);
 
@@ -357,18 +358,18 @@
     }
 
     @Test
-    public void testEnterPipExtremeAspectRatioMin() throws Exception {
+    public void testEnterPipExtremeAspectRatioMin() {
         testEnterPipExtremeAspectRatio(MIN_ASPECT_RATIO_NUMERATOR,
                 BELOW_MIN_ASPECT_RATIO_DENOMINATOR);
     }
 
     @Test
-    public void testEnterPipExtremeAspectRatioMax() throws Exception {
+    public void testEnterPipExtremeAspectRatioMax() {
         testEnterPipExtremeAspectRatio(ABOVE_MAX_ASPECT_RATIO_NUMERATOR,
                 MAX_ASPECT_RATIO_DENOMINATOR);
     }
 
-    private void testEnterPipExtremeAspectRatio(int num, int denom) throws Exception {
+    private void testEnterPipExtremeAspectRatio(int num, int denom) {
         // Launch a test activity so that we're not over home
         launchActivity(TEST_ACTIVITY);
 
@@ -381,18 +382,18 @@
     }
 
     @Test
-    public void testSetPipExtremeAspectRatioMin() throws Exception {
+    public void testSetPipExtremeAspectRatioMin() {
         testSetPipExtremeAspectRatio(MIN_ASPECT_RATIO_NUMERATOR,
                 BELOW_MIN_ASPECT_RATIO_DENOMINATOR);
     }
 
     @Test
-    public void testSetPipExtremeAspectRatioMax() throws Exception {
+    public void testSetPipExtremeAspectRatioMax() {
         testSetPipExtremeAspectRatio(ABOVE_MAX_ASPECT_RATIO_NUMERATOR,
                 MAX_ASPECT_RATIO_DENOMINATOR);
     }
 
-    private void testSetPipExtremeAspectRatio(int num, int denom) throws Exception {
+    private void testSetPipExtremeAspectRatio(int num, int denom) {
         // Launch a test activity so that we're not over home
         launchActivity(TEST_ACTIVITY);
 
@@ -415,7 +416,7 @@
     }
 
     @Test
-    public void testDisallowPipLaunchFromStoppedActivity() throws Exception {
+    public void testDisallowPipLaunchFromStoppedActivity() {
         // Launch the bottom pip activity which will launch a new activity on top and attempt to
         // enter pip when it is stopped
         launchActivity(PIP_ON_STOP_ACTIVITY);
@@ -428,7 +429,7 @@
     }
 
     @Test
-    public void testAutoEnterPictureInPicture() throws Exception {
+    public void testAutoEnterPictureInPicture() {
         // Launch a test activity so that we're not over home
         launchActivity(TEST_ACTIVITY);
 
@@ -444,7 +445,7 @@
 
     @Test
     public void testAutoEnterPictureInPictureOnUserLeaveHintWhenPipRequestedNotOverridden()
-            throws Exception {
+            {
         // Launch a test activity so that we're not over home
         launchActivity(TEST_ACTIVITY);
 
@@ -477,7 +478,7 @@
     }
 
     @Test
-    public void testAutoEnterPictureInPictureOnPictureInPictureRequested() throws Exception {
+    public void testAutoEnterPictureInPictureOnPictureInPictureRequested() {
         // Launch a test activity so that we're not over home
         launchActivity(TEST_ACTIVITY);
 
@@ -509,7 +510,7 @@
     }
 
     @Test
-    public void testAutoEnterPictureInPictureLaunchActivity() throws Exception {
+    public void testAutoEnterPictureInPictureLaunchActivity() {
         // Launch a test activity so that we're not over home
         launchActivity(TEST_ACTIVITY);
 
@@ -529,7 +530,7 @@
     }
 
     @Test
-    public void testAutoEnterPictureInPictureFinish() throws Exception {
+    public void testAutoEnterPictureInPictureFinish() {
         // Launch a test activity so that we're not over home
         launchActivity(TEST_ACTIVITY);
 
@@ -543,7 +544,7 @@
     }
 
     @Test
-    public void testAutoEnterPictureInPictureAspectRatio() throws Exception {
+    public void testAutoEnterPictureInPictureAspectRatio() {
         // Launch the PIP activity on pause, and set the aspect ratio
         launchActivity(PIP_ACTIVITY,
                 extraString(EXTRA_ENTER_PIP_ON_PAUSE, "true"),
@@ -565,7 +566,7 @@
     }
 
     @Test
-    public void testAutoEnterPictureInPictureOverPip() throws Exception {
+    public void testAutoEnterPictureInPictureOverPip() {
         // Launch another PIP activity
         launchActivity(LAUNCH_INTO_PINNED_STACK_PIP_ACTIVITY);
         waitForEnterPip(ALWAYS_FOCUSABLE_PIP_ACTIVITY);
@@ -585,7 +586,7 @@
     }
 
     @Test
-    public void testDismissPipWhenLaunchNewOne() throws Exception {
+    public void testDismissPipWhenLaunchNewOne() {
         // Launch another PIP activity
         launchActivity(LAUNCH_INTO_PINNED_STACK_PIP_ACTIVITY);
         waitForEnterPip(ALWAYS_FOCUSABLE_PIP_ACTIVITY);
@@ -599,7 +600,7 @@
     }
 
     @Test
-    public void testDisallowMultipleTasksInPinnedStack() throws Exception {
+    public void testDisallowMultipleTasksInPinnedStack() {
         // Launch a test activity so that we have multiple fullscreen tasks
         launchActivity(TEST_ACTIVITY);
 
@@ -622,7 +623,7 @@
     }
 
     @Test
-    public void testPipUnPipOverHome() throws Exception {
+    public void testPipUnPipOverHome() {
         // Launch a task behind home to assert that the next fullscreen task isn't visible when
         // leaving PiP.
         launchActivity(TEST_ACTIVITY);
@@ -643,7 +644,7 @@
     }
 
     @Test
-    public void testPipUnPipOverApp() throws Exception {
+    public void testPipUnPipOverApp() {
         // Launch a test activity so that we're not over home
         launchActivity(TEST_ACTIVITY);
 
@@ -661,7 +662,7 @@
     }
 
     @Test
-    public void testRemovePipWithNoFullscreenOrFreeformStack() throws Exception {
+    public void testRemovePipWithNoFullscreenOrFreeformStack() {
         // Launch a pip activity
         launchActivity(PIP_ACTIVITY);
         int windowingMode = mWmState.getTaskByActivity(PIP_ACTIVITY).getWindowingMode();
@@ -675,7 +676,7 @@
     }
 
     @Test
-    public void testRemovePipWithVisibleFullscreenOrFreeformStack() throws Exception {
+    public void testRemovePipWithVisibleFullscreenOrFreeformStack() {
         // Launch a fullscreen/freeform activity, and a pip activity over that
         launchActivity(TEST_ACTIVITY);
         launchActivity(PIP_ACTIVITY);
@@ -691,7 +692,7 @@
     }
 
     @Test
-    public void testRemovePipWithHiddenFullscreenOrFreeformStack() throws Exception {
+    public void testRemovePipWithHiddenFullscreenOrFreeformStack() {
         // Launch a fullscreen/freeform activity, return home and while the fullscreen/freeform
         // stack is hidden, launch a pip activity over home
         launchActivity(TEST_ACTIVITY);
@@ -708,7 +709,7 @@
     }
 
     @Test
-    public void testMovePipToBackWithNoFullscreenOrFreeformStack() throws Exception {
+    public void testMovePipToBackWithNoFullscreenOrFreeformStack() {
         // Start with a clean slate, remove all the stacks but home
         removeRootTasksWithActivityTypes(ALL_ACTIVITY_TYPE_BUT_HOME);
 
@@ -725,7 +726,7 @@
     }
 
     @Test
-    public void testMovePipToBackWithVisibleFullscreenOrFreeformStack() throws Exception {
+    public void testMovePipToBackWithVisibleFullscreenOrFreeformStack() {
         // Launch a fullscreen/freeform activity, and a pip activity over that
         launchActivity(TEST_ACTIVITY);
         launchActivity(PIP_ACTIVITY);
@@ -741,7 +742,7 @@
     }
 
     @Test
-    public void testMovePipToBackWithHiddenFullscreenOrFreeformStack() throws Exception {
+    public void testMovePipToBackWithHiddenFullscreenOrFreeformStack() {
         // Launch a fullscreen/freeform activity, return home and while the fullscreen/freeform
         // stack is hidden, launch a pip activity over home
         launchActivity(TEST_ACTIVITY);
@@ -758,7 +759,7 @@
     }
 
     @Test
-    public void testPinnedStackAlwaysOnTop() throws Exception {
+    public void testPinnedStackAlwaysOnTop() {
         // Launch activity into pinned stack and assert it's on top.
         launchActivity(PIP_ACTIVITY, extraString(EXTRA_ENTER_PIP, "true"));
         waitForEnterPip(PIP_ACTIVITY);
@@ -777,7 +778,7 @@
     }
 
     @Test
-    public void testAppOpsDenyPipOnPause() throws Exception {
+    public void testAppOpsDenyPipOnPause() {
         try (final AppOpsSession appOpsSession = new AppOpsSession(PIP_ACTIVITY)) {
             // Disable enter-pip and try to enter pip
             appOpsSession.setOpToMode(APP_OPS_OP_ENTER_PICTURE_IN_PICTURE, APP_OPS_MODE_IGNORED);
@@ -793,15 +794,60 @@
     }
 
     @Test
-    public void testEnterPipFromTaskWithMultipleActivities() throws Exception {
+    public void testEnterPipFromTaskWithMultipleActivities() {
         // Try to enter picture-in-picture from an activity that has more than one activity in the
         // task and ensure that it works
         launchActivity(LAUNCH_ENTER_PIP_ACTIVITY);
         waitForEnterPip(PIP_ACTIVITY);
+
+        final ActivityTask task = mWmState.getTaskByActivity(LAUNCH_ENTER_PIP_ACTIVITY);
+        assertEquals(1, task.mActivities.size());
         assertPinnedStackExists();
     }
 
     @Test
+    public void testPipFromTaskWithMultipleActivitiesAndExpandPip() {
+        // Try to enter picture-in-picture from an activity that has more than one activity in the
+        // task and ensure pinned task can go back to its original task when expand to fullscreen
+        launchActivity(LAUNCH_ENTER_PIP_ACTIVITY);
+        waitForEnterPip(PIP_ACTIVITY);
+
+        mBroadcastActionTrigger.expandPip();
+        waitForExitPipToFullscreen(PIP_ACTIVITY);
+
+        final ActivityTask task = mWmState.getTaskByActivity(LAUNCH_ENTER_PIP_ACTIVITY);
+        assertEquals(2, task.mActivities.size());
+    }
+
+    @Test
+    public void testPipFromTaskWithMultipleActivitiesAndDismissPip() {
+        // Try to enter picture-in-picture from an activity that has more than one activity in the
+        // task and ensure flags on original task get reset after dismissing pip
+        launchActivity(LAUNCH_ENTER_PIP_ACTIVITY);
+        waitForEnterPip(PIP_ACTIVITY);
+
+        mBroadcastActionTrigger.doAction(ACTION_FINISH);
+        waitForPinnedStackRemoved();
+
+        final ActivityTask task = mWmState.getTaskByActivity(LAUNCH_ENTER_PIP_ACTIVITY);
+        assertFalse(task.mHasChildPipActivity);
+    }
+
+    @Test
+    public void testPipFromTaskWithMultipleActivitiesAndRemoveOriginalTask() {
+        // Try to enter picture-in-picture from an activity that has more than one activity in the
+        // task and ensure pinned task is removed when the original task vanishes
+        launchActivity(LAUNCH_ENTER_PIP_ACTIVITY);
+        waitForEnterPip(PIP_ACTIVITY);
+
+        final int originalTaskId = mWmState.getTaskByActivity(LAUNCH_ENTER_PIP_ACTIVITY).mTaskId;
+        removeRootTask(originalTaskId);
+        waitForPinnedStackRemoved();
+
+        assertPinnedStackDoesNotExist();
+    }
+
+    @Test
     public void testLaunchStoppedActivityWithPiPInSameProcessPreQ() {
         // Try to enter picture-in-picture from an activity that has more than one activity in the
         // task and ensure that it works, for pre-Q app
@@ -826,7 +872,7 @@
     }
 
     @Test
-    public void testEnterPipWithResumeWhilePausingActivityNoStop() throws Exception {
+    public void testEnterPipWithResumeWhilePausingActivityNoStop() {
         /*
          * Launch the resumeWhilePausing activity and ensure that the PiP activity did not get
          * stopped and actually went into the pinned stack.
@@ -854,7 +900,7 @@
     }
 
     @Test
-    public void testDisallowEnterPipActivityLocked() throws Exception {
+    public void testDisallowEnterPipActivityLocked() {
         launchActivity(PIP_ACTIVITY, extraString(EXTRA_ENTER_PIP_ON_PAUSE, "true"));
         ActivityTask task = mWmState.getStackByActivity(PIP_ACTIVITY);
 
@@ -879,7 +925,7 @@
     }
 
     @Test
-    public void testConfigurationChangeOrderDuringTransition() throws Exception {
+    public void testConfigurationChangeOrderDuringTransition() {
         // Launch a PiP activity and ensure configuration change only happened once, and that the
         // configuration change happened after the picture-in-picture and multi-window callbacks
         launchActivity(PIP_ACTIVITY, WINDOWING_MODE_FULLSCREEN);
@@ -960,7 +1006,7 @@
     }
 
     @Test
-    public void testStopBeforeMultiWindowCallbacksOnDismiss() throws Exception {
+    public void testStopBeforeMultiWindowCallbacksOnDismiss() {
         // Launch a PiP activity
         launchActivity(PIP_ACTIVITY);
         int windowingMode = mWmState.getTaskByActivity(PIP_ACTIVITY).getWindowingMode();
@@ -1001,7 +1047,7 @@
     }
 
     @Test
-    public void testPreventSetAspectRatioWhileExpanding() throws Exception {
+    public void testPreventSetAspectRatioWhileExpanding() {
         // Launch the PiP activity
         launchActivity(PIP_ACTIVITY, extraString(EXTRA_ENTER_PIP, "true"));
         waitForEnterPip(PIP_ACTIVITY);
@@ -1014,7 +1060,7 @@
     }
 
     @Test
-    public void testSetRequestedOrientationWhilePinned() throws Exception {
+    public void testSetRequestedOrientationWhilePinned() {
         assumeTrue("Skipping test: no orientation request support", supportsOrientationRequest());
         // Launch the PiP activity fixed as portrait, and enter picture-in-picture
         launchActivity(PIP_ACTIVITY, WINDOWING_MODE_FULLSCREEN,
@@ -1043,7 +1089,7 @@
     }
 
     @Test
-    public void testWindowButtonEntersPip() throws Exception {
+    public void testWindowButtonEntersPip() {
         assumeTrue(!mWmState.isHomeRecentsComponent());
 
         // Launch the PiP activity trigger the window button, ensure that we have entered PiP
@@ -1054,7 +1100,7 @@
     }
 
     @Test
-    public void testFinishPipActivityWithTaskOverlay() throws Exception {
+    public void testFinishPipActivityWithTaskOverlay() {
         // Launch PiP activity
         launchActivity(PIP_ACTIVITY, extraString(EXTRA_ENTER_PIP, "true"));
         waitForEnterPip(PIP_ACTIVITY);
@@ -1075,7 +1121,7 @@
     }
 
     @Test
-    public void testNoResumeAfterTaskOverlayFinishes() throws Exception {
+    public void testNoResumeAfterTaskOverlayFinishes() {
         // Launch PiP activity
         launchActivity(PIP_ACTIVITY, extraString(EXTRA_ENTER_PIP, "true"));
         waitForEnterPip(PIP_ACTIVITY);
@@ -1114,7 +1160,7 @@
     }
 
     @Test
-    public void testLaunchTaskByComponentMatchMultipleTasks() throws Exception {
+    public void testLaunchTaskByComponentMatchMultipleTasks() {
         // Launch a fullscreen activity which will launch a PiP activity in a new task with the same
         // affinity
         launchActivity(TEST_ACTIVITY_WITH_SAME_AFFINITY);
@@ -1137,7 +1183,7 @@
     }
 
     @Test
-    public void testLaunchTaskByAffinityMatchMultipleTasks() throws Exception {
+    public void testLaunchTaskByAffinityMatchMultipleTasks() {
         // Launch a fullscreen activity which will launch a PiP activity in a new task with the same
         // affinity, and also launch another activity in the same task, while finishing itself. As
         // a result, the task will not have a component matching the same activity as what it was
@@ -1169,7 +1215,7 @@
     }
 
     @Test
-    public void testLaunchTaskByAffinityMatchSingleTask() throws Exception {
+    public void testLaunchTaskByAffinityMatchSingleTask() {
         // Launch an activity into the pinned stack with a fixed affinity
         launchActivityNoWait(TEST_ACTIVITY_WITH_SAME_AFFINITY,
                 extraString(EXTRA_ENTER_PIP, "true"),
@@ -1191,7 +1237,7 @@
 
     /** Test that reported display size corresponds to fullscreen after exiting PiP. */
     @Test
-    public void testDisplayMetricsPinUnpin() throws Exception {
+    public void testDisplayMetricsPinUnpin() {
         separateTestJournal();
         launchActivity(TEST_ACTIVITY);
         final int defaultWindowingMode = mWmState
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/ReplaceWindowTests.java b/tests/framework/base/windowmanager/src/android/server/wm/ReplaceWindowTests.java
index 96cec2c..7e96ab1 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/ReplaceWindowTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/ReplaceWindowTests.java
@@ -16,7 +16,6 @@
 
 package android.server.wm;
 
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
 import static android.server.wm.ComponentNameUtils.getWindowName;
 import static android.server.wm.StateLogger.log;
 import static android.server.wm.app.Components.NO_RELAUNCH_ACTIVITY;
@@ -79,7 +78,7 @@
         final String oldToken = getWindowToken(windowName, activityName);
 
         // Move to docked stack
-        setActivityTaskWindowingMode(activityName, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
+        putActivityInPrimarySplit(activityName);
 
         // Sleep 5 seconds, then check if the window is replaced properly.
         SystemClock.sleep(TimeUnit.SECONDS.toMillis(5));
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/WindowContextTests.java b/tests/framework/base/windowmanager/src/android/server/wm/WindowContextTests.java
index 36f9890..c556cd9 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/WindowContextTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/WindowContextTests.java
@@ -16,9 +16,13 @@
 
 package android.server.wm;
 
+import static android.server.wm.WindowManagerTestBase.startActivity;
 import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
@@ -29,13 +33,19 @@
 import android.content.ServiceConnection;
 import android.content.res.Configuration;
 import android.graphics.Rect;
+import android.os.Binder;
 import android.os.IBinder;
 import android.platform.test.annotations.AppModeFull;
 import android.platform.test.annotations.Presubmit;
+import android.server.wm.WindowContextTests.TestWindowService.TestToken;
 import android.view.View;
 import android.view.WindowManager;
+import android.window.WindowProviderService;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.rule.ServiceTestRule;
 
 import org.junit.Test;
 
@@ -126,7 +136,7 @@
 
         displayMetricsSession.changeDisplayMetrics(1.2 /* sizeRatio */, 1.1 /* densityRatio */);
 
-        // verify if there is a gicallback from the window context configuration change.
+        // verify if there is a callback from the window context configuration change.
         assertTrue(callbacks.mLatch.await(4, TimeUnit.SECONDS));
         Rect bounds = callbacks.mConfiguration.windowConfiguration.getBounds();
         assertBoundsEquals(displayMetricsSession.getDisplayMetrics(), bounds);
@@ -134,6 +144,140 @@
         windowContext.unregisterComponentCallbacks(callbacks);
     }
 
+    /**
+     * Verifies if window context on the secondary display receives global configuration changes.
+     */
+    @Test
+    public void testWindowContextGlobalConfigChanges() {
+        final TestComponentCallbacks callbacks = new TestComponentCallbacks();
+        final WindowManagerState.DisplayContent display = createManagedVirtualDisplaySession()
+                .setPublicDisplay(true).createDisplay();
+        final FontScaleSession fontScaleSession = createFontScaleSession();
+        final Context windowContext = createWindowContext(display.mId);
+
+        windowContext.registerComponentCallbacks(callbacks);
+
+        final float expectedFontScale = fontScaleSession.get() + 0.3f;
+        fontScaleSession.set(expectedFontScale);
+
+        // We don't rely on latch to verify the result because we may receive two configuration
+        // changes. One may from that WindowContext attaches to a DisplayArea although it is before
+        // ComponentCallback registration), the other is from font the scale change, which is what
+        // we want to verify.
+        waitForOrFail("Font scale must be " + expectedFontScale + ","
+                + " but was " + callbacks.mConfiguration.fontScale, () ->
+                expectedFontScale == callbacks.mConfiguration.fontScale);
+
+        windowContext.unregisterComponentCallbacks(callbacks);
+    }
+
+    /**
+     * Verify the {@link WindowProviderService} lifecycle:
+     * <ul>
+     *     <li>In {@link WindowProviderService#onCreate()}, register to the DisplayArea with
+     *     given value from {@link WindowProviderService#getWindowType()} and
+     *     {@link WindowProviderService#getWindowContextOptions()}} and receive a
+     *     {@link Configuration} update which matches DisplayArea's metrics.</li>
+     *     <li>After {@link WindowProviderService#attachToWindowToken(IBinder)}, the
+     *     {@link WindowProviderService} must be switched to register to the Window Token and
+     *     receive a configuration update which matches Window Token's metrics.</li>
+     * </ul>
+     */
+    @Test
+    public void testWindowProviderServiceLifecycle() throws Exception {
+        // Start an activity for WindowProviderService to attach
+        TestActivity activity = startActivity(TestActivity.class);
+        final ComponentName activityName = activity.getComponentName();
+
+        // If the device supports multi-window, make this Activity to multi-window mode.
+        // In this way, we can verify if the WindowProviderService's metrics matches
+        // the split-screen Activity's metrics, which is different from TaskDisplayArea's metrics.
+        if (supportsSplitScreenMultiWindow()) {
+            mWmState.computeState(activityName);
+
+            putActivityInPrimarySplit(activityName);
+
+            activity.waitAndAssertConfigurationChanged();
+        }
+
+        // Obtain the TestWindowService instance.
+        final Context context = ApplicationProvider.getApplicationContext();
+        final Intent intent = new Intent(context, TestWindowService.class);
+        final ServiceTestRule serviceRule = new ServiceTestRule();
+        try {
+            TestToken token = (TestToken) serviceRule.bindService(intent);
+            final TestWindowService service = token.getService();
+
+            final WindowManagerState.DisplayArea da = mWmState.getTaskDisplayArea(activityName);
+            final Rect daBounds = da.mFullConfiguration.windowConfiguration.getBounds();
+            final Rect maxDaBounds = da.mFullConfiguration.windowConfiguration.getMaxBounds();
+
+            waitAndAssertWindowMetricsBoundsMatches(service, daBounds, maxDaBounds,
+                    "WindowProviderService bounds must match DisplayArea bounds.");
+
+            // Obtain the Activity's token and attach it to TestWindowService.
+            final IBinder windowToken = activity.getWindow().getAttributes().token;
+            service.attachToWindowToken(windowToken);
+
+            final WindowManager wm = activity.getWindowManager();
+            final Rect currentBounds = wm.getCurrentWindowMetrics().getBounds();
+            final Rect maxBounds = wm.getMaximumWindowMetrics().getBounds();
+
+            // After TestWindowService attaches the Activity's token, which is also a WindowToken,
+            // it is expected to receive a config update which matches the WindowMetrics of
+            // the Activity.
+            waitAndAssertWindowMetricsBoundsMatches(service, currentBounds, maxBounds,
+                    "WindowProviderService bounds must match WindowToken bounds.");
+        } finally {
+            serviceRule.unbindService();
+        }
+    }
+
+    private void waitAndAssertWindowMetricsBoundsMatches(Context context, Rect currentBounds,
+            Rect maxBounds, String message) {
+        final WindowManager wm = context.getSystemService(WindowManager.class);
+        waitForOrFail(message, () -> {
+            final Rect currentWindowBounds = wm.getCurrentWindowMetrics().getBounds();
+            final Rect maxWindowBounds = wm.getMaximumWindowMetrics().getBounds();
+            return currentBounds.equals(currentWindowBounds) && maxBounds.equals(maxWindowBounds);
+        });
+    }
+
+    public static class TestActivity extends WindowManagerTestBase.FocusableActivity {
+        final CountDownLatch mLatch = new CountDownLatch(1);
+
+        @Override
+        public void onConfigurationChanged(@NonNull Configuration newConfig) {
+            super.onConfigurationChanged(newConfig);
+            mLatch.countDown();
+        }
+
+        private void waitAndAssertConfigurationChanged() throws Exception {
+            assertThat(mLatch.await(4, TimeUnit.SECONDS)).isTrue();
+        }
+    }
+
+    public static class TestWindowService extends WindowProviderService {
+        private final IBinder mToken = new TestToken();
+
+        @Override
+        public int getWindowType() {
+            return TYPE_APPLICATION;
+        }
+
+        @Nullable
+        @Override
+        public IBinder onBind(Intent intent) {
+            return mToken;
+        }
+
+        public class TestToken extends Binder {
+            private TestWindowService getService() {
+                return TestWindowService.this;
+            }
+        }
+    }
+
     private static class TestComponentCallbacks implements ComponentCallbacks {
         private Configuration mConfiguration;
         private CountDownLatch mLatch = new CountDownLatch(1);
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsPolicyTest.java b/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsPolicyTest.java
index 546e5c8..dbbb4fd 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsPolicyTest.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsPolicyTest.java
@@ -16,13 +16,8 @@
 
 package android.server.wm;
 
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
 import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
-import static android.server.wm.app.Components.DOCKED_ACTIVITY;
 import static android.server.wm.app.Components.LAUNCHING_ACTIVITY;
-import static android.server.wm.app.Components.TEST_ACTIVITY;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Surface.ROTATION_0;
 import static android.view.Surface.ROTATION_90;
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsActivityTests.java b/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsActivityTests.java
index 704cf41..0a9871f 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsActivityTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/WindowMetricsActivityTests.java
@@ -16,16 +16,16 @@
 
 package android.server.wm;
 
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
 import static android.server.wm.WindowManagerState.STATE_PAUSED;
 import static android.server.wm.WindowMetricsTestHelper.getBoundsExcludingNavigationBarAndCutout;
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
@@ -142,11 +142,12 @@
 
         assertMetricsMatchesLayout(activity);
 
-        setActivityTaskWindowingMode(activity.getComponentName(),
-                WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
         mWmState.computeState(activity.getComponentName());
-        mWmState.assertContainsStack("Must contain primary split-screen stack.",
-                WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD);
+        putActivityInPrimarySplit(activity.getComponentName());
+
+        mWmState.computeState(activity.getComponentName());
+        assertTrue(mWmState.getActivity(activity.getComponentName()).getWindowingMode()
+                == WINDOWING_MODE_MULTI_WINDOW);
 
         assertMetricsMatchesLayout(activity);
     }
@@ -160,11 +161,12 @@
 
         assertMetricsValidity(activity);
 
-        setActivityTaskWindowingMode(activity.getComponentName(),
-                WINDOWING_MODE_SPLIT_SCREEN_PRIMARY);
         mWmState.computeState(activity.getComponentName());
-        mWmState.assertContainsStack("Must contain primary split-screen stack.",
-                WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD);
+        putActivityInPrimarySplit(activity.getComponentName());
+
+        mWmState.computeState(activity.getComponentName());
+        assertTrue(mWmState.getActivity(activity.getComponentName()).getWindowingMode()
+                == WINDOWING_MODE_MULTI_WINDOW);
 
         assertMetricsValidity(activity);
     }
@@ -178,8 +180,9 @@
 
         assertMetricsMatchesLayout(activity);
 
-        setActivityTaskWindowingMode(activity.getComponentName(),
+        launchActivity(new ComponentName(mTargetContext, MetricsActivity.class),
                 WINDOWING_MODE_FREEFORM);
+
         // Resize the freeform activity.
         resizeActivityTask(activity.getComponentName(), WINDOW_BOUNDS.left, WINDOW_BOUNDS.top,
                 WINDOW_BOUNDS.right, WINDOW_BOUNDS.bottom);
@@ -213,8 +216,9 @@
 
         assertMetricsValidity(activity);
 
-        setActivityTaskWindowingMode(activity.getComponentName(),
+        launchActivity(new ComponentName(mTargetContext, MetricsActivity.class),
                 WINDOWING_MODE_FREEFORM);
+
         // Resize the freeform activity.
         resizeActivityTask(activity.getComponentName(), WINDOW_BOUNDS.left, WINDOW_BOUNDS.top,
                 WINDOW_BOUNDS.right, WINDOW_BOUNDS.bottom);
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/intent/Activities.java b/tests/framework/base/windowmanager/src/android/server/wm/intent/Activities.java
index a9cfac9..5dc7ffe 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/intent/Activities.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/intent/Activities.java
@@ -60,6 +60,9 @@
     public static class SingleInstancePerTaskActivity extends BaseActivity {
     }
 
+    public static class SingleInstancePerTaskDocumentNeverActivity extends BaseActivity {
+    }
+
     public static class TaskAffinity1Activity extends BaseActivity {
     }
 
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/intent/OWNERS b/tests/framework/base/windowmanager/src/android/server/wm/intent/OWNERS
new file mode 100644
index 0000000..b923e94
--- /dev/null
+++ b/tests/framework/base/windowmanager/src/android/server/wm/intent/OWNERS
@@ -0,0 +1,2 @@
+# Bug template url: https://b.corp.google.com/issues/new?component=316020&template=1018174
+louischang@google.com
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleLegacySplitScreenTests.java b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleLegacySplitScreenTests.java
index aed3a3f..f7b7f49 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleLegacySplitScreenTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleLegacySplitScreenTests.java
@@ -17,7 +17,6 @@
 package android.server.wm.lifecycle;
 
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
 import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
 import static android.server.wm.lifecycle.LifecycleLog.ActivityCallback.ON_ACTIVITY_RESULT;
@@ -26,7 +25,6 @@
 import static android.server.wm.lifecycle.LifecycleLog.ActivityCallback.ON_MULTI_WINDOW_MODE_CHANGED;
 import static android.server.wm.lifecycle.LifecycleLog.ActivityCallback.ON_PAUSE;
 import static android.server.wm.lifecycle.LifecycleLog.ActivityCallback.ON_POST_CREATE;
-import static android.server.wm.lifecycle.LifecycleLog.ActivityCallback.ON_RESTART;
 import static android.server.wm.lifecycle.LifecycleLog.ActivityCallback.ON_RESUME;
 import static android.server.wm.lifecycle.LifecycleLog.ActivityCallback.ON_START;
 import static android.server.wm.lifecycle.LifecycleLog.ActivityCallback.ON_STOP;
@@ -43,14 +41,12 @@
 
 import android.app.Activity;
 import android.app.Instrumentation;
-import android.content.ComponentName;
 import android.content.Intent;
 import android.platform.test.annotations.Presubmit;
 
 import androidx.test.filters.MediumTest;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import java.util.Arrays;
@@ -341,7 +337,7 @@
 
         // Exit split-screen
         getLifecycleLog().clear();
-        setActivityTaskWindowingMode(CONFIG_CHANGE_HANDLING_ACTIVITY, WINDOWING_MODE_FULLSCREEN);
+        dismissSplitScreen(true /* primaryOnTop */);
 
         // Wait for the activity to receive the change
         final List<LifecycleLog.ActivityCallback> expectedSequence =
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/OWNERS b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/OWNERS
new file mode 100644
index 0000000..1bcd73d
--- /dev/null
+++ b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/OWNERS
@@ -0,0 +1,2 @@
+# Bug template url: https://b.corp.google.com/issues/new?component=316020&template=1018174
+include /tests/framework/base/windowmanager/src/android/server/wm/intent/OWNERS
diff --git a/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java b/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
index 38571c1..e2e07ec 100644
--- a/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
+++ b/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
@@ -23,8 +23,6 @@
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 import static android.content.Intent.ACTION_MAIN;
 import static android.content.Intent.CATEGORY_HOME;
@@ -68,7 +66,6 @@
 import static android.server.wm.ComponentNameUtils.getLogTag;
 import static android.server.wm.StateLogger.log;
 import static android.server.wm.StateLogger.logE;
-import static android.server.wm.UiDeviceUtils.pressAppSwitchButton;
 import static android.server.wm.UiDeviceUtils.pressBackButton;
 import static android.server.wm.UiDeviceUtils.pressEnterButton;
 import static android.server.wm.UiDeviceUtils.pressHomeButton;
@@ -382,6 +379,10 @@
                     .putExtra(EXTRA_DISMISS_KEYGUARD_METHOD, true));
         }
 
+        void expandPip() {
+            mContext.sendBroadcast(createIntentWithAction(ACTION_EXPAND_PIP));
+        }
+
         void expandPipWithAspectRatio(String extraNum, String extraDenom) {
             mContext.sendBroadcast(createIntentWithAction(ACTION_EXPAND_PIP)
                     .putExtra(EXTRA_SET_ASPECT_RATIO_WITH_DELAY_NUMERATOR, extraNum)
@@ -694,6 +695,11 @@
         waitForIdle();
     }
 
+    protected void removeRootTask(int taskId) {
+        runWithShellPermission(() -> mAtm.removeTask(taskId));
+        waitForIdle();
+    }
+
     public static String executeShellCommand(String command) {
         log("Shell command: " + command);
         try {
@@ -836,6 +842,18 @@
         });
     }
 
+    protected void putActivityInPrimarySplit(ComponentName activityName) {
+        final int taskId = mWmState.getTaskByActivity(activityName).mTaskId;
+        mTaskOrganizer.putTaskInSplitPrimary(taskId);
+        mWmState.waitForValidState(activityName);
+    }
+
+    protected void putActivityInSecondarySplit(ComponentName activityName) {
+        final int taskId = mWmState.getTaskByActivity(activityName).mTaskId;
+        mTaskOrganizer.putTaskInSplitSecondary(taskId);
+        mWmState.waitForValidState(activityName);
+    }
+
     /**
      * Launches {@param primaryActivity} into split-screen primary windowing mode
      * and {@param secondaryActivity} to the side in split-screen secondary windowing mode.
@@ -892,22 +910,6 @@
         }
     }
 
-    protected boolean setActivityTaskWindowingMode(ComponentName activityName, int windowingMode) {
-        mWmState.computeState(activityName);
-        final int taskId = mWmState.getTaskByActivity(activityName).mTaskId;
-        boolean[] result = new boolean[1];
-        runWithShellPermission(() -> {
-            result[0] = mAtm.setTaskWindowingMode(taskId, windowingMode, true /* toTop */);
-        });
-        if (result[0]) {
-            mWmState.waitForValidState(new WaitForValidActivityState.Builder(activityName)
-                    .setActivityType(ACTIVITY_TYPE_STANDARD)
-                    .setWindowingMode(windowingMode)
-                    .build());
-        }
-        return result[0];
-    }
-
     /**
      * Move activity to root task or on top of the given root task when the root task is also a leaf
      * task.
@@ -941,22 +943,6 @@
         runWithShellPermission(() -> mAtm.resizeTask(taskId, new Rect(left, top, right, bottom)));
     }
 
-    protected void resizePrimarySplitScreen(
-            int rootTaskWidth, int rootTaskHeight, int taskWidth, int taskHeight) {
-        runWithShellPermission(() ->
-                mAtm.resizePrimarySplitScreen(new Rect(0, 0, rootTaskWidth, rootTaskHeight),
-                        new Rect(0, 0, taskWidth, taskHeight)));
-    }
-
-    protected boolean pressAppSwitchButtonAndWaitForRecents() {
-        pressAppSwitchButton();
-        final boolean isRecentsVisible = mWmState.waitForRecentsActivityVisible();
-        if (isRecentsVisible) {
-            mWmState.waitForAppTransitionIdleOnDisplay(DEFAULT_DISPLAY);
-        }
-        return isRecentsVisible;
-    }
-
     protected boolean supportsVrMode() {
         return hasDeviceFeature(FEATURE_VR_MODE_HIGH_PERFORMANCE);
     }
@@ -1258,6 +1244,11 @@
                 new SystemAlertWindowAppOpSession(mContext.getOpPackageName(), MODE_ALLOWED));
     }
 
+    /** @see ObjectTracker#manage(AutoCloseable) */
+    protected FontScaleSession createFontScaleSession() {
+        return mObjectTracker.manage(new FontScaleSession());
+    }
+
     /**
      * Test @Rule class that disables screen doze settings before each test method running and
      * restoring to initial values after test method finished.
@@ -1669,6 +1660,15 @@
         }
     }
 
+    /** Helper class to save, set, and restore font_scale preferences. */
+    protected static class FontScaleSession extends SettingsSession<Float> {
+        FontScaleSession() {
+            super(Settings.System.getUriFor(Settings.System.FONT_SCALE),
+                    Settings.System::getFloat,
+                    Settings.System::putFloat);
+        }
+    }
+
     /**
      * Returns whether the test device respects settings of locked user rotation mode.
      *
diff --git a/tests/framework/base/windowmanager/util/src/android/server/wm/WaitForValidActivityState.java b/tests/framework/base/windowmanager/util/src/android/server/wm/WaitForValidActivityState.java
index fd9127d..02d1044 100644
--- a/tests/framework/base/windowmanager/util/src/android/server/wm/WaitForValidActivityState.java
+++ b/tests/framework/base/windowmanager/util/src/android/server/wm/WaitForValidActivityState.java
@@ -26,13 +26,12 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
 import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 import static android.server.wm.ComponentNameUtils.getActivityName;
 import static android.server.wm.ComponentNameUtils.getWindowName;
 
 import android.content.ComponentName;
+
 import androidx.annotation.Nullable;
 
 public class WaitForValidActivityState {
@@ -90,8 +89,6 @@
             case WINDOWING_MODE_UNDEFINED: return "UNDEFINED";
             case WINDOWING_MODE_FULLSCREEN: return "FULLSCREEN";
             case WINDOWING_MODE_PINNED: return "PINNED";
-            case WINDOWING_MODE_SPLIT_SCREEN_PRIMARY: return "SPLIT_SCREEN_PRIMARY";
-            case WINDOWING_MODE_SPLIT_SCREEN_SECONDARY: return "SPLIT_SCREEN_SECONDARY";
             case WINDOWING_MODE_FREEFORM: return "FREEFORM";
             case WINDOWING_MODE_MULTI_WINDOW: return "MULTI_WINDOW";
             default:
diff --git a/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerState.java b/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerState.java
index 4d63091..eca4e75 100644
--- a/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerState.java
+++ b/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerState.java
@@ -22,9 +22,6 @@
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 import static android.server.wm.ComponentNameUtils.getActivityName;
 import static android.server.wm.ProtoExtractors.extract;
@@ -1292,6 +1289,7 @@
         private int mSurfaceHeight;
         boolean mCreatedByOrganizer;
         String mAffinity;
+        boolean mHasChildPipActivity;
 
         ActivityTask(TaskProto proto) {
             super(proto.windowContainer);
@@ -1312,6 +1310,7 @@
             mSurfaceHeight = proto.surfaceHeight;
             mCreatedByOrganizer = proto.createdByOrganizer;
             mAffinity = proto.affinity;
+            mHasChildPipActivity = proto.hasChildPipActivity;
 
             if (proto.resumedActivity != null) {
                 mResumedActivity = proto.resumedActivity.title;
@@ -1530,12 +1529,7 @@
             if (requestedWindowingMode == WINDOWING_MODE_UNDEFINED) {
                 return true;
             }
-            final int windowingMode = getWindowingMode();
-            if (requestedWindowingMode == WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY) {
-                return windowingMode == WINDOWING_MODE_FULLSCREEN
-                        || windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
-            }
-            return windowingMode == requestedWindowingMode;
+            return getWindowingMode() == requestedWindowingMode;
         }
 
         public int getWindowingMode() {
diff --git a/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerStateHelper.java b/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerStateHelper.java
index 014cadd..cd351ae 100644
--- a/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerStateHelper.java
+++ b/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerStateHelper.java
@@ -18,7 +18,6 @@
 
 import static android.app.ActivityTaskManager.INVALID_STACK_ID;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 import static android.server.wm.ComponentNameUtils.getActivityName;
 import static android.server.wm.ComponentNameUtils.getWindowName;
@@ -748,12 +747,6 @@
         return getInputMethodWindowState();
     }
 
-    boolean isScreenPortrait() {
-        final int displayId = getStandardStackByWindowingMode(
-            WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).mDisplayId;
-        return isScreenPortrait(displayId);
-    }
-
     boolean isScreenPortrait(int displayId) {
         final Rect displayRect = getDisplay(displayId).getDisplayRect();
         return displayRect.height() > displayRect.width();
diff --git a/tests/input/AndroidManifest.xml b/tests/input/AndroidManifest.xml
index 0698bd9..f019c8f 100644
--- a/tests/input/AndroidManifest.xml
+++ b/tests/input/AndroidManifest.xml
@@ -38,10 +38,12 @@
         </receiver>
 
         <activity android:name="android.input.cts.IncompleteMotionActivity"
-                  android:label="IncompleteMotion activity">
+                  android:label="IncompleteMotion activity"
+                  android:turnScreenOn="true">
         </activity>
         <activity android:name="android.input.cts.CaptureEventActivity"
-                  android:label="Capture events">
+                  android:label="Capture events"
+                  android:turnScreenOn="true">
         </activity>
     </application>
 
diff --git a/tests/inputmethod/src/android/view/inputmethod/cts/ImeInsetsControllerTest.java b/tests/inputmethod/src/android/view/inputmethod/cts/ImeInsetsControllerTest.java
index 30300f7..6f0d6b9 100644
--- a/tests/inputmethod/src/android/view/inputmethod/cts/ImeInsetsControllerTest.java
+++ b/tests/inputmethod/src/android/view/inputmethod/cts/ImeInsetsControllerTest.java
@@ -89,7 +89,7 @@
     }
 
     private static final int INITIAL_KEYBOARD_HEIGHT = 200;
-    private static final int NEW_KEYBOARD_HEIGHT = 400;
+    private static final int NEW_KEYBOARD_HEIGHT = 300;
 
     @Test
     public void testChangeSizeWhileControlling() throws Exception {
diff --git a/tests/inputmethod/src/android/view/inputmethod/cts/ImeInsetsVisibilityTest.java b/tests/inputmethod/src/android/view/inputmethod/cts/ImeInsetsVisibilityTest.java
index 033a471..e620de9 100644
--- a/tests/inputmethod/src/android/view/inputmethod/cts/ImeInsetsVisibilityTest.java
+++ b/tests/inputmethod/src/android/view/inputmethod/cts/ImeInsetsVisibilityTest.java
@@ -77,7 +77,7 @@
 @RunWith(AndroidJUnit4.class)
 public class ImeInsetsVisibilityTest extends EndToEndImeTestBase {
     private static final long TIMEOUT = TimeUnit.SECONDS.toMillis(5);
-    private static final int NEW_KEYBOARD_HEIGHT = 400;
+    private static final int NEW_KEYBOARD_HEIGHT = 300;
 
     private static final String TEST_MARKER_PREFIX =
             "android.view.inputmethod.cts.ImeInsetsVisibilityTest";
diff --git a/tests/inputmethod/src/android/view/inputmethod/cts/KeyboardVisibilityControlTest.java b/tests/inputmethod/src/android/view/inputmethod/cts/KeyboardVisibilityControlTest.java
index e621832..f98dc93 100644
--- a/tests/inputmethod/src/android/view/inputmethod/cts/KeyboardVisibilityControlTest.java
+++ b/tests/inputmethod/src/android/view/inputmethod/cts/KeyboardVisibilityControlTest.java
@@ -42,6 +42,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeTrue;
 
 import android.app.AlertDialog;
 import android.app.Instrumentation;
@@ -59,6 +60,7 @@
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.WindowInsetsController;
+import android.view.WindowManager;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethod;
 import android.view.inputmethod.InputMethodManager;
@@ -601,6 +603,12 @@
     private void runRestoreImeVisibility(TestSoftInputMode mode, boolean expectImeVisible)
             throws Exception {
         final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
+        final WindowManager wm = instrumentation.getContext().getSystemService(WindowManager.class);
+        // As restoring IME visibility behavior is only available when TaskSnapshot mechanism
+        // enabled, skip the test when TaskSnapshot is not supported.
+        assumeTrue("Restoring IME visibility not available when TaskSnapshot unsupported",
+                wm.isTaskSnapshotSupported());
+
         try (MockImeSession imeSession = MockImeSession.create(
                 instrumentation.getContext(), instrumentation.getUiAutomation(),
                 new ImeSettings.Builder())) {
diff --git a/tests/inputmethod/src/android/view/inputmethod/cts/SpellCheckerTest.kt b/tests/inputmethod/src/android/view/inputmethod/cts/SpellCheckerTest.kt
index ba5e6e3..e3101a6 100644
--- a/tests/inputmethod/src/android/view/inputmethod/cts/SpellCheckerTest.kt
+++ b/tests/inputmethod/src/android/view/inputmethod/cts/SpellCheckerTest.kt
@@ -404,6 +404,32 @@
     }
 
     @Test
+    fun newSpellCheckerSession_processPurePunctuationRequest() {
+        val configuration = MockSpellCheckerConfiguration.newBuilder()
+                .addSuggestionRules(
+                        MockSpellCheckerProto.SuggestionRule.newBuilder()
+                                .setMatch("foo")
+                                .addSuggestions("suggestion")
+                                .setAttributes(RESULT_ATTR_LOOKS_LIKE_TYPO)
+                ).build()
+        MockSpellCheckerClient.create(context, configuration).use {
+            val tsm = context.getSystemService(TextServicesManager::class.java)
+            assertThat(tsm).isNotNull()
+            val fakeListener = FakeSpellCheckerSessionListener()
+            val fakeExecutor = FakeExecutor()
+            var session: SpellCheckerSession? = tsm?.newSpellCheckerSession(Locale.US, false,
+                    RESULT_ATTR_LOOKS_LIKE_TYPO, null, fakeExecutor, fakeListener)
+            assertThat(session).isNotNull()
+            session?.getSentenceSuggestions(arrayOf(TextInfo(". ")), 5)
+            waitOnMainUntil({ fakeExecutor.runnables.size == 1 }, TIMEOUT)
+            fakeExecutor.runnables[0].run()
+            assertThat(fakeListener.getSentenceSuggestionsResults).hasSize(1)
+            assertThat(fakeListener.getSentenceSuggestionsResults[0]).hasLength(1)
+            assertThat(fakeListener.getSentenceSuggestionsResults[0]!![0]).isNull()
+        }
+    }
+
+    @Test
     fun respectSentenceBoundary() {
         // Set up two rules:
         // - Matches the sentence "Preceding text?" and marks it as grammar error.
diff --git a/tests/libcore/luni/AndroidTest.xml b/tests/libcore/luni/AndroidTest.xml
index 59857db..2173c92 100644
--- a/tests/libcore/luni/AndroidTest.xml
+++ b/tests/libcore/luni/AndroidTest.xml
@@ -73,7 +73,7 @@
     </object>
 
     <!-- When this test is run in a Mainline context (e.g. with `mts-tradefed`), only enable it if
-         one the Mainline modules below is present on the device used for testing. -->
+         one of the Mainline modules below is present on the device used for testing. -->
     <object type="module_controller" class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
         <!-- ART Mainline Module (internal version). -->
         <option name="mainline-module-package-name" value="com.google.android.art" />
diff --git a/tests/libcore/ojluni/AndroidTest.xml b/tests/libcore/ojluni/AndroidTest.xml
index d69101e..86e04f6 100644
--- a/tests/libcore/ojluni/AndroidTest.xml
+++ b/tests/libcore/ojluni/AndroidTest.xml
@@ -49,4 +49,13 @@
     <object type="module_controller" class="com.android.tradefed.testtype.suite.module.TestFailureModuleController">
         <option name="screenshot-on-failure" value="false" />
     </object>
+
+    <!-- When this test is run in a Mainline context (e.g. with `mts-tradefed`), only enable it if
+         one of the Mainline modules below is present on the device used for testing. -->
+    <object type="module_controller" class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
+        <!-- ART Mainline Module (internal version). -->
+        <option name="mainline-module-package-name" value="com.google.android.art" />
+        <!-- ART Mainline Module (external (AOSP) version). -->
+        <option name="mainline-module-package-name" value="com.android.art" />
+    </object>
 </configuration>
diff --git a/tests/location/location_coarse/AndroidTest.xml b/tests/location/location_coarse/AndroidTest.xml
index 2c4b8b5..2e26fd1 100644
--- a/tests/location/location_coarse/AndroidTest.xml
+++ b/tests/location/location_coarse/AndroidTest.xml
@@ -17,7 +17,7 @@
     <option name="test-suite-tag" value="cts" />
     <option name="config-descriptor:metadata" key="component" value="location" />
     <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
-    <option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
+    <option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
     <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.LocationCheck" />
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
diff --git a/tests/location/location_fine/AndroidTest.xml b/tests/location/location_fine/AndroidTest.xml
index 7046c95..7c12b33 100644
--- a/tests/location/location_fine/AndroidTest.xml
+++ b/tests/location/location_fine/AndroidTest.xml
@@ -17,7 +17,7 @@
     <option name="test-suite-tag" value="cts" />
     <option name="config-descriptor:metadata" key="component" value="location" />
     <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
-    <option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
+    <option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
     <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.LocationCheck" />
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
diff --git a/tests/location/location_gnss/AndroidTest.xml b/tests/location/location_gnss/AndroidTest.xml
index d76df46..7288bff 100644
--- a/tests/location/location_gnss/AndroidTest.xml
+++ b/tests/location/location_gnss/AndroidTest.xml
@@ -17,7 +17,7 @@
     <option name="test-suite-tag" value="cts" />
     <option name="config-descriptor:metadata" key="component" value="location" />
     <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
-    <option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
+    <option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
      <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.LocationCheck" />
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
diff --git a/tests/location/location_gnss/src/android/location/cts/gnss/GnssLocationValuesTest.java b/tests/location/location_gnss/src/android/location/cts/gnss/GnssLocationValuesTest.java
index 6ea9477..e00e760 100644
--- a/tests/location/location_gnss/src/android/location/cts/gnss/GnssLocationValuesTest.java
+++ b/tests/location/location_gnss/src/android/location/cts/gnss/GnssLocationValuesTest.java
@@ -106,18 +106,17 @@
               "When speed is greater than 0, all GNSS locations generated by "
                       + "the LocationManager must have bearing accuracies.",
               location.hasBearingAccuracy());
-      if (location.hasBearingAccuracy()) {
-        softAssert.assertOrWarnTrue(/* strict= */ YEAR_2017_CAPABILITY_ENFORCED,
-                "Bearing Accuracy should be greater than 0.",
-                location.getBearingAccuracyDegrees() > 0);
-      }
     }
-
+    if (location.hasBearingAccuracy()) {
+      softAssert.assertOrWarnTrue(/* strict= */ true,
+              "Bearing Accuracy should be greater than 0.",
+              location.getBearingAccuracyDegrees() > 0);
+    }
     softAssert.assertOrWarnTrue(/* strict= */ YEAR_2017_CAPABILITY_ENFORCED,
             "All GNSS locations generated by the LocationManager "
                     + "must have a speed accuracy.", location.hasSpeedAccuracy());
     if (location.hasSpeedAccuracy()) {
-      softAssert.assertOrWarnTrue(/* strict= */ YEAR_2017_CAPABILITY_ENFORCED,
+      softAssert.assertOrWarnTrue(/* strict= */ true,
               "Speed Accuracy should be greater than 0.",
               location.getSpeedAccuracyMetersPerSecond() > 0);
     }
@@ -125,7 +124,7 @@
             "All GNSS locations generated by the LocationManager "
                     + "must have a vertical accuracy.", location.hasVerticalAccuracy());
     if (location.hasVerticalAccuracy()) {
-      softAssert.assertOrWarnTrue(/* strict= */ YEAR_2017_CAPABILITY_ENFORCED,
+      softAssert.assertOrWarnTrue(/* strict= */ true,
               "Vertical Accuracy should be greater than 0.",
               location.getVerticalAccuracyMeters() > 0);
     }
diff --git a/tests/location/location_none/AndroidTest.xml b/tests/location/location_none/AndroidTest.xml
index 2f438a9..89ef9e7 100644
--- a/tests/location/location_none/AndroidTest.xml
+++ b/tests/location/location_none/AndroidTest.xml
@@ -17,7 +17,7 @@
     <option name="test-suite-tag" value="cts" />
     <option name="config-descriptor:metadata" key="component" value="location" />
     <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
-    <option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
+    <option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
     <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.LocationCheck" />
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
diff --git a/tests/location/location_privileged/AndroidTest.xml b/tests/location/location_privileged/AndroidTest.xml
index 9086e27..3c0efa9 100644
--- a/tests/location/location_privileged/AndroidTest.xml
+++ b/tests/location/location_privileged/AndroidTest.xml
@@ -17,7 +17,7 @@
     <option name="test-suite-tag" value="cts" />
     <option name="config-descriptor:metadata" key="component" value="location" />
     <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
-    <option name="config-descriptor:metadata" key="parameter" value="multi_abi" />
+    <option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
     <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.LocationCheck" />
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
diff --git a/tests/media/src/android/mediav2/cts/EncoderProfileLevelTest.java b/tests/media/src/android/mediav2/cts/EncoderProfileLevelTest.java
index 07e0914..6a5630e 100644
--- a/tests/media/src/android/mediav2/cts/EncoderProfileLevelTest.java
+++ b/tests/media/src/android/mediav2/cts/EncoderProfileLevelTest.java
@@ -797,6 +797,15 @@
                         Log.w(LOG_TAG, "Skip validation after muxing for mime = " + mMime);
                         continue;
                     }
+                    // TODO (b/184889671) aac for profile AACObjectHE fails validation
+                    // TODO (b/184890155) aac for profile AACObjectLD, AACObjectELD fails validation
+                    if (mMime.equals(MediaFormat.MIMETYPE_AUDIO_AAC) &&
+                                profile != AACObjectLC) {
+                        Log.w(LOG_TAG, "Skip validation after muxing for mime = " + mMime +
+                                " profile " + profile);
+                        continue;
+                    }
+
                     for (int muxerFormat = MediaMuxer.OutputFormat.MUXER_OUTPUT_FIRST;
                          muxerFormat <= MediaMuxer.OutputFormat.MUXER_OUTPUT_LAST; muxerFormat++) {
                         if (!MuxerTest.isCodecContainerPairValid(mMime, muxerFormat)) continue;
diff --git a/tests/tests/content/app/Android.bp b/tests/netlegacy22.api/Android.bp
similarity index 65%
rename from tests/tests/content/app/Android.bp
rename to tests/netlegacy22.api/Android.bp
index 0a6a258..7c43905 100644
--- a/tests/tests/content/app/Android.bp
+++ b/tests/netlegacy22.api/Android.bp
@@ -1,4 +1,4 @@
-// Copyright (C) 2020 The Android Open Source Project
+// 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.
@@ -12,18 +12,30 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package {
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
+android_test {
+    name: "CtsNetTestCasesLegacyApi22",
 
-android_test_helper_app {
-    name: "CtsContentTestsHelperApp",
-    manifest: "AndroidManifest.xml",
+    defaults: [
+        "cts_defaults",
+        "framework-connectivity-test-defaults",
+    ],
+
     srcs: ["src/**/*.java"],
+
+    platform_apis: true,
+
+    static_libs: [
+        "ctstestrunner-axt",
+        "compatibility-device-util-axt",
+
+    ],
+
+    libs: ["android.test.base"],
+
     // Tag this module as a cts test artifact
     test_suites: [
         "cts",
         "general-tests",
     ],
-    sdk_version: "test_current",
+
 }
diff --git a/tests/netlegacy22.api/Android.mk b/tests/netlegacy22.api/Android.mk
deleted file mode 100644
index 53c910d..0000000
--- a/tests/netlegacy22.api/Android.mk
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2015 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-# don't include this package in any target
-LOCAL_MODULE_TAGS := tests
-# and when built explicitly put it in the data partition
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := CtsNetTestCasesLegacyApi22
-
-LOCAL_SDK_VERSION := 22
-
-LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner-axt compatibility-device-util-axt
-
-# Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts general-tests
-
-include $(BUILD_CTS_PACKAGE)
diff --git a/tests/netlegacy22.api/AndroidManifest.xml b/tests/netlegacy22.api/AndroidManifest.xml
index a9411cc..e062e14 100644
--- a/tests/netlegacy22.api/AndroidManifest.xml
+++ b/tests/netlegacy22.api/AndroidManifest.xml
@@ -18,6 +18,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="android.netlegacy22.api.cts">
 
+    <uses-sdk android:targetSdkVersion="22" />
+
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
diff --git a/tests/netlegacy22.api/OWNERS b/tests/netlegacy22.api/OWNERS
index 3fcbaf3..9b1555e 100644
--- a/tests/netlegacy22.api/OWNERS
+++ b/tests/netlegacy22.api/OWNERS
@@ -1,2 +1,3 @@
 # Bug component: 31808
-include ../tests/net/OWNERS
+set noparent
+include platform/packages/modules/Connectivity:/tests/cts/OWNERS
diff --git a/tests/netlegacy22.api/TEST_MAPPING b/tests/netlegacy22.api/TEST_MAPPING
new file mode 100644
index 0000000..38a8470
--- /dev/null
+++ b/tests/netlegacy22.api/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "postsubmit": [
+    {
+      "name": "CtsNetTestCasesLegacyApi22"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/netlegacy22.api/src/android/net/cts/legacy/api22/ConnectivityManagerLegacyTest.java b/tests/netlegacy22.api/src/android/net/cts/legacy/api22/ConnectivityManagerLegacyTest.java
index 4a8a2ad..b7880c7 100644
--- a/tests/netlegacy22.api/src/android/net/cts/legacy/api22/ConnectivityManagerLegacyTest.java
+++ b/tests/netlegacy22.api/src/android/net/cts/legacy/api22/ConnectivityManagerLegacyTest.java
@@ -50,6 +50,7 @@
     private static final String HOST_ADDRESS1 = "192.0.2.1";
     private static final String HOST_ADDRESS2 = "192.0.2.2";
     private static final String HOST_ADDRESS3 = "192.0.2.3";
+    private static final String HOST_ADDRESS4 = "192.0.2.4";
 
     // These are correct as of API level 22, which is what we target here.
     private static final int APN_REQUEST_FAILED = 3;
@@ -163,8 +164,13 @@
             assertTrue("Couldn't requestRouteToHost using HIPRI.",
                     mCm.requestRouteToHost(TYPE_MOBILE_HIPRI, ipv4AddrToInt(HOST_ADDRESS1)));
 
+            assertTrue("Couldn't requestRouteToHostAddress using HIPRI.",
+                    mCm.requestRouteToHostAddress(TYPE_MOBILE_HIPRI,
+                            InetAddress.getByName(HOST_ADDRESS3)));
+
             checkSourceAddress(HOST_ADDRESS1, TYPE_MOBILE);
             checkSourceAddress(HOST_ADDRESS2, TYPE_WIFI);
+            checkSourceAddress(HOST_ADDRESS3, TYPE_MOBILE);
 
             // TODO check dns selection
 
@@ -282,7 +288,7 @@
 
             try {
                 assertTrue("Network type " + type,
-                        mCm.requestRouteToHost(type, ipv4AddrToInt(HOST_ADDRESS3)) == expectToWork);
+                        mCm.requestRouteToHost(type, ipv4AddrToInt(HOST_ADDRESS4)) == expectToWork);
             } catch (Exception e) {
                 Log.d(TAG, "got exception in requestRouteToHost for type " + type);
                 assertFalse("Exception received for type " + type, expectToWork);
@@ -291,6 +297,6 @@
             //TODO verify route table
         }
 
-        assertFalse(mCm.requestRouteToHost(-1, ipv4AddrToInt(HOST_ADDRESS1)));
+        assertFalse(mCm.requestRouteToHost(-1, ipv4AddrToInt(HOST_ADDRESS4)));
     }
 }
diff --git a/tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java b/tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java
index 49876de..4342810 100644
--- a/tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java
+++ b/tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java
@@ -32,6 +32,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.res.AssetFileDescriptor;
+import android.database.Cursor;
 import android.net.Uri;
 import android.os.Environment;
 import android.os.FileUtils;
@@ -49,6 +50,7 @@
 import android.support.test.uiautomator.UiObject;
 import android.support.test.uiautomator.UiObject2;
 import android.support.test.uiautomator.UiObjectNotFoundException;
+import android.support.test.uiautomator.UiScrollable;
 import android.support.test.uiautomator.UiSelector;
 import android.support.test.uiautomator.Until;
 import android.system.Os;
@@ -82,6 +84,8 @@
 
     private static final int REQUEST_CODE = 42;
     private static final long TIMEOUT_MILLIS = 30 * DateUtils.SECOND_IN_MILLIS;
+    private static final String MEDIA_DOCUMENTS_PROVIDER_AUTHORITY =
+            "com.android.providers.media.documents";
 
     private Instrumentation mInstrumentation;
     private Context mContext;
@@ -91,6 +95,7 @@
     private File mFile;
     private Uri mMediaStoreUri;
     private String mTargetPackageName;
+    private String mDocumentsUiPackageId;
 
     @Parameter(0)
     public String mVolumeName;
@@ -105,6 +110,12 @@
         mInstrumentation = InstrumentationRegistry.getInstrumentation();
         mContext = InstrumentationRegistry.getTargetContext();
         mDevice = UiDevice.getInstance(mInstrumentation);
+        final PackageManager pm = mContext.getPackageManager();
+        final Intent intent2 = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+        intent2.addCategory(Intent.CATEGORY_OPENABLE);
+        intent2.setType("*/*");
+        final ResolveInfo ri = pm.resolveActivity(intent2, 0);
+        mDocumentsUiPackageId = ri.activityInfo.packageName;
 
         final Intent intent = new Intent(mContext, GetResultActivity.class);
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -174,7 +185,7 @@
     }
 
     @Test
-    public void testGetDocumentUri_Symmetry() throws Exception {
+    public void testGetDocumentUri_Symmetry_ExternalStorageProvider() throws Exception {
         if (!supportsHardware()) return;
 
         prepareFile();
@@ -192,6 +203,99 @@
         assertNotNull(mediaUri);
 
         assertEquals(mMediaStoreUri, mediaUri);
+        assertAccessToMediaUri(mediaUri, mFile);
+    }
+
+    @Test
+    public void testGetMediaUriAccess_MediaDocumentsProvider() throws Exception {
+        if (!supportsHardware()) return;
+
+        prepareFile();
+        clearDocumentsUi();
+        final Intent intent = new Intent();
+        intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
+        intent.addCategory(Intent.CATEGORY_OPENABLE);
+        intent.setType("*/*");
+        mActivity.startActivityForResult(intent, REQUEST_CODE);
+        mDevice.waitForIdle();
+
+        findDocument(mFile.getName()).click();
+        final Result result = mActivity.getResult();
+        final Uri uri = result.data.getData();
+        assertEquals(MEDIA_DOCUMENTS_PROVIDER_AUTHORITY, uri.getAuthority());
+        final Uri mediaUri = MediaStore.getMediaUri(mActivity, uri);
+
+        assertAccessToMediaUri(mediaUri, mFile);
+    }
+
+    private void assertAccessToMediaUri(Uri mediaUri, File file) {
+        final String[] projection = {MediaStore.MediaColumns.DISPLAY_NAME};
+        try (Cursor c = mContext.getContentResolver().query(
+                mediaUri, projection, null, null, null)) {
+            assertTrue(c.moveToFirst());
+            assertEquals(file.getName(), c.getString(0));
+        }
+    }
+
+    /**
+     * Clears the DocumentsUI package data.
+     */
+    protected void clearDocumentsUi() throws Exception {
+        executeShellCommand("pm clear " + getDocumentsUiPackageId());
+    }
+
+    private UiObject findDocument(String label) throws UiObjectNotFoundException {
+        final UiSelector docList = new UiSelector().resourceId(getDocumentsUiPackageId()
+                + ":id/dir_list");
+
+        // Wait for the first list item to appear
+        assertTrue("First list item",
+                new UiObject(docList.childSelector(new UiSelector()))
+                        .waitForExists(TIMEOUT_MILLIS));
+
+        try {
+            //Enforce to set the list mode
+            //Because UiScrollable can't reach the real bottom (when WEB_LINKABLE_FILE item)
+            // in grid mode when screen landscape mode
+            new UiObject(new UiSelector().resourceId(getDocumentsUiPackageId()
+                    + ":id/sub_menu_list")).click();
+            mDevice.waitForIdle();
+        }catch (UiObjectNotFoundException e){
+            //do nothing, already be in list mode.
+        }
+
+        // Repeat swipe gesture to find our item
+        // (UiScrollable#scrollIntoView does not seem to work well with SwipeRefreshLayout)
+        UiObject targetObject = new UiObject(docList.childSelector(new UiSelector().text(label)));
+        UiObject saveButton = findSaveButton();
+        int stepLimit = 10;
+        while (stepLimit-- > 0) {
+            if (targetObject.exists()) {
+                boolean targetObjectFullyVisible = !saveButton.exists()
+                        || targetObject.getVisibleBounds().bottom
+                        <= saveButton.getVisibleBounds().top;
+                if (targetObjectFullyVisible) {
+                    break;
+                }
+            }
+
+            mDevice.swipe(/* startX= */ mDevice.getDisplayWidth() / 2,
+                    /* startY= */ mDevice.getDisplayHeight() / 2,
+                    /* endX= */ mDevice.getDisplayWidth() / 2,
+                    /* endY= */ 0,
+                    /* steps= */ 40);
+        }
+        return targetObject;
+    }
+
+    private UiObject findSaveButton() throws UiObjectNotFoundException {
+        return new UiObject(new UiSelector().resourceId(
+                getDocumentsUiPackageId() + ":id/container_save")
+                .childSelector(new UiSelector().resourceId("android:id/button1")));
+    }
+
+    private String getDocumentsUiPackageId() {
+        return mDocumentsUiPackageId;
     }
 
     private boolean supportsHardware() {
diff --git a/tests/rotationresolverservice/src/android/rotationresolverservice/cts/CtsRotationResolverServiceDeviceTest.java b/tests/rotationresolverservice/src/android/rotationresolverservice/cts/CtsRotationResolverServiceDeviceTest.java
index 06cd978..20f778e 100644
--- a/tests/rotationresolverservice/src/android/rotationresolverservice/cts/CtsRotationResolverServiceDeviceTest.java
+++ b/tests/rotationresolverservice/src/android/rotationresolverservice/cts/CtsRotationResolverServiceDeviceTest.java
@@ -134,7 +134,7 @@
                 ROTATION_0, ROTATION_90, FAKE_SHOULD_USE_CAMERA, FAKE_TIME_OUT);
 
         /* Verify the values are correctly set */
-        assertThat(request.getPackageName()).isEqualTo(FAKE_PACKAGE_NAME);
+        assertThat(request.getForegroundPackageName()).isEqualTo(FAKE_PACKAGE_NAME);
         assertThat(request.getCurrentRotation()).isEqualTo(ROTATION_0);
         assertThat(request.getProposedRotation()).isEqualTo(ROTATION_90);
         assertThat(request.shouldUseCamera()).isEqualTo(FAKE_SHOULD_USE_CAMERA);
@@ -175,4 +175,4 @@
         runShellCommand("cmd resolver clear-testing-package");
     }
 
-}
\ No newline at end of file
+}
diff --git a/tests/signature/api-check/Android.bp b/tests/signature/api-check/Android.bp
index 3f686c2..5e7ff3b 100644
--- a/tests/signature/api-check/Android.bp
+++ b/tests/signature/api-check/Android.bp
@@ -70,12 +70,6 @@
     static_libs: ["cts-api-signature-test"],
 }
 
-// Access the hiddenapi-flags.csv file produced by the build.
-hiddenapi_flags {
-    name: "cts-hiddenapi-flags-csv",
-    filename: "hiddenapi-flags.csv",
-}
-
 filegroup {
     name: "cts-api-hiddenapi-filter-csv",
     srcs: [
@@ -88,7 +82,7 @@
     name: "hiddenapi-blocklist-check-defaults",
     defaults: ["signature-api-check-defaults"],
     java_resources: [
-        ":cts-hiddenapi-flags-csv",
+        ":platform-bootclasspath{hiddenapi-flags.csv}",
         ":cts-api-hiddenapi-filter-csv"
     ],
     jni_libs: [
diff --git a/tests/signature/api-check/shared-libs-api/src/android/signature/cts/api/SignatureMultiLibsTest.java b/tests/signature/api-check/shared-libs-api/src/android/signature/cts/api/SignatureMultiLibsTest.java
index f74a027..4c0a31a 100644
--- a/tests/signature/api-check/shared-libs-api/src/android/signature/cts/api/SignatureMultiLibsTest.java
+++ b/tests/signature/api-check/shared-libs-api/src/android/signature/cts/api/SignatureMultiLibsTest.java
@@ -42,7 +42,7 @@
         runWithTestResultObserver(mResultObserver -> {
 
             ApiComplianceChecker complianceChecker =
-                    new ApiComplianceChecker(mResultObserver, classProvider);
+                    new ApiComplianceChecker(mResultObserver, mClassProvider);
 
             ApiDocumentParser apiDocumentParser = new ApiDocumentParser(TAG);
 
diff --git a/tests/signature/api-check/src/java/android/signature/cts/api/AbstractApiTest.java b/tests/signature/api-check/src/java/android/signature/cts/api/AbstractApiTest.java
index 1e96910..9707dd8 100644
--- a/tests/signature/api-check/src/java/android/signature/cts/api/AbstractApiTest.java
+++ b/tests/signature/api-check/src/java/android/signature/cts/api/AbstractApiTest.java
@@ -26,17 +26,13 @@
 import android.signature.cts.VirtualPath.LocalFilePath;
 import android.signature.cts.VirtualPath.ResourcePath;
 import android.util.Log;
-import java.io.File;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintWriter;
 import java.io.StringWriter;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.StandardOpenOption;
-import java.util.EnumSet;
 import java.util.stream.Stream;
 import java.util.zip.ZipFile;
 import repackaged.android.test.InstrumentationTestCase;
@@ -50,7 +46,7 @@
 
     private TestResultObserver mResultObserver;
 
-    ClassProvider classProvider;
+    ClassProvider mClassProvider;
 
     protected String getGlobalExemptions() {
         return Settings.Global.getString(
@@ -90,7 +86,7 @@
         // out known inaccessible classes.
         // Note that com.android.internal.R.* inner classes are also excluded as they are
         // not part of API though exist in the runtime.
-        classProvider = new ExcludingClassProvider(
+        mClassProvider = new ExcludingClassProvider(
                 new BootClassPathClassesProvider(),
                 name -> name != null && name.startsWith("com.android.internal.R."));
 
diff --git a/tests/signature/api-check/src/java/android/signature/cts/api/BaseKillswitchTest.java b/tests/signature/api-check/src/java/android/signature/cts/api/BaseKillswitchTest.java
index 2337ced..10907d0 100644
--- a/tests/signature/api-check/src/java/android/signature/cts/api/BaseKillswitchTest.java
+++ b/tests/signature/api-check/src/java/android/signature/cts/api/BaseKillswitchTest.java
@@ -18,8 +18,6 @@
 
 import java.util.function.Predicate;
 
-import android.os.Bundle;
-import android.provider.Settings;
 import android.signature.cts.DexField;
 import android.signature.cts.DexMember;
 import android.signature.cts.DexMemberChecker;
@@ -127,8 +125,8 @@
                 }
 
             };
-            classProvider.getAllClasses().forEach(klass -> {
-                classProvider.getAllMembers(klass)
+            mClassProvider.getAllClasses().forEach(klass -> {
+                mClassProvider.getAllMembers(klass)
                         .filter(memberFilter)
                         .forEach(member -> {
                             DexMemberChecker.checkSingleMember(member, reflection, jni, observer);
diff --git a/tests/signature/api-check/src/java/android/signature/cts/api/SignatureTest.java b/tests/signature/api-check/src/java/android/signature/cts/api/SignatureTest.java
index 440430d..2ef70ca 100644
--- a/tests/signature/api-check/src/java/android/signature/cts/api/SignatureTest.java
+++ b/tests/signature/api-check/src/java/android/signature/cts/api/SignatureTest.java
@@ -58,7 +58,7 @@
         runWithTestResultObserver(mResultObserver -> {
             Set<JDiffClassDescription> unexpectedClasses = loadUnexpectedClasses();
             for (JDiffClassDescription classDescription : unexpectedClasses) {
-                Class<?> unexpectedClass = findUnexpectedClass(classDescription, classProvider);
+                Class<?> unexpectedClass = findUnexpectedClass(classDescription, mClassProvider);
                 if (unexpectedClass != null) {
                     mResultObserver.notifyFailure(
                             FailureType.UNEXPECTED_CLASS,
@@ -68,7 +68,7 @@
             }
 
             ApiComplianceChecker complianceChecker =
-                    new ApiComplianceChecker(mResultObserver, classProvider);
+                    new ApiComplianceChecker(mResultObserver, mClassProvider);
 
             // Load classes from any API files that form the base which the expected APIs extend.
             loadBaseClasses(complianceChecker);
diff --git a/tests/signature/api-check/system-annotation/src/java/android/signature/cts/api/AnnotationTest.java b/tests/signature/api-check/system-annotation/src/java/android/signature/cts/api/AnnotationTest.java
index efefdd5..7adc3e3 100644
--- a/tests/signature/api-check/system-annotation/src/java/android/signature/cts/api/AnnotationTest.java
+++ b/tests/signature/api-check/system-annotation/src/java/android/signature/cts/api/AnnotationTest.java
@@ -36,13 +36,13 @@
 
     private static final String TAG = AnnotationTest.class.getSimpleName();
 
-    private String[] expectedApiFiles;
-    private String annotationForExactMatch;
+    private String[] mExpectedApiFiles;
+    private String mAnnotationForExactMatch;
 
     @Override
     protected void initializeFromArgs(Bundle instrumentationArgs) throws Exception {
-        expectedApiFiles = getCommaSeparatedList(instrumentationArgs, "expected-api-files");
-        annotationForExactMatch = instrumentationArgs.getString("annotation-for-exact-match");
+        mExpectedApiFiles = getCommaSeparatedList(instrumentationArgs, "expected-api-files");
+        mAnnotationForExactMatch = instrumentationArgs.getString("annotation-for-exact-match");
     }
 
     /**
@@ -50,44 +50,41 @@
      * android.annotation.SystemApi) match the API definition.
      */
     public void testAnnotation() {
-        if ("true".equals(PropertyUtil.getProperty("ro.treble.enabled")) &&
-                PropertyUtil.getFirstApiLevel() > Build.VERSION_CODES.O_MR1) {
-            AnnotationChecker.ResultFilter filter = new AnnotationChecker.ResultFilter() {
-                @Override
-                public boolean skip(Class<?> clazz) {
-                    return false;
-                }
+       AnnotationChecker.ResultFilter filter = new AnnotationChecker.ResultFilter() {
+            @Override
+            public boolean skip(Class<?> clazz) {
+                return false;
+            }
 
-                @Override
-                public boolean skip(Constructor<?> ctor) {
-                    return false;
-                }
+            @Override
+            public boolean skip(Constructor<?> ctor) {
+                return false;
+            }
 
-                @Override
-                public boolean skip(Method m) {
-                    return false;
-                }
+            @Override
+            public boolean skip(Method m) {
+                return false;
+            }
 
-                @Override
-                public boolean skip(Field f) {
-                    // The R.styleable class is not part of the API because it's annotated with
-                    // @doconly. But the class actually exists in the runtime classpath.  To avoid
-                    // the mismatch, skip the check for fields from the class.
-                    return "android.R$styleable".equals(f.getDeclaringClass().getName());
-                }
-            };
-            runWithTestResultObserver(resultObserver -> {
-                AnnotationChecker complianceChecker = new AnnotationChecker(resultObserver,
-                        classProvider, annotationForExactMatch, filter);
+            @Override
+            public boolean skip(Field f) {
+                // The R.styleable class is not part of the API because it's annotated with
+                // @doconly. But the class actually exists in the runtime classpath.  To avoid
+                // the mismatch, skip the check for fields from the class.
+                return "android.R$styleable".equals(f.getDeclaringClass().getName());
+            }
+        };
+        runWithTestResultObserver(resultObserver -> {
+            AnnotationChecker complianceChecker = new AnnotationChecker(resultObserver,
+                    mClassProvider, mAnnotationForExactMatch, filter);
 
-                ApiDocumentParser apiDocumentParser = new ApiDocumentParser(TAG);
+            ApiDocumentParser apiDocumentParser = new ApiDocumentParser(TAG);
 
-                parseApiResourcesAsStream(apiDocumentParser, expectedApiFiles)
-                        .forEach(complianceChecker::checkSignatureCompliance);
+            parseApiResourcesAsStream(apiDocumentParser, mExpectedApiFiles)
+                    .forEach(complianceChecker::checkSignatureCompliance);
 
-                // After done parsing all expected API files, perform any deferred checks.
-                complianceChecker.checkDeferred();
-            });
-        }
+            // After done parsing all expected API files, perform any deferred checks.
+            complianceChecker.checkDeferred();
+        });
     }
 }
diff --git a/tests/tests/accounts/common/lint-baseline.xml b/tests/tests/accounts/common/lint-baseline.xml
new file mode 100644
index 0000000..6a95c6c
--- /dev/null
+++ b/tests/tests/accounts/common/lint-baseline.xml
@@ -0,0 +1,697 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `android.accounts.AccountManager#get`"
+        errorLine1="        AccountManager am = AccountManager.get(context);"
+        errorLine2="                                           ~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/AuthenticatorContentProvider.java"
+            line="81"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `android.accounts.AccountManager#getAuthenticatorTypes`"
+        errorLine1="        AuthenticatorDescription[] authenticators = am.getAuthenticatorTypes();"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/AuthenticatorContentProvider.java"
+            line="82"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.AuthenticatorDescription#packageName`"
+        errorLine1="            if (a.packageName.equals(context.getPackageName())) {"
+        errorLine2="                ~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/AuthenticatorContentProvider.java"
+            line="88"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `new android.accounts.Account`"
+        errorLine1="                    Account account = new Account(name, a.type);"
+        errorLine2="                                      ~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/AuthenticatorContentProvider.java"
+            line="90"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.AuthenticatorDescription#type`"
+        errorLine1="                    Account account = new Account(name, a.type);"
+        errorLine2="                                                        ~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/AuthenticatorContentProvider.java"
+            line="90"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `android.accounts.AccountManager#addAccountExplicitly`"
+        errorLine1="                    am.addAccountExplicitly(account, Fixtures.PREFIX_PASSWORD + name, null);"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/AuthenticatorContentProvider.java"
+            line="91"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `android.accounts.AccountManager#get`"
+        errorLine1="        AccountManager am = AccountManager.get(context);"
+        errorLine2="                                           ~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/AuthenticatorContentProvider.java"
+            line="99"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `android.accounts.AccountManager#getAuthenticatorTypes`"
+        errorLine1="        AuthenticatorDescription[] authenticators = am.getAuthenticatorTypes();"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/AuthenticatorContentProvider.java"
+            line="100"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.AuthenticatorDescription#packageName`"
+        errorLine1="            if (a.packageName.equals(context.getPackageName())) {"
+        errorLine2="                ~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/AuthenticatorContentProvider.java"
+            line="106"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `android.accounts.AccountManager#getAccountsByType`"
+        errorLine1="                Account[] accountsToRemove = am.getAccountsByType(a.type);"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/AuthenticatorContentProvider.java"
+            line="107"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.AuthenticatorDescription#type`"
+        errorLine1="                Account[] accountsToRemove = am.getAccountsByType(a.type);"
+        errorLine2="                                                                  ~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/AuthenticatorContentProvider.java"
+            line="107"
+            column="67"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 22 (current min is 1): `android.accounts.AccountManager#removeAccountExplicitly`"
+        errorLine1="                    am.removeAccountExplicitly(account);"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/AuthenticatorContentProvider.java"
+            line="109"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `Account` to `Parcelable` requires API level 5 (current min is 1)"
+        errorLine1="        out.writeParcelable(account, flags);"
+        errorLine2="                            ~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/tx/ConfirmCredentialsTx.java"
+            line="50"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `new android.accounts.Account`"
+        errorLine1="    public static final Account ACCOUNT_UNAFFILIATED_FIXTURE_SUCCESS = new Account("
+        errorLine2="                                                                       ~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/Fixtures.java"
+            line="53"
+            column="72"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `new android.accounts.Account`"
+        errorLine1="    public static final Account ACCOUNT_DEFAULT = new Account("
+        errorLine2="                                                  ~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/Fixtures.java"
+            line="57"
+            column="51"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `Account` to `Parcelable` requires API level 5 (current min is 1)"
+        errorLine1="        out.writeParcelable(account, flags);"
+        errorLine2="                            ~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/tx/GetAccountRemovalAllowedTx.java"
+            line="46"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `Account` to `Parcelable` requires API level 5 (current min is 1)"
+        errorLine1="        out.writeParcelable(account, flags);"
+        errorLine2="                            ~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/tx/GetAuthTokenTx.java"
+            line="54"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `Account` to `Parcelable` requires API level 5 (current min is 1)"
+        errorLine1="        out.writeParcelable(account, flags);"
+        errorLine2="                            ~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/tx/HasFeaturesTx.java"
+            line="57"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `Account` to `Parcelable` requires API level 5 (current min is 1)"
+        errorLine1="        out.writeParcelable(account, flags);"
+        errorLine2="                            ~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/tx/StartUpdateCredentialsSessionTx.java"
+            line="50"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 5 (current min is 1): `android.accounts.AbstractAccountAuthenticator`"
+        errorLine1="public class TestAccountAuthenticator extends AbstractAccountAuthenticator {"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="39"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `new android.accounts.AbstractAccountAuthenticator`"
+        errorLine1="        super(context);"
+        errorLine2="        ~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="47"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `AccountAuthenticatorResponse` to `Parcelable` requires API level 5 (current min is 1)"
+        errorLine1="            intent.putExtra(Fixtures.KEY_CALLBACK, response);"
+        errorLine2="                                                   ~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="89"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `android.accounts.AccountAuthenticatorResponse#onResult`"
+        errorLine1="                response.onResult(result);"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="101"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="        if (!mAccountType.equals(account.type)) {"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="111"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="        if (account.name.startsWith(Fixtures.PREFIX_NAME_SUCCESS)) {"
+        errorLine2="            ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="120"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="            result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);"
+        errorLine2="                                                              ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="123"
+            column="63"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="            result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);"
+        errorLine2="                                                              ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="124"
+            column="63"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="        } else if (account.name.startsWith(Fixtures.PREFIX_NAME_INTERVENE)) {"
+        errorLine2="                   ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="125"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_NAME, account.name);"
+        errorLine2="                                                                                 ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="129"
+            column="82"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_TYPE, account.type);"
+        errorLine2="                                                                                 ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="130"
+            column="82"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `AccountAuthenticatorResponse` to `Parcelable` requires API level 5 (current min is 1)"
+        errorLine1="            intent.putExtra(Fixtures.KEY_CALLBACK, response);"
+        errorLine2="                                                   ~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="135"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `android.accounts.AccountAuthenticatorResponse#onResult`"
+        errorLine1="                response.onResult(result);"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="147"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="        if (!mAccountType.equals(account.type)) {"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="158"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="        if (account.name.startsWith(Fixtures.PREFIX_NAME_SUCCESS)) {"
+        errorLine2="            ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="167"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="            result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);"
+        errorLine2="                                                              ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="174"
+            column="63"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="            result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);"
+        errorLine2="                                                              ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="175"
+            column="63"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="        } else if (account.name.startsWith(Fixtures.PREFIX_NAME_INTERVENE)) {"
+        errorLine2="                   ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="176"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_NAME, account.name);"
+        errorLine2="                                                                                 ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="184"
+            column="82"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_TYPE, account.type);"
+        errorLine2="                                                                                 ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="185"
+            column="82"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `AccountAuthenticatorResponse` to `Parcelable` requires API level 5 (current min is 1)"
+        errorLine1="            intent.putExtra(Fixtures.KEY_CALLBACK, response);"
+        errorLine2="                                                   ~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="190"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `android.accounts.AccountAuthenticatorResponse#onResult`"
+        errorLine1="                response.onResult(result);"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="203"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="        if (!mAccountType.equals(account.type)) {"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="222"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="        if (account.name.startsWith(Fixtures.PREFIX_NAME_SUCCESS)) {"
+        errorLine2="            ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="231"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="            result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);"
+        errorLine2="                                                              ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="233"
+            column="63"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="            result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);"
+        errorLine2="                                                              ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="234"
+            column="63"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="        } else if (account.name.startsWith(Fixtures.PREFIX_NAME_INTERVENE)) {"
+        errorLine2="                   ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="235"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_NAME, account.name);"
+        errorLine2="                                                                                 ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="238"
+            column="82"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_TYPE, account.type);"
+        errorLine2="                                                                                 ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="239"
+            column="82"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `AccountAuthenticatorResponse` to `Parcelable` requires API level 5 (current min is 1)"
+        errorLine1="            intent.putExtra(Fixtures.KEY_CALLBACK, response);"
+        errorLine2="                                                   ~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="244"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `android.accounts.AccountAuthenticatorResponse#onResult`"
+        errorLine1="                response.onResult(result);"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="256"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="        if (!mAccountType.equals(account.type)) {"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="266"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="        if (account.name.startsWith(Fixtures.PREFIX_NAME_SUCCESS)) {"
+        errorLine2="            ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="274"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="        } else if (account.name.startsWith(Fixtures.PREFIX_NAME_INTERVENE)) {"
+        errorLine2="                   ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="277"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `AccountAuthenticatorResponse` to `Parcelable` requires API level 5 (current min is 1)"
+        errorLine1="            intent.putExtra(Fixtures.KEY_CALLBACK, response);"
+        errorLine2="                                                   ~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="284"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `android.accounts.AccountAuthenticatorResponse#onResult`"
+        errorLine1="                response.onResult(result);"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="295"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="        if (!mAccountType.equals(account.type)) {"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAccountAuthenticator.java"
+            line="365"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `android.accounts.AccountAuthenticatorResponse#onResult`"
+        errorLine1="            response.onResult(result.getExtras());"
+        errorLine2="                     ~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestAuthenticatorActivity.java"
+            line="33"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 5 (current min is 1): `android.accounts.AbstractAccountAuthenticator`"
+        errorLine1="public class TestDefaultAuthenticator extends AbstractAccountAuthenticator {"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestDefaultAuthenticator.java"
+            line="34"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 5 (current min is 1): `new android.accounts.AbstractAccountAuthenticator`"
+        errorLine1="        super(context);"
+        errorLine2="        ~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestDefaultAuthenticator.java"
+            line="39"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="        if (!mAccountType.equals(account.type)) {"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestDefaultAuthenticator.java"
+            line="108"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#name`"
+        errorLine1="        result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);"
+        errorLine2="                                                          ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestDefaultAuthenticator.java"
+            line="112"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 5 (current min is 1): `android.accounts.Account#type`"
+        errorLine1="        result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);"
+        errorLine2="                                                          ~~~~~~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/TestDefaultAuthenticator.java"
+            line="113"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `Account` to `Parcelable` requires API level 5 (current min is 1)"
+        errorLine1="        out.writeParcelable(account, flags);"
+        errorLine2="                            ~~~~~~~">
+        <location
+            file="cts/tests/tests/accounts/common/src/android/accounts/cts/common/tx/UpdateCredentialsTx.java"
+            line="54"
+            column="29"/>
+    </issue>
+
+</issues>
diff --git a/tests/tests/app.usage/Android.bp b/tests/tests/app.usage/Android.bp
index 48c225e..29ba591 100644
--- a/tests/tests/app.usage/Android.bp
+++ b/tests/tests/app.usage/Android.bp
@@ -37,6 +37,5 @@
     test_suites: [
         "cts",
         "general-tests",
-        "mts"
     ],
 }
diff --git a/tests/tests/app.usage/AndroidTest.xml b/tests/tests/app.usage/AndroidTest.xml
index 26b799d..3dbfb93 100644
--- a/tests/tests/app.usage/AndroidTest.xml
+++ b/tests/tests/app.usage/AndroidTest.xml
@@ -32,8 +32,4 @@
         <option name="runtime-hint" value="1m47s" />
         <option name="hidden-api-checks" value="false" />
     </test>
-
-    <object type="module_controller" class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
-        <option name="mainline-module-package-name" value="com.google.android.extservices" />
-    </object>
 </configuration>
diff --git a/tests/tests/app.usage/TestApp1/Android.bp b/tests/tests/app.usage/TestApp1/Android.bp
index ad9f9c8..cba5df5 100644
--- a/tests/tests/app.usage/TestApp1/Android.bp
+++ b/tests/tests/app.usage/TestApp1/Android.bp
@@ -37,7 +37,6 @@
     test_suites: [
         "cts",
         "general-tests",
-        "mts"
     ],
     sdk_version: "test_current"
 }
diff --git a/tests/tests/app.usage/src/android/app/usage/cts/UsageStatsTest.java b/tests/tests/app.usage/src/android/app/usage/cts/UsageStatsTest.java
index cd44651..c1a1eb7 100644
--- a/tests/tests/app.usage/src/android/app/usage/cts/UsageStatsTest.java
+++ b/tests/tests/app.usage/src/android/app/usage/cts/UsageStatsTest.java
@@ -238,7 +238,7 @@
 
     @AppModeFull(reason = "No usage events access in instant apps")
     @Test
-    public void testLastTimeComponentUsed_launchActivity() throws Exception {
+    public void testLastAnyTimeComponentUsed_launchActivity() throws Exception {
         mUiDevice.wakeUp();
         dismissKeyguard(); // also want to start out with the keyguard dismissed.
 
@@ -250,14 +250,14 @@
                 startTime, endTime);
         final UsageStats stats = map.get(mTargetPackage);
         assertNotNull(stats);
-        final long lastTimeComponentUsed = stats.getLastTimeComponentUsed();
+        final long lastTimeComponentUsed = stats.getLastTimeAnyComponentUsed();
         assertLessThan(startTime, lastTimeComponentUsed);
         assertLessThan(lastTimeComponentUsed, endTime);
     }
 
     @AppModeFull(reason = "No usage events access in instant apps")
     @Test
-    public void testLastTimeComponentUsedGlobal_launchActivity() throws Exception {
+    public void testLastTimeAnyComponentUsedGlobal_launchActivity() throws Exception {
         mUiDevice.wakeUp();
         dismissKeyguard();
 
diff --git a/tests/tests/appenumeration/AndroidTest.xml b/tests/tests/appenumeration/AndroidTest.xml
index 51df9a1..8f84a28 100644
--- a/tests/tests/appenumeration/AndroidTest.xml
+++ b/tests/tests/appenumeration/AndroidTest.xml
@@ -64,6 +64,8 @@
         <option name="test-file-name" value="CtsAppEnumerationWildcardBrowserActivitySource.apk" />
         <option name="test-file-name" value="CtsAppEnumerationSyncadapterTarget.apk" />
         <option name="test-file-name" value="CtsAppEnumerationSyncadapterSharedUidTarget.apk" />
+        <option name="test-file-name" value="CtsAppEnumerationAppWidgetProviderTarget.apk" />
+        <option name="test-file-name" value="CtsAppEnumerationAppWidgetProviderSharedUidTarget.apk" />
     </target_preparer>
 
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
diff --git a/tests/tests/appenumeration/app/source/AndroidManifest-queriesPackage.xml b/tests/tests/appenumeration/app/source/AndroidManifest-queriesPackage.xml
index ce27bed..44f7988 100644
--- a/tests/tests/appenumeration/app/source/AndroidManifest-queriesPackage.xml
+++ b/tests/tests/appenumeration/app/source/AndroidManifest-queriesPackage.xml
@@ -22,6 +22,7 @@
         <package android:name="android.appenumeration.noapi" />
         <package android:name="android.appenumeration.noapi.shareduid" />
         <package android:name="android.appenumeration.syncadapter" />
+        <package android:name="android.appenumeration.appwidgetprovider" />
     </queries>
 
     <application>
diff --git a/tests/tests/appenumeration/app/source/src/android/appenumeration/cts/query/TestActivity.java b/tests/tests/appenumeration/app/source/src/android/appenumeration/cts/query/TestActivity.java
index c304806..f9d70cc 100644
--- a/tests/tests/appenumeration/app/source/src/android/appenumeration/cts/query/TestActivity.java
+++ b/tests/tests/appenumeration/app/source/src/android/appenumeration/cts/query/TestActivity.java
@@ -37,6 +37,7 @@
 import static android.appenumeration.cts.Constants.EXTRA_FLAGS;
 import static android.appenumeration.cts.Constants.EXTRA_REMOTE_CALLBACK;
 import static android.appenumeration.cts.Constants.EXTRA_REMOTE_READY_CALLBACK;
+import static android.content.Intent.EXTRA_COMPONENT_NAME;
 import static android.content.Intent.EXTRA_RETURN_RESULT;
 import static android.content.pm.PackageManager.CERT_INPUT_RAW_X509;
 import static android.os.Process.INVALID_UID;
@@ -45,6 +46,8 @@
 import android.app.PendingIntent;
 import android.appenumeration.cts.Constants;
 import android.appenumeration.cts.MissingBroadcastException;
+import android.appwidget.AppWidgetManager;
+import android.appwidget.AppWidgetProviderInfo;
 import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
@@ -55,6 +58,7 @@
 import android.content.IntentSender;
 import android.content.ServiceConnection;
 import android.content.SyncAdapterType;
+import android.content.pm.LauncherApps;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.database.Cursor;
@@ -65,6 +69,7 @@
 import android.os.IBinder;
 import android.os.Parcelable;
 import android.os.PatternMatcher;
+import android.os.Process;
 import android.os.RemoteCallback;
 import android.util.SparseArray;
 
@@ -189,11 +194,18 @@
                 bindService(remoteCallback, packageName);
             } else if (Constants.ACTION_GET_SYNCADAPTER_TYPES.equals(action)) {
                 sendSyncAdapterTypes(remoteCallback);
+            } else if (Constants.ACTION_GET_INSTALLED_APPWIDGET_PROVIDERS.equals(action)) {
+                sendInstalledAppWidgetProviders(remoteCallback);
             } else if (Constants.ACTION_AWAIT_PACKAGES_SUSPENDED.equals(action)) {
                 final String[] awaitPackages = intent.getBundleExtra(EXTRA_DATA)
                         .getStringArray(Intent.EXTRA_PACKAGES);
                 awaitSuspendedPackagesBroadcast(remoteCallback, Arrays.asList(awaitPackages),
                         Intent.ACTION_PACKAGES_SUSPENDED, TIMEOUT_MS);
+            } else if (Constants.ACTION_LAUNCHER_APPS_IS_ACTIVITY_ENABLED.equals(action)) {
+                final String componentName = intent.getBundleExtra(EXTRA_DATA)
+                        .getString(EXTRA_COMPONENT_NAME);
+                sendIsActivityEnabled(remoteCallback, ComponentName.unflattenFromString(
+                        componentName));
             } else {
                 sendError(remoteCallback, new Exception("unknown action " + action));
             }
@@ -411,6 +423,31 @@
         finish();
     }
 
+    private void sendIsActivityEnabled(RemoteCallback remoteCallback, ComponentName componentName) {
+        final LauncherApps launcherApps = getSystemService(LauncherApps.class);
+        final Bundle result = new Bundle();
+        try {
+            result.putBoolean(EXTRA_RETURN_RESULT, launcherApps.isActivityEnabled(componentName,
+                    Process.myUserHandle()));
+        } catch (IllegalArgumentException e) {
+        }
+        remoteCallback.sendResult(result);
+        finish();
+    }
+
+    private void sendInstalledAppWidgetProviders(RemoteCallback remoteCallback) {
+        final AppWidgetManager appWidgetManager = getSystemService(AppWidgetManager.class);
+        final List<AppWidgetProviderInfo> providers = appWidgetManager.getInstalledProviders();
+        final ArrayList<Parcelable> parcelables = new ArrayList<>();
+        for (AppWidgetProviderInfo info : providers) {
+            parcelables.add(info);
+        }
+        final Bundle result = new Bundle();
+        result.putParcelableArrayList(EXTRA_RETURN_RESULT, parcelables);
+        remoteCallback.sendResult(result);
+        finish();
+    }
+
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
diff --git a/tests/tests/appenumeration/app/target/Android.bp b/tests/tests/appenumeration/app/target/Android.bp
index fed0682..972f825 100644
--- a/tests/tests/appenumeration/app/target/Android.bp
+++ b/tests/tests/appenumeration/app/target/Android.bp
@@ -199,3 +199,31 @@
     ],
     sdk_version: "test_current",
 }
+
+android_test_helper_app {
+    name: "CtsAppEnumerationAppWidgetProviderTarget",
+    manifest: "AndroidManifest-appWidgetProvider.xml",
+    defaults: ["cts_support_defaults"],
+    srcs: ["src/**/*.java"],
+    resource_dirs: ["res"],
+    // Tag this module as a cts test artifact
+    test_suites: [
+        "cts",
+        "general-tests",
+    ],
+    sdk_version: "test_current",
+}
+
+android_test_helper_app {
+    name: "CtsAppEnumerationAppWidgetProviderSharedUidTarget",
+    manifest: "AndroidManifest-appWidgetProvider-sharedUser.xml",
+    defaults: ["cts_support_defaults"],
+    srcs: ["src/**/*.java"],
+    resource_dirs: ["res"],
+    // Tag this module as a cts test artifact
+    test_suites: [
+        "cts",
+        "general-tests",
+    ],
+    sdk_version: "test_current",
+}
\ No newline at end of file
diff --git a/tests/tests/appenumeration/app/target/AndroidManifest-appWidgetProvider-sharedUser.xml b/tests/tests/appenumeration/app/target/AndroidManifest-appWidgetProvider-sharedUser.xml
new file mode 100644
index 0000000..153894c
--- /dev/null
+++ b/tests/tests/appenumeration/app/target/AndroidManifest-appWidgetProvider-sharedUser.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    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.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.appenumeration.appwidgetprovider.shareduid"
+          android:sharedUserId="android.appenumeration.shareduid">
+    <application>
+        <uses-library android:name="android.test.runner" />
+
+        <receiver android:name="android.appenumeration.MockAppWidgetProvider"
+                  android:exported="true">
+            <intent-filter>
+                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
+            </intent-filter>
+            <meta-data android:name="android.appwidget.provider"
+                       android:resource="@xml/app_widget_provider_info"/>
+        </receiver>
+    </application>
+</manifest>
diff --git a/tests/tests/appenumeration/app/target/AndroidManifest-appWidgetProvider.xml b/tests/tests/appenumeration/app/target/AndroidManifest-appWidgetProvider.xml
new file mode 100644
index 0000000..836acda
--- /dev/null
+++ b/tests/tests/appenumeration/app/target/AndroidManifest-appWidgetProvider.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    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.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.appenumeration.appwidgetprovider">
+    <application>
+        <uses-library android:name="android.test.runner" />
+
+        <receiver android:name="android.appenumeration.MockAppWidgetProvider"
+                 android:exported="true">
+            <intent-filter>
+                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
+            </intent-filter>
+            <meta-data android:name="android.appwidget.provider"
+                       android:resource="@xml/app_widget_provider_info"/>
+        </receiver>
+    </application>
+</manifest>
diff --git a/tests/tests/appenumeration/app/target/res/xml/app_widget_provider_info.xml b/tests/tests/appenumeration/app/target/res/xml/app_widget_provider_info.xml
new file mode 100644
index 0000000..997dd47
--- /dev/null
+++ b/tests/tests/appenumeration/app/target/res/xml/app_widget_provider_info.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
+                    android:minWidth="40dp"
+                    android:minHeight="40dp"
+                    android:resizeMode="horizontal|vertical"
+                    android:widgetCategory="home_screen">
+</appwidget-provider>
diff --git a/tests/tests/appenumeration/lib/src/android/appenumeration/cts/Constants.java b/tests/tests/appenumeration/lib/src/android/appenumeration/cts/Constants.java
index 720ec4c..37d2ed9 100644
--- a/tests/tests/appenumeration/lib/src/android/appenumeration/cts/Constants.java
+++ b/tests/tests/appenumeration/lib/src/android/appenumeration/cts/Constants.java
@@ -114,6 +114,11 @@
     public static final String TARGET_SYNCADAPTER = PKG_BASE + "syncadapter";
     /** A package that exposes itself as a syncadapter with a shared uid. */
     public static final String TARGET_SYNCADAPTER_SHARED_USER = PKG_BASE + "syncadapter.shareduid";
+    /** A package that exposes itself as a appwidgetprovider. */
+    public static final String TARGET_APPWIDGETPROVIDER = PKG_BASE + "appwidgetprovider";
+    /** A package that exposes itself as a appwidgetprovider with a shared uid. */
+    public static final String TARGET_APPWIDGETPROVIDER_SHARED_USER =
+            PKG_BASE + "appwidgetprovider.shareduid";
 
     private static final String BASE_PATH = "/data/local/tmp/cts/appenumeration/";
     public static final String TARGET_NO_API_APK = BASE_PATH + "CtsAppEnumerationNoApi.apk";
@@ -181,8 +186,12 @@
     public static final String ACTION_BIND_SERVICE = PKG_BASE + "cts.action.BIND_SERVICE";
     public static final String ACTION_GET_SYNCADAPTER_TYPES =
             PKG_BASE + "cts.action.GET_SYNCADAPTER_TYPES";
+    public static final String ACTION_GET_INSTALLED_APPWIDGET_PROVIDERS =
+            PKG_BASE + "cts.action.GET_INSTALLED_APPWIDGET_PROVIDERS";
     public static final String ACTION_AWAIT_PACKAGES_SUSPENDED =
             PKG_BASE + "cts.action.AWAIT_PACKAGES_SUSPENDED";
+    public static final String ACTION_LAUNCHER_APPS_IS_ACTIVITY_ENABLED =
+            PKG_BASE + "cts.action.LAUNCHER_APPS_IS_ACTIVITY_ENABLED";
 
     public static final String EXTRA_REMOTE_CALLBACK = "remoteCallback";
     public static final String EXTRA_REMOTE_READY_CALLBACK = "remoteReadyCallback";
diff --git a/tests/tests/appenumeration/src/android/appenumeration/cts/AppEnumerationTests.java b/tests/tests/appenumeration/src/android/appenumeration/cts/AppEnumerationTests.java
index 4d58580..570843b 100644
--- a/tests/tests/appenumeration/src/android/appenumeration/cts/AppEnumerationTests.java
+++ b/tests/tests/appenumeration/src/android/appenumeration/cts/AppEnumerationTests.java
@@ -18,6 +18,7 @@
 
 import static android.appenumeration.cts.Constants.ACTION_BIND_SERVICE;
 import static android.appenumeration.cts.Constants.ACTION_CHECK_SIGNATURES;
+import static android.appenumeration.cts.Constants.ACTION_GET_INSTALLED_APPWIDGET_PROVIDERS;
 import static android.appenumeration.cts.Constants.ACTION_GET_INSTALLED_PACKAGES;
 import static android.appenumeration.cts.Constants.ACTION_GET_NAMES_FOR_UIDS;
 import static android.appenumeration.cts.Constants.ACTION_GET_NAME_FOR_UID;
@@ -26,6 +27,7 @@
 import static android.appenumeration.cts.Constants.ACTION_GET_SYNCADAPTER_TYPES;
 import static android.appenumeration.cts.Constants.ACTION_HAS_SIGNING_CERTIFICATE;
 import static android.appenumeration.cts.Constants.ACTION_JUST_FINISH;
+import static android.appenumeration.cts.Constants.ACTION_LAUNCHER_APPS_IS_ACTIVITY_ENABLED;
 import static android.appenumeration.cts.Constants.ACTION_MANIFEST_ACTIVITY;
 import static android.appenumeration.cts.Constants.ACTION_MANIFEST_PROVIDER;
 import static android.appenumeration.cts.Constants.ACTION_MANIFEST_SERVICE;
@@ -70,6 +72,8 @@
 import static android.appenumeration.cts.Constants.QUERIES_WILDCARD_EDITOR;
 import static android.appenumeration.cts.Constants.QUERIES_WILDCARD_SHARE;
 import static android.appenumeration.cts.Constants.QUERIES_WILDCARD_WEB;
+import static android.appenumeration.cts.Constants.TARGET_APPWIDGETPROVIDER;
+import static android.appenumeration.cts.Constants.TARGET_APPWIDGETPROVIDER_SHARED_USER;
 import static android.appenumeration.cts.Constants.TARGET_BROWSER;
 import static android.appenumeration.cts.Constants.TARGET_BROWSER_WILDCARD;
 import static android.appenumeration.cts.Constants.TARGET_CONTACTS;
@@ -95,6 +99,7 @@
 
 import static com.android.compatibility.common.util.ShellUtils.runShellCommand;
 
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.arrayContainingInAnyOrder;
 import static org.hamcrest.Matchers.greaterThan;
 import static org.hamcrest.Matchers.greaterThanOrEqualTo;
@@ -102,11 +107,11 @@
 import static org.hamcrest.Matchers.not;
 import static org.hamcrest.core.Is.is;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import android.app.PendingIntent;
+import android.appwidget.AppWidgetProviderInfo;
 import android.content.ComponentName;
 import android.content.Intent;
 import android.content.SyncAdapterType;
@@ -630,7 +635,7 @@
     public void broadcastAdded_notVisibleDoesNotReceive() throws Exception {
         final Result result = sendCommand(QUERIES_NOTHING, TARGET_FILTERS,
                 /* targetUid */ INVALID_UID, /* intentExtra */ null,
-                Constants.ACTION_AWAIT_PACKAGE_ADDED, /* waitForReady */ false);
+                Constants.ACTION_AWAIT_PACKAGE_ADDED, /* waitForReady */ true);
         runShellCommand("pm install " + TARGET_FILTERS_APK);
         try {
             result.await();
@@ -644,7 +649,7 @@
     public void broadcastAdded_visibleReceives() throws Exception {
         final Result result = sendCommand(QUERIES_ACTIVITY_ACTION, TARGET_FILTERS,
                 /* targetUid */ INVALID_UID, /* intentExtra */ null,
-                Constants.ACTION_AWAIT_PACKAGE_ADDED, /* waitForReady */ false);
+                Constants.ACTION_AWAIT_PACKAGE_ADDED, /* waitForReady */ true);
         runShellCommand("pm install " + TARGET_FILTERS_APK);
         try {
             Assert.assertEquals(TARGET_FILTERS,
@@ -658,7 +663,7 @@
     public void reinstallTarget_broadcastRemoved_notVisibleDoesNotReceive() throws Exception {
         final Result result = sendCommand(QUERIES_NOTHING, TARGET_FILTERS,
                 /* targetUid */ INVALID_UID, /* intentExtra */ null,
-                Constants.ACTION_AWAIT_PACKAGE_REMOVED, /* waitForReady */ false);
+                Constants.ACTION_AWAIT_PACKAGE_REMOVED, /* waitForReady */ true);
         runShellCommand("pm install " + TARGET_FILTERS_APK);
         try {
             result.await();
@@ -672,7 +677,7 @@
     public void reinstallTarget_broadcastRemoved_visibleReceives() throws Exception {
         final Result result = sendCommand(QUERIES_ACTIVITY_ACTION, TARGET_FILTERS,
                 /* targetUid */ INVALID_UID, /* intentExtra */ null,
-                Constants.ACTION_AWAIT_PACKAGE_REMOVED, /* waitForReady */ false);
+                Constants.ACTION_AWAIT_PACKAGE_REMOVED, /* waitForReady */ true);
         runShellCommand("pm install " + TARGET_FILTERS_APK);
         try {
             Assert.assertEquals(TARGET_FILTERS,
@@ -687,7 +692,7 @@
         ensurePackageIsInstalled(TARGET_STUB, TARGET_STUB_APK);
         final Result result = sendCommand(QUERIES_NOTHING, TARGET_STUB,
                 /* targetUid */ INVALID_UID, /* intentExtra */ null,
-                Constants.ACTION_AWAIT_PACKAGE_REMOVED, /* waitForReady */ false);
+                Constants.ACTION_AWAIT_PACKAGE_REMOVED, /* waitForReady */ true);
         runShellCommand("pm uninstall " + TARGET_STUB);
         try {
             result.await();
@@ -702,7 +707,7 @@
         ensurePackageIsInstalled(TARGET_STUB, TARGET_STUB_APK);
         final Result result = sendCommand(QUERIES_NOTHING_PERM, TARGET_STUB,
                 /* targetUid */ INVALID_UID, /* intentExtra */ null,
-                Constants.ACTION_AWAIT_PACKAGE_REMOVED, /* waitForReady */ false);
+                Constants.ACTION_AWAIT_PACKAGE_REMOVED, /* waitForReady */ true);
         runShellCommand("pm uninstall " + TARGET_STUB);
         try {
             Assert.assertEquals(TARGET_STUB,
@@ -776,6 +781,47 @@
                 this::getSyncAdapterTypes);
     }
 
+    @Test
+    public void launcherAppsIsActivityEnabled_queriesActivityAction_canSeeActivity()
+            throws Exception {
+        final ComponentName targetFilters = ComponentName.createRelative(TARGET_FILTERS,
+                ACTIVITY_CLASS_DUMMY_ACTIVITY);
+        assertThat(QUERIES_ACTIVITY_ACTION + " should be able to see " + targetFilters,
+                launcherAppsIsActivityEnabled(QUERIES_ACTIVITY_ACTION, targetFilters),
+                is(true));
+    }
+
+    @Test
+    public void launcherAppsIsActivityEnabled_queriesNothing_cannotSeeActivity()
+            throws Exception {
+        final ComponentName targetFilters = ComponentName.createRelative(TARGET_FILTERS,
+                ACTIVITY_CLASS_DUMMY_ACTIVITY);
+        assertThat(QUERIES_ACTIVITY_ACTION + " should not be able to see " + targetFilters,
+                launcherAppsIsActivityEnabled(QUERIES_NOTHING, targetFilters),
+                is(false));
+    }
+
+    @Test
+    public void queriesPackage_canSeeAppWidgetProviderTarget() throws Exception {
+        assertVisible(QUERIES_PACKAGE, TARGET_APPWIDGETPROVIDER,
+                this::getInstalledAppWidgetProviders);
+    }
+
+    @Test
+    public void queriesNothing_cannotSeeAppWidgetProviderTarget() throws Exception {
+        assertNotVisible(QUERIES_NOTHING, TARGET_APPWIDGETPROVIDER,
+                this::getInstalledAppWidgetProviders);
+        assertNotVisible(QUERIES_NOTHING, TARGET_APPWIDGETPROVIDER_SHARED_USER,
+                this::getInstalledAppWidgetProviders);
+    }
+
+    @Test
+    public void queriesNothingSharedUser_canSeeAppWidgetProviderSharedUserTarget()
+            throws Exception {
+        assertVisible(QUERIES_NOTHING_SHARED_USER, TARGET_APPWIDGETPROVIDER_SHARED_USER,
+                this::getInstalledAppWidgetProviders);
+    }
+
     private void assertNotVisible(String sourcePackageName, String targetPackageName)
             throws Exception {
         if (!sGlobalFeatureEnabled) return;
@@ -1008,6 +1054,17 @@
                 .toArray(String[]::new);
     }
 
+    private String[] getInstalledAppWidgetProviders(String sourcePackageName) throws Exception {
+        final Bundle response = sendCommandBlocking(sourcePackageName, /* targetPackageName */ null,
+                /* intentExtra */ null, ACTION_GET_INSTALLED_APPWIDGET_PROVIDERS);
+        final List<Parcelable> parcelables = response.getParcelableArrayList(
+                Intent.EXTRA_RETURN_RESULT);
+        return parcelables.stream()
+                .map(parcelable -> ((AppWidgetProviderInfo) parcelable).provider.getPackageName())
+                .distinct()
+                .toArray(String[]::new);
+    }
+
     private void setPackagesSuspended(boolean suspend, List<String> packages) {
         final StringBuilder cmd = new StringBuilder("pm ");
         if (suspend) {
@@ -1020,6 +1077,15 @@
         runShellCommand(cmd.toString());
     }
 
+    private boolean launcherAppsIsActivityEnabled(String sourcePackageName,
+            ComponentName componentName) throws Exception {
+        final Bundle extraData = new Bundle();
+        extraData.putString(Intent.EXTRA_COMPONENT_NAME, componentName.flattenToString());
+        final Bundle response = sendCommandBlocking(sourcePackageName, /* targetPackageName */ null,
+                extraData, ACTION_LAUNCHER_APPS_IS_ACTIVITY_ENABLED);
+        return response.getBoolean(Intent.EXTRA_RETURN_RESULT);
+    }
+
     interface Result {
         Bundle await() throws Exception;
     }
diff --git a/tests/tests/appop/Android.bp b/tests/tests/appop/Android.bp
index d4547f5..33e53a5 100644
--- a/tests/tests/appop/Android.bp
+++ b/tests/tests/appop/Android.bp
@@ -32,6 +32,7 @@
     header_libs: ["jni_headers"],
     shared_libs: [
         "libbinder",
+        "libpermission",
         "libutils",
         "liblog",
     ],
@@ -98,6 +99,7 @@
         "libnetdutils",
         "libnetworkstatsfactorytestjni",
         "libpackagelistparser",
+        "libpermission",
         "libpcre2",
         "libprocessgroup",
         "libselinux",
diff --git a/tests/tests/appop/AppWithTooManyAttributions/AndroidManifest.xml b/tests/tests/appop/AppWithTooManyAttributions/AndroidManifest.xml
index debdb8e..0df2178 100644
--- a/tests/tests/appop/AppWithTooManyAttributions/AndroidManifest.xml
+++ b/tests/tests/appop/AppWithTooManyAttributions/AndroidManifest.xml
@@ -19,7 +19,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="android.app.appops.cts.appwithtoomanyattributions">
 
-  <!-- 1000 attributions are allowed -->
+  <!-- 10000 attributions are allowed -->
   <attribution android:tag="f0" android:label="@string/dummyLabel" />
   <attribution android:tag="f1" android:label="@string/dummyLabel" />
   <attribution android:tag="f2" android:label="@string/dummyLabel" />
@@ -1020,6 +1020,9006 @@
   <attribution android:tag="f997" android:label="@string/dummyLabel" />
   <attribution android:tag="f998" android:label="@string/dummyLabel" />
   <attribution android:tag="f999" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1000" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1001" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1002" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1003" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1004" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1005" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1006" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1007" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1008" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1009" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1010" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1011" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1012" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1013" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1014" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1015" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1016" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1017" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1018" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1019" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1020" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1021" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1022" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1023" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1024" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1025" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1026" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1027" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1028" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1029" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1030" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1031" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1032" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1033" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1034" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1035" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1036" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1037" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1038" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1039" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1040" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1041" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1042" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1043" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1044" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1045" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1046" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1047" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1048" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1049" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1050" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1051" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1052" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1053" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1054" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1055" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1056" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1057" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1058" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1059" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1060" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1061" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1062" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1063" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1064" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1065" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1066" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1067" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1068" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1069" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1070" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1071" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1072" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1073" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1074" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1075" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1076" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1077" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1078" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1079" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1080" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1081" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1082" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1083" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1084" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1085" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1086" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1087" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1088" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1089" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1090" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1091" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1092" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1093" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1094" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1095" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1096" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1097" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1098" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1099" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1100" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1101" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1102" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1103" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1104" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1105" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1106" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1107" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1108" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1109" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1110" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1111" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1112" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1113" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1114" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1115" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1116" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1117" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1118" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1119" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1120" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1121" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1122" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1123" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1124" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1125" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1126" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1127" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1128" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1129" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1130" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1131" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1132" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1133" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1134" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1135" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1136" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1137" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1138" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1139" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1140" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1141" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1142" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1143" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1144" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1145" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1146" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1147" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1148" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1149" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1150" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1151" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1152" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1153" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1154" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1155" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1156" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1157" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1158" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1159" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1160" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1161" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1162" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1163" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1164" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1165" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1166" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1167" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1168" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1169" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1170" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1171" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1172" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1173" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1174" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1175" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1176" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1177" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1178" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1179" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1180" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1181" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1182" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1183" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1184" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1185" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1186" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1187" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1188" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1189" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1190" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1191" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1192" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1193" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1194" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1195" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1196" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1197" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1198" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1199" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1200" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1201" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1202" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1203" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1204" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1205" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1206" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1207" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1208" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1209" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1210" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1211" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1212" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1213" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1214" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1215" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1216" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1217" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1218" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1219" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1220" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1221" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1222" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1223" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1224" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1225" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1226" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1227" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1228" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1229" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1230" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1231" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1232" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1233" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1234" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1235" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1236" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1237" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1238" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1239" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1240" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1241" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1242" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1243" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1244" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1245" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1246" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1247" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1248" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1249" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1250" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1251" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1252" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1253" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1254" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1255" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1256" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1257" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1258" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1259" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1260" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1261" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1262" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1263" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1264" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1265" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1266" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1267" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1268" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1269" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1270" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1271" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1272" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1273" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1274" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1275" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1276" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1277" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1278" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1279" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1280" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1281" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1282" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1283" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1284" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1285" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1286" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1287" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1288" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1289" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1290" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1291" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1292" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1293" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1294" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1295" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1296" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1297" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1298" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1299" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1300" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1301" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1302" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1303" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1304" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1305" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1306" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1307" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1308" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1309" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1310" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1311" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1312" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1313" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1314" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1315" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1316" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1317" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1318" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1319" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1320" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1321" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1322" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1323" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1324" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1325" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1326" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1327" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1328" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1329" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1330" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1331" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1332" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1333" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1334" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1335" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1336" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1337" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1338" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1339" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1340" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1341" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1342" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1343" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1344" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1345" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1346" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1347" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1348" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1349" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1350" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1351" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1352" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1353" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1354" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1355" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1356" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1357" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1358" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1359" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1360" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1361" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1362" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1363" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1364" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1365" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1366" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1367" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1368" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1369" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1370" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1371" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1372" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1373" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1374" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1375" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1376" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1377" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1378" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1379" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1380" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1381" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1382" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1383" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1384" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1385" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1386" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1387" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1388" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1389" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1390" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1391" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1392" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1393" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1394" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1395" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1396" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1397" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1398" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1399" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1400" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1401" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1402" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1403" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1404" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1405" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1406" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1407" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1408" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1409" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1410" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1411" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1412" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1413" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1414" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1415" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1416" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1417" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1418" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1419" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1420" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1421" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1422" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1423" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1424" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1425" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1426" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1427" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1428" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1429" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1430" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1431" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1432" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1433" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1434" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1435" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1436" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1437" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1438" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1439" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1440" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1441" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1442" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1443" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1444" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1445" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1446" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1447" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1448" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1449" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1450" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1451" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1452" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1453" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1454" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1455" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1456" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1457" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1458" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1459" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1460" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1461" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1462" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1463" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1464" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1465" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1466" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1467" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1468" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1469" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1470" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1471" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1472" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1473" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1474" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1475" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1476" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1477" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1478" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1479" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1480" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1481" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1482" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1483" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1484" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1485" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1486" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1487" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1488" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1489" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1490" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1491" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1492" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1493" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1494" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1495" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1496" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1497" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1498" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1499" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1500" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1501" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1502" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1503" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1504" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1505" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1506" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1507" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1508" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1509" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1510" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1511" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1512" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1513" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1514" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1515" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1516" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1517" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1518" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1519" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1520" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1521" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1522" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1523" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1524" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1525" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1526" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1527" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1528" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1529" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1530" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1531" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1532" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1533" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1534" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1535" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1536" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1537" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1538" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1539" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1540" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1541" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1542" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1543" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1544" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1545" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1546" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1547" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1548" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1549" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1550" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1551" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1552" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1553" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1554" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1555" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1556" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1557" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1558" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1559" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1560" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1561" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1562" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1563" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1564" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1565" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1566" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1567" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1568" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1569" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1570" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1571" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1572" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1573" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1574" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1575" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1576" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1577" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1578" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1579" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1580" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1581" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1582" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1583" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1584" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1585" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1586" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1587" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1588" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1589" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1590" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1591" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1592" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1593" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1594" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1595" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1596" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1597" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1598" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1599" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1600" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1601" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1602" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1603" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1604" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1605" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1606" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1607" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1608" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1609" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1610" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1611" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1612" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1613" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1614" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1615" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1616" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1617" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1618" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1619" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1620" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1621" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1622" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1623" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1624" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1625" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1626" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1627" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1628" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1629" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1630" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1631" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1632" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1633" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1634" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1635" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1636" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1637" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1638" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1639" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1640" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1641" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1642" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1643" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1644" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1645" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1646" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1647" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1648" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1649" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1650" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1651" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1652" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1653" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1654" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1655" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1656" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1657" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1658" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1659" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1660" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1661" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1662" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1663" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1664" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1665" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1666" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1667" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1668" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1669" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1670" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1671" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1672" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1673" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1674" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1675" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1676" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1677" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1678" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1679" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1680" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1681" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1682" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1683" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1684" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1685" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1686" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1687" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1688" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1689" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1690" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1691" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1692" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1693" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1694" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1695" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1696" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1697" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1698" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1699" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1700" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1701" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1702" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1703" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1704" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1705" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1706" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1707" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1708" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1709" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1710" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1711" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1712" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1713" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1714" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1715" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1716" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1717" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1718" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1719" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1720" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1721" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1722" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1723" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1724" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1725" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1726" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1727" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1728" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1729" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1730" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1731" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1732" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1733" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1734" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1735" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1736" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1737" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1738" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1739" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1740" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1741" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1742" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1743" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1744" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1745" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1746" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1747" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1748" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1749" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1750" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1751" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1752" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1753" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1754" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1755" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1756" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1757" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1758" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1759" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1760" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1761" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1762" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1763" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1764" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1765" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1766" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1767" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1768" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1769" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1770" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1771" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1772" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1773" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1774" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1775" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1776" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1777" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1778" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1779" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1780" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1781" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1782" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1783" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1784" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1785" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1786" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1787" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1788" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1789" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1790" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1791" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1792" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1793" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1794" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1795" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1796" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1797" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1798" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1799" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1800" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1801" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1802" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1803" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1804" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1805" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1806" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1807" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1808" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1809" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1810" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1811" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1812" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1813" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1814" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1815" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1816" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1817" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1818" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1819" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1820" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1821" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1822" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1823" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1824" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1825" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1826" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1827" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1828" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1829" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1830" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1831" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1832" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1833" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1834" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1835" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1836" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1837" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1838" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1839" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1840" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1841" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1842" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1843" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1844" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1845" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1846" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1847" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1848" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1849" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1850" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1851" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1852" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1853" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1854" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1855" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1856" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1857" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1858" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1859" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1860" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1861" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1862" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1863" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1864" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1865" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1866" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1867" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1868" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1869" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1870" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1871" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1872" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1873" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1874" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1875" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1876" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1877" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1878" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1879" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1880" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1881" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1882" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1883" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1884" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1885" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1886" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1887" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1888" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1889" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1890" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1891" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1892" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1893" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1894" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1895" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1896" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1897" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1898" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1899" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1900" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1901" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1902" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1903" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1904" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1905" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1906" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1907" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1908" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1909" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1910" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1911" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1912" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1913" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1914" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1915" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1916" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1917" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1918" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1919" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1920" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1921" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1922" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1923" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1924" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1925" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1926" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1927" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1928" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1929" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1930" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1931" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1932" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1933" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1934" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1935" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1936" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1937" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1938" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1939" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1940" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1941" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1942" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1943" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1944" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1945" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1946" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1947" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1948" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1949" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1950" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1951" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1952" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1953" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1954" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1955" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1956" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1957" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1958" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1959" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1960" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1961" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1962" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1963" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1964" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1965" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1966" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1967" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1968" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1969" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1970" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1971" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1972" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1973" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1974" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1975" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1976" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1977" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1978" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1979" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1980" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1981" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1982" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1983" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1984" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1985" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1986" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1987" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1988" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1989" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1990" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1991" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1992" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1993" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1994" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1995" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1996" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1997" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1998" android:label="@string/dummyLabel" />
+  <attribution android:tag="f1999" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2000" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2001" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2002" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2003" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2004" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2005" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2006" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2007" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2008" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2009" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2010" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2011" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2012" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2013" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2014" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2015" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2016" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2017" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2018" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2019" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2020" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2021" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2022" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2023" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2024" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2025" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2026" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2027" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2028" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2029" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2030" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2031" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2032" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2033" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2034" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2035" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2036" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2037" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2038" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2039" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2040" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2041" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2042" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2043" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2044" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2045" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2046" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2047" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2048" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2049" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2050" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2051" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2052" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2053" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2054" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2055" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2056" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2057" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2058" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2059" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2060" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2061" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2062" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2063" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2064" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2065" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2066" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2067" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2068" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2069" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2070" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2071" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2072" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2073" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2074" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2075" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2076" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2077" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2078" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2079" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2080" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2081" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2082" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2083" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2084" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2085" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2086" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2087" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2088" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2089" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2090" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2091" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2092" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2093" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2094" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2095" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2096" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2097" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2098" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2099" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2100" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2101" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2102" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2103" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2104" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2105" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2106" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2107" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2108" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2109" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2110" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2111" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2112" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2113" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2114" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2115" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2116" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2117" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2118" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2119" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2120" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2121" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2122" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2123" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2124" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2125" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2126" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2127" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2128" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2129" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2130" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2131" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2132" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2133" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2134" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2135" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2136" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2137" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2138" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2139" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2140" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2141" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2142" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2143" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2144" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2145" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2146" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2147" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2148" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2149" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2150" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2151" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2152" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2153" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2154" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2155" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2156" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2157" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2158" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2159" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2160" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2161" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2162" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2163" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2164" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2165" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2166" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2167" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2168" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2169" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2170" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2171" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2172" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2173" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2174" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2175" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2176" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2177" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2178" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2179" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2180" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2181" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2182" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2183" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2184" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2185" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2186" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2187" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2188" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2189" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2190" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2191" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2192" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2193" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2194" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2195" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2196" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2197" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2198" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2199" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2200" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2201" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2202" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2203" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2204" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2205" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2206" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2207" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2208" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2209" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2210" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2211" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2212" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2213" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2214" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2215" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2216" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2217" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2218" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2219" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2220" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2221" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2222" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2223" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2224" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2225" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2226" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2227" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2228" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2229" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2230" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2231" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2232" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2233" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2234" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2235" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2236" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2237" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2238" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2239" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2240" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2241" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2242" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2243" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2244" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2245" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2246" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2247" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2248" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2249" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2250" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2251" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2252" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2253" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2254" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2255" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2256" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2257" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2258" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2259" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2260" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2261" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2262" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2263" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2264" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2265" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2266" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2267" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2268" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2269" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2270" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2271" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2272" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2273" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2274" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2275" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2276" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2277" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2278" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2279" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2280" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2281" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2282" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2283" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2284" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2285" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2286" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2287" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2288" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2289" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2290" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2291" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2292" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2293" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2294" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2295" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2296" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2297" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2298" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2299" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2300" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2301" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2302" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2303" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2304" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2305" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2306" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2307" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2308" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2309" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2310" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2311" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2312" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2313" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2314" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2315" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2316" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2317" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2318" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2319" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2320" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2321" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2322" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2323" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2324" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2325" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2326" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2327" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2328" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2329" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2330" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2331" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2332" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2333" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2334" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2335" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2336" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2337" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2338" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2339" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2340" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2341" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2342" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2343" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2344" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2345" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2346" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2347" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2348" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2349" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2350" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2351" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2352" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2353" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2354" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2355" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2356" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2357" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2358" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2359" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2360" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2361" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2362" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2363" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2364" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2365" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2366" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2367" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2368" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2369" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2370" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2371" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2372" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2373" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2374" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2375" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2376" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2377" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2378" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2379" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2380" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2381" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2382" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2383" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2384" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2385" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2386" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2387" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2388" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2389" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2390" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2391" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2392" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2393" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2394" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2395" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2396" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2397" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2398" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2399" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2400" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2401" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2402" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2403" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2404" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2405" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2406" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2407" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2408" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2409" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2410" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2411" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2412" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2413" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2414" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2415" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2416" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2417" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2418" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2419" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2420" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2421" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2422" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2423" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2424" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2425" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2426" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2427" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2428" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2429" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2430" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2431" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2432" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2433" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2434" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2435" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2436" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2437" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2438" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2439" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2440" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2441" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2442" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2443" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2444" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2445" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2446" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2447" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2448" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2449" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2450" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2451" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2452" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2453" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2454" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2455" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2456" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2457" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2458" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2459" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2460" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2461" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2462" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2463" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2464" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2465" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2466" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2467" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2468" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2469" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2470" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2471" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2472" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2473" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2474" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2475" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2476" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2477" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2478" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2479" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2480" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2481" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2482" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2483" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2484" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2485" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2486" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2487" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2488" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2489" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2490" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2491" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2492" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2493" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2494" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2495" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2496" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2497" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2498" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2499" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2500" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2501" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2502" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2503" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2504" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2505" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2506" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2507" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2508" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2509" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2510" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2511" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2512" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2513" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2514" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2515" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2516" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2517" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2518" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2519" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2520" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2521" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2522" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2523" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2524" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2525" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2526" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2527" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2528" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2529" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2530" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2531" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2532" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2533" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2534" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2535" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2536" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2537" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2538" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2539" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2540" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2541" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2542" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2543" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2544" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2545" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2546" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2547" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2548" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2549" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2550" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2551" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2552" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2553" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2554" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2555" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2556" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2557" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2558" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2559" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2560" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2561" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2562" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2563" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2564" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2565" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2566" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2567" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2568" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2569" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2570" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2571" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2572" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2573" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2574" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2575" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2576" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2577" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2578" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2579" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2580" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2581" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2582" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2583" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2584" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2585" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2586" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2587" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2588" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2589" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2590" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2591" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2592" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2593" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2594" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2595" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2596" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2597" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2598" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2599" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2600" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2601" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2602" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2603" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2604" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2605" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2606" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2607" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2608" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2609" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2610" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2611" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2612" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2613" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2614" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2615" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2616" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2617" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2618" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2619" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2620" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2621" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2622" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2623" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2624" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2625" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2626" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2627" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2628" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2629" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2630" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2631" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2632" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2633" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2634" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2635" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2636" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2637" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2638" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2639" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2640" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2641" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2642" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2643" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2644" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2645" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2646" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2647" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2648" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2649" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2650" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2651" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2652" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2653" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2654" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2655" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2656" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2657" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2658" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2659" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2660" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2661" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2662" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2663" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2664" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2665" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2666" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2667" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2668" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2669" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2670" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2671" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2672" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2673" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2674" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2675" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2676" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2677" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2678" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2679" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2680" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2681" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2682" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2683" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2684" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2685" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2686" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2687" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2688" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2689" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2690" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2691" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2692" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2693" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2694" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2695" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2696" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2697" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2698" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2699" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2700" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2701" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2702" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2703" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2704" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2705" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2706" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2707" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2708" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2709" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2710" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2711" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2712" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2713" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2714" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2715" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2716" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2717" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2718" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2719" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2720" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2721" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2722" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2723" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2724" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2725" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2726" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2727" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2728" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2729" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2730" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2731" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2732" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2733" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2734" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2735" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2736" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2737" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2738" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2739" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2740" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2741" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2742" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2743" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2744" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2745" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2746" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2747" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2748" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2749" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2750" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2751" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2752" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2753" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2754" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2755" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2756" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2757" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2758" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2759" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2760" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2761" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2762" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2763" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2764" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2765" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2766" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2767" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2768" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2769" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2770" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2771" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2772" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2773" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2774" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2775" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2776" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2777" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2778" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2779" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2780" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2781" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2782" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2783" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2784" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2785" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2786" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2787" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2788" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2789" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2790" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2791" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2792" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2793" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2794" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2795" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2796" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2797" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2798" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2799" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2800" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2801" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2802" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2803" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2804" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2805" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2806" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2807" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2808" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2809" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2810" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2811" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2812" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2813" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2814" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2815" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2816" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2817" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2818" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2819" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2820" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2821" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2822" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2823" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2824" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2825" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2826" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2827" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2828" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2829" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2830" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2831" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2832" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2833" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2834" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2835" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2836" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2837" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2838" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2839" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2840" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2841" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2842" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2843" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2844" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2845" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2846" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2847" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2848" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2849" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2850" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2851" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2852" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2853" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2854" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2855" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2856" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2857" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2858" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2859" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2860" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2861" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2862" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2863" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2864" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2865" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2866" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2867" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2868" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2869" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2870" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2871" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2872" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2873" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2874" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2875" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2876" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2877" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2878" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2879" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2880" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2881" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2882" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2883" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2884" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2885" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2886" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2887" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2888" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2889" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2890" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2891" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2892" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2893" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2894" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2895" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2896" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2897" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2898" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2899" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2900" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2901" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2902" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2903" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2904" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2905" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2906" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2907" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2908" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2909" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2910" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2911" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2912" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2913" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2914" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2915" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2916" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2917" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2918" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2919" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2920" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2921" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2922" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2923" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2924" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2925" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2926" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2927" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2928" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2929" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2930" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2931" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2932" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2933" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2934" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2935" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2936" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2937" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2938" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2939" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2940" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2941" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2942" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2943" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2944" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2945" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2946" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2947" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2948" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2949" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2950" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2951" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2952" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2953" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2954" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2955" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2956" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2957" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2958" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2959" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2960" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2961" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2962" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2963" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2964" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2965" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2966" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2967" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2968" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2969" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2970" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2971" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2972" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2973" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2974" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2975" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2976" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2977" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2978" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2979" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2980" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2981" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2982" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2983" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2984" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2985" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2986" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2987" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2988" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2989" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2990" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2991" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2992" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2993" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2994" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2995" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2996" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2997" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2998" android:label="@string/dummyLabel" />
+  <attribution android:tag="f2999" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3000" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3001" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3002" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3003" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3004" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3005" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3006" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3007" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3008" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3009" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3010" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3011" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3012" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3013" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3014" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3015" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3016" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3017" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3018" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3019" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3020" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3021" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3022" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3023" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3024" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3025" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3026" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3027" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3028" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3029" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3030" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3031" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3032" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3033" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3034" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3035" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3036" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3037" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3038" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3039" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3040" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3041" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3042" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3043" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3044" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3045" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3046" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3047" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3048" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3049" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3050" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3051" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3052" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3053" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3054" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3055" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3056" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3057" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3058" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3059" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3060" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3061" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3062" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3063" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3064" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3065" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3066" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3067" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3068" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3069" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3070" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3071" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3072" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3073" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3074" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3075" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3076" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3077" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3078" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3079" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3080" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3081" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3082" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3083" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3084" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3085" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3086" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3087" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3088" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3089" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3090" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3091" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3092" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3093" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3094" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3095" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3096" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3097" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3098" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3099" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3100" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3101" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3102" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3103" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3104" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3105" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3106" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3107" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3108" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3109" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3110" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3111" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3112" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3113" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3114" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3115" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3116" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3117" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3118" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3119" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3120" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3121" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3122" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3123" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3124" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3125" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3126" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3127" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3128" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3129" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3130" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3131" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3132" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3133" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3134" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3135" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3136" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3137" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3138" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3139" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3140" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3141" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3142" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3143" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3144" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3145" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3146" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3147" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3148" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3149" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3150" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3151" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3152" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3153" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3154" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3155" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3156" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3157" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3158" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3159" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3160" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3161" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3162" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3163" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3164" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3165" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3166" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3167" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3168" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3169" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3170" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3171" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3172" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3173" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3174" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3175" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3176" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3177" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3178" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3179" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3180" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3181" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3182" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3183" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3184" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3185" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3186" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3187" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3188" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3189" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3190" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3191" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3192" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3193" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3194" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3195" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3196" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3197" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3198" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3199" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3200" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3201" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3202" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3203" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3204" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3205" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3206" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3207" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3208" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3209" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3210" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3211" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3212" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3213" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3214" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3215" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3216" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3217" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3218" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3219" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3220" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3221" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3222" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3223" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3224" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3225" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3226" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3227" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3228" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3229" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3230" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3231" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3232" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3233" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3234" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3235" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3236" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3237" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3238" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3239" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3240" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3241" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3242" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3243" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3244" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3245" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3246" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3247" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3248" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3249" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3250" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3251" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3252" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3253" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3254" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3255" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3256" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3257" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3258" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3259" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3260" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3261" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3262" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3263" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3264" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3265" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3266" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3267" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3268" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3269" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3270" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3271" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3272" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3273" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3274" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3275" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3276" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3277" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3278" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3279" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3280" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3281" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3282" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3283" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3284" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3285" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3286" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3287" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3288" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3289" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3290" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3291" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3292" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3293" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3294" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3295" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3296" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3297" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3298" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3299" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3300" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3301" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3302" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3303" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3304" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3305" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3306" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3307" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3308" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3309" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3310" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3311" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3312" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3313" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3314" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3315" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3316" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3317" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3318" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3319" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3320" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3321" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3322" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3323" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3324" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3325" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3326" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3327" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3328" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3329" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3330" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3331" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3332" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3333" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3334" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3335" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3336" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3337" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3338" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3339" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3340" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3341" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3342" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3343" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3344" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3345" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3346" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3347" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3348" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3349" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3350" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3351" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3352" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3353" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3354" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3355" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3356" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3357" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3358" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3359" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3360" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3361" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3362" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3363" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3364" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3365" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3366" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3367" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3368" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3369" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3370" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3371" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3372" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3373" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3374" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3375" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3376" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3377" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3378" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3379" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3380" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3381" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3382" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3383" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3384" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3385" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3386" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3387" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3388" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3389" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3390" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3391" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3392" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3393" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3394" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3395" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3396" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3397" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3398" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3399" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3400" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3401" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3402" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3403" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3404" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3405" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3406" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3407" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3408" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3409" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3410" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3411" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3412" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3413" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3414" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3415" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3416" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3417" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3418" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3419" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3420" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3421" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3422" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3423" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3424" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3425" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3426" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3427" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3428" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3429" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3430" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3431" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3432" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3433" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3434" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3435" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3436" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3437" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3438" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3439" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3440" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3441" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3442" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3443" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3444" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3445" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3446" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3447" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3448" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3449" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3450" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3451" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3452" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3453" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3454" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3455" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3456" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3457" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3458" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3459" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3460" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3461" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3462" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3463" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3464" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3465" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3466" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3467" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3468" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3469" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3470" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3471" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3472" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3473" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3474" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3475" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3476" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3477" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3478" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3479" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3480" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3481" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3482" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3483" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3484" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3485" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3486" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3487" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3488" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3489" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3490" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3491" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3492" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3493" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3494" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3495" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3496" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3497" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3498" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3499" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3500" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3501" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3502" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3503" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3504" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3505" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3506" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3507" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3508" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3509" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3510" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3511" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3512" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3513" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3514" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3515" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3516" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3517" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3518" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3519" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3520" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3521" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3522" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3523" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3524" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3525" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3526" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3527" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3528" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3529" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3530" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3531" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3532" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3533" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3534" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3535" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3536" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3537" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3538" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3539" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3540" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3541" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3542" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3543" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3544" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3545" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3546" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3547" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3548" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3549" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3550" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3551" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3552" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3553" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3554" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3555" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3556" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3557" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3558" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3559" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3560" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3561" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3562" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3563" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3564" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3565" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3566" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3567" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3568" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3569" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3570" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3571" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3572" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3573" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3574" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3575" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3576" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3577" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3578" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3579" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3580" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3581" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3582" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3583" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3584" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3585" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3586" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3587" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3588" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3589" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3590" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3591" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3592" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3593" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3594" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3595" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3596" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3597" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3598" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3599" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3600" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3601" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3602" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3603" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3604" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3605" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3606" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3607" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3608" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3609" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3610" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3611" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3612" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3613" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3614" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3615" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3616" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3617" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3618" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3619" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3620" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3621" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3622" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3623" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3624" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3625" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3626" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3627" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3628" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3629" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3630" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3631" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3632" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3633" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3634" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3635" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3636" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3637" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3638" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3639" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3640" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3641" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3642" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3643" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3644" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3645" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3646" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3647" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3648" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3649" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3650" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3651" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3652" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3653" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3654" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3655" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3656" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3657" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3658" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3659" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3660" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3661" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3662" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3663" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3664" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3665" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3666" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3667" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3668" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3669" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3670" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3671" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3672" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3673" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3674" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3675" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3676" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3677" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3678" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3679" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3680" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3681" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3682" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3683" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3684" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3685" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3686" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3687" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3688" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3689" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3690" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3691" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3692" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3693" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3694" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3695" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3696" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3697" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3698" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3699" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3700" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3701" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3702" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3703" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3704" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3705" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3706" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3707" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3708" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3709" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3710" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3711" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3712" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3713" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3714" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3715" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3716" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3717" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3718" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3719" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3720" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3721" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3722" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3723" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3724" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3725" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3726" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3727" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3728" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3729" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3730" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3731" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3732" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3733" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3734" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3735" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3736" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3737" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3738" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3739" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3740" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3741" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3742" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3743" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3744" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3745" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3746" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3747" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3748" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3749" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3750" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3751" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3752" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3753" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3754" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3755" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3756" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3757" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3758" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3759" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3760" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3761" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3762" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3763" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3764" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3765" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3766" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3767" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3768" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3769" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3770" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3771" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3772" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3773" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3774" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3775" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3776" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3777" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3778" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3779" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3780" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3781" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3782" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3783" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3784" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3785" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3786" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3787" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3788" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3789" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3790" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3791" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3792" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3793" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3794" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3795" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3796" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3797" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3798" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3799" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3800" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3801" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3802" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3803" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3804" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3805" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3806" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3807" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3808" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3809" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3810" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3811" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3812" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3813" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3814" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3815" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3816" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3817" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3818" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3819" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3820" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3821" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3822" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3823" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3824" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3825" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3826" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3827" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3828" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3829" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3830" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3831" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3832" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3833" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3834" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3835" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3836" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3837" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3838" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3839" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3840" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3841" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3842" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3843" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3844" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3845" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3846" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3847" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3848" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3849" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3850" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3851" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3852" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3853" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3854" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3855" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3856" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3857" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3858" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3859" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3860" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3861" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3862" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3863" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3864" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3865" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3866" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3867" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3868" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3869" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3870" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3871" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3872" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3873" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3874" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3875" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3876" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3877" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3878" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3879" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3880" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3881" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3882" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3883" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3884" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3885" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3886" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3887" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3888" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3889" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3890" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3891" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3892" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3893" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3894" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3895" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3896" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3897" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3898" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3899" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3900" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3901" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3902" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3903" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3904" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3905" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3906" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3907" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3908" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3909" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3910" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3911" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3912" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3913" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3914" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3915" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3916" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3917" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3918" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3919" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3920" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3921" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3922" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3923" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3924" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3925" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3926" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3927" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3928" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3929" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3930" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3931" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3932" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3933" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3934" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3935" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3936" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3937" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3938" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3939" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3940" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3941" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3942" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3943" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3944" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3945" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3946" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3947" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3948" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3949" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3950" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3951" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3952" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3953" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3954" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3955" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3956" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3957" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3958" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3959" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3960" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3961" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3962" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3963" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3964" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3965" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3966" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3967" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3968" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3969" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3970" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3971" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3972" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3973" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3974" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3975" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3976" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3977" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3978" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3979" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3980" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3981" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3982" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3983" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3984" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3985" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3986" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3987" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3988" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3989" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3990" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3991" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3992" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3993" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3994" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3995" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3996" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3997" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3998" android:label="@string/dummyLabel" />
+  <attribution android:tag="f3999" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4000" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4001" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4002" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4003" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4004" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4005" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4006" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4007" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4008" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4009" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4010" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4011" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4012" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4013" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4014" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4015" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4016" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4017" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4018" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4019" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4020" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4021" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4022" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4023" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4024" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4025" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4026" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4027" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4028" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4029" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4030" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4031" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4032" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4033" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4034" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4035" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4036" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4037" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4038" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4039" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4040" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4041" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4042" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4043" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4044" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4045" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4046" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4047" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4048" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4049" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4050" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4051" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4052" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4053" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4054" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4055" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4056" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4057" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4058" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4059" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4060" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4061" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4062" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4063" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4064" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4065" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4066" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4067" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4068" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4069" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4070" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4071" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4072" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4073" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4074" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4075" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4076" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4077" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4078" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4079" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4080" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4081" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4082" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4083" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4084" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4085" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4086" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4087" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4088" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4089" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4090" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4091" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4092" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4093" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4094" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4095" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4096" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4097" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4098" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4099" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4100" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4101" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4102" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4103" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4104" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4105" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4106" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4107" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4108" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4109" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4110" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4111" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4112" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4113" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4114" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4115" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4116" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4117" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4118" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4119" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4120" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4121" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4122" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4123" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4124" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4125" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4126" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4127" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4128" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4129" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4130" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4131" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4132" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4133" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4134" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4135" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4136" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4137" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4138" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4139" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4140" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4141" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4142" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4143" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4144" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4145" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4146" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4147" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4148" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4149" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4150" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4151" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4152" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4153" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4154" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4155" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4156" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4157" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4158" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4159" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4160" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4161" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4162" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4163" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4164" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4165" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4166" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4167" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4168" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4169" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4170" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4171" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4172" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4173" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4174" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4175" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4176" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4177" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4178" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4179" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4180" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4181" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4182" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4183" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4184" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4185" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4186" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4187" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4188" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4189" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4190" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4191" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4192" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4193" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4194" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4195" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4196" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4197" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4198" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4199" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4200" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4201" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4202" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4203" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4204" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4205" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4206" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4207" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4208" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4209" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4210" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4211" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4212" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4213" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4214" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4215" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4216" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4217" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4218" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4219" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4220" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4221" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4222" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4223" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4224" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4225" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4226" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4227" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4228" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4229" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4230" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4231" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4232" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4233" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4234" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4235" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4236" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4237" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4238" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4239" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4240" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4241" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4242" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4243" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4244" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4245" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4246" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4247" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4248" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4249" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4250" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4251" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4252" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4253" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4254" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4255" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4256" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4257" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4258" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4259" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4260" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4261" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4262" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4263" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4264" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4265" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4266" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4267" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4268" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4269" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4270" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4271" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4272" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4273" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4274" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4275" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4276" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4277" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4278" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4279" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4280" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4281" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4282" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4283" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4284" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4285" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4286" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4287" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4288" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4289" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4290" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4291" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4292" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4293" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4294" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4295" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4296" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4297" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4298" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4299" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4300" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4301" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4302" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4303" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4304" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4305" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4306" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4307" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4308" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4309" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4310" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4311" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4312" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4313" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4314" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4315" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4316" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4317" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4318" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4319" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4320" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4321" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4322" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4323" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4324" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4325" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4326" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4327" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4328" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4329" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4330" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4331" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4332" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4333" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4334" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4335" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4336" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4337" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4338" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4339" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4340" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4341" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4342" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4343" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4344" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4345" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4346" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4347" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4348" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4349" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4350" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4351" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4352" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4353" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4354" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4355" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4356" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4357" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4358" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4359" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4360" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4361" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4362" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4363" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4364" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4365" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4366" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4367" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4368" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4369" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4370" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4371" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4372" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4373" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4374" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4375" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4376" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4377" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4378" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4379" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4380" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4381" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4382" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4383" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4384" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4385" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4386" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4387" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4388" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4389" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4390" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4391" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4392" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4393" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4394" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4395" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4396" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4397" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4398" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4399" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4400" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4401" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4402" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4403" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4404" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4405" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4406" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4407" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4408" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4409" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4410" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4411" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4412" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4413" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4414" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4415" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4416" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4417" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4418" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4419" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4420" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4421" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4422" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4423" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4424" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4425" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4426" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4427" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4428" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4429" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4430" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4431" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4432" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4433" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4434" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4435" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4436" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4437" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4438" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4439" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4440" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4441" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4442" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4443" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4444" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4445" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4446" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4447" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4448" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4449" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4450" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4451" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4452" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4453" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4454" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4455" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4456" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4457" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4458" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4459" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4460" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4461" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4462" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4463" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4464" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4465" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4466" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4467" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4468" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4469" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4470" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4471" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4472" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4473" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4474" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4475" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4476" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4477" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4478" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4479" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4480" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4481" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4482" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4483" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4484" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4485" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4486" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4487" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4488" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4489" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4490" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4491" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4492" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4493" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4494" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4495" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4496" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4497" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4498" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4499" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4500" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4501" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4502" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4503" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4504" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4505" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4506" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4507" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4508" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4509" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4510" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4511" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4512" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4513" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4514" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4515" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4516" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4517" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4518" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4519" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4520" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4521" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4522" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4523" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4524" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4525" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4526" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4527" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4528" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4529" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4530" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4531" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4532" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4533" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4534" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4535" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4536" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4537" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4538" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4539" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4540" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4541" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4542" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4543" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4544" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4545" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4546" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4547" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4548" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4549" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4550" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4551" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4552" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4553" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4554" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4555" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4556" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4557" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4558" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4559" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4560" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4561" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4562" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4563" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4564" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4565" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4566" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4567" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4568" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4569" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4570" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4571" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4572" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4573" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4574" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4575" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4576" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4577" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4578" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4579" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4580" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4581" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4582" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4583" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4584" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4585" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4586" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4587" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4588" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4589" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4590" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4591" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4592" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4593" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4594" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4595" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4596" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4597" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4598" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4599" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4600" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4601" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4602" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4603" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4604" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4605" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4606" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4607" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4608" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4609" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4610" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4611" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4612" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4613" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4614" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4615" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4616" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4617" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4618" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4619" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4620" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4621" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4622" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4623" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4624" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4625" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4626" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4627" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4628" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4629" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4630" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4631" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4632" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4633" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4634" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4635" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4636" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4637" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4638" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4639" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4640" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4641" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4642" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4643" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4644" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4645" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4646" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4647" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4648" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4649" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4650" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4651" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4652" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4653" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4654" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4655" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4656" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4657" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4658" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4659" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4660" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4661" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4662" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4663" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4664" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4665" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4666" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4667" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4668" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4669" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4670" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4671" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4672" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4673" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4674" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4675" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4676" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4677" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4678" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4679" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4680" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4681" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4682" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4683" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4684" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4685" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4686" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4687" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4688" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4689" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4690" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4691" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4692" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4693" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4694" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4695" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4696" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4697" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4698" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4699" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4700" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4701" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4702" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4703" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4704" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4705" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4706" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4707" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4708" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4709" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4710" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4711" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4712" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4713" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4714" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4715" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4716" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4717" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4718" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4719" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4720" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4721" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4722" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4723" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4724" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4725" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4726" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4727" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4728" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4729" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4730" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4731" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4732" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4733" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4734" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4735" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4736" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4737" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4738" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4739" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4740" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4741" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4742" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4743" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4744" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4745" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4746" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4747" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4748" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4749" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4750" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4751" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4752" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4753" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4754" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4755" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4756" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4757" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4758" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4759" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4760" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4761" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4762" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4763" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4764" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4765" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4766" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4767" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4768" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4769" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4770" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4771" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4772" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4773" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4774" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4775" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4776" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4777" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4778" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4779" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4780" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4781" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4782" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4783" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4784" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4785" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4786" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4787" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4788" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4789" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4790" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4791" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4792" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4793" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4794" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4795" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4796" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4797" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4798" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4799" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4800" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4801" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4802" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4803" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4804" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4805" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4806" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4807" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4808" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4809" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4810" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4811" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4812" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4813" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4814" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4815" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4816" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4817" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4818" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4819" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4820" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4821" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4822" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4823" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4824" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4825" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4826" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4827" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4828" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4829" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4830" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4831" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4832" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4833" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4834" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4835" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4836" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4837" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4838" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4839" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4840" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4841" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4842" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4843" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4844" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4845" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4846" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4847" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4848" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4849" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4850" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4851" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4852" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4853" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4854" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4855" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4856" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4857" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4858" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4859" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4860" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4861" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4862" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4863" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4864" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4865" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4866" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4867" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4868" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4869" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4870" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4871" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4872" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4873" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4874" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4875" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4876" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4877" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4878" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4879" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4880" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4881" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4882" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4883" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4884" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4885" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4886" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4887" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4888" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4889" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4890" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4891" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4892" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4893" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4894" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4895" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4896" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4897" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4898" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4899" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4900" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4901" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4902" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4903" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4904" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4905" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4906" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4907" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4908" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4909" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4910" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4911" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4912" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4913" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4914" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4915" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4916" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4917" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4918" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4919" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4920" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4921" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4922" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4923" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4924" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4925" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4926" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4927" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4928" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4929" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4930" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4931" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4932" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4933" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4934" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4935" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4936" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4937" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4938" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4939" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4940" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4941" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4942" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4943" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4944" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4945" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4946" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4947" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4948" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4949" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4950" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4951" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4952" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4953" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4954" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4955" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4956" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4957" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4958" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4959" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4960" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4961" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4962" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4963" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4964" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4965" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4966" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4967" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4968" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4969" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4970" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4971" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4972" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4973" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4974" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4975" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4976" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4977" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4978" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4979" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4980" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4981" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4982" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4983" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4984" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4985" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4986" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4987" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4988" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4989" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4990" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4991" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4992" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4993" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4994" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4995" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4996" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4997" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4998" android:label="@string/dummyLabel" />
+  <attribution android:tag="f4999" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5000" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5001" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5002" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5003" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5004" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5005" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5006" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5007" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5008" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5009" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5010" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5011" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5012" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5013" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5014" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5015" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5016" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5017" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5018" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5019" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5020" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5021" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5022" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5023" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5024" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5025" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5026" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5027" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5028" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5029" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5030" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5031" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5032" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5033" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5034" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5035" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5036" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5037" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5038" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5039" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5040" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5041" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5042" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5043" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5044" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5045" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5046" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5047" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5048" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5049" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5050" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5051" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5052" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5053" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5054" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5055" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5056" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5057" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5058" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5059" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5060" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5061" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5062" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5063" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5064" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5065" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5066" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5067" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5068" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5069" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5070" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5071" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5072" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5073" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5074" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5075" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5076" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5077" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5078" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5079" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5080" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5081" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5082" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5083" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5084" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5085" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5086" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5087" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5088" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5089" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5090" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5091" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5092" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5093" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5094" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5095" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5096" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5097" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5098" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5099" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5100" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5101" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5102" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5103" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5104" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5105" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5106" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5107" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5108" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5109" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5110" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5111" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5112" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5113" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5114" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5115" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5116" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5117" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5118" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5119" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5120" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5121" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5122" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5123" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5124" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5125" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5126" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5127" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5128" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5129" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5130" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5131" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5132" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5133" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5134" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5135" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5136" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5137" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5138" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5139" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5140" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5141" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5142" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5143" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5144" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5145" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5146" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5147" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5148" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5149" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5150" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5151" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5152" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5153" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5154" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5155" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5156" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5157" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5158" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5159" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5160" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5161" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5162" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5163" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5164" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5165" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5166" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5167" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5168" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5169" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5170" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5171" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5172" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5173" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5174" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5175" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5176" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5177" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5178" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5179" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5180" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5181" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5182" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5183" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5184" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5185" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5186" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5187" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5188" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5189" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5190" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5191" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5192" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5193" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5194" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5195" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5196" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5197" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5198" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5199" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5200" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5201" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5202" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5203" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5204" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5205" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5206" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5207" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5208" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5209" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5210" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5211" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5212" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5213" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5214" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5215" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5216" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5217" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5218" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5219" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5220" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5221" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5222" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5223" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5224" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5225" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5226" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5227" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5228" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5229" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5230" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5231" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5232" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5233" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5234" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5235" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5236" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5237" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5238" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5239" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5240" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5241" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5242" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5243" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5244" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5245" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5246" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5247" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5248" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5249" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5250" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5251" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5252" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5253" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5254" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5255" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5256" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5257" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5258" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5259" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5260" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5261" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5262" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5263" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5264" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5265" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5266" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5267" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5268" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5269" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5270" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5271" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5272" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5273" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5274" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5275" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5276" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5277" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5278" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5279" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5280" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5281" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5282" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5283" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5284" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5285" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5286" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5287" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5288" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5289" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5290" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5291" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5292" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5293" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5294" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5295" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5296" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5297" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5298" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5299" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5300" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5301" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5302" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5303" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5304" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5305" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5306" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5307" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5308" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5309" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5310" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5311" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5312" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5313" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5314" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5315" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5316" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5317" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5318" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5319" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5320" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5321" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5322" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5323" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5324" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5325" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5326" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5327" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5328" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5329" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5330" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5331" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5332" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5333" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5334" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5335" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5336" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5337" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5338" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5339" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5340" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5341" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5342" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5343" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5344" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5345" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5346" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5347" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5348" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5349" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5350" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5351" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5352" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5353" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5354" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5355" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5356" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5357" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5358" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5359" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5360" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5361" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5362" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5363" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5364" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5365" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5366" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5367" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5368" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5369" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5370" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5371" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5372" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5373" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5374" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5375" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5376" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5377" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5378" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5379" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5380" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5381" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5382" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5383" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5384" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5385" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5386" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5387" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5388" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5389" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5390" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5391" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5392" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5393" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5394" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5395" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5396" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5397" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5398" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5399" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5400" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5401" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5402" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5403" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5404" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5405" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5406" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5407" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5408" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5409" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5410" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5411" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5412" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5413" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5414" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5415" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5416" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5417" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5418" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5419" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5420" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5421" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5422" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5423" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5424" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5425" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5426" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5427" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5428" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5429" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5430" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5431" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5432" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5433" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5434" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5435" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5436" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5437" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5438" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5439" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5440" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5441" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5442" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5443" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5444" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5445" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5446" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5447" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5448" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5449" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5450" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5451" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5452" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5453" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5454" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5455" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5456" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5457" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5458" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5459" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5460" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5461" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5462" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5463" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5464" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5465" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5466" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5467" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5468" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5469" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5470" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5471" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5472" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5473" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5474" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5475" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5476" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5477" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5478" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5479" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5480" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5481" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5482" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5483" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5484" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5485" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5486" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5487" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5488" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5489" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5490" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5491" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5492" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5493" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5494" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5495" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5496" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5497" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5498" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5499" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5500" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5501" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5502" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5503" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5504" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5505" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5506" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5507" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5508" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5509" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5510" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5511" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5512" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5513" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5514" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5515" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5516" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5517" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5518" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5519" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5520" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5521" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5522" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5523" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5524" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5525" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5526" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5527" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5528" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5529" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5530" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5531" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5532" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5533" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5534" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5535" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5536" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5537" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5538" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5539" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5540" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5541" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5542" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5543" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5544" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5545" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5546" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5547" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5548" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5549" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5550" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5551" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5552" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5553" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5554" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5555" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5556" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5557" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5558" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5559" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5560" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5561" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5562" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5563" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5564" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5565" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5566" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5567" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5568" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5569" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5570" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5571" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5572" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5573" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5574" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5575" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5576" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5577" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5578" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5579" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5580" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5581" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5582" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5583" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5584" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5585" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5586" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5587" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5588" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5589" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5590" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5591" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5592" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5593" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5594" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5595" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5596" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5597" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5598" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5599" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5600" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5601" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5602" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5603" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5604" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5605" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5606" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5607" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5608" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5609" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5610" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5611" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5612" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5613" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5614" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5615" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5616" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5617" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5618" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5619" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5620" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5621" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5622" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5623" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5624" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5625" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5626" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5627" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5628" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5629" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5630" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5631" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5632" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5633" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5634" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5635" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5636" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5637" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5638" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5639" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5640" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5641" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5642" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5643" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5644" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5645" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5646" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5647" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5648" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5649" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5650" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5651" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5652" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5653" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5654" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5655" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5656" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5657" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5658" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5659" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5660" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5661" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5662" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5663" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5664" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5665" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5666" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5667" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5668" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5669" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5670" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5671" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5672" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5673" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5674" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5675" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5676" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5677" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5678" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5679" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5680" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5681" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5682" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5683" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5684" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5685" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5686" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5687" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5688" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5689" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5690" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5691" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5692" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5693" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5694" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5695" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5696" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5697" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5698" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5699" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5700" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5701" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5702" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5703" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5704" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5705" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5706" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5707" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5708" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5709" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5710" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5711" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5712" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5713" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5714" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5715" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5716" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5717" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5718" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5719" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5720" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5721" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5722" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5723" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5724" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5725" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5726" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5727" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5728" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5729" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5730" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5731" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5732" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5733" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5734" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5735" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5736" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5737" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5738" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5739" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5740" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5741" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5742" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5743" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5744" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5745" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5746" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5747" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5748" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5749" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5750" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5751" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5752" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5753" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5754" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5755" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5756" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5757" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5758" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5759" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5760" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5761" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5762" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5763" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5764" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5765" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5766" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5767" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5768" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5769" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5770" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5771" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5772" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5773" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5774" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5775" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5776" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5777" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5778" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5779" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5780" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5781" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5782" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5783" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5784" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5785" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5786" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5787" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5788" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5789" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5790" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5791" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5792" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5793" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5794" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5795" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5796" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5797" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5798" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5799" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5800" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5801" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5802" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5803" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5804" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5805" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5806" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5807" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5808" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5809" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5810" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5811" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5812" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5813" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5814" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5815" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5816" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5817" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5818" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5819" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5820" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5821" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5822" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5823" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5824" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5825" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5826" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5827" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5828" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5829" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5830" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5831" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5832" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5833" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5834" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5835" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5836" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5837" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5838" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5839" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5840" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5841" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5842" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5843" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5844" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5845" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5846" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5847" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5848" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5849" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5850" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5851" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5852" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5853" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5854" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5855" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5856" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5857" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5858" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5859" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5860" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5861" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5862" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5863" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5864" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5865" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5866" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5867" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5868" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5869" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5870" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5871" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5872" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5873" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5874" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5875" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5876" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5877" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5878" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5879" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5880" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5881" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5882" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5883" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5884" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5885" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5886" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5887" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5888" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5889" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5890" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5891" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5892" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5893" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5894" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5895" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5896" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5897" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5898" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5899" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5900" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5901" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5902" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5903" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5904" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5905" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5906" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5907" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5908" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5909" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5910" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5911" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5912" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5913" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5914" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5915" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5916" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5917" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5918" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5919" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5920" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5921" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5922" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5923" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5924" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5925" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5926" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5927" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5928" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5929" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5930" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5931" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5932" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5933" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5934" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5935" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5936" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5937" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5938" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5939" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5940" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5941" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5942" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5943" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5944" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5945" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5946" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5947" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5948" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5949" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5950" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5951" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5952" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5953" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5954" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5955" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5956" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5957" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5958" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5959" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5960" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5961" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5962" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5963" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5964" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5965" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5966" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5967" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5968" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5969" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5970" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5971" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5972" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5973" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5974" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5975" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5976" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5977" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5978" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5979" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5980" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5981" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5982" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5983" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5984" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5985" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5986" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5987" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5988" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5989" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5990" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5991" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5992" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5993" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5994" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5995" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5996" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5997" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5998" android:label="@string/dummyLabel" />
+  <attribution android:tag="f5999" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6000" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6001" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6002" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6003" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6004" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6005" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6006" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6007" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6008" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6009" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6010" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6011" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6012" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6013" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6014" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6015" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6016" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6017" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6018" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6019" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6020" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6021" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6022" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6023" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6024" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6025" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6026" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6027" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6028" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6029" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6030" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6031" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6032" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6033" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6034" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6035" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6036" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6037" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6038" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6039" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6040" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6041" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6042" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6043" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6044" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6045" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6046" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6047" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6048" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6049" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6050" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6051" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6052" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6053" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6054" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6055" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6056" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6057" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6058" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6059" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6060" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6061" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6062" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6063" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6064" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6065" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6066" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6067" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6068" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6069" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6070" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6071" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6072" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6073" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6074" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6075" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6076" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6077" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6078" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6079" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6080" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6081" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6082" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6083" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6084" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6085" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6086" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6087" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6088" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6089" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6090" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6091" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6092" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6093" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6094" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6095" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6096" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6097" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6098" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6099" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6100" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6101" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6102" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6103" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6104" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6105" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6106" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6107" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6108" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6109" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6110" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6111" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6112" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6113" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6114" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6115" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6116" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6117" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6118" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6119" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6120" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6121" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6122" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6123" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6124" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6125" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6126" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6127" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6128" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6129" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6130" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6131" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6132" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6133" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6134" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6135" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6136" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6137" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6138" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6139" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6140" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6141" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6142" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6143" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6144" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6145" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6146" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6147" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6148" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6149" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6150" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6151" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6152" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6153" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6154" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6155" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6156" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6157" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6158" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6159" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6160" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6161" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6162" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6163" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6164" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6165" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6166" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6167" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6168" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6169" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6170" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6171" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6172" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6173" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6174" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6175" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6176" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6177" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6178" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6179" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6180" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6181" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6182" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6183" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6184" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6185" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6186" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6187" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6188" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6189" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6190" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6191" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6192" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6193" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6194" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6195" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6196" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6197" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6198" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6199" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6200" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6201" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6202" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6203" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6204" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6205" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6206" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6207" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6208" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6209" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6210" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6211" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6212" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6213" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6214" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6215" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6216" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6217" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6218" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6219" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6220" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6221" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6222" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6223" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6224" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6225" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6226" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6227" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6228" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6229" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6230" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6231" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6232" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6233" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6234" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6235" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6236" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6237" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6238" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6239" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6240" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6241" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6242" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6243" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6244" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6245" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6246" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6247" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6248" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6249" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6250" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6251" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6252" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6253" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6254" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6255" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6256" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6257" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6258" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6259" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6260" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6261" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6262" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6263" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6264" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6265" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6266" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6267" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6268" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6269" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6270" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6271" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6272" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6273" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6274" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6275" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6276" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6277" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6278" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6279" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6280" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6281" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6282" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6283" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6284" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6285" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6286" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6287" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6288" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6289" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6290" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6291" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6292" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6293" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6294" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6295" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6296" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6297" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6298" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6299" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6300" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6301" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6302" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6303" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6304" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6305" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6306" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6307" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6308" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6309" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6310" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6311" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6312" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6313" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6314" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6315" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6316" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6317" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6318" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6319" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6320" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6321" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6322" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6323" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6324" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6325" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6326" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6327" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6328" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6329" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6330" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6331" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6332" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6333" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6334" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6335" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6336" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6337" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6338" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6339" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6340" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6341" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6342" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6343" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6344" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6345" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6346" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6347" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6348" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6349" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6350" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6351" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6352" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6353" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6354" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6355" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6356" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6357" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6358" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6359" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6360" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6361" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6362" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6363" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6364" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6365" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6366" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6367" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6368" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6369" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6370" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6371" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6372" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6373" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6374" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6375" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6376" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6377" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6378" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6379" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6380" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6381" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6382" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6383" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6384" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6385" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6386" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6387" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6388" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6389" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6390" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6391" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6392" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6393" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6394" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6395" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6396" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6397" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6398" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6399" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6400" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6401" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6402" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6403" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6404" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6405" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6406" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6407" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6408" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6409" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6410" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6411" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6412" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6413" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6414" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6415" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6416" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6417" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6418" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6419" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6420" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6421" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6422" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6423" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6424" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6425" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6426" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6427" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6428" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6429" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6430" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6431" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6432" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6433" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6434" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6435" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6436" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6437" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6438" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6439" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6440" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6441" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6442" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6443" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6444" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6445" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6446" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6447" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6448" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6449" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6450" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6451" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6452" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6453" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6454" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6455" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6456" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6457" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6458" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6459" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6460" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6461" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6462" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6463" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6464" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6465" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6466" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6467" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6468" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6469" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6470" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6471" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6472" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6473" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6474" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6475" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6476" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6477" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6478" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6479" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6480" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6481" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6482" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6483" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6484" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6485" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6486" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6487" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6488" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6489" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6490" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6491" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6492" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6493" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6494" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6495" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6496" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6497" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6498" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6499" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6500" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6501" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6502" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6503" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6504" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6505" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6506" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6507" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6508" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6509" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6510" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6511" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6512" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6513" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6514" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6515" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6516" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6517" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6518" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6519" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6520" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6521" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6522" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6523" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6524" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6525" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6526" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6527" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6528" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6529" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6530" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6531" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6532" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6533" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6534" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6535" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6536" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6537" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6538" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6539" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6540" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6541" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6542" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6543" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6544" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6545" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6546" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6547" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6548" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6549" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6550" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6551" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6552" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6553" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6554" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6555" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6556" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6557" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6558" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6559" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6560" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6561" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6562" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6563" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6564" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6565" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6566" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6567" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6568" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6569" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6570" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6571" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6572" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6573" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6574" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6575" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6576" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6577" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6578" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6579" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6580" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6581" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6582" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6583" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6584" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6585" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6586" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6587" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6588" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6589" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6590" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6591" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6592" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6593" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6594" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6595" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6596" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6597" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6598" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6599" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6600" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6601" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6602" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6603" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6604" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6605" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6606" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6607" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6608" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6609" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6610" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6611" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6612" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6613" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6614" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6615" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6616" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6617" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6618" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6619" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6620" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6621" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6622" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6623" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6624" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6625" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6626" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6627" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6628" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6629" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6630" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6631" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6632" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6633" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6634" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6635" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6636" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6637" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6638" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6639" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6640" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6641" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6642" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6643" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6644" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6645" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6646" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6647" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6648" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6649" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6650" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6651" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6652" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6653" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6654" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6655" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6656" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6657" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6658" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6659" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6660" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6661" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6662" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6663" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6664" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6665" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6666" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6667" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6668" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6669" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6670" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6671" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6672" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6673" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6674" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6675" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6676" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6677" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6678" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6679" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6680" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6681" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6682" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6683" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6684" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6685" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6686" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6687" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6688" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6689" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6690" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6691" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6692" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6693" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6694" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6695" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6696" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6697" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6698" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6699" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6700" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6701" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6702" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6703" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6704" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6705" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6706" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6707" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6708" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6709" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6710" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6711" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6712" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6713" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6714" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6715" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6716" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6717" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6718" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6719" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6720" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6721" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6722" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6723" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6724" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6725" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6726" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6727" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6728" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6729" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6730" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6731" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6732" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6733" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6734" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6735" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6736" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6737" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6738" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6739" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6740" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6741" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6742" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6743" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6744" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6745" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6746" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6747" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6748" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6749" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6750" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6751" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6752" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6753" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6754" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6755" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6756" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6757" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6758" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6759" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6760" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6761" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6762" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6763" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6764" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6765" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6766" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6767" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6768" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6769" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6770" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6771" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6772" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6773" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6774" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6775" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6776" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6777" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6778" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6779" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6780" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6781" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6782" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6783" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6784" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6785" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6786" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6787" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6788" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6789" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6790" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6791" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6792" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6793" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6794" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6795" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6796" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6797" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6798" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6799" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6800" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6801" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6802" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6803" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6804" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6805" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6806" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6807" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6808" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6809" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6810" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6811" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6812" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6813" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6814" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6815" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6816" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6817" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6818" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6819" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6820" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6821" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6822" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6823" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6824" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6825" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6826" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6827" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6828" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6829" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6830" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6831" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6832" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6833" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6834" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6835" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6836" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6837" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6838" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6839" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6840" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6841" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6842" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6843" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6844" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6845" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6846" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6847" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6848" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6849" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6850" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6851" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6852" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6853" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6854" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6855" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6856" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6857" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6858" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6859" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6860" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6861" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6862" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6863" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6864" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6865" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6866" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6867" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6868" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6869" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6870" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6871" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6872" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6873" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6874" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6875" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6876" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6877" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6878" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6879" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6880" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6881" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6882" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6883" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6884" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6885" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6886" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6887" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6888" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6889" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6890" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6891" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6892" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6893" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6894" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6895" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6896" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6897" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6898" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6899" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6900" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6901" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6902" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6903" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6904" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6905" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6906" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6907" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6908" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6909" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6910" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6911" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6912" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6913" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6914" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6915" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6916" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6917" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6918" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6919" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6920" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6921" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6922" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6923" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6924" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6925" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6926" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6927" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6928" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6929" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6930" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6931" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6932" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6933" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6934" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6935" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6936" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6937" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6938" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6939" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6940" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6941" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6942" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6943" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6944" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6945" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6946" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6947" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6948" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6949" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6950" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6951" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6952" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6953" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6954" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6955" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6956" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6957" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6958" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6959" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6960" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6961" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6962" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6963" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6964" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6965" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6966" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6967" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6968" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6969" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6970" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6971" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6972" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6973" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6974" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6975" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6976" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6977" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6978" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6979" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6980" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6981" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6982" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6983" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6984" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6985" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6986" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6987" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6988" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6989" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6990" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6991" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6992" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6993" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6994" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6995" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6996" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6997" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6998" android:label="@string/dummyLabel" />
+  <attribution android:tag="f6999" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7000" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7001" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7002" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7003" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7004" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7005" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7006" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7007" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7008" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7009" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7010" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7011" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7012" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7013" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7014" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7015" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7016" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7017" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7018" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7019" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7020" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7021" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7022" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7023" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7024" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7025" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7026" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7027" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7028" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7029" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7030" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7031" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7032" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7033" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7034" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7035" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7036" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7037" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7038" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7039" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7040" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7041" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7042" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7043" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7044" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7045" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7046" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7047" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7048" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7049" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7050" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7051" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7052" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7053" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7054" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7055" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7056" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7057" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7058" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7059" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7060" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7061" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7062" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7063" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7064" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7065" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7066" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7067" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7068" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7069" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7070" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7071" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7072" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7073" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7074" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7075" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7076" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7077" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7078" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7079" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7080" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7081" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7082" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7083" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7084" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7085" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7086" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7087" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7088" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7089" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7090" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7091" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7092" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7093" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7094" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7095" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7096" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7097" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7098" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7099" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7100" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7101" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7102" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7103" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7104" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7105" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7106" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7107" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7108" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7109" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7110" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7111" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7112" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7113" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7114" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7115" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7116" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7117" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7118" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7119" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7120" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7121" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7122" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7123" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7124" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7125" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7126" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7127" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7128" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7129" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7130" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7131" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7132" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7133" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7134" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7135" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7136" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7137" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7138" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7139" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7140" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7141" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7142" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7143" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7144" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7145" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7146" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7147" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7148" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7149" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7150" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7151" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7152" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7153" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7154" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7155" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7156" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7157" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7158" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7159" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7160" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7161" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7162" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7163" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7164" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7165" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7166" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7167" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7168" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7169" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7170" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7171" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7172" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7173" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7174" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7175" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7176" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7177" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7178" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7179" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7180" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7181" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7182" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7183" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7184" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7185" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7186" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7187" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7188" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7189" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7190" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7191" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7192" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7193" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7194" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7195" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7196" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7197" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7198" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7199" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7200" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7201" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7202" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7203" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7204" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7205" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7206" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7207" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7208" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7209" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7210" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7211" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7212" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7213" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7214" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7215" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7216" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7217" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7218" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7219" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7220" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7221" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7222" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7223" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7224" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7225" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7226" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7227" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7228" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7229" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7230" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7231" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7232" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7233" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7234" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7235" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7236" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7237" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7238" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7239" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7240" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7241" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7242" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7243" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7244" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7245" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7246" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7247" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7248" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7249" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7250" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7251" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7252" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7253" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7254" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7255" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7256" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7257" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7258" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7259" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7260" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7261" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7262" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7263" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7264" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7265" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7266" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7267" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7268" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7269" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7270" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7271" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7272" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7273" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7274" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7275" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7276" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7277" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7278" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7279" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7280" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7281" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7282" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7283" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7284" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7285" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7286" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7287" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7288" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7289" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7290" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7291" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7292" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7293" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7294" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7295" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7296" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7297" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7298" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7299" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7300" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7301" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7302" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7303" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7304" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7305" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7306" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7307" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7308" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7309" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7310" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7311" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7312" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7313" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7314" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7315" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7316" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7317" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7318" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7319" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7320" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7321" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7322" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7323" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7324" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7325" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7326" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7327" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7328" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7329" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7330" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7331" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7332" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7333" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7334" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7335" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7336" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7337" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7338" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7339" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7340" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7341" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7342" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7343" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7344" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7345" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7346" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7347" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7348" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7349" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7350" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7351" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7352" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7353" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7354" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7355" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7356" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7357" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7358" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7359" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7360" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7361" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7362" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7363" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7364" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7365" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7366" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7367" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7368" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7369" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7370" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7371" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7372" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7373" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7374" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7375" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7376" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7377" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7378" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7379" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7380" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7381" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7382" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7383" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7384" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7385" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7386" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7387" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7388" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7389" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7390" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7391" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7392" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7393" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7394" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7395" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7396" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7397" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7398" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7399" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7400" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7401" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7402" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7403" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7404" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7405" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7406" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7407" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7408" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7409" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7410" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7411" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7412" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7413" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7414" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7415" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7416" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7417" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7418" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7419" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7420" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7421" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7422" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7423" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7424" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7425" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7426" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7427" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7428" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7429" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7430" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7431" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7432" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7433" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7434" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7435" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7436" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7437" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7438" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7439" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7440" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7441" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7442" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7443" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7444" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7445" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7446" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7447" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7448" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7449" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7450" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7451" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7452" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7453" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7454" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7455" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7456" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7457" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7458" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7459" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7460" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7461" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7462" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7463" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7464" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7465" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7466" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7467" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7468" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7469" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7470" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7471" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7472" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7473" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7474" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7475" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7476" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7477" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7478" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7479" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7480" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7481" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7482" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7483" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7484" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7485" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7486" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7487" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7488" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7489" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7490" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7491" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7492" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7493" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7494" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7495" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7496" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7497" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7498" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7499" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7500" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7501" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7502" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7503" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7504" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7505" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7506" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7507" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7508" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7509" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7510" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7511" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7512" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7513" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7514" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7515" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7516" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7517" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7518" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7519" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7520" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7521" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7522" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7523" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7524" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7525" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7526" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7527" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7528" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7529" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7530" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7531" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7532" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7533" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7534" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7535" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7536" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7537" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7538" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7539" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7540" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7541" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7542" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7543" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7544" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7545" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7546" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7547" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7548" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7549" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7550" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7551" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7552" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7553" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7554" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7555" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7556" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7557" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7558" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7559" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7560" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7561" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7562" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7563" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7564" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7565" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7566" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7567" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7568" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7569" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7570" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7571" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7572" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7573" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7574" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7575" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7576" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7577" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7578" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7579" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7580" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7581" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7582" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7583" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7584" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7585" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7586" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7587" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7588" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7589" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7590" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7591" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7592" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7593" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7594" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7595" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7596" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7597" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7598" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7599" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7600" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7601" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7602" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7603" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7604" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7605" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7606" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7607" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7608" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7609" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7610" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7611" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7612" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7613" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7614" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7615" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7616" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7617" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7618" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7619" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7620" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7621" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7622" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7623" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7624" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7625" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7626" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7627" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7628" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7629" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7630" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7631" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7632" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7633" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7634" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7635" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7636" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7637" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7638" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7639" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7640" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7641" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7642" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7643" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7644" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7645" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7646" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7647" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7648" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7649" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7650" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7651" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7652" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7653" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7654" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7655" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7656" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7657" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7658" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7659" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7660" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7661" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7662" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7663" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7664" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7665" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7666" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7667" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7668" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7669" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7670" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7671" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7672" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7673" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7674" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7675" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7676" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7677" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7678" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7679" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7680" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7681" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7682" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7683" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7684" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7685" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7686" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7687" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7688" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7689" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7690" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7691" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7692" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7693" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7694" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7695" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7696" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7697" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7698" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7699" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7700" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7701" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7702" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7703" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7704" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7705" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7706" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7707" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7708" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7709" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7710" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7711" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7712" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7713" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7714" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7715" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7716" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7717" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7718" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7719" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7720" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7721" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7722" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7723" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7724" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7725" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7726" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7727" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7728" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7729" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7730" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7731" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7732" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7733" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7734" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7735" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7736" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7737" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7738" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7739" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7740" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7741" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7742" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7743" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7744" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7745" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7746" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7747" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7748" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7749" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7750" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7751" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7752" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7753" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7754" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7755" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7756" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7757" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7758" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7759" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7760" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7761" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7762" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7763" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7764" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7765" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7766" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7767" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7768" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7769" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7770" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7771" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7772" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7773" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7774" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7775" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7776" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7777" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7778" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7779" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7780" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7781" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7782" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7783" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7784" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7785" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7786" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7787" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7788" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7789" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7790" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7791" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7792" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7793" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7794" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7795" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7796" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7797" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7798" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7799" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7800" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7801" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7802" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7803" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7804" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7805" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7806" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7807" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7808" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7809" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7810" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7811" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7812" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7813" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7814" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7815" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7816" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7817" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7818" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7819" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7820" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7821" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7822" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7823" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7824" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7825" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7826" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7827" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7828" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7829" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7830" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7831" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7832" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7833" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7834" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7835" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7836" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7837" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7838" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7839" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7840" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7841" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7842" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7843" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7844" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7845" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7846" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7847" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7848" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7849" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7850" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7851" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7852" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7853" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7854" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7855" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7856" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7857" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7858" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7859" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7860" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7861" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7862" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7863" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7864" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7865" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7866" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7867" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7868" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7869" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7870" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7871" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7872" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7873" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7874" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7875" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7876" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7877" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7878" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7879" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7880" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7881" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7882" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7883" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7884" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7885" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7886" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7887" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7888" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7889" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7890" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7891" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7892" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7893" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7894" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7895" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7896" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7897" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7898" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7899" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7900" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7901" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7902" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7903" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7904" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7905" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7906" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7907" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7908" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7909" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7910" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7911" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7912" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7913" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7914" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7915" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7916" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7917" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7918" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7919" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7920" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7921" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7922" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7923" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7924" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7925" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7926" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7927" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7928" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7929" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7930" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7931" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7932" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7933" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7934" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7935" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7936" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7937" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7938" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7939" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7940" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7941" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7942" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7943" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7944" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7945" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7946" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7947" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7948" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7949" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7950" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7951" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7952" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7953" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7954" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7955" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7956" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7957" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7958" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7959" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7960" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7961" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7962" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7963" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7964" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7965" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7966" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7967" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7968" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7969" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7970" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7971" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7972" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7973" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7974" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7975" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7976" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7977" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7978" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7979" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7980" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7981" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7982" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7983" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7984" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7985" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7986" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7987" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7988" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7989" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7990" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7991" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7992" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7993" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7994" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7995" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7996" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7997" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7998" android:label="@string/dummyLabel" />
+  <attribution android:tag="f7999" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8000" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8001" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8002" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8003" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8004" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8005" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8006" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8007" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8008" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8009" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8010" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8011" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8012" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8013" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8014" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8015" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8016" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8017" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8018" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8019" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8020" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8021" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8022" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8023" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8024" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8025" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8026" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8027" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8028" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8029" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8030" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8031" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8032" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8033" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8034" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8035" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8036" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8037" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8038" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8039" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8040" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8041" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8042" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8043" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8044" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8045" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8046" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8047" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8048" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8049" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8050" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8051" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8052" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8053" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8054" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8055" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8056" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8057" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8058" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8059" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8060" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8061" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8062" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8063" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8064" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8065" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8066" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8067" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8068" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8069" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8070" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8071" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8072" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8073" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8074" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8075" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8076" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8077" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8078" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8079" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8080" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8081" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8082" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8083" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8084" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8085" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8086" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8087" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8088" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8089" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8090" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8091" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8092" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8093" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8094" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8095" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8096" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8097" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8098" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8099" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8100" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8101" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8102" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8103" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8104" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8105" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8106" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8107" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8108" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8109" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8110" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8111" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8112" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8113" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8114" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8115" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8116" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8117" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8118" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8119" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8120" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8121" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8122" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8123" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8124" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8125" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8126" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8127" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8128" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8129" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8130" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8131" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8132" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8133" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8134" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8135" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8136" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8137" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8138" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8139" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8140" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8141" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8142" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8143" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8144" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8145" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8146" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8147" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8148" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8149" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8150" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8151" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8152" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8153" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8154" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8155" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8156" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8157" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8158" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8159" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8160" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8161" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8162" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8163" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8164" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8165" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8166" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8167" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8168" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8169" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8170" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8171" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8172" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8173" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8174" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8175" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8176" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8177" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8178" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8179" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8180" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8181" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8182" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8183" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8184" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8185" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8186" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8187" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8188" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8189" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8190" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8191" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8192" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8193" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8194" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8195" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8196" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8197" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8198" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8199" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8200" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8201" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8202" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8203" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8204" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8205" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8206" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8207" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8208" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8209" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8210" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8211" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8212" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8213" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8214" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8215" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8216" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8217" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8218" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8219" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8220" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8221" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8222" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8223" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8224" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8225" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8226" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8227" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8228" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8229" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8230" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8231" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8232" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8233" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8234" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8235" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8236" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8237" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8238" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8239" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8240" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8241" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8242" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8243" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8244" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8245" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8246" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8247" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8248" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8249" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8250" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8251" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8252" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8253" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8254" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8255" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8256" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8257" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8258" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8259" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8260" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8261" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8262" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8263" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8264" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8265" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8266" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8267" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8268" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8269" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8270" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8271" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8272" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8273" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8274" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8275" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8276" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8277" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8278" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8279" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8280" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8281" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8282" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8283" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8284" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8285" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8286" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8287" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8288" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8289" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8290" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8291" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8292" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8293" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8294" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8295" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8296" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8297" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8298" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8299" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8300" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8301" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8302" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8303" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8304" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8305" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8306" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8307" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8308" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8309" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8310" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8311" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8312" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8313" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8314" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8315" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8316" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8317" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8318" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8319" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8320" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8321" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8322" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8323" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8324" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8325" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8326" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8327" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8328" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8329" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8330" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8331" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8332" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8333" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8334" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8335" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8336" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8337" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8338" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8339" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8340" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8341" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8342" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8343" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8344" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8345" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8346" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8347" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8348" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8349" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8350" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8351" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8352" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8353" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8354" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8355" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8356" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8357" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8358" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8359" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8360" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8361" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8362" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8363" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8364" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8365" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8366" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8367" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8368" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8369" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8370" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8371" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8372" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8373" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8374" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8375" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8376" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8377" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8378" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8379" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8380" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8381" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8382" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8383" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8384" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8385" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8386" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8387" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8388" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8389" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8390" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8391" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8392" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8393" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8394" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8395" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8396" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8397" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8398" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8399" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8400" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8401" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8402" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8403" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8404" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8405" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8406" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8407" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8408" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8409" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8410" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8411" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8412" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8413" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8414" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8415" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8416" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8417" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8418" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8419" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8420" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8421" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8422" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8423" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8424" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8425" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8426" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8427" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8428" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8429" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8430" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8431" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8432" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8433" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8434" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8435" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8436" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8437" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8438" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8439" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8440" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8441" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8442" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8443" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8444" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8445" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8446" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8447" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8448" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8449" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8450" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8451" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8452" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8453" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8454" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8455" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8456" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8457" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8458" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8459" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8460" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8461" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8462" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8463" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8464" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8465" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8466" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8467" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8468" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8469" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8470" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8471" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8472" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8473" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8474" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8475" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8476" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8477" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8478" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8479" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8480" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8481" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8482" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8483" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8484" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8485" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8486" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8487" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8488" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8489" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8490" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8491" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8492" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8493" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8494" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8495" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8496" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8497" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8498" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8499" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8500" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8501" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8502" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8503" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8504" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8505" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8506" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8507" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8508" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8509" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8510" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8511" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8512" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8513" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8514" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8515" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8516" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8517" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8518" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8519" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8520" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8521" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8522" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8523" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8524" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8525" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8526" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8527" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8528" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8529" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8530" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8531" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8532" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8533" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8534" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8535" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8536" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8537" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8538" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8539" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8540" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8541" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8542" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8543" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8544" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8545" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8546" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8547" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8548" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8549" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8550" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8551" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8552" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8553" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8554" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8555" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8556" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8557" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8558" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8559" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8560" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8561" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8562" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8563" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8564" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8565" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8566" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8567" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8568" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8569" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8570" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8571" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8572" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8573" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8574" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8575" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8576" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8577" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8578" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8579" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8580" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8581" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8582" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8583" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8584" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8585" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8586" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8587" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8588" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8589" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8590" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8591" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8592" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8593" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8594" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8595" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8596" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8597" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8598" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8599" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8600" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8601" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8602" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8603" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8604" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8605" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8606" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8607" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8608" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8609" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8610" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8611" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8612" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8613" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8614" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8615" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8616" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8617" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8618" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8619" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8620" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8621" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8622" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8623" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8624" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8625" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8626" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8627" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8628" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8629" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8630" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8631" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8632" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8633" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8634" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8635" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8636" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8637" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8638" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8639" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8640" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8641" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8642" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8643" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8644" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8645" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8646" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8647" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8648" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8649" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8650" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8651" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8652" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8653" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8654" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8655" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8656" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8657" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8658" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8659" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8660" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8661" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8662" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8663" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8664" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8665" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8666" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8667" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8668" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8669" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8670" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8671" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8672" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8673" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8674" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8675" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8676" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8677" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8678" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8679" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8680" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8681" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8682" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8683" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8684" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8685" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8686" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8687" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8688" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8689" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8690" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8691" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8692" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8693" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8694" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8695" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8696" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8697" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8698" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8699" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8700" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8701" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8702" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8703" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8704" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8705" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8706" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8707" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8708" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8709" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8710" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8711" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8712" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8713" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8714" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8715" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8716" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8717" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8718" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8719" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8720" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8721" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8722" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8723" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8724" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8725" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8726" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8727" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8728" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8729" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8730" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8731" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8732" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8733" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8734" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8735" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8736" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8737" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8738" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8739" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8740" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8741" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8742" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8743" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8744" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8745" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8746" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8747" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8748" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8749" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8750" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8751" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8752" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8753" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8754" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8755" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8756" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8757" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8758" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8759" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8760" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8761" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8762" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8763" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8764" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8765" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8766" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8767" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8768" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8769" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8770" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8771" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8772" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8773" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8774" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8775" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8776" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8777" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8778" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8779" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8780" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8781" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8782" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8783" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8784" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8785" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8786" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8787" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8788" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8789" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8790" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8791" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8792" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8793" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8794" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8795" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8796" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8797" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8798" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8799" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8800" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8801" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8802" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8803" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8804" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8805" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8806" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8807" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8808" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8809" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8810" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8811" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8812" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8813" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8814" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8815" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8816" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8817" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8818" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8819" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8820" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8821" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8822" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8823" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8824" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8825" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8826" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8827" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8828" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8829" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8830" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8831" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8832" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8833" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8834" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8835" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8836" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8837" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8838" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8839" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8840" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8841" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8842" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8843" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8844" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8845" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8846" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8847" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8848" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8849" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8850" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8851" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8852" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8853" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8854" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8855" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8856" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8857" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8858" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8859" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8860" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8861" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8862" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8863" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8864" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8865" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8866" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8867" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8868" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8869" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8870" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8871" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8872" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8873" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8874" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8875" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8876" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8877" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8878" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8879" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8880" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8881" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8882" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8883" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8884" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8885" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8886" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8887" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8888" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8889" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8890" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8891" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8892" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8893" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8894" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8895" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8896" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8897" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8898" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8899" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8900" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8901" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8902" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8903" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8904" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8905" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8906" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8907" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8908" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8909" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8910" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8911" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8912" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8913" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8914" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8915" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8916" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8917" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8918" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8919" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8920" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8921" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8922" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8923" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8924" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8925" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8926" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8927" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8928" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8929" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8930" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8931" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8932" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8933" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8934" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8935" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8936" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8937" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8938" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8939" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8940" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8941" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8942" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8943" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8944" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8945" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8946" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8947" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8948" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8949" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8950" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8951" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8952" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8953" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8954" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8955" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8956" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8957" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8958" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8959" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8960" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8961" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8962" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8963" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8964" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8965" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8966" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8967" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8968" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8969" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8970" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8971" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8972" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8973" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8974" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8975" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8976" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8977" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8978" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8979" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8980" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8981" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8982" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8983" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8984" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8985" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8986" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8987" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8988" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8989" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8990" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8991" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8992" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8993" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8994" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8995" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8996" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8997" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8998" android:label="@string/dummyLabel" />
+  <attribution android:tag="f8999" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9000" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9001" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9002" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9003" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9004" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9005" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9006" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9007" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9008" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9009" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9010" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9011" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9012" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9013" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9014" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9015" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9016" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9017" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9018" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9019" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9020" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9021" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9022" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9023" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9024" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9025" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9026" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9027" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9028" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9029" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9030" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9031" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9032" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9033" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9034" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9035" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9036" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9037" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9038" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9039" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9040" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9041" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9042" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9043" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9044" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9045" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9046" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9047" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9048" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9049" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9050" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9051" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9052" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9053" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9054" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9055" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9056" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9057" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9058" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9059" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9060" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9061" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9062" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9063" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9064" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9065" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9066" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9067" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9068" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9069" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9070" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9071" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9072" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9073" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9074" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9075" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9076" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9077" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9078" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9079" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9080" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9081" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9082" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9083" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9084" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9085" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9086" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9087" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9088" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9089" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9090" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9091" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9092" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9093" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9094" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9095" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9096" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9097" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9098" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9099" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9100" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9101" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9102" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9103" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9104" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9105" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9106" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9107" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9108" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9109" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9110" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9111" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9112" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9113" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9114" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9115" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9116" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9117" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9118" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9119" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9120" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9121" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9122" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9123" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9124" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9125" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9126" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9127" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9128" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9129" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9130" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9131" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9132" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9133" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9134" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9135" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9136" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9137" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9138" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9139" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9140" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9141" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9142" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9143" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9144" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9145" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9146" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9147" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9148" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9149" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9150" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9151" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9152" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9153" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9154" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9155" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9156" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9157" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9158" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9159" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9160" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9161" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9162" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9163" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9164" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9165" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9166" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9167" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9168" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9169" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9170" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9171" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9172" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9173" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9174" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9175" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9176" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9177" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9178" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9179" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9180" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9181" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9182" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9183" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9184" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9185" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9186" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9187" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9188" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9189" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9190" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9191" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9192" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9193" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9194" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9195" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9196" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9197" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9198" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9199" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9200" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9201" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9202" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9203" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9204" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9205" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9206" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9207" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9208" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9209" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9210" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9211" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9212" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9213" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9214" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9215" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9216" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9217" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9218" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9219" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9220" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9221" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9222" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9223" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9224" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9225" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9226" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9227" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9228" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9229" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9230" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9231" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9232" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9233" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9234" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9235" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9236" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9237" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9238" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9239" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9240" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9241" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9242" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9243" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9244" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9245" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9246" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9247" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9248" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9249" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9250" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9251" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9252" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9253" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9254" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9255" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9256" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9257" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9258" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9259" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9260" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9261" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9262" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9263" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9264" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9265" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9266" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9267" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9268" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9269" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9270" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9271" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9272" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9273" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9274" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9275" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9276" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9277" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9278" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9279" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9280" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9281" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9282" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9283" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9284" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9285" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9286" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9287" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9288" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9289" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9290" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9291" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9292" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9293" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9294" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9295" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9296" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9297" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9298" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9299" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9300" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9301" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9302" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9303" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9304" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9305" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9306" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9307" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9308" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9309" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9310" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9311" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9312" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9313" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9314" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9315" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9316" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9317" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9318" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9319" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9320" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9321" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9322" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9323" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9324" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9325" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9326" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9327" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9328" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9329" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9330" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9331" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9332" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9333" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9334" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9335" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9336" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9337" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9338" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9339" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9340" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9341" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9342" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9343" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9344" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9345" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9346" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9347" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9348" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9349" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9350" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9351" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9352" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9353" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9354" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9355" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9356" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9357" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9358" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9359" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9360" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9361" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9362" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9363" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9364" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9365" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9366" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9367" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9368" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9369" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9370" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9371" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9372" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9373" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9374" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9375" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9376" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9377" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9378" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9379" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9380" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9381" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9382" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9383" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9384" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9385" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9386" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9387" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9388" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9389" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9390" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9391" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9392" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9393" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9394" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9395" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9396" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9397" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9398" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9399" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9400" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9401" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9402" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9403" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9404" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9405" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9406" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9407" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9408" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9409" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9410" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9411" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9412" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9413" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9414" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9415" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9416" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9417" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9418" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9419" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9420" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9421" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9422" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9423" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9424" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9425" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9426" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9427" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9428" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9429" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9430" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9431" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9432" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9433" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9434" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9435" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9436" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9437" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9438" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9439" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9440" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9441" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9442" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9443" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9444" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9445" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9446" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9447" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9448" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9449" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9450" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9451" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9452" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9453" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9454" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9455" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9456" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9457" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9458" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9459" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9460" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9461" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9462" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9463" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9464" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9465" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9466" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9467" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9468" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9469" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9470" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9471" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9472" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9473" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9474" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9475" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9476" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9477" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9478" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9479" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9480" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9481" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9482" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9483" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9484" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9485" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9486" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9487" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9488" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9489" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9490" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9491" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9492" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9493" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9494" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9495" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9496" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9497" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9498" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9499" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9500" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9501" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9502" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9503" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9504" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9505" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9506" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9507" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9508" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9509" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9510" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9511" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9512" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9513" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9514" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9515" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9516" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9517" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9518" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9519" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9520" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9521" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9522" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9523" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9524" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9525" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9526" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9527" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9528" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9529" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9530" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9531" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9532" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9533" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9534" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9535" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9536" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9537" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9538" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9539" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9540" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9541" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9542" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9543" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9544" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9545" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9546" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9547" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9548" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9549" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9550" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9551" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9552" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9553" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9554" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9555" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9556" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9557" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9558" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9559" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9560" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9561" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9562" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9563" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9564" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9565" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9566" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9567" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9568" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9569" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9570" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9571" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9572" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9573" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9574" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9575" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9576" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9577" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9578" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9579" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9580" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9581" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9582" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9583" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9584" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9585" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9586" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9587" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9588" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9589" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9590" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9591" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9592" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9593" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9594" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9595" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9596" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9597" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9598" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9599" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9600" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9601" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9602" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9603" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9604" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9605" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9606" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9607" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9608" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9609" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9610" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9611" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9612" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9613" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9614" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9615" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9616" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9617" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9618" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9619" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9620" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9621" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9622" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9623" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9624" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9625" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9626" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9627" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9628" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9629" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9630" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9631" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9632" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9633" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9634" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9635" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9636" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9637" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9638" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9639" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9640" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9641" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9642" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9643" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9644" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9645" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9646" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9647" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9648" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9649" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9650" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9651" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9652" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9653" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9654" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9655" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9656" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9657" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9658" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9659" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9660" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9661" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9662" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9663" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9664" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9665" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9666" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9667" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9668" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9669" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9670" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9671" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9672" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9673" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9674" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9675" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9676" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9677" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9678" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9679" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9680" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9681" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9682" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9683" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9684" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9685" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9686" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9687" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9688" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9689" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9690" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9691" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9692" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9693" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9694" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9695" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9696" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9697" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9698" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9699" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9700" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9701" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9702" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9703" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9704" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9705" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9706" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9707" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9708" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9709" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9710" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9711" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9712" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9713" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9714" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9715" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9716" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9717" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9718" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9719" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9720" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9721" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9722" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9723" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9724" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9725" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9726" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9727" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9728" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9729" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9730" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9731" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9732" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9733" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9734" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9735" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9736" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9737" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9738" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9739" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9740" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9741" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9742" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9743" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9744" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9745" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9746" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9747" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9748" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9749" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9750" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9751" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9752" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9753" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9754" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9755" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9756" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9757" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9758" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9759" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9760" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9761" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9762" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9763" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9764" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9765" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9766" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9767" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9768" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9769" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9770" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9771" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9772" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9773" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9774" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9775" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9776" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9777" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9778" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9779" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9780" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9781" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9782" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9783" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9784" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9785" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9786" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9787" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9788" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9789" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9790" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9791" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9792" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9793" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9794" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9795" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9796" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9797" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9798" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9799" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9800" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9801" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9802" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9803" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9804" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9805" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9806" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9807" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9808" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9809" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9810" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9811" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9812" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9813" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9814" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9815" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9816" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9817" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9818" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9819" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9820" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9821" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9822" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9823" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9824" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9825" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9826" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9827" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9828" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9829" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9830" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9831" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9832" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9833" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9834" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9835" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9836" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9837" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9838" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9839" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9840" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9841" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9842" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9843" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9844" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9845" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9846" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9847" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9848" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9849" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9850" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9851" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9852" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9853" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9854" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9855" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9856" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9857" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9858" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9859" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9860" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9861" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9862" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9863" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9864" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9865" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9866" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9867" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9868" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9869" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9870" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9871" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9872" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9873" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9874" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9875" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9876" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9877" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9878" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9879" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9880" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9881" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9882" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9883" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9884" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9885" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9886" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9887" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9888" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9889" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9890" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9891" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9892" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9893" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9894" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9895" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9896" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9897" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9898" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9899" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9900" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9901" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9902" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9903" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9904" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9905" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9906" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9907" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9908" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9909" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9910" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9911" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9912" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9913" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9914" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9915" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9916" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9917" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9918" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9919" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9920" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9921" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9922" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9923" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9924" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9925" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9926" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9927" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9928" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9929" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9930" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9931" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9932" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9933" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9934" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9935" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9936" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9937" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9938" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9939" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9940" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9941" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9942" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9943" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9944" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9945" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9946" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9947" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9948" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9949" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9950" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9951" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9952" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9953" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9954" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9955" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9956" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9957" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9958" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9959" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9960" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9961" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9962" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9963" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9964" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9965" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9966" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9967" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9968" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9969" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9970" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9971" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9972" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9973" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9974" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9975" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9976" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9977" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9978" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9979" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9980" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9981" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9982" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9983" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9984" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9985" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9986" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9987" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9988" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9989" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9990" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9991" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9992" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9993" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9994" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9995" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9996" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9997" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9998" android:label="@string/dummyLabel" />
+  <attribution android:tag="f9999" android:label="@string/dummyLabel" />
 
   <attribution android:tag="toomany" android:label="@string/dummyLabel" />
 
diff --git a/tests/tests/appop/src/android/app/appops/cts/AppOpsLoggingTest.kt b/tests/tests/appop/src/android/app/appops/cts/AppOpsLoggingTest.kt
index 8a99f0c..c044b6b 100644
--- a/tests/tests/appop/src/android/app/appops/cts/AppOpsLoggingTest.kt
+++ b/tests/tests/appop/src/android/app/appops/cts/AppOpsLoggingTest.kt
@@ -110,7 +110,6 @@
 )
 
 @AppModeFull(reason = "Test relies on other app to connect to. Instant apps can't see other apps")
-@Ignore("b/184491462")
 class AppOpsLoggingTest {
     private val context = InstrumentationRegistry.getInstrumentation().targetContext as Context
     private val appOpsManager = context.getSystemService(AppOpsManager::class.java)
@@ -669,6 +668,7 @@
      * Realistic end-to-end test for recording audio
      */
     @Test
+    @Ignore
     fun recordAudio() {
         val ar = AudioRecord.Builder()
                 .setContext(context.createAttributionContext(TEST_ATTRIBUTION_TAG)).build()
@@ -689,6 +689,7 @@
      * Realistic end-to-end test for recording low latency audio
      */
     @Test
+    @Ignore
     fun recordAudioLowLatency() {
         val ar = AudioRecord.Builder()
                 .setAudioAttributes(AudioAttributes.Builder()
@@ -712,6 +713,7 @@
      * Realistic end-to-end test for recording using the public native API with shared, low latency
      */
     @Test
+    @Ignore
     fun recordAudioNativeLowLatencyShared() {
         nativeStartStopAudioRecord(isShared = true, isLowLatency = true,
                 packageName = context.packageName, attributionTag = TEST_ATTRIBUTION_TAG)
@@ -727,6 +729,7 @@
      * mode
      */
     @Test
+    @Ignore
     fun recordAudioNativeLowLatencyExclusive() {
         nativeStartStopAudioRecord(isShared = false, isLowLatency = true,
                 packageName = context.packageName, attributionTag = TEST_ATTRIBUTION_TAG)
@@ -742,6 +745,7 @@
      * mode
      */
     @Test
+    @Ignore
     fun recordAudioNativeShared() {
         nativeStartStopAudioRecord(isShared = true, isLowLatency = false,
                 packageName = context.packageName, attributionTag = TEST_ATTRIBUTION_TAG)
diff --git a/tests/tests/car/Android.bp b/tests/tests/car/Android.bp
index c3e5890..56699e2 100644
--- a/tests/tests/car/Android.bp
+++ b/tests/tests/car/Android.bp
@@ -27,12 +27,16 @@
         // TODO: remove once Android migrates to JUnit 4.12,
         // which provides assertThrows
         "testng",
+        "libprotobuf-java-lite",
     ],
     libs: [
         "android.test.base",
         "android.car-test-stubs",
     ],
-    srcs: ["src/**/*.java"],
+    srcs: [
+        "src/**/*.java",
+        ":rotary-service-proto-source",
+    ],
     // Tag this module as a cts test artifact
     test_suites: [
         "cts",
diff --git a/tests/tests/car/src/android/car/cts/CarRotaryImeTest.java b/tests/tests/car/src/android/car/cts/CarRotaryImeTest.java
new file mode 100644
index 0000000..d1f9001
--- /dev/null
+++ b/tests/tests/car/src/android/car/cts/CarRotaryImeTest.java
@@ -0,0 +1,146 @@
+/*
+ * 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 android.car.cts;
+
+import static android.provider.Settings.Secure.ENABLED_INPUT_METHODS;
+
+import static com.google.common.truth.Truth.assertWithMessage;
+
+import static org.junit.Assume.assumeTrue;
+
+import android.app.UiAutomation;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.os.ParcelFileDescriptor;
+import android.provider.Settings;
+import android.view.accessibility.AccessibilityManager;
+
+import androidx.annotation.NonNull;
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.car.rotary.RotaryProtos;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Arrays;
+
+public final class CarRotaryImeTest {
+    private static final ComponentName ROTARY_SERVICE_COMPONENT_NAME =
+            ComponentName.unflattenFromString("com.android.car.rotary/.RotaryService");
+
+    /** Hidden secure setting for disabled system IMEs. */
+    private static final String DISABLED_SYSTEM_INPUT_METHODS = "disabled_system_input_methods";
+
+    private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext();
+    private final ContentResolver mContentResolver = mContext.getContentResolver();
+    private final AccessibilityManager mAccessibilityManager =
+            mContext.getSystemService(AccessibilityManager.class);
+
+    /**
+     * Tests that, if a rotary input method is specified via the {@code rotary_input_method} string
+     * resource, it's the component name of an existing IME.
+     */
+    @Test
+    public void rotaryInputMethodValidIfSpecified() throws Exception {
+        assumeHasRotaryService();
+
+        String rotaryInputMethod = dumpsysRotaryServiceProto().getRotaryInputMethod();
+
+        assumeTrue("Rotary input method not specified, skipping test",
+                rotaryInputMethod != null && !rotaryInputMethod.isEmpty());
+        assertWithMessage("isValidIme(" + rotaryInputMethod + ")")
+                .that(isValidIme(rotaryInputMethod)).isTrue();
+    }
+
+    /**
+     * The default touch input method must be specified via the {@code default_touch_input_method}
+     * string resource, and it must be the component name of an existing IME.
+     */
+    @Ignore("TODO(b/184390443)")
+    @Test
+    public void defaultTouchInputMethodSpecifiedAndValid() throws Exception {
+        assumeHasRotaryService();
+
+        String defaultTouchInputMethod = dumpsysRotaryServiceProto().getDefaultTouchInputMethod();
+
+        assertWithMessage("defaultTouchInputMethod").that(defaultTouchInputMethod).isNotEmpty();
+        assertWithMessage("isValidIme(" + defaultTouchInputMethod + ")")
+                .that(isValidIme(defaultTouchInputMethod)).isTrue();
+    }
+
+    private RotaryProtos.RotaryService dumpsysRotaryServiceProto() throws IOException {
+        UiAutomation uiAutomation = InstrumentationRegistry.getInstrumentation().getUiAutomation(
+                UiAutomation.FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES);
+        ParcelFileDescriptor pfd = uiAutomation.executeShellCommand(
+                "dumpsys activity service " + ROTARY_SERVICE_COMPONENT_NAME.flattenToString()
+                        + " proto");
+        try (FileInputStream fis = new ParcelFileDescriptor.AutoCloseInputStream(pfd)) {
+            // TODO(b/184973707): Remove this code once ActivityManager supports dumping a service
+            //                    in proto format.
+            // Skip over:
+            //   SERVICE com.android.car.rotary/.RotaryService ... pid=... user=10
+            //   __Client:
+            //   ____
+            // where underscores represent spaces.
+            byte[] buffer = new byte[1];
+            while (fis.read(buffer) > 0 && buffer[0] != ':') {
+                // Do nothing.
+            }
+            // Skip carriage return and four space indent.
+            fis.skip(5);
+
+            return RotaryProtos.RotaryService.parseFrom(fis);
+        }
+    }
+
+    private void assumeHasRotaryService() {
+        assumeTrue("Rotary service not enabled; skipping test",
+                mAccessibilityManager.getInstalledAccessibilityServiceList().stream().anyMatch(
+                        accessibilityServiceInfo ->
+                                ROTARY_SERVICE_COMPONENT_NAME.equals(
+                                        accessibilityServiceInfo.getComponentName())));
+    }
+
+    /** Returns whether {@code flattenedComponentName} is an installed input method. */
+    private boolean isValidIme(@NonNull String flattenedComponentName) {
+        ComponentName componentName = ComponentName.unflattenFromString(flattenedComponentName);
+        return imeSettingContains(ENABLED_INPUT_METHODS, componentName)
+                || imeSettingContains(DISABLED_SYSTEM_INPUT_METHODS, componentName);
+    }
+
+    /**
+     * Fetches the secure setting {@code settingName} containing a colon-separated list of IMEs with
+     * their subtypes and returns whether {@code componentName} is one of the IMEs.
+     */
+    private boolean imeSettingContains(@NonNull String settingName,
+            @NonNull ComponentName componentName) {
+        String colonSeparatedComponentNamesWithSubtypes =
+                Settings.Secure.getString(mContentResolver, settingName);
+        if (colonSeparatedComponentNamesWithSubtypes == null) {
+            return false;
+        }
+        return Arrays.stream(colonSeparatedComponentNamesWithSubtypes.split(":"))
+                .map(componentNameWithSubtypes -> componentNameWithSubtypes.split(";"))
+                .anyMatch(componentNameAndSubtypes -> componentNameAndSubtypes.length >= 1
+                        && componentName.equals(
+                                ComponentName.unflattenFromString(componentNameAndSubtypes[0])));
+    }
+}
diff --git a/tests/tests/carrierapi/Android.bp b/tests/tests/carrierapi/Android.bp
index 5f5b61d..32b10e5 100644
--- a/tests/tests/carrierapi/Android.bp
+++ b/tests/tests/carrierapi/Android.bp
@@ -21,8 +21,8 @@
     defaults: ["cts_defaults"],
     static_libs: [
         "androidx.test.uiautomator_uiautomator",
-        "ctstestrunner-axt",
         "compatibility-device-util-axt",
+        "ctstestrunner-axt",
         "junit",
         "truth-prebuilt",
     ],
@@ -34,8 +34,8 @@
         "general-tests",
     ],
     libs: [
-        "android.test.runner",
         "android.test.base",
+        "android.test.runner",
     ],
     // This  APK must be signed to match the test SIM's cert whitelist.
     // While "testkey" is the default, there are different per-device testkeys, so
diff --git a/tests/tests/carrierapi/AndroidTest.xml b/tests/tests/carrierapi/AndroidTest.xml
index 8d1174b..9b6d4fe 100644
--- a/tests/tests/carrierapi/AndroidTest.xml
+++ b/tests/tests/carrierapi/AndroidTest.xml
@@ -14,7 +14,7 @@
      limitations under the License.
 -->
 <configuration description="Config for CTS Carrier APIs test cases">
-  <option name="test-suite-tag" value="cts" />
+    <option name="test-suite-tag" value="cts" />
     <option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
     <option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
     <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
diff --git a/tests/tests/carrierapi/src/android/carrierapi/cts/ApnDatabaseTest.java b/tests/tests/carrierapi/src/android/carrierapi/cts/ApnDatabaseTest.java
index 91ba3fc..59794c5 100644
--- a/tests/tests/carrierapi/src/android/carrierapi/cts/ApnDatabaseTest.java
+++ b/tests/tests/carrierapi/src/android/carrierapi/cts/ApnDatabaseTest.java
@@ -15,22 +15,19 @@
  */
 package android.carrierapi.cts;
 
-import static junit.framework.TestCase.assertEquals;
+import static com.google.common.truth.Truth.assertWithMessage;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.fail;
 
 import android.content.ContentResolver;
 import android.content.ContentValues;
-import android.content.pm.PackageManager;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteException;
 import android.net.Uri;
 import android.provider.Telephony.Carriers;
 import android.util.Log;
 
-import androidx.test.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
 
 import org.junit.Before;
@@ -42,17 +39,16 @@
 import java.util.Map;
 
 /**
- * Build, install and run the tests by running the commands below:
- *  make cts -j64
- *  cts-tradefed run cts -m CtsCarrierApiTestCases --test android.carrierapi.cts.ApnDatabaseTest
+ * Unit tests for the APN database exposed by {@link Carriers}.
+ *
+ * <p>Test using `atest CtsCarrierApiTestCases:ApnDatabaseTest` or `make cts -j64 && cts-tradefed
+ * run cts -m CtsCarrierApiTestCases --test android.carrierapi.cts.ApnDatabaseTest`
  */
 @RunWith(AndroidJUnit4.class)
-public class ApnDatabaseTest {
+public class ApnDatabaseTest extends BaseCarrierApiTest {
     private static final String TAG = "ApnDatabaseTest";
 
     private ContentResolver mContentResolver;
-    private PackageManager mPackageManager;
-    private boolean mHasCellular;
 
     private static final String NAME = "carrierName";
     private static final String APN = "apn";
@@ -72,25 +68,28 @@
     private static final String NETWORK_TYPE_BITMASK = "0";
     private static final String BEARER = "0";
 
-    private static final Map<String, String> APN_MAP = new HashMap<String,String>() {{
-        put(Carriers.NAME, NAME);
-        put(Carriers.APN, APN);
-        put(Carriers.PROXY, PROXY);
-        put(Carriers.PORT, PORT);
-        put(Carriers.MMSC, MMSC);
-        put(Carriers.MMSPROXY, MMSPROXY);
-        put(Carriers.MMSPORT, MMSPORT);
-        put(Carriers.NUMERIC, NUMERIC);
-        put(Carriers.USER, USER);
-        put(Carriers.PASSWORD, PASSWORD);
-        put(Carriers.AUTH_TYPE, AUTH_TYPE);
-        put(Carriers.TYPE, TYPE);
-        put(Carriers.PROTOCOL, PROTOCOL);
-        put(Carriers.ROAMING_PROTOCOL, ROAMING_PROTOCOL);
-        put(Carriers.CARRIER_ENABLED, CARRIER_ENABLED);
-        put(Carriers.NETWORK_TYPE_BITMASK, NETWORK_TYPE_BITMASK);
-        put(Carriers.BEARER, BEARER);
-    }};
+    private static final Map<String, String> APN_MAP =
+            new HashMap<String, String>() {
+                {
+                    put(Carriers.NAME, NAME);
+                    put(Carriers.APN, APN);
+                    put(Carriers.PROXY, PROXY);
+                    put(Carriers.PORT, PORT);
+                    put(Carriers.MMSC, MMSC);
+                    put(Carriers.MMSPROXY, MMSPROXY);
+                    put(Carriers.MMSPORT, MMSPORT);
+                    put(Carriers.NUMERIC, NUMERIC);
+                    put(Carriers.USER, USER);
+                    put(Carriers.PASSWORD, PASSWORD);
+                    put(Carriers.AUTH_TYPE, AUTH_TYPE);
+                    put(Carriers.TYPE, TYPE);
+                    put(Carriers.PROTOCOL, PROTOCOL);
+                    put(Carriers.ROAMING_PROTOCOL, ROAMING_PROTOCOL);
+                    put(Carriers.CARRIER_ENABLED, CARRIER_ENABLED);
+                    put(Carriers.NETWORK_TYPE_BITMASK, NETWORK_TYPE_BITMASK);
+                    put(Carriers.BEARER, BEARER);
+                }
+            };
 
     // Faked network type bitmask and its compatible bearer bitmask.
     private static final int NETWORK_TYPE_BITMASK_NUMBER = 1 << (13 - 1);
@@ -98,29 +97,16 @@
 
     @Before
     public void setUp() throws Exception {
-        mContentResolver = InstrumentationRegistry.getContext().getContentResolver();
-        mPackageManager = InstrumentationRegistry.getContext().getPackageManager();
-        // Checks whether the cellular stack should be running on this device.
-        mHasCellular = mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
-        if (!mHasCellular) {
-            Log.e(TAG, "No cellular support, all tests will be skipped.");
-        }
-    }
-
-    private void failMessage() {
-        fail("This test requires a SIM card with carrier privilege rule on it.\n" +
-                "Visit https://source.android.com/devices/tech/config/uicc.html");
+        mContentResolver = getContext().getContentResolver();
     }
 
     /**
-     * Test inserting, querying, updating and deleting values in carriers table.
-     * Verify that the inserted values match the result of the query and are deleted.
+     * Test inserting, querying, updating and deleting values in carriers table. Verify that the
+     * inserted values match the result of the query and are deleted.
      */
     @Test
     public void testValidCase() {
-        if (!mHasCellular) return;
         Uri uri = Carriers.CONTENT_URI;
-        // CONTENT_URI = Uri.parse("content://telephony/carriers");
         // Create A set of column_name/value pairs to add to the database.
         ContentValues contentValues = makeDefaultContentValues();
 
@@ -128,69 +114,84 @@
             // Insert the value into database.
             Log.d(TAG, "testInsertCarriers Inserting contentValues: " + contentValues.toString());
             Uri newUri = mContentResolver.insert(uri, contentValues);
-            assertNotNull("Failed to insert to table", newUri);
+            assertWithMessage("Failed to insert to table").that(newUri).isNotNull();
 
             // Get the values in table.
             final String selection = Carriers.NUMERIC + "=?";
-            String[] selectionArgs = { NUMERIC };
+            String[] selectionArgs = {NUMERIC};
             String[] apnProjection = APN_MAP.keySet().toArray(new String[APN_MAP.size()]);
-            Log.d(TAG, "testInsertCarriers query projection: " + Arrays.toString(apnProjection)
-                    + "\ntestInsertCarriers selection: " + selection
-                    + "\ntestInsertCarriers selectionArgs: " + Arrays.toString(selectionArgs));
-            Cursor cursor = mContentResolver.query(
-                    uri, apnProjection, selection, selectionArgs, null);
+            Log.d(
+                    TAG,
+                    "testInsertCarriers query projection: "
+                            + Arrays.toString(apnProjection)
+                            + "\ntestInsertCarriers selection: "
+                            + selection
+                            + "\ntestInsertCarriers selectionArgs: "
+                            + Arrays.toString(selectionArgs));
+            Cursor cursor =
+                    mContentResolver.query(uri, apnProjection, selection, selectionArgs, null);
 
             // Verify that the inserted value match the results of the query
-            assertNotNull("Failed to query the table", cursor);
-            assertEquals("Unexpected number of APNs returned by cursor",
-                    1, cursor.getCount());
+            assertWithMessage("Failed to query the table").that(cursor).isNotNull();
+            assertWithMessage("Unexpected number of APNs returned by cursor")
+                    .that(cursor.getCount())
+                    .isEqualTo(1);
             cursor.moveToFirst();
-            for (Map.Entry<String, String> entry: APN_MAP.entrySet()) {
-                assertEquals(
-                        "Unexpected value returned by cursor",
-                        cursor.getString(cursor.getColumnIndex(entry.getKey())), entry.getValue());
+            for (Map.Entry<String, String> entry : APN_MAP.entrySet()) {
+                assertWithMessage("Unexpected value returned by cursor")
+                        .that(cursor.getString(cursor.getColumnIndex(entry.getKey())))
+                        .isEqualTo(entry.getValue());
             }
 
             // update the apn
             final String newApn = "newapn";
             Log.d(TAG, "Update the APN field to: " + newApn);
             contentValues.put(Carriers.APN, newApn);
-            final int updateCount = mContentResolver.update(uri, contentValues, selection,
-                    selectionArgs);
-            assertEquals("Unexpected number of rows updated", 1, updateCount);
+            final int updateCount =
+                    mContentResolver.update(uri, contentValues, selection, selectionArgs);
+            assertWithMessage("Unexpected number of rows updated").that(updateCount).isEqualTo(1);
 
             // Verify the updated value
             cursor = mContentResolver.query(uri, apnProjection, selection, selectionArgs, null);
-            assertNotNull("Failed to query the table", cursor);
-            assertEquals("Unexpected number of APNs returned by cursor", 1, cursor.getCount());
+            assertWithMessage("Failed to query the table").that(cursor).isNotNull();
+            assertWithMessage("Unexpected number of APNs returned by cursor")
+                    .that(cursor.getCount())
+                    .isEqualTo(1);
             cursor.moveToFirst();
-            assertEquals("Unexpected value returned by cursor",
-                    cursor.getString(cursor.getColumnIndex(Carriers.APN)), newApn);
+            assertWithMessage("Unexpected value returned by cursor")
+                    .that(cursor.getString(cursor.getColumnIndex(Carriers.APN)))
+                    .isEqualTo(newApn);
 
             // delete test content
             final String selectionToDelete = Carriers.NUMERIC + "=?";
-            String[] selectionArgsToDelete = { NUMERIC };
-            Log.d(TAG, "testInsertCarriers deleting selection: " + selectionToDelete
-                    + "testInsertCarriers selectionArgs: " + Arrays.toString(selectionArgs));
-            int numRowsDeleted = mContentResolver.delete(
-                    uri, selectionToDelete, selectionArgsToDelete);
-            assertEquals("Unexpected number of rows deleted",1, numRowsDeleted);
+            String[] selectionArgsToDelete = {NUMERIC};
+            Log.d(
+                    TAG,
+                    "testInsertCarriers deleting selection: "
+                            + selectionToDelete
+                            + "testInsertCarriers selectionArgs: "
+                            + Arrays.toString(selectionArgs));
+            int numRowsDeleted =
+                    mContentResolver.delete(uri, selectionToDelete, selectionArgsToDelete);
+            assertWithMessage("Unexpected number of rows deleted")
+                    .that(numRowsDeleted)
+                    .isEqualTo(1);
 
             // verify that deleted values are gone
             cursor = mContentResolver.query(uri, apnProjection, selection, selectionArgs, null);
-            assertEquals("Unexpected number of rows deleted", 0, cursor.getCount());
+            assertWithMessage("Unexpected number of rows deleted")
+                    .that(cursor.getCount())
+                    .isEqualTo(0);
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
     }
 
     @Test
     public void testQueryConflictCase() {
-        if (!mHasCellular) return;
         String invalidColumn = "random";
         Uri uri = Carriers.CONTENT_URI;
-        // CONTENT_URI = Uri.parse("content://telephony/carriers");
-        // Create A set of column_name/value pairs to add to the database.
+        // Create a set of column_name/value pairs to add to the database.
         ContentValues contentValues = new ContentValues();
         contentValues.put(Carriers.NAME, NAME);
         contentValues.put(Carriers.APN, APN);
@@ -202,50 +203,57 @@
             // Insert the value into database.
             Log.d(TAG, "testInsertCarriers Inserting contentValues: " + contentValues.toString());
             Uri newUri = mContentResolver.insert(uri, contentValues);
-            assertNotNull("Failed to insert to table", newUri);
+            assertWithMessage("Failed to insert to table").that(newUri).isNotNull();
 
             // Try to get the value with invalid selection
-            final String[] testProjection =
-                    {
-                            Carriers.NAME,
-                            Carriers.APN,
-                            Carriers.PORT,
-                            Carriers.PROTOCOL,
-                            Carriers.NUMERIC,
-                    };
+            final String[] testProjection = {
+                Carriers.NAME, Carriers.APN, Carriers.PORT, Carriers.PROTOCOL, Carriers.NUMERIC,
+            };
             final String selection = invalidColumn + "=?";
-            String[] selectionArgs = { invalidColumn };
-            Log.d(TAG, "testInsertCarriers query projection: " + Arrays.toString(testProjection)
-                    + "\ntestInsertCarriers selection: " + selection
-                    + "\ntestInsertCarriers selectionArgs: " + Arrays.toString(selectionArgs));
-            Cursor cursor = mContentResolver.query(
-                    uri, testProjection, selection, selectionArgs, null);
-            assertNull("Failed to query the table",cursor);
+            String[] selectionArgs = {invalidColumn};
+            Log.d(
+                    TAG,
+                    "testInsertCarriers query projection: "
+                            + Arrays.toString(testProjection)
+                            + "\ntestInsertCarriers selection: "
+                            + selection
+                            + "\ntestInsertCarriers selectionArgs: "
+                            + Arrays.toString(selectionArgs));
+            Cursor cursor =
+                    mContentResolver.query(uri, testProjection, selection, selectionArgs, null);
+            assertWithMessage("Failed to query the table").that(cursor).isNull();
 
             // delete test content
             final String selectionToDelete = Carriers.NAME + "=?";
-            String[] selectionArgsToDelete = { NAME };
-            Log.d(TAG, "testInsertCarriers deleting selection: " + selectionToDelete
-                    + "testInsertCarriers selectionArgs: " + Arrays.toString(selectionArgs));
-            int numRowsDeleted = mContentResolver.delete(
-                    uri, selectionToDelete, selectionArgsToDelete);
-            assertEquals("Unexpected number of rows deleted", 1, numRowsDeleted);
+            String[] selectionArgsToDelete = {NAME};
+            Log.d(
+                    TAG,
+                    "testInsertCarriers deleting selection: "
+                            + selectionToDelete
+                            + "testInsertCarriers selectionArgs: "
+                            + Arrays.toString(selectionArgs));
+            int numRowsDeleted =
+                    mContentResolver.delete(uri, selectionToDelete, selectionArgsToDelete);
+            assertWithMessage("Unexpected number of rows deleted")
+                    .that(numRowsDeleted)
+                    .isEqualTo(1);
 
             // verify that deleted values are gone
-            cursor = mContentResolver.query(
-                    uri, testProjection, selectionToDelete, selectionArgsToDelete, null);
-            assertEquals("Unexpected number of rows deleted", 0, cursor.getCount());
+            cursor =
+                    mContentResolver.query(
+                            uri, testProjection, selectionToDelete, selectionArgsToDelete, null);
+            assertWithMessage("Unexpected number of rows deleted")
+                    .that(cursor.getCount())
+                    .isEqualTo(0);
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
     }
 
     @Test
     public void testUpdateConflictCase() {
-        if (!mHasCellular) return;
         Uri uri = Carriers.CONTENT_URI;
-        // CONTENT_URI = Uri.parse("content://telephony/carriers");
-        // Create A set of column_name/value pairs to add to the database.
+        // Create a set of column_name/value pairs to add to the database.
         ContentValues contentValues = new ContentValues();
         contentValues.put(Carriers.NAME, NAME);
         contentValues.put(Carriers.APN, APN);
@@ -257,63 +265,69 @@
             // Insert the value into database.
             Log.d(TAG, "testInsertCarriers Inserting contentValues: " + contentValues.toString());
             Uri newUri = mContentResolver.insert(uri, contentValues);
-            assertNotNull("Failed to insert to table", newUri);
+            assertWithMessage("Failed to insert to table").that(newUri).isNotNull();
 
             // Try to get the value with invalid selection
-            final String[] testProjection =
-                    {
-                            Carriers.NAME,
-                            Carriers.APN,
-                            Carriers.PORT,
-                            Carriers.PROTOCOL,
-                            Carriers.NUMERIC,
-                    };
+            final String[] testProjection = {
+                Carriers.NAME, Carriers.APN, Carriers.PORT, Carriers.PROTOCOL, Carriers.NUMERIC,
+            };
             String selection = Carriers.NAME + "=?";
-            String[] selectionArgs = { NAME };
-            Log.d(TAG, "testInsertCarriers query projection: " + Arrays.toString(testProjection)
-                    + "\ntestInsertCarriers selection: " + selection
-                    + "\ntestInsertCarriers selectionArgs: " + Arrays.toString(selectionArgs));
-            Cursor cursor = mContentResolver.query(
-                    uri, testProjection, selection, selectionArgs, null);
-            assertEquals("Unexpected number of APNs returned by cursor",
-                    1, cursor.getCount());
+            String[] selectionArgs = {NAME};
+            Log.d(
+                    TAG,
+                    "testInsertCarriers query projection: "
+                            + Arrays.toString(testProjection)
+                            + "\ntestInsertCarriers selection: "
+                            + selection
+                            + "\ntestInsertCarriers selectionArgs: "
+                            + Arrays.toString(selectionArgs));
+            Cursor cursor =
+                    mContentResolver.query(uri, testProjection, selection, selectionArgs, null);
+            assertWithMessage("Unexpected number of APNs returned by cursor")
+                    .that(cursor.getCount())
+                    .isEqualTo(1);
 
             // Update the table with invalid column
             String invalidColumn = "random";
             contentValues.put(invalidColumn, invalidColumn);
-            try {
-                mContentResolver.update(uri, contentValues, selection, selectionArgs);
-                fail();
-            } catch (SQLiteException e) {
-                // Expected: If there's no such a column, an exception will be thrown and the
-                // Activity Manager will kill this process shortly.
-            }
+            // Expected: If there's no such a column, an exception will be thrown and
+            // ActivityManager will kill this process shortly.
+            assertThrows(
+                    SQLiteException.class,
+                    () -> mContentResolver.update(uri, contentValues, selection, selectionArgs));
 
             // delete test content
             final String selectionToDelete = Carriers.NAME + "=?";
-            String[] selectionArgsToDelete = { NAME };
-            Log.d(TAG, "testInsertCarriers deleting selection: " + selectionToDelete
-                    + "testInsertCarriers selectionArgs: " + Arrays.toString(selectionArgs));
-            int numRowsDeleted = mContentResolver.delete(
-                    uri, selectionToDelete, selectionArgsToDelete);
-            assertEquals("Unexpected number of rows deleted", 1, numRowsDeleted);
+            String[] selectionArgsToDelete = {NAME};
+            Log.d(
+                    TAG,
+                    "testInsertCarriers deleting selection: "
+                            + selectionToDelete
+                            + "testInsertCarriers selectionArgs: "
+                            + Arrays.toString(selectionArgs));
+            int numRowsDeleted =
+                    mContentResolver.delete(uri, selectionToDelete, selectionArgsToDelete);
+            assertWithMessage("Unexpected number of rows deleted")
+                    .that(numRowsDeleted)
+                    .isEqualTo(1);
 
             // verify that deleted values are gone
-            cursor = mContentResolver.query(
-                    uri, testProjection, selectionToDelete, selectionArgsToDelete, null);
-            assertEquals("Unexpected number of rows deleted", 0, cursor.getCount());
+            cursor =
+                    mContentResolver.query(
+                            uri, testProjection, selectionToDelete, selectionArgsToDelete, null);
+            assertWithMessage("Unexpected number of rows deleted")
+                    .that(cursor.getCount())
+                    .isEqualTo(0);
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
     }
 
     @Test
     public void testDeleteConflictCase() {
-        if (!mHasCellular) return;
         String invalidColumn = "random";
         Uri uri = Carriers.CONTENT_URI;
-        // CONTENT_URI = Uri.parse("content://telephony/carriers");
-        // Create A set of column_name/value pairs to add to the database.
+        // Create a set of column_name/value pairs to add to the database.
         ContentValues contentValues = new ContentValues();
         contentValues.put(Carriers.NAME, NAME);
         contentValues.put(Carriers.APN, APN);
@@ -325,68 +339,84 @@
             // Insert the value into database.
             Log.d(TAG, "testInsertCarriers Inserting contentValues: " + contentValues.toString());
             Uri newUri = mContentResolver.insert(uri, contentValues);
-            assertNotNull("Failed to insert to table", newUri);
+            assertWithMessage("Failed to insert to table").that(newUri).isNotNull();
 
             // Get the values in table.
-            final String[] testProjection =
-                    {
-                            Carriers.NAME,
-                            Carriers.APN,
-                            Carriers.PORT,
-                            Carriers.PROTOCOL,
-                            Carriers.NUMERIC,
-                    };
+            final String[] testProjection = {
+                Carriers.NAME, Carriers.APN, Carriers.PORT, Carriers.PROTOCOL, Carriers.NUMERIC,
+            };
             String selection = Carriers.NAME + "=?";
-            String[] selectionArgs = { NAME };
-            Log.d(TAG, "testInsertCarriers query projection: " + Arrays.toString(testProjection)
-                    + "\ntestInsertCarriers selection: " + selection
-                    + "\ntestInsertCarriers selectionArgs: " + Arrays.toString(selectionArgs));
-            Cursor cursor = mContentResolver.query(
-                    uri, testProjection, selection, selectionArgs, null);
-            assertEquals("Unexpected number of APNs returned by cursor", 1, cursor.getCount());
+            String[] selectionArgs = {NAME};
+            Log.d(
+                    TAG,
+                    "testInsertCarriers query projection: "
+                            + Arrays.toString(testProjection)
+                            + "\ntestInsertCarriers selection: "
+                            + selection
+                            + "\ntestInsertCarriers selectionArgs: "
+                            + Arrays.toString(selectionArgs));
+            Cursor cursor =
+                    mContentResolver.query(uri, testProjection, selection, selectionArgs, null);
+            assertWithMessage("Unexpected number of APNs returned by cursor")
+                    .that(cursor.getCount())
+                    .isEqualTo(1);
 
             // try to delete with invalid selection
-            String selectionToDelete = invalidColumn + "=?";
-            String[] selectionArgsToDelete = { invalidColumn };
-            Log.d(TAG, "testInsertCarriers deleting selection: " + selectionToDelete
-                    + "testInsertCarriers selectionArgs: " + Arrays.toString(selectionArgs));
+            String invalidSelectionToDelete = invalidColumn + "=?";
+            String[] invalidSelectionArgsToDelete = {invalidColumn};
+            Log.d(
+                    TAG,
+                    "testInsertCarriers deleting selection: "
+                            + invalidSelectionToDelete
+                            + "testInsertCarriers selectionArgs: "
+                            + Arrays.toString(selectionArgs));
 
-            try {
-                mContentResolver.delete(uri, selectionToDelete, selectionArgsToDelete);
-                fail();
-            } catch (SQLiteException e) {
-                // Expected: If there's no such a column, an exception will be thrown and the
-                // Activity Manager will kill this process shortly.
-            }
+            // Expected: If there's no such a column, an exception will be thrown and
+            // ActivityManager will kill this process shortly.
+            assertThrows(
+                    SQLiteException.class,
+                    () ->
+                            mContentResolver.delete(
+                                    uri, invalidSelectionToDelete, invalidSelectionArgsToDelete));
 
             // verify that deleted value is still there
             selection = Carriers.NAME + "=?";
             selectionArgs[0] = NAME;
             cursor = mContentResolver.query(uri, testProjection, selection, selectionArgs, null);
-            assertEquals("Unexpected number of APNs returned by cursor", 1, cursor.getCount());
+            assertWithMessage("Unexpected number of APNs returned by cursor")
+                    .that(cursor.getCount())
+                    .isEqualTo(1);
 
             // delete test content
-            selectionToDelete = Carriers.NAME + "=?";
-            selectionArgsToDelete[0] = NAME;
-            Log.d(TAG, "testInsertCarriers deleting selection: " + selectionToDelete
-                    + "testInsertCarriers selectionArgs: " + Arrays.toString(selectionArgs));
-            int numRowsDeleted = mContentResolver.delete(
-                    uri, selectionToDelete, selectionArgsToDelete);
-            assertEquals("Unexpected number of rows deleted", 1, numRowsDeleted);
+            String selectionToDelete = Carriers.NAME + "=?";
+            String[] selectionArgsToDelete = {NAME};
+            Log.d(
+                    TAG,
+                    "testInsertCarriers deleting selection: "
+                            + selectionToDelete
+                            + "testInsertCarriers selectionArgs: "
+                            + Arrays.toString(selectionArgs));
+            int numRowsDeleted =
+                    mContentResolver.delete(uri, selectionToDelete, selectionArgsToDelete);
+            assertWithMessage("Unexpected number of rows deleted")
+                    .that(numRowsDeleted)
+                    .isEqualTo(1);
 
             // verify that deleted values are gone
             cursor = mContentResolver.query(uri, testProjection, selection, selectionArgs, null);
-            assertEquals("Unexpected number of rows deleted", 0, cursor.getCount());
+            assertWithMessage("Unexpected number of rows deleted")
+                    .that(cursor.getCount())
+                    .isEqualTo(0);
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
     }
 
     private ContentValues makeDefaultContentValues() {
         ContentValues contentValues = new ContentValues();
-        for (Map.Entry<String, String> entry: APN_MAP.entrySet()) {
+        for (Map.Entry<String, String> entry : APN_MAP.entrySet()) {
             contentValues.put(entry.getKey(), entry.getValue());
         }
         return contentValues;
     }
-}
\ No newline at end of file
+}
diff --git a/tests/tests/carrierapi/src/android/carrierapi/cts/BaseCarrierApiTest.java b/tests/tests/carrierapi/src/android/carrierapi/cts/BaseCarrierApiTest.java
new file mode 100644
index 0000000..b0b6504
--- /dev/null
+++ b/tests/tests/carrierapi/src/android/carrierapi/cts/BaseCarrierApiTest.java
@@ -0,0 +1,83 @@
+/*
+ * 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 android.carrierapi.cts;
+
+import static com.google.common.truth.Truth.assertWithMessage;
+
+import static org.junit.Assume.assumeTrue;
+
+import android.content.Context;
+import android.telephony.TelephonyManager;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.compatibility.common.util.FeatureUtil;
+
+import org.junit.Before;
+
+/**
+ * Common test base to ensure uniform preconditions checking. This class will check for:
+ *
+ * <ol>
+ *   <li>{@link android.content.pm.PackageManager#FEATURE_TELEPHONY}
+ *   <li>A SIM that grants us carrier privileges is currently active in the device
+ * </ol>
+ *
+ * Just inherit from this class when writing your test, then you are able to assume in the subclass
+ * {@code Before} method that preconditions have all passed. The setup and test methods will not be
+ * executed if preconditions are not met.
+ */
+public abstract class BaseCarrierApiTest {
+    protected static final String NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE =
+            "This test requires a SIM card with carrier privilege rules on it.\n"
+                    + "Visit https://source.android.com/devices/tech/config/uicc.html";
+
+    protected Context getContext() {
+        return InstrumentationRegistry.getInstrumentation().getTargetContext();
+    }
+
+    private boolean mPreconditionsSatisfied = false;
+
+    protected boolean werePreconditionsSatisfied() {
+        return mPreconditionsSatisfied;
+    }
+
+    /**
+     * Subclasses do NOT need to explicitly call or override this method. Per the JUnit docs, a
+     * superclass {@code Before} method always executes before a subclass {@code Before} method.
+     *
+     * <p>If preconditions fail, neither the subclass {@code Before} method(s) nor the actual {@code
+     * Test} method will execute, but {@code After} methods will still execute. If a subclass does
+     * work in an {@code After} method, then it should first check {@link
+     * #werePreconditionsSatisfied} and return early without doing any work if it's {@code false}.
+     */
+    @Before
+    public void ensurePreconditionsMet() {
+        mPreconditionsSatisfied = false;
+        // Bail out if no cellular support.
+        assumeTrue(
+                "No cellular support, CarrierAPI."
+                        + getClass().getSimpleName()
+                        + " cases will be skipped",
+                FeatureUtil.hasTelephony());
+        // We must run with carrier privileges.
+        assertWithMessage(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE)
+                .that(getContext().getSystemService(TelephonyManager.class).hasCarrierPrivileges())
+                .isTrue();
+        mPreconditionsSatisfied = true;
+    }
+}
diff --git a/tests/tests/carrierapi/src/android/carrierapi/cts/BugreportManagerTest.java b/tests/tests/carrierapi/src/android/carrierapi/cts/BugreportManagerTest.java
index b154865..4e5f4fa 100644
--- a/tests/tests/carrierapi/src/android/carrierapi/cts/BugreportManagerTest.java
+++ b/tests/tests/carrierapi/src/android/carrierapi/cts/BugreportManagerTest.java
@@ -22,17 +22,13 @@
 import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeTrue;
 
-import android.content.Context;
-import android.content.pm.PackageManager;
 import android.os.BugreportManager;
 import android.os.BugreportManager.BugreportCallback;
 import android.os.BugreportParams;
 import android.os.FileUtils;
 import android.os.ParcelFileDescriptor;
 import android.platform.test.annotations.SystemUserOnly;
-import android.telephony.TelephonyManager;
 import android.util.Log;
 
 import androidx.test.InstrumentationRegistry;
@@ -68,7 +64,7 @@
  */
 @SystemUserOnly(reason = "BugreportManager requires calls to originate from the primary user")
 @RunWith(AndroidJUnit4.class)
-public class BugreportManagerTest {
+public class BugreportManagerTest extends BaseCarrierApiTest {
     private static final String TAG = "BugreportManagerTest";
 
     // See BugreportManagerServiceImpl#BUGREPORT_SERVICE.
@@ -86,7 +82,6 @@
 
     @Rule public TestName name = new TestName();
 
-    private TelephonyManager mTelephonyManager;
     private BugreportManager mBugreportManager;
     private File mBugreportFile;
     private ParcelFileDescriptor mBugreportFd;
@@ -95,19 +90,7 @@
 
     @Before
     public void setUp() throws Exception {
-        Context context = InstrumentationRegistry.getContext();
-        // Bail out if no cellular support.
-        assumeTrue(
-                "No cellular support, CarrierAPI.BugreportManagerTest cases will be skipped",
-                context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY));
-        // Fail the test if we don't have carrier privileges.
-        mTelephonyManager = context.getSystemService(TelephonyManager.class);
-        assertWithMessage(
-                        "This test requires a SIM card with carrier privilege rules on it.\n"
-                                + "Visit https://source.android.com/devices/tech/config/uicc.html")
-                .that(mTelephonyManager.hasCarrierPrivileges())
-                .isTrue();
-        mBugreportManager = context.getSystemService(BugreportManager.class);
+        mBugreportManager = getContext().getSystemService(BugreportManager.class);
 
         killCurrentBugreportIfRunning();
         mBugreportFile = createTempFile("bugreport_" + name.getMethodName(), ".zip");
@@ -120,6 +103,8 @@
 
     @After
     public void tearDown() throws Exception {
+        if (!werePreconditionsSatisfied()) return;
+
         FileUtils.closeQuietly(mBugreportFd);
         FileUtils.closeQuietly(mScreenshotFd);
         killCurrentBugreportIfRunning();
diff --git a/tests/tests/carrierapi/src/android/carrierapi/cts/CarrierApiTest.java b/tests/tests/carrierapi/src/android/carrierapi/cts/CarrierApiTest.java
index da46842..baae880 100644
--- a/tests/tests/carrierapi/src/android/carrierapi/cts/CarrierApiTest.java
+++ b/tests/tests/carrierapi/src/android/carrierapi/cts/CarrierApiTest.java
@@ -22,9 +22,10 @@
 import static android.telephony.IccOpenLogicalChannelResponse.INVALID_CHANNEL;
 import static android.telephony.IccOpenLogicalChannelResponse.STATUS_NO_ERROR;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
+
+import static org.junit.Assert.fail;
 
 import android.content.BroadcastReceiver;
 import android.content.ContentProviderClient;
@@ -32,8 +33,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.AsyncTask;
@@ -55,15 +54,21 @@
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.Suppress;
 import android.util.Base64;
 import android.util.Log;
 
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.compatibility.common.util.ShellIdentityUtils;
 
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
+import com.google.common.collect.Range;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -78,23 +83,27 @@
 
 import javax.annotation.Nonnull;
 
+/**
+ * Unit tests for various carrier-related APIs.
+ *
+ * <p>Test using `atest CtsCarrierApiTestCases:CarrierApiTest` or `make cts -j64 && cts-tradefed run
+ * cts -m CtsCarrierApiTestCases --test android.carrierapi.cts.CarrierApiTest`
+ */
 // TODO(b/130187425): Split CarrierApiTest apart to have separate test classes for functionality
-public class CarrierApiTest extends AndroidTestCase {
+@RunWith(AndroidJUnit4.class)
+public class CarrierApiTest extends BaseCarrierApiTest {
     private static final String TAG = "CarrierApiTest";
+
     private TelephonyManager mTelephonyManager;
     private CarrierConfigManager mCarrierConfigManager;
-    private PackageManager mPackageManager;
     private SubscriptionManager mSubscriptionManager;
     private ContentProviderClient mVoicemailProvider;
     private ContentProviderClient mStatusProvider;
     private Uri mVoicemailContentUri;
     private Uri mStatusContentUri;
-    private boolean hasCellular;
     private String selfPackageName;
-    private String selfCertHash;
     private HandlerThread mListenerThread;
 
-    private static final String FiDevCert = "24EB92CBB156B280FA4E1429A6ECEEB6E5C1BFE4";
     // The minimum allocatable logical channel number, per TS 102 221 Section 11.1.17.1
     private static final int MIN_LOGICAL_CHANNEL = 1;
     // The maximum allocatable logical channel number in the standard range, per TS 102 221 Section
@@ -163,37 +172,26 @@
 
     private static final int DSDS_PHONE_COUNT = 2;
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mPackageManager = getContext().getPackageManager();
-        mTelephonyManager = (TelephonyManager)
-                getContext().getSystemService(Context.TELEPHONY_SERVICE);
-        hasCellular = hasCellular();
-        if (!hasCellular) {
-            Log.e(TAG, "No cellular support, all tests will be skipped.");
-            return;
-        }
-
-        mCarrierConfigManager = (CarrierConfigManager)
-                getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE);
-        mSubscriptionManager = (SubscriptionManager)
-                getContext().getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
-        selfPackageName = getContext().getPackageName();
-        selfCertHash = getCertHash(selfPackageName);
+    @Before
+    public void setUp() throws Exception {
+        Context context = getContext();
+        mTelephonyManager = context.getSystemService(TelephonyManager.class);
+        mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
+        mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
+        selfPackageName = context.getPackageName();
         mVoicemailContentUri = VoicemailContract.Voicemails.buildSourceUri(selfPackageName);
-        mVoicemailProvider = getContext().getContentResolver()
-                .acquireContentProviderClient(mVoicemailContentUri);
+        mVoicemailProvider =
+                context.getContentResolver().acquireContentProviderClient(mVoicemailContentUri);
         mStatusContentUri = VoicemailContract.Status.buildSourceUri(selfPackageName);
-        mStatusProvider = getContext().getContentResolver()
-                .acquireContentProviderClient(mStatusContentUri);
+        mStatusProvider =
+                context.getContentResolver().acquireContentProviderClient(mStatusContentUri);
         mListenerThread = new HandlerThread("CarrierApiTest");
         mListenerThread.start();
     }
 
-    @Override
+    @After
     public void tearDown() throws Exception {
-        if (!hasCellular) return;
+        if (!werePreconditionsSatisfied()) return;
 
         mListenerThread.quit();
         try {
@@ -202,68 +200,34 @@
         } catch (Exception e) {
             Log.w(TAG, "Failed to clean up voicemail tables in tearDown", e);
         }
-        super.tearDown();
     }
 
-    /**
-     * Checks whether the cellular stack should be running on this device.
-     */
-    private boolean hasCellular() {
-        return mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY) &&
-                mTelephonyManager.getPhoneCount() > 0;
-    }
-
-    private boolean isSimCardPresent() {
-        return mTelephonyManager.getSimState() != TelephonyManager.SIM_STATE_ABSENT;
-    }
-
-    private String getCertHash(String pkgName) {
-        try {
-            PackageInfo pInfo = mPackageManager.getPackageInfo(pkgName,
-                    PackageManager.GET_SIGNATURES | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS);
-            MessageDigest md = MessageDigest.getInstance("SHA-1");
-            return bytesToHexString(md.digest(pInfo.signatures[0].toByteArray()));
-        } catch (PackageManager.NameNotFoundException ex) {
-            Log.e(TAG, pkgName + " not found", ex);
-        } catch (NoSuchAlgorithmException ex) {
-            Log.e(TAG, "Algorithm SHA1 is not found.");
-        }
-        return "";
-    }
-
-    private void failMessage() {
-        if (FiDevCert.equalsIgnoreCase(selfCertHash)) {
-            fail("This test requires a Project Fi SIM card.");
-        } else {
-            fail("This test requires a SIM card with carrier privilege rule on it.\n" +
-                 "Cert hash: " + selfCertHash + "\n" +
-                 "Visit https://source.android.com/devices/tech/config/uicc.html");
-        }
-    }
-
+    @Test
     public void testSimCardPresent() {
-        if (!hasCellular) return;
-        assertTrue("This test requires SIM card.", isSimCardPresent());
+        assertWithMessage("This test requires a SIM card")
+                .that(mTelephonyManager.getSimState())
+                .isNotEqualTo(TelephonyManager.SIM_STATE_ABSENT);
     }
 
+    @Test
     public void testHasCarrierPrivileges() {
-        if (!hasCellular) return;
-        if (!mTelephonyManager.hasCarrierPrivileges()) {
-            failMessage();
-        }
+        assertWithMessage(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE)
+                .that(mTelephonyManager.hasCarrierPrivileges())
+                .isTrue();
     }
 
     private static void assertUpdateAvailableNetworkSuccess(int value) {
-        assertEquals(TelephonyManager.UPDATE_AVAILABLE_NETWORKS_SUCCESS, value);
+        assertThat(value).isEqualTo(TelephonyManager.UPDATE_AVAILABLE_NETWORKS_SUCCESS);
     }
 
     private static void assertUpdateAvailableNetworkNoOpportunisticSubAvailable(int value) {
-        assertEquals(
-                TelephonyManager.UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE, value);
+        assertThat(value)
+                .isEqualTo(
+                        TelephonyManager.UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE);
     }
 
     private static void assertSetOpportunisticSubSuccess(int value) {
-        assertEquals(TelephonyManager.SET_OPPORTUNISTIC_SUB_SUCCESS, value);
+        assertThat(value).isEqualTo(TelephonyManager.SET_OPPORTUNISTIC_SUB_SUCCESS);
     }
 
     private int getFirstActivateCarrierPrivilegedSubscriptionId() {
@@ -272,8 +236,8 @@
                 mSubscriptionManager.getActiveSubscriptionInfoList();
         if (subscriptionInfos != null) {
             for (SubscriptionInfo info : subscriptionInfos) {
-                TelephonyManager telephonyManager = mTelephonyManager.createForSubscriptionId(
-                        info.getSubscriptionId());
+                TelephonyManager telephonyManager =
+                        mTelephonyManager.createForSubscriptionId(info.getSubscriptionId());
                 if (telephonyManager.hasCarrierPrivileges()) {
                     subId = info.getSubscriptionId();
                     return subId;
@@ -283,15 +247,12 @@
         return subId;
     }
 
+    @Test
     public void testUpdateAvailableNetworksWithCarrierPrivilege() {
-        if (!hasCellular) return;
-
         int subIdWithCarrierPrivilege = getFirstActivateCarrierPrivilegedSubscriptionId();
-        int activeSubscriptionInfoCount = ShellIdentityUtils.invokeMethodWithShellPermissions(
-                mSubscriptionManager, (tm) -> tm.getActiveSubscriptionInfoCount());
-        if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
-            return;
-        }
+        int activeSubscriptionInfoCount =
+                ShellIdentityUtils.invokeMethodWithShellPermissions(
+                        mSubscriptionManager, (tm) -> tm.getActiveSubscriptionInfoCount());
         if (mTelephonyManager.getPhoneCount() == 1) {
             return;
         }
@@ -311,42 +272,52 @@
         List<String> mccMncs = new ArrayList<String>();
         List<Integer> bands = new ArrayList<Integer>();
         List<AvailableNetworkInfo> availableNetworkInfos = new ArrayList<AvailableNetworkInfo>();
-        Consumer<Integer> callbackSuccess =
-                CarrierApiTest::assertUpdateAvailableNetworkSuccess;
+        Consumer<Integer> callbackSuccess = CarrierApiTest::assertUpdateAvailableNetworkSuccess;
         Consumer<Integer> callbackNoOpportunisticSubAvailable =
                 CarrierApiTest::assertUpdateAvailableNetworkNoOpportunisticSubAvailable;
         Consumer<Integer> setOpCallbackSuccess = CarrierApiTest::assertSetOpportunisticSubSuccess;
-        if (subscriptionInfoList == null || subscriptionInfoList.size() == 0
+        if (subscriptionInfoList == null
+                || subscriptionInfoList.size() == 0
                 || !mSubscriptionManager.isActiveSubscriptionId(
                         subscriptionInfoList.get(0).getSubscriptionId())) {
             try {
-                AvailableNetworkInfo availableNetworkInfo = new AvailableNetworkInfo(
-                        subIdWithCarrierPrivilege, AvailableNetworkInfo.PRIORITY_HIGH, mccMncs,
-                        bands);
+                AvailableNetworkInfo availableNetworkInfo =
+                        new AvailableNetworkInfo(
+                                subIdWithCarrierPrivilege,
+                                AvailableNetworkInfo.PRIORITY_HIGH,
+                                mccMncs,
+                                bands);
                 availableNetworkInfos.add(availableNetworkInfo);
                 // Call updateAvailableNetworks without opportunistic subscription.
                 // callbackNoOpportunisticSubAvailable is expected to be triggered
                 // and the return value will be checked against
                 // UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE
-                mTelephonyManager.updateAvailableNetworks(availableNetworkInfos,
-                        AsyncTask.SERIAL_EXECUTOR, callbackNoOpportunisticSubAvailable);
+                mTelephonyManager.updateAvailableNetworks(
+                        availableNetworkInfos,
+                        AsyncTask.SERIAL_EXECUTOR,
+                        callbackNoOpportunisticSubAvailable);
             } finally {
                 // clear all the operations at the end of test.
                 availableNetworkInfos.clear();
-                mTelephonyManager.updateAvailableNetworks(availableNetworkInfos,
-                        AsyncTask.SERIAL_EXECUTOR, callbackNoOpportunisticSubAvailable);
+                mTelephonyManager.updateAvailableNetworks(
+                        availableNetworkInfos,
+                        AsyncTask.SERIAL_EXECUTOR,
+                        callbackNoOpportunisticSubAvailable);
             }
         } else {
             // This is case of DSDS phone, one active opportunistic subscription and one
             // active primary subscription.
             int resultSubId;
             try {
-                AvailableNetworkInfo availableNetworkInfo = new AvailableNetworkInfo(
-                        subscriptionInfoList.get(0).getSubscriptionId(),
-                        AvailableNetworkInfo.PRIORITY_HIGH, mccMncs, bands);
+                AvailableNetworkInfo availableNetworkInfo =
+                        new AvailableNetworkInfo(
+                                subscriptionInfoList.get(0).getSubscriptionId(),
+                                AvailableNetworkInfo.PRIORITY_HIGH,
+                                mccMncs,
+                                bands);
                 availableNetworkInfos.add(availableNetworkInfo);
-                mTelephonyManager.updateAvailableNetworks(availableNetworkInfos,
-                        AsyncTask.SERIAL_EXECUTOR, callbackSuccess);
+                mTelephonyManager.updateAvailableNetworks(
+                        availableNetworkInfos, AsyncTask.SERIAL_EXECUTOR, callbackSuccess);
                 // wait for the data change to take effect
                 waitForMs(500);
                 // Call setPreferredData and reconfirm with getPreferred data
@@ -357,19 +328,21 @@
                 // wait for the data change to take effect
                 waitForMs(500);
                 resultSubId = mTelephonyManager.getPreferredOpportunisticDataSubscription();
-                assertEquals(preferSubId, resultSubId);
+                assertThat(resultSubId).isEqualTo(preferSubId);
             } finally {
                 // clear all the operations at the end of test.
                 availableNetworkInfos.clear();
-                mTelephonyManager.updateAvailableNetworks(availableNetworkInfos,
-                        AsyncTask.SERIAL_EXECUTOR, callbackSuccess);
+                mTelephonyManager.updateAvailableNetworks(
+                        availableNetworkInfos, AsyncTask.SERIAL_EXECUTOR, callbackSuccess);
                 waitForMs(500);
                 mTelephonyManager.setPreferredOpportunisticDataSubscription(
-                        SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, false,
-                        AsyncTask.SERIAL_EXECUTOR, callbackSuccess);
+                        SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
+                        false,
+                        AsyncTask.SERIAL_EXECUTOR,
+                        callbackSuccess);
                 waitForMs(500);
                 resultSubId = mTelephonyManager.getPreferredOpportunisticDataSubscription();
-                assertEquals(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, resultSubId);
+                assertThat(resultSubId).isEqualTo(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
             }
         }
     }
@@ -382,107 +355,145 @@
         }
     }
 
+    @Test
     public void testGetIccAuthentication() {
         // EAP-SIM rand is 16 bytes.
         String base64Challenge = "ECcTqwuo6OfY8ddFRboD9WM=";
         String base64Challenge2 = "EMNxjsFrPCpm+KcgCmQGnwQ=";
-        if (!hasCellular) return;
+
         try {
-            assertNull("getIccAuthentication should return null for empty data.",
-                    mTelephonyManager.getIccAuthentication(TelephonyManager.APPTYPE_USIM,
-                    TelephonyManager.AUTHTYPE_EAP_AKA, ""));
-            String response = mTelephonyManager.getIccAuthentication(TelephonyManager.APPTYPE_USIM,
-                    TelephonyManager.AUTHTYPE_EAP_SIM, base64Challenge);
-            assertTrue("Response to EAP-SIM Challenge must not be Null.", response != null);
+            assertWithMessage("getIccAuthentication should return null for empty data.")
+                    .that(
+                            mTelephonyManager.getIccAuthentication(
+                                    TelephonyManager.APPTYPE_USIM,
+                                    TelephonyManager.AUTHTYPE_EAP_AKA,
+                                    ""))
+                    .isNull();
+            String response =
+                    mTelephonyManager.getIccAuthentication(
+                            TelephonyManager.APPTYPE_USIM,
+                            TelephonyManager.AUTHTYPE_EAP_SIM,
+                            base64Challenge);
+            assertWithMessage("Response to EAP-SIM Challenge must not be Null.")
+                    .that(response)
+                    .isNotNull();
             // response is base64 encoded. After decoding, the value should be:
             // 1 length byte + SRES(4 bytes) + 1 length byte + Kc(8 bytes)
             byte[] result = android.util.Base64.decode(response, android.util.Base64.DEFAULT);
-            assertTrue("Result length must be 14 bytes.", 14 == result.length);
-            String response2 = mTelephonyManager.getIccAuthentication(TelephonyManager.APPTYPE_USIM,
-                    TelephonyManager.AUTHTYPE_EAP_SIM, base64Challenge2);
-            assertTrue("Two responses must be different.", !response.equals(response2));
+            assertThat(result).hasLength(14);
+            String response2 =
+                    mTelephonyManager.getIccAuthentication(
+                            TelephonyManager.APPTYPE_USIM,
+                            TelephonyManager.AUTHTYPE_EAP_SIM,
+                            base64Challenge2);
+            assertWithMessage("Two responses must be different")
+                    .that(response)
+                    .isNotEqualTo(response2);
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
     }
 
+    @Test
     @SystemUserOnly(reason = "b/177921545, broadcast sent only to primary user")
     public void testSendDialerSpecialCode() {
-        if (!hasCellular) return;
-        try {
-            IntentReceiver intentReceiver = new IntentReceiver();
-            final IntentFilter intentFilter = new IntentFilter();
-            intentFilter.addAction(Telephony.Sms.Intents.SECRET_CODE_ACTION);
-            intentFilter.addDataScheme("android_secret_code");
-            getContext().registerReceiver(intentReceiver, intentFilter);
+        IntentReceiver intentReceiver = new IntentReceiver();
+        final IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction(Telephony.Sms.Intents.SECRET_CODE_ACTION);
+        intentFilter.addDataScheme("android_secret_code");
 
+        Context context = getContext();
+        context.registerReceiver(intentReceiver, intentFilter);
+        try {
             mTelephonyManager.sendDialerSpecialCode("4636");
-            assertTrue("Did not receive expected Intent: " +
-                    Telephony.Sms.Intents.SECRET_CODE_ACTION,
-                    intentReceiver.waitForReceive());
+            assertWithMessage(
+                            "Did not receive expected Intent: "
+                                    + Telephony.Sms.Intents.SECRET_CODE_ACTION)
+                    .that(intentReceiver.waitForReceive())
+                    .isTrue();
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         } catch (InterruptedException e) {
             Log.d(TAG, "Broadcast receiver wait was interrupted.");
+        } finally {
+            context.unregisterReceiver(intentReceiver);
         }
     }
 
+    @Test
     public void testSubscriptionInfoListing() {
-        if (!hasCellular) return;
         try {
-            assertTrue("getActiveSubscriptionInfoCount() should be non-zero",
-                    mSubscriptionManager.getActiveSubscriptionInfoCount() > 0);
+            assertThat(mSubscriptionManager.getActiveSubscriptionInfoCount()).isGreaterThan(0);
             List<SubscriptionInfo> subInfoList =
                     mSubscriptionManager.getActiveSubscriptionInfoList();
-            assertNotNull("getActiveSubscriptionInfoList() returned null", subInfoList);
-            assertFalse("getActiveSubscriptionInfoList() returned an empty list",
-                    subInfoList.isEmpty());
+            assertWithMessage("getActiveSubscriptionInfoList() returned null")
+                    .that(subInfoList)
+                    .isNotNull();
+            assertWithMessage("getActiveSubscriptionInfoList() returned an empty list")
+                    .that(subInfoList)
+                    .isNotEmpty();
             for (SubscriptionInfo info : subInfoList) {
                 TelephonyManager tm =
                         mTelephonyManager.createForSubscriptionId(info.getSubscriptionId());
-                assertTrue("getActiveSubscriptionInfoList() returned an inaccessible subscription",
-                        tm.hasCarrierPrivileges());
+                assertWithMessage(
+                                "getActiveSubscriptionInfoList() returned an inaccessible"
+                                        + " subscription")
+                        .that(tm.hasCarrierPrivileges())
+                        .isTrue();
 
                 // Check other APIs to make sure they are accessible and return consistent info.
                 SubscriptionInfo infoForSlot =
                         mSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(
                                 info.getSimSlotIndex());
-                assertNotNull("getActiveSubscriptionInfoForSimSlotIndex() returned null",
-                        infoForSlot);
-                assertEquals(
-                        "getActiveSubscriptionInfoForSimSlotIndex() returned inconsistent info",
-                        info.getSubscriptionId(), infoForSlot.getSubscriptionId());
+                assertWithMessage("getActiveSubscriptionInfoForSimSlotIndex() returned null")
+                        .that(infoForSlot)
+                        .isNotNull();
+                assertWithMessage(
+                                "getActiveSubscriptionInfoForSimSlotIndex() returned inconsistent"
+                                        + " info")
+                        .that(infoForSlot.getSubscriptionId())
+                        .isEqualTo(info.getSubscriptionId());
 
                 SubscriptionInfo infoForSubId =
                         mSubscriptionManager.getActiveSubscriptionInfo(info.getSubscriptionId());
-                assertNotNull("getActiveSubscriptionInfo() returned null", infoForSubId);
-                assertEquals("getActiveSubscriptionInfo() returned inconsistent info",
-                        info.getSubscriptionId(), infoForSubId.getSubscriptionId());
+                assertWithMessage("getActiveSubscriptionInfo() returned null")
+                        .that(infoForSubId)
+                        .isNotNull();
+                assertWithMessage("getActiveSubscriptionInfo() returned inconsistent info")
+                        .that(infoForSubId.getSubscriptionId())
+                        .isEqualTo(info.getSubscriptionId());
             }
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
     }
 
+    @Test
     public void testCarrierConfigIsAccessible() {
-        if (!hasCellular) return;
         try {
             PersistableBundle bundle = mCarrierConfigManager.getConfig();
-            assertNotNull("CarrierConfigManager#getConfig() returned null", bundle);
-            assertFalse("CarrierConfigManager#getConfig() returned empty bundle", bundle.isEmpty());
+            assertWithMessage("CarrierConfigManager#getConfig() returned null")
+                    .that(bundle)
+                    .isNotNull();
+            assertWithMessage("CarrierConfigManager#getConfig() returned empty bundle")
+                    .that(bundle.isEmpty())
+                    .isFalse();
 
             int subId = SubscriptionManager.getDefaultSubscriptionId();
             bundle = mCarrierConfigManager.getConfigForSubId(subId);
-            assertNotNull("CarrierConfigManager#getConfigForSubId() returned null", bundle);
-            assertFalse("CarrierConfigManager#getConfigForSubId() returned empty bundle",
-                    bundle.isEmpty());
+            assertWithMessage("CarrierConfigManager#getConfigForSubId() returned null")
+                    .that(bundle)
+                    .isNotNull();
+            assertWithMessage("CarrierConfigManager#getConfigForSubId() returned empty bundle")
+                    .that(bundle.isEmpty())
+                    .isFalse();
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
     }
 
+    @Test
     public void testTelephonyApisAreAccessible() {
-        if (!hasCellular) return;
         // The following methods may return any value depending on the state of the device. Simply
         // call them to make sure they do not throw any exceptions. Methods that return a device
         // identifier will be accessible to apps with carrier privileges in Q, but this may change
@@ -507,54 +518,65 @@
             mTelephonyManager.getManualNetworkSelectionPlmn();
             mTelephonyManager.setForbiddenPlmns(new ArrayList<String>());
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
     }
 
+    @Test
     public void testVoicemailTableIsAccessible() throws Exception {
-        if (!hasCellular) return;
         ContentValues value = new ContentValues();
         value.put(VoicemailContract.Voicemails.NUMBER, "0123456789");
         value.put(VoicemailContract.Voicemails.SOURCE_PACKAGE, selfPackageName);
         try {
             Uri uri = mVoicemailProvider.insert(mVoicemailContentUri, value);
-            assertNotNull(uri);
-            Cursor cursor = mVoicemailProvider.query(uri,
-                    new String[] {
-                            VoicemailContract.Voicemails.NUMBER,
-                            VoicemailContract.Voicemails.SOURCE_PACKAGE
-                    }, null, null, null);
-            assertNotNull(cursor);
-            assertTrue(cursor.moveToFirst());
-            assertEquals("0123456789", cursor.getString(0));
-            assertEquals(selfPackageName, cursor.getString(1));
-            assertFalse(cursor.moveToNext());
+            assertThat(uri).isNotNull();
+            Cursor cursor =
+                    mVoicemailProvider.query(
+                            uri,
+                            new String[] {
+                                VoicemailContract.Voicemails.NUMBER,
+                                VoicemailContract.Voicemails.SOURCE_PACKAGE
+                            },
+                            null,
+                            null,
+                            null);
+            assertThat(cursor).isNotNull();
+            assertThat(cursor.moveToFirst()).isTrue();
+            assertThat(cursor.getString(0)).isEqualTo("0123456789");
+            assertThat(cursor.getString(1)).isEqualTo(selfPackageName);
+            assertThat(cursor.moveToNext()).isFalse();
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
     }
 
+    @Test
     public void testVoicemailStatusTableIsAccessible() throws Exception {
-        if (!hasCellular) return;
         ContentValues value = new ContentValues();
-        value.put(VoicemailContract.Status.CONFIGURATION_STATE,
+        value.put(
+                VoicemailContract.Status.CONFIGURATION_STATE,
                 VoicemailContract.Status.CONFIGURATION_STATE_OK);
         value.put(VoicemailContract.Status.SOURCE_PACKAGE, selfPackageName);
         try {
             Uri uri = mStatusProvider.insert(mStatusContentUri, value);
-            assertNotNull(uri);
-            Cursor cursor = mVoicemailProvider.query(uri,
-                    new String[] {
-                            VoicemailContract.Status.CONFIGURATION_STATE,
-                            VoicemailContract.Status.SOURCE_PACKAGE
-                    }, null, null, null);
-            assertNotNull(cursor);
-            assertTrue(cursor.moveToFirst());
-            assertEquals(VoicemailContract.Status.CONFIGURATION_STATE_OK, cursor.getInt(0));
-            assertEquals(selfPackageName, cursor.getString(1));
-            assertFalse(cursor.moveToNext());
+            assertThat(uri).isNotNull();
+            Cursor cursor =
+                    mVoicemailProvider.query(
+                            uri,
+                            new String[] {
+                                VoicemailContract.Status.CONFIGURATION_STATE,
+                                VoicemailContract.Status.SOURCE_PACKAGE
+                            },
+                            null,
+                            null,
+                            null);
+            assertThat(cursor).isNotNull();
+            assertThat(cursor.moveToFirst()).isTrue();
+            assertThat(cursor.getInt(0)).isEqualTo(VoicemailContract.Status.CONFIGURATION_STATE_OK);
+            assertThat(cursor.getString(1)).isEqualTo(selfPackageName);
+            assertThat(cursor.moveToNext()).isFalse();
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
     }
 
@@ -573,23 +595,23 @@
     static final int CARRIER_PRIVILEGE_LISTENERS =
             READ_PHONE_STATE_LISTENERS | READ_PRECISE_PHONE_STATE_LISTENERS;
 
+    @Test
     public void testGetManualNetworkSelectionPlmnPersisted() throws Exception {
-        if (!hasCellular) return;
         if (mTelephonyManager.getPhoneType() != TelephonyManager.PHONE_TYPE_GSM) return;
 
         try {
             mTelephonyManager.setNetworkSelectionModeManual(
-                     TESTING_PLMN/* operatorNumeric */, true /* persistSelection */);
+                    TESTING_PLMN /* operatorNumeric */, true /* persistSelection */);
             String plmn = mTelephonyManager.getManualNetworkSelectionPlmn();
-            assertEquals(TESTING_PLMN, plmn);
+            assertThat(plmn).isEqualTo(TESTING_PLMN);
         } finally {
             mTelephonyManager.setNetworkSelectionModeAutomatic();
         }
     }
 
+    @Test
     public void testPhoneStateListener() throws Exception {
-        if (!hasCellular) return;
-        PhoneStateListener psl = new PhoneStateListener((Runnable r) -> { });
+        PhoneStateListener psl = new PhoneStateListener((Runnable r) -> {});
         try {
             mTelephonyManager.listen(psl, CARRIER_PRIVILEGE_LISTENERS);
         } finally {
@@ -597,60 +619,59 @@
         }
     }
 
+    @Test
     public void testIsManualNetworkSelectionAllowed() throws Exception {
-        if (!hasCellular) return;
         if (mTelephonyManager.getPhoneType() != TelephonyManager.PHONE_TYPE_GSM) return;
 
         try {
-            assertTrue(mTelephonyManager.isManualNetworkSelectionAllowed());
+            assertThat(mTelephonyManager.isManualNetworkSelectionAllowed()).isTrue();
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
     }
 
+    @Test
     public void testGetNetworkSelectionMode() throws Exception {
-        if (!hasCellular) return;
-
         try {
-            ShellIdentityUtils.invokeMethodWithShellPermissionsNoReturn(mTelephonyManager,
-                    (tm) -> tm.setNetworkSelectionModeAutomatic());
+            ShellIdentityUtils.invokeMethodWithShellPermissionsNoReturn(
+                    mTelephonyManager, (tm) -> tm.setNetworkSelectionModeAutomatic());
             int networkMode = mTelephonyManager.getNetworkSelectionMode();
-            assertEquals(TelephonyManager.NETWORK_SELECTION_MODE_AUTO, networkMode);
+            assertThat(networkMode).isEqualTo(TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
         } catch (SecurityException e) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
     }
 
+    @Test
     public void testSubscriptionInfoChangeListener() throws Exception {
-        if (!hasCellular) return;
         final AtomicReference<SecurityException> error = new AtomicReference<>();
         final CountDownLatch latch = new CountDownLatch(1);
-        new Handler(mListenerThread.getLooper()).post(() -> {
-            SubscriptionManager.OnSubscriptionsChangedListener listener =
-                    new SubscriptionManager.OnSubscriptionsChangedListener();
-            try {
-                mSubscriptionManager.addOnSubscriptionsChangedListener(listener);
-            } catch (SecurityException e) {
-                error.set(e);
-            } finally {
-                mSubscriptionManager.removeOnSubscriptionsChangedListener(listener);
-                latch.countDown();
-            }
-        });
-        assertTrue("Test timed out", latch.await(30L, TimeUnit.SECONDS));
+        new Handler(mListenerThread.getLooper())
+                .post(
+                        () -> {
+                            SubscriptionManager.OnSubscriptionsChangedListener listener =
+                                    new SubscriptionManager.OnSubscriptionsChangedListener();
+                            try {
+                                mSubscriptionManager.addOnSubscriptionsChangedListener(listener);
+                            } catch (SecurityException e) {
+                                error.set(e);
+                            } finally {
+                                mSubscriptionManager.removeOnSubscriptionsChangedListener(listener);
+                                latch.countDown();
+                            }
+                        });
+        assertWithMessage("Test timed out").that(latch.await(30L, TimeUnit.SECONDS)).isTrue();
         if (error.get() != null) {
-            failMessage();
+            fail(NO_CARRIER_PRIVILEGES_FAILURE_MESSAGE);
         }
-
     }
 
     /**
      * Test that it's possible to open logical channels to the ICC. This mirrors the Manage Channel
      * command described in TS 102 221 Section 11.1.17.
      */
+    @Test
     public void testIccOpenLogicalChannel() {
-        if (!hasCellular) return;
-
         // The AID here doesn't matter - we just need to open a valid connection. In this case, the
         // specified AID ("") opens a channel and selects the MF.
         IccOpenLogicalChannelResponse response = mTelephonyManager.iccOpenLogicalChannel("");
@@ -662,9 +683,8 @@
         }
     }
 
+    @Test
     public void testIccOpenLogicalChannelWithValidP2() {
-        if (!hasCellular) return;
-
         // {@link TelephonyManager#iccOpenLogicalChannel} sends a Manage Channel (open) APDU
         // followed by a Select APDU with the given AID and p2 values. See Open Mobile API
         // Specification v3.2 Section 6.2.7.h and TS 102 221 for details.
@@ -678,20 +698,19 @@
         }
     }
 
+    @Test
     public void testIccOpenLogicalChannelWithInvalidP2() {
-        if (!hasCellular) return;
-
         // Valid p2 values are defined in TS 102 221 Table 11.2. Per Table 11.2, 0xF0 should be
         // invalid. Any p2 values that produce non '9000'/'62xx'/'63xx' status words are treated as
         // an error and the channel is not opened. Due to compatibility issues with older devices,
         // this check is only enabled for new devices launching on Q+.
-        if (Build.VERSION.FIRST_SDK_INT >= Build.VERSION_CODES.Q) {
+        if (Build.VERSION.DEVICE_INITIAL_SDK_INT >= Build.VERSION_CODES.Q) {
             int p2 = 0xF0;
             IccOpenLogicalChannelResponse response =
                     mTelephonyManager.iccOpenLogicalChannel("", p2);
             final int logicalChannel = response.getChannel();
-            assertEquals(INVALID_CHANNEL, logicalChannel);
-            assertNotEquals(STATUS_NO_ERROR, response.getStatus());
+            assertThat(logicalChannel).isEqualTo(INVALID_CHANNEL);
+            assertThat(response.getStatus()).isNotEqualTo(STATUS_NO_ERROR);
         }
     }
 
@@ -699,36 +718,32 @@
      * Test that it's possible to close logical channels to the ICC. This follows the Manage Channel
      * command described in TS 102 221 Section 11.1.17.
      */
+    @Test
     public void testIccCloseLogicalChannel() {
-        if (!hasCellular) return;
-
         // The directory here doesn't matter - we just need to open a valid connection that can
         // later be closed. In this case, the specified AID ("") opens a channel and selects the MF.
         IccOpenLogicalChannelResponse response = mTelephonyManager.iccOpenLogicalChannel("");
 
         // Check that the select command succeeded. This ensures that the logical channel is indeed
         // open.
-        assertArrayEquals(STATUS_NORMAL, response.getSelectResponse());
-        assertTrue(mTelephonyManager.iccCloseLogicalChannel(response.getChannel()));
+        assertThat(response.getSelectResponse()).isEqualTo(STATUS_NORMAL);
+        assertThat(mTelephonyManager.iccCloseLogicalChannel(response.getChannel())).isTrue();
 
         // Close opened channel twice.
-        assertFalse(mTelephonyManager.iccCloseLogicalChannel(response.getChannel()));
+        assertThat(mTelephonyManager.iccCloseLogicalChannel(response.getChannel())).isFalse();
 
         // Channel 0 is guaranteed to be always available and cannot be closed, per TS 102 221
         // Section 11.1.17
-        assertFalse(mTelephonyManager.iccCloseLogicalChannel(0));
+        assertThat(mTelephonyManager.iccCloseLogicalChannel(0)).isFalse();
     }
 
     /**
      * This test ensures that valid APDU instructions can be sent and processed by the ICC. To do
-     * so, APDUs are sent to:
-     * - get the status of the MF
-     * - select the Access Rule Reference (ARR) for the MF
-     * - get the FCP template response for the select
+     * so, APDUs are sent to: - get the status of the MF - select the Access Rule Reference (ARR)
+     * for the MF - get the FCP template response for the select
      */
+    @Test
     public void testIccTransmitApduLogicalChannel() {
-        if (!hasCellular) return;
-
         // An open LC is required for transmitting APDU commands. This opens an LC to the MF.
         IccOpenLogicalChannelResponse iccOpenLogicalChannelResponse =
                 mTelephonyManager.iccOpenLogicalChannel("");
@@ -741,7 +756,7 @@
             int cla = CLA_STATUS;
             int p1 = 0; // no indication of application status
             int p2 = 0; // same response parameters as the SELECT in the iccOpenLogicalChannel()
-                        // above
+            // above
             int p3 = 0; // length of 'data' payload
             String data = "";
             String response =
@@ -749,8 +764,8 @@
                             logicalChannel, cla, COMMAND_STATUS, p1, p2, p3, data);
             FcpTemplate fcpTemplate = FcpTemplate.parseFcpTemplate(response);
             // Check that the FCP Template's file ID matches the MF
-            assertTrue(containsFileId(fcpTemplate, MF_FILE_ID));
-            assertEquals(STATUS_NORMAL_STRING, fcpTemplate.getStatus());
+            assertThat(containsFileId(fcpTemplate, MF_FILE_ID)).isTrue();
+            assertThat(fcpTemplate.getStatus()).isEqualTo(STATUS_NORMAL_STRING);
 
             // Select the Access Rule Reference for the MF. Similar to the MF, this will exist
             // across all SIM cards. TS 102 221 Section 11.1.1
@@ -767,7 +782,7 @@
             // previous SELECT command. Some devices that launched before Q return TPDUs (instead of
             // APDUs) - these devices must issue a subsequent GET RESPONSE command to get the FCP
             // template.
-            if (Build.VERSION.FIRST_SDK_INT < Build.VERSION_CODES.Q) {
+            if (Build.VERSION.DEVICE_INITIAL_SDK_INT < Build.VERSION_CODES.Q) {
                 // Conditionally need to send GET RESPONSE apdu based on response from
                 // TelephonyManager
                 if (response.startsWith(STATUS_BYTES_REMAINING)) {
@@ -785,8 +800,8 @@
 
             fcpTemplate = FcpTemplate.parseFcpTemplate(response);
             // Check that the FCP Template's file ID matches the selected ARR
-            assertTrue(containsFileId(fcpTemplate, MF_ARR_FILE_ID));
-            assertEquals(STATUS_NORMAL_STRING, fcpTemplate.getStatus());
+            assertThat(containsFileId(fcpTemplate, MF_ARR_FILE_ID)).isTrue();
+            assertThat(fcpTemplate.getStatus()).isEqualTo(STATUS_NORMAL_STRING);
         } finally {
             mTelephonyManager.iccCloseLogicalChannel(logicalChannel);
         }
@@ -796,9 +811,8 @@
      * Tests several invalid APDU instructions over a logical channel and makes sure appropriate
      * errors are returned from the UICC.
      */
+    @Test
     public void testIccTransmitApduLogicalChannelWithInvalidInputs() {
-        if (!hasCellular) return;
-
         // An open LC is required for transmitting apdu commands. This opens an LC to the MF.
         IccOpenLogicalChannelResponse iccOpenLogicalChannelResponse =
                 mTelephonyManager.iccOpenLogicalChannel("");
@@ -810,13 +824,13 @@
             int cla = CLA_STATUS | logicalChannel;
             int p1 = 0xFF; // only '00', '01', and '02' are allowed
             int p2 = 0; // same response parameters as the SELECT in the iccOpenLogicalChannel()
-                        // above
+            // above
             int p3 = 0; // length of 'data' payload
             String data = "";
             String response =
                     mTelephonyManager.iccTransmitApduLogicalChannel(
                             logicalChannel, cla, COMMAND_STATUS, p1, p2, p3, data);
-            assertTrue(INVALID_PARAMETERS_STATUSES.contains(response));
+            assertThat(INVALID_PARAMETERS_STATUSES.contains(response)).isTrue();
 
             // Select a file that doesn't exist
             cla = CLA_SELECT;
@@ -827,7 +841,7 @@
             response =
                     mTelephonyManager.iccTransmitApduLogicalChannel(
                             logicalChannel, cla, COMMAND_SELECT, p1, p2, p3, data);
-            assertEquals(STATUS_FILE_NOT_FOUND, response);
+            assertThat(response).isEqualTo(STATUS_FILE_NOT_FOUND);
 
             // Manage channel with incorrect p1 parameter
             cla = CLA_MANAGE_CHANNEL | logicalChannel;
@@ -838,7 +852,7 @@
             response =
                     mTelephonyManager.iccTransmitApduLogicalChannel(
                             logicalChannel, cla, COMMAND_MANAGE_CHANNEL, p1, p2, p3, data);
-            assertTrue(isErrorResponse(response));
+            assertThat(isErrorResponse(response)).isTrue();
 
             // Use an incorrect class byte for Status apdu
             cla = 0xFF;
@@ -849,7 +863,7 @@
             response =
                     mTelephonyManager.iccTransmitApduLogicalChannel(
                             logicalChannel, cla, COMMAND_STATUS, p1, p2, p3, data);
-            assertEquals(STATUS_WRONG_CLASS, response);
+            assertThat(response).isEqualTo(STATUS_WRONG_CLASS);
 
             // Provide a data field that is longer than described for Select apdu
             cla = CLA_SELECT | logicalChannel;
@@ -860,7 +874,7 @@
             response =
                     mTelephonyManager.iccTransmitApduLogicalChannel(
                             logicalChannel, cla, COMMAND_SELECT, p1, p2, p3, data);
-            assertTrue(isErrorResponse(response));
+            assertThat(isErrorResponse(response)).isTrue();
 
             // Use an invalid instruction
             cla = 0;
@@ -872,7 +886,7 @@
             response =
                     mTelephonyManager.iccTransmitApduLogicalChannel(
                             logicalChannel, cla, invalidInstruction, p1, p2, p3, data);
-            assertTrue(isErrorResponse(response));
+            assertThat(isErrorResponse(response)).isTrue();
         } finally {
             mTelephonyManager.iccCloseLogicalChannel(logicalChannel);
         }
@@ -882,9 +896,8 @@
      * This test ensures that files can be read off the UICC. This helps to test the SIM booting
      * process, as it process involves several file-reads. The ICCID is one of the first files read.
      */
+    @Test
     public void testApduFileRead() {
-        if (!hasCellular) return;
-
         // Open a logical channel and select the MF.
         IccOpenLogicalChannelResponse iccOpenLogicalChannel =
                 mTelephonyManager.iccOpenLogicalChannel("");
@@ -898,7 +911,7 @@
             String response =
                     mTelephonyManager.iccTransmitApduLogicalChannel(
                             logicalChannel, CLA_SELECT, COMMAND_SELECT, p1, p2, p3, ICCID_FILE_ID);
-            assertEquals(STATUS_NORMAL_STRING, response);
+            assertThat(response).isEqualTo(STATUS_NORMAL_STRING);
 
             // Read the contents of the ICCID.
             p1 = 0; // 0-byte offset
@@ -907,27 +920,25 @@
             response =
                     mTelephonyManager.iccTransmitApduLogicalChannel(
                             logicalChannel, CLA_READ_BINARY, COMMAND_READ_BINARY, p1, p2, p3, "");
-            assertTrue(response.endsWith(STATUS_NORMAL_STRING));
+            assertThat(response).endsWith(STATUS_NORMAL_STRING);
         } finally {
             mTelephonyManager.iccCloseLogicalChannel(logicalChannel);
         }
     }
 
-    /**
-     * This test sends several valid APDU commands over the basic channel (channel 0).
-     */
+    /** This test sends several valid APDU commands over the basic channel (channel 0). */
+    @Test
     public void testIccTransmitApduBasicChannel() {
-        if (!hasCellular) return;
-
         // select the MF
         int cla = CLA_SELECT;
         int p1 = 0; // select EF by FID
         int p2 = 0x0C; // requesting FCP template
         int p3 = 2; // length of 'data' payload
         String data = MF_FILE_ID;
-        String response = mTelephonyManager
-            .iccTransmitApduBasicChannel(cla, COMMAND_SELECT, p1, p2, p3, data);
-        assertEquals(STATUS_NORMAL_STRING, response);
+        String response =
+                mTelephonyManager.iccTransmitApduBasicChannel(
+                        cla, COMMAND_SELECT, p1, p2, p3, data);
+        assertThat(response).isEqualTo(STATUS_NORMAL_STRING);
 
         // get the Status of the current file/directory
         cla = CLA_STATUS;
@@ -935,10 +946,11 @@
         p2 = 0; // same response parameters as the SELECT in the iccOpenLogicalChannel() above
         p3 = 0; // length of 'data' payload
         data = "";
-        response = mTelephonyManager
-            .iccTransmitApduBasicChannel(cla, COMMAND_STATUS, p1, p2, p3, data);
+        response =
+                mTelephonyManager.iccTransmitApduBasicChannel(
+                        cla, COMMAND_STATUS, p1, p2, p3, data);
         FcpTemplate fcpTemplate = FcpTemplate.parseFcpTemplate(response);
-        assertTrue(containsFileId(fcpTemplate, MF_FILE_ID));
+        assertThat(containsFileId(fcpTemplate, MF_FILE_ID)).isTrue();
 
         // Manually open a logical channel
         cla = CLA_MANAGE_CHANNEL;
@@ -946,11 +958,12 @@
         p2 = 0; // '00' for open command
         p3 = 0; // length of data payload
         data = "";
-        response = mTelephonyManager
-            .iccTransmitApduBasicChannel(cla, COMMAND_MANAGE_CHANNEL, p1, p2, p3, data);
+        response =
+                mTelephonyManager.iccTransmitApduBasicChannel(
+                        cla, COMMAND_MANAGE_CHANNEL, p1, p2, p3, data);
         // response is in the format | 1 byte: channel number | 2 bytes: status word |
         String responseStatus = response.substring(2);
-        assertEquals(STATUS_NORMAL_STRING, responseStatus);
+        assertThat(responseStatus).isEqualTo(STATUS_NORMAL_STRING);
 
         // Close the open channel
         byte[] responseBytes = hexStringToBytes(response);
@@ -960,18 +973,18 @@
         p2 = channel; // the channel to be closed
         p3 = 0; // length of data payload
         data = "";
-        response = mTelephonyManager
-            .iccTransmitApduBasicChannel(cla, COMMAND_MANAGE_CHANNEL, p1, p2, p3, data);
-        assertEquals(STATUS_NORMAL_STRING, response);
+        response =
+                mTelephonyManager.iccTransmitApduBasicChannel(
+                        cla, COMMAND_MANAGE_CHANNEL, p1, p2, p3, data);
+        assertThat(response).isEqualTo(STATUS_NORMAL_STRING);
     }
 
     /**
      * This test verifies that {@link TelephonyManager#setLine1NumberForDisplay(String, String)}
      * correctly sets the Line 1 alpha tag and number when called.
      */
+    @Test
     public void testLine1NumberForDisplay() {
-        if (!hasCellular) return;
-
         // Cache original alpha tag and number values.
         String originalAlphaTag = mTelephonyManager.getLine1AlphaTag();
         String originalNumber = mTelephonyManager.getLine1Number();
@@ -982,18 +995,18 @@
             String defaultAlphaTag = mTelephonyManager.getLine1AlphaTag();
             String defaultNumber = mTelephonyManager.getLine1Number();
 
-            assertTrue(mTelephonyManager.setLine1NumberForDisplay(ALPHA_TAG_A, NUMBER_A));
-            assertEquals(ALPHA_TAG_A, mTelephonyManager.getLine1AlphaTag());
-            assertEquals(NUMBER_A, mTelephonyManager.getLine1Number());
+            assertThat(mTelephonyManager.setLine1NumberForDisplay(ALPHA_TAG_A, NUMBER_A)).isTrue();
+            assertThat(mTelephonyManager.getLine1AlphaTag()).isEqualTo(ALPHA_TAG_A);
+            assertThat(mTelephonyManager.getLine1Number()).isEqualTo(NUMBER_A);
 
-            assertTrue(mTelephonyManager.setLine1NumberForDisplay(ALPHA_TAG_B, NUMBER_B));
-            assertEquals(ALPHA_TAG_B, mTelephonyManager.getLine1AlphaTag());
-            assertEquals(NUMBER_B, mTelephonyManager.getLine1Number());
+            assertThat(mTelephonyManager.setLine1NumberForDisplay(ALPHA_TAG_B, NUMBER_B)).isTrue();
+            assertThat(mTelephonyManager.getLine1AlphaTag()).isEqualTo(ALPHA_TAG_B);
+            assertThat(mTelephonyManager.getLine1Number()).isEqualTo(NUMBER_B);
 
             // null is used to clear the Line 1 alpha tag and number values.
-            assertTrue(mTelephonyManager.setLine1NumberForDisplay(null, null));
-            assertEquals(defaultAlphaTag, mTelephonyManager.getLine1AlphaTag());
-            assertEquals(defaultNumber, mTelephonyManager.getLine1Number());
+            assertThat(mTelephonyManager.setLine1NumberForDisplay(null, null)).isTrue();
+            assertThat(mTelephonyManager.getLine1AlphaTag()).isEqualTo(defaultAlphaTag);
+            assertThat(mTelephonyManager.getLine1Number()).isEqualTo(defaultNumber);
         } finally {
             // Reset original alpha tag and number values.
             mTelephonyManager.setLine1NumberForDisplay(originalAlphaTag, originalNumber);
@@ -1004,21 +1017,20 @@
      * This test verifies that {@link TelephonyManager#setVoiceMailNumber(String, String)} correctly
      * sets the VoiceMail alpha tag and number when called.
      */
+    @Test
     public void testVoiceMailNumber() {
-        if (!hasCellular) return;
-
         // Cache original alpha tag and number values.
         String originalAlphaTag = mTelephonyManager.getVoiceMailAlphaTag();
         String originalNumber = mTelephonyManager.getVoiceMailNumber();
 
         try {
-            assertTrue(mTelephonyManager.setVoiceMailNumber(ALPHA_TAG_A, NUMBER_A));
-            assertEquals(ALPHA_TAG_A, mTelephonyManager.getVoiceMailAlphaTag());
-            assertEquals(NUMBER_A, mTelephonyManager.getVoiceMailNumber());
+            assertThat(mTelephonyManager.setVoiceMailNumber(ALPHA_TAG_A, NUMBER_A)).isTrue();
+            assertThat(mTelephonyManager.getVoiceMailAlphaTag()).isEqualTo(ALPHA_TAG_A);
+            assertThat(mTelephonyManager.getVoiceMailNumber()).isEqualTo(NUMBER_A);
 
-            assertTrue(mTelephonyManager.setVoiceMailNumber(ALPHA_TAG_B, NUMBER_B));
-            assertEquals(ALPHA_TAG_B, mTelephonyManager.getVoiceMailAlphaTag());
-            assertEquals(NUMBER_B, mTelephonyManager.getVoiceMailNumber());
+            assertThat(mTelephonyManager.setVoiceMailNumber(ALPHA_TAG_B, NUMBER_B)).isTrue();
+            assertThat(mTelephonyManager.getVoiceMailAlphaTag()).isEqualTo(ALPHA_TAG_B);
+            assertThat(mTelephonyManager.getVoiceMailNumber()).isEqualTo(NUMBER_B);
         } finally {
             // Reset original alpha tag and number values.
             mTelephonyManager.setVoiceMailNumber(originalAlphaTag, originalNumber);
@@ -1029,12 +1041,11 @@
      * This test verifies that {@link SubscriptionManager#createSubscriptionGroup(List)} correctly
      * create a group with the given subscription id.
      *
-     * This also verifies that
-     * {@link SubscriptionManager#removeSubscriptionsFromGroup(List, ParcelUuid)} correctly remove
-     * the given subscription group.
+     * <p>This also verifies that {@link SubscriptionManager#removeSubscriptionsFromGroup(List,
+     * ParcelUuid)} correctly remove the given subscription group.
      */
+    @Test
     public void testCreateAndRemoveSubscriptionGroup() {
-        if (!hasCellular) return;
         // Set subscription group with current sub Id.
         int subId = SubscriptionManager.getDefaultSubscriptionId();
         List<Integer> subGroup = Arrays.asList(subId);
@@ -1044,19 +1055,20 @@
         List<SubscriptionInfo> infoList = mSubscriptionManager.getSubscriptionsInGroup(uuid);
 
         try {
-            assertEquals(1, infoList.size());
-            assertEquals(uuid, infoList.get(0).getGroupUuid());
-            assertEquals(subId, infoList.get(0).getSubscriptionId());
+            assertThat(infoList).hasSize(1);
+            assertThat(infoList.get(0).getGroupUuid()).isEqualTo(uuid);
+            assertThat(infoList.get(0).getSubscriptionId()).isEqualTo(subId);
         } finally {
             // Verify that the given subGroup has been removed.
             mSubscriptionManager.removeSubscriptionsFromGroup(subGroup, uuid);
             infoList = mSubscriptionManager.getSubscriptionsInGroup(uuid);
-            assertTrue(infoList.isEmpty());
+            assertThat(infoList).isEmpty();
         }
     }
 
+    @Test
     public void testAddSubscriptionToExistingGroupForMultipleSims() {
-        if (!hasCellular || mTelephonyManager.getPhoneCount() < DSDS_PHONE_COUNT) return;
+        if (mTelephonyManager.getPhoneCount() < DSDS_PHONE_COUNT) return;
 
         // Set subscription group with current sub Id.
         int subId = SubscriptionManager.getDefaultDataSubscriptionId();
@@ -1069,7 +1081,7 @@
                     mSubscriptionManager.getActiveSubscriptionInfoList();
 
             // Verify that the device has at least two active subscriptions.
-            assertTrue(activeSubInfos.size() >= DSDS_PHONE_COUNT);
+            assertThat(activeSubInfos.size()).isAtLeast(DSDS_PHONE_COUNT);
 
             List<Integer> activeSubGroup = getSubscriptionIdList(activeSubInfos);
             activeSubGroup.removeIf(id -> id == subId);
@@ -1079,23 +1091,21 @@
             List<Integer> infoList =
                     getSubscriptionIdList(mSubscriptionManager.getSubscriptionsInGroup(uuid));
             activeSubGroup.add(subId);
-            assertEquals(activeSubGroup.size(), infoList.size());
-            assertTrue(activeSubGroup.containsAll(infoList));
+            assertThat(infoList).hasSize(activeSubGroup.size());
+            assertThat(infoList).containsExactly(activeSubGroup);
         } finally {
             removeSubscriptionsFromGroup(uuid);
         }
     }
 
     /**
-     * This test verifies that
-     * {@link SubscriptionManager#addSubscriptionsIntoGroup(List, ParcelUuid)}} correctly add some
-     * additional subscriptions to the existing group.
+     * This test verifies that {@link SubscriptionManager#addSubscriptionsIntoGroup(List,
+     * ParcelUuid)}} correctly add some additional subscriptions to the existing group.
      *
-     * This test required the device has more than one subscription.
+     * <p>This test required the device has more than one subscription.
      */
+    @Test
     public void testAddSubscriptionToExistingGroupForEsim() {
-        if (!hasCellular) return;
-
         // Set subscription group with current sub Id.
         int subId = SubscriptionManager.getDefaultDataSubscriptionId();
         if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) return;
@@ -1114,8 +1124,8 @@
                 List<Integer> infoList =
                         getSubscriptionIdList(mSubscriptionManager.getSubscriptionsInGroup(uuid));
                 accessibleSubGroup.add(subId);
-                assertEquals(accessibleSubGroup.size(), infoList.size());
-                assertTrue(accessibleSubGroup.containsAll(infoList));
+                assertThat(infoList).hasSize(accessibleSubGroup.size());
+                assertThat(infoList).containsExactly(accessibleSubGroup);
             }
         } finally {
             removeSubscriptionsFromGroup(uuid);
@@ -1126,9 +1136,8 @@
      * This test verifies that {@link SubscriptionManager#setOpportunistic(boolean, int)} correctly
      * set the opportunistic property of the given subscription.
      */
+    @Test
     public void testOpportunistic() {
-        if (!hasCellular) return;
-
         int subId = SubscriptionManager.getDefaultDataSubscriptionId();
         if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) return;
         SubscriptionInfo info = mSubscriptionManager.getActiveSubscriptionInfo(subId);
@@ -1137,17 +1146,16 @@
 
         try {
             // Mark the given subscription as opportunistic subscription.
-            boolean successed = mSubscriptionManager.setOpportunistic(newOpportunistic, subId);
-            assertTrue(successed);
+            assertThat(mSubscriptionManager.setOpportunistic(newOpportunistic, subId)).isTrue();
 
             // Verify that the given subscription is opportunistic subscription.
             info = mSubscriptionManager.getActiveSubscriptionInfo(subId);
-            assertEquals(newOpportunistic, info.isOpportunistic());
+            assertThat(info.isOpportunistic()).isEqualTo(newOpportunistic);
         } finally {
             // Set back to original opportunistic property.
             mSubscriptionManager.setOpportunistic(oldOpportunistic, subId);
             info = mSubscriptionManager.getActiveSubscriptionInfo(subId);
-            assertEquals(oldOpportunistic, info.isOpportunistic());
+            assertThat(info.isOpportunistic()).isEqualTo(oldOpportunistic);
         }
     }
 
@@ -1156,9 +1164,8 @@
      * String)} correctly transmits iccIO commands to the UICC card. First, the MF is selected via a
      * SELECT apdu via the basic channel, then a STATUS AT-command is sent.
      */
+    @Test
     public void testIccExchangeSimIO() {
-        if (!hasCellular) return;
-
         // select the MF first. This makes sure the next STATUS AT-command returns a FCP template
         // for the right file.
         int cla = CLA_SELECT;
@@ -1166,65 +1173,71 @@
         int p2 = 0x0C; // requesting FCP template
         int p3 = 2; // length of 'data' payload
         String data = MF_FILE_ID;
-        String response = mTelephonyManager
-                .iccTransmitApduBasicChannel(cla, COMMAND_SELECT, p1, p2, p3, data);
-        assertEquals(STATUS_NORMAL_STRING, response);
+        String response =
+                mTelephonyManager.iccTransmitApduBasicChannel(
+                        cla, COMMAND_SELECT, p1, p2, p3, data);
+        assertThat(response).isEqualTo(STATUS_NORMAL_STRING);
 
         // The iccExchangeSimIO command implements the +CRSM command defined in TS 27.007 section
         // 8.18. A STATUS command is sent and the returned value will be an FCP template.
-        byte[] result = mTelephonyManager.iccExchangeSimIO(
-                0, // fileId: not required for STATUS
-                COMMAND_STATUS,  // command: STATUS
-                0, // p1: not required for STATUS
-                0, // p2: not required for STATUS
-                0, // p3: not required for STATUS
-                ""); // filePath: not required for STATUS
+        byte[] result =
+                mTelephonyManager.iccExchangeSimIO(
+                        0, // fileId: not required for STATUS
+                        COMMAND_STATUS, // command: STATUS
+                        0, // p1: not required for STATUS
+                        0, // p2: not required for STATUS
+                        0, // p3: not required for STATUS
+                        ""); // filePath: not required for STATUS
         String resultString = bytesToHexString(result);
         FcpTemplate fcpTemplate = FcpTemplate.parseFcpTemplate(resultString);
-        assertTrue(containsFileId(fcpTemplate, MF_FILE_ID));
-        assertEquals("iccExchangeSimIO returned non-normal Status byte: " + resultString,
-                STATUS_NORMAL_STRING, fcpTemplate.getStatus());
+        assertThat(containsFileId(fcpTemplate, MF_FILE_ID)).isTrue();
+        assertWithMessage("iccExchangeSimIO returned non-normal Status byte: %s", resultString)
+                .that(fcpTemplate.getStatus())
+                .isEqualTo(STATUS_NORMAL_STRING);
     }
 
     /**
      * This test checks that a STATUS apdu can be sent as an encapsulated envelope to the UICC via
      * {@link TelephonyManager#sendEnvelopeWithStatus(String)}.
      */
+    @Test
     public void testSendEnvelopeWithStatus() {
-        if (!hasCellular) return;
-
         // STATUS apdu as hex String
         String envelope =
                 CLA_STATUS_STRING
-                + COMMAND_STATUS_STRING
-                + "00" // p1: no indication of application status
-                + "00"; // p2: identical parameters to
+                        + COMMAND_STATUS_STRING
+                        + "00" // p1: no indication of application status
+                        + "00"; // p2: identical parameters to
         String response = mTelephonyManager.sendEnvelopeWithStatus(envelope);
 
         // TODO(b/137963715): add more specific assertions on response from TelMan#sendEnvelope
-        assertNotNull("sendEnvelopeWithStatus is null for envelope=" + envelope, response);
+        assertWithMessage("sendEnvelopeWithStatus is null for envelope=%s", envelope)
+                .that(response)
+                .isNotNull();
     }
 
     /**
      * This test checks that applications with carrier privilege can set/clear signal strength
-     * update request via
-     * {@link TelephonyManager#setSignalStrengthUpdateRequest(SignalStrengthUpdateRequest)} and
-     * {@link TelephonyManager#clearSignalStrengthUpdateRequest} without
-     * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}.
+     * update request via {@link
+     * TelephonyManager#setSignalStrengthUpdateRequest(SignalStrengthUpdateRequest)} and {@link
+     * TelephonyManager#clearSignalStrengthUpdateRequest} without {@link
+     * android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}.
      */
+    @Test
     public void testSetClearSignalStrengthUpdateRequest() {
-        if (!hasCellular) return;
-
         final SignalStrengthUpdateRequest request =
                 new SignalStrengthUpdateRequest.Builder()
-                        .setSignalThresholdInfos(List.of(
-                                new SignalThresholdInfo.Builder()
-                                        .setRadioAccessNetworkType(
-                                                AccessNetworkConstants.AccessNetworkType.GERAN)
-                                        .setSignalMeasurementType(
-                                                SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSSI)
-                                        .setThresholds(new int[]{-113, -103, -97, -51})
-                                        .build()))
+                        .setSignalThresholdInfos(
+                                List.of(
+                                        new SignalThresholdInfo.Builder()
+                                                .setRadioAccessNetworkType(
+                                                        AccessNetworkConstants.AccessNetworkType
+                                                                .GERAN)
+                                                .setSignalMeasurementType(
+                                                        SignalThresholdInfo
+                                                                .SIGNAL_MEASUREMENT_TYPE_RSSI)
+                                                .setThresholds(new int[] {-113, -103, -97, -51})
+                                                .build()))
                         .setReportingRequestedWhileIdle(true)
                         .build();
         try {
@@ -1237,20 +1250,19 @@
     private void verifyValidIccOpenLogicalChannelResponse(IccOpenLogicalChannelResponse response) {
         // The assigned channel should be between the min and max allowed channel numbers
         int channel = response.getChannel();
-        assertTrue(MIN_LOGICAL_CHANNEL <= channel && channel <= MAX_LOGICAL_CHANNEL);
-        assertEquals(STATUS_NO_ERROR, response.getStatus());
-        assertArrayEquals(STATUS_NORMAL, response.getSelectResponse());
+        assertThat(channel).isIn(Range.closed(MIN_LOGICAL_CHANNEL, MAX_LOGICAL_CHANNEL));
+        assertThat(response.getStatus()).isEqualTo(STATUS_NO_ERROR);
+        assertThat(response.getSelectResponse()).isEqualTo(STATUS_NORMAL);
     }
 
     private void removeSubscriptionsFromGroup(ParcelUuid uuid) {
         List<SubscriptionInfo> infoList = mSubscriptionManager.getSubscriptionsInGroup(uuid);
         if (!infoList.isEmpty()) {
             mSubscriptionManager.removeSubscriptionsFromGroup(
-                    getSubscriptionIdList(infoList),
-                    uuid);
+                    getSubscriptionIdList(infoList), uuid);
         }
         infoList = mSubscriptionManager.getSubscriptionsInGroup(uuid);
-        assertTrue(infoList.isEmpty());
+        assertThat(infoList).isEmpty();
     }
 
     private List<Integer> getSubscriptionIdList(List<SubscriptionInfo> subInfoList) {
@@ -1265,26 +1277,24 @@
      *
      * @param fcpTemplate The FCP Template to be checked.
      * @param fileId The file ID that is being searched for
-     *
      * @return true iff fcpTemplate contains fileId.
      */
     private boolean containsFileId(FcpTemplate fcpTemplate, String fileId) {
-        return fcpTemplate.getTlvs().stream().anyMatch(tlv ->
-                tlv.getTag() == FILE_IDENTIFIER && tlv.getValue().equals(fileId));
+        return fcpTemplate.getTlvs().stream()
+                .anyMatch(tlv -> tlv.getTag() == FILE_IDENTIFIER && tlv.getValue().equals(fileId));
     }
 
     /**
      * Returns true iff {@code response} indicates an error with the previous APDU.
      *
      * @param response The APDU response to be checked.
-     *
      * @return true iff the given response indicates an error occurred
      */
     private boolean isErrorResponse(@Nonnull String response) {
-        return !(STATUS_NORMAL_STRING.equals(response) ||
-            response.startsWith(STATUS_WARNING_A) ||
-            response.startsWith(STATUS_WARNING_B) ||
-            response.startsWith(STATUS_BYTES_REMAINING));
+        return !(STATUS_NORMAL_STRING.equals(response)
+                || response.startsWith(STATUS_WARNING_A)
+                || response.startsWith(STATUS_WARNING_B)
+                || response.startsWith(STATUS_BYTES_REMAINING));
     }
 
     private static class IntentReceiver extends BroadcastReceiver {
@@ -1300,7 +1310,8 @@
         }
     }
 
-    @Suppress
+    @Test
+    @Ignore
     public void testEapSimAuthentication() {
         // K: '000102030405060708090A0B0C0D0E0F', defined by TS 134 108#8.2
         // n: 128 (Bits to use for RES value)
@@ -1313,13 +1324,13 @@
                         TelephonyManager.AUTHTYPE_EAP_SIM,
                         base64Challenge);
         byte[] response = Base64.decode(base64Response, Base64.DEFAULT);
-        assertArrayEquals(
-                "Results for AUTHTYPE_EAP_SIM failed",
-                hexStringToBytes(EXPECTED_EAP_SIM_RESULT),
-                response);
+        assertWithMessage("Results for AUTHTYPE_EAP_SIM failed")
+                .that(response)
+                .isEqualTo(hexStringToBytes(EXPECTED_EAP_SIM_RESULT));
     }
 
-    @Suppress
+    @Test
+    @Ignore
     public void testEapAkaAuthentication() {
         // K: '000102030405060708090A0B0C0D0E0F', defined by TS 134 108#8.2
         // n: 128 (Bits to use for RES value)
@@ -1332,14 +1343,13 @@
                         TelephonyManager.AUTHTYPE_EAP_AKA,
                         base64Challenge);
 
-        assertNotNull("UICC returned null for EAP-AKA auth", base64Response);
+        assertWithMessage("UICC returned null for EAP-AKA auth").that(base64Response).isNotNull();
         byte[] response = Base64.decode(base64Response, Base64.NO_WRAP);
 
         // response may be formatted as: [DB][Length][RES][Length][CK][Length][IK][Length][Kc]
         byte[] akaResponse = Arrays.copyOfRange(response, 0, EAP_AKA_RESPONSE_LENGTH);
-        assertArrayEquals(
-                "Results for AUTHTYPE_EAP_AKA failed",
-                hexStringToBytes(EXPECTED_EAP_AKA_RESULT),
-                akaResponse);
+        assertWithMessage("Results for AUTHTYPE_EAP_AKA failed")
+                .that(akaResponse)
+                .isEqualTo(hexStringToBytes(EXPECTED_EAP_AKA_RESULT));
     }
 }
diff --git a/tests/tests/carrierapi/src/android/carrierapi/cts/FcpTemplate.java b/tests/tests/carrierapi/src/android/carrierapi/cts/FcpTemplate.java
index a90c756..252b874 100644
--- a/tests/tests/carrierapi/src/android/carrierapi/cts/FcpTemplate.java
+++ b/tests/tests/carrierapi/src/android/carrierapi/cts/FcpTemplate.java
@@ -21,13 +21,14 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+
 import javax.annotation.Nonnull;
 
 /**
  * Class for representing a File Control Parameters (FCP) Template object. TS 101 220
  *
- * A correctly formatted FCP Template will be in the format:
- * | 1 byte: BER tag (0x62) | 1 byte: length of TLVs |...TLV objects...| 2 bytes: status |
+ * <p>A correctly formatted FCP Template will be in the format: | 1 byte: BER tag (0x62) | 1 byte:
+ * length of TLVs |...TLV objects...| 2 bytes: status |
  */
 public class FcpTemplate {
 
@@ -69,12 +70,11 @@
      * Parses and returns a FcpTemplate for the given {@code fcpResponse}
      *
      * @param fcpResponse The Hex String response for a given Status APDU command. Expected to be in
-     * the format: | 1 byte: BER tag | 1 byte: length of TLVs |...TLV objects...| 2 bytes: status |
-     *
+     *     the format: | 1 byte: BER tag | 1 byte: length of TLVs |...TLV objects...| 2 bytes:
+     *     status |
      * @return a FcpTemplate for the given hex String
-     *
      * @throws FcpTemplateParseException for non-FCP inputs or inputs of the wrong length (encoded
-     *                                   length does not match actual length)
+     *     length does not match actual length)
      */
     public static FcpTemplate parseFcpTemplate(@Nonnull String fcpResponse) {
         final List<Tlv> tlvObjects = new ArrayList<>();
@@ -98,17 +98,15 @@
             int tag = data[index++] & 0xFF;
             int length = data[index++] & 0xFF; // assumes that length is < 128 bytes.
             String value = fcpResponse.substring(index * 2, (index + length) * 2);
-            tlvObjects .add(new Tlv(tag, length, value));
+            tlvObjects.add(new Tlv(tag, length, value));
             index += length;
         }
 
         String status = fcpResponse.substring(fcpResponse.length() - 4);
-        return new FcpTemplate(tlvObjects , status);
+        return new FcpTemplate(tlvObjects, status);
     }
 
-    /**
-     * Represents a Tag-Length-Value object. TS 101 220 Section 2
-     */
+    /** Represents a Tag-Length-Value object. TS 101 220 Section 2 */
     public static class Tlv {
 
         private final int tag;
@@ -142,9 +140,7 @@
                 return false;
             }
             Tlv tlv = (Tlv) o;
-            return tag == tlv.tag &&
-                    length == tlv.length &&
-                    value.equals(tlv.value);
+            return tag == tlv.tag && length == tlv.length && value.equals(tlv.value);
         }
 
         @Override
@@ -159,7 +155,6 @@
     }
 
     private static final class FcpTemplateParseException extends RuntimeException {
-
         public FcpTemplateParseException(String message) {
             super(message);
         }
diff --git a/tests/tests/carrierapi/src/android/carrierapi/cts/IccUtils.java b/tests/tests/carrierapi/src/android/carrierapi/cts/IccUtils.java
index 3409fe5..d36ca03 100644
--- a/tests/tests/carrierapi/src/android/carrierapi/cts/IccUtils.java
+++ b/tests/tests/carrierapi/src/android/carrierapi/cts/IccUtils.java
@@ -18,20 +18,18 @@
 
 import javax.annotation.Nonnull;
 
-/**
- * Utility class for converting between hex Strings and bitwise representations.
- */
+/** Utility class for converting between hex Strings and bitwise representations. */
 public class IccUtils {
 
     // A table mapping from a number to a hex character for fast encoding hex strings.
     private static final char[] HEX_CHARS = {
-            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
+        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
     };
 
     @Nonnull
     public static String bytesToHexString(byte[] bytes) {
         StringBuilder ret = new StringBuilder(2 * bytes.length);
-        for (int i = 0 ; i < bytes.length ; i++) {
+        for (int i = 0; i < bytes.length; i++) {
             int b;
             b = 0x0f & (bytes[i] >> 4);
             ret.append(HEX_CHARS[b]);
@@ -44,11 +42,8 @@
     /**
      * Converts a hex String to a byte array.
      *
-     * @param s A string of hexadecimal characters, must be an even number of
-     *          chars long
-     *
+     * @param s A string of hexadecimal characters, must be an even number of chars long
      * @return byte array representation
-     *
      * @throws RuntimeException on invalid format
      */
     public static byte[] hexStringToBytes(String s) {
@@ -58,10 +53,10 @@
 
         int sz = s.length();
 
-        ret = new byte[sz/2];
+        ret = new byte[sz / 2];
 
-        for (int i=0 ; i <sz ; i+=2) {
-            ret[i/2] = (byte) ((hexCharToInt(s.charAt(i)) << 4) | hexCharToInt(s.charAt(i+1)));
+        for (int i = 0; i < sz; i += 2) {
+            ret[i / 2] = (byte) ((hexCharToInt(s.charAt(i)) << 4) | hexCharToInt(s.charAt(i + 1)));
         }
 
         return ret;
@@ -71,12 +66,13 @@
      * Converts a hex char to its integer value
      *
      * @param c A single hexadecimal character. Must be in one of these ranges:
-     *          - '0' to '9', or
-     *          - 'a' to 'f', or
-     *          - 'A' to 'F'
+     *     <ul>
+     *       <li>'0' to '9'
+     *       <li>'a' to 'f'
+     *       <li>'A' to 'F'
+     *     </ul>
      *
      * @return the integer representation of {@code c}
-     *
      * @throws RuntimeException on invalid character
      */
     public static int hexCharToInt(char c) {
@@ -84,6 +80,6 @@
         if (c >= 'A' && c <= 'F') return (c - 'A' + 10);
         if (c >= 'a' && c <= 'f') return (c - 'a' + 10);
 
-        throw new RuntimeException ("invalid hex char '" + c + "'");
+        throw new RuntimeException("invalid hex char '" + c + "'");
     }
 }
diff --git a/tests/tests/carrierapi/src/android/carrierapi/cts/NetworkScanApiTest.java b/tests/tests/carrierapi/src/android/carrierapi/cts/NetworkScanApiTest.java
index 017d7fa..82655e9 100644
--- a/tests/tests/carrierapi/src/android/carrierapi/cts/NetworkScanApiTest.java
+++ b/tests/tests/carrierapi/src/android/carrierapi/cts/NetworkScanApiTest.java
@@ -18,13 +18,12 @@
 import static android.Manifest.permission.ACCESS_BACKGROUND_LOCATION;
 import static android.Manifest.permission.ACCESS_FINE_LOCATION;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertTrue;
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
+
 import static org.junit.Assert.fail;
 
-import android.content.Context;
+import android.content.ContentResolver;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.database.ContentObserver;
@@ -64,15 +63,16 @@
 import java.util.stream.Collectors;
 
 /**
- * Build, install and run the tests by running the commands below:
- *  make cts -j64
- *  cts-tradefed run cts -m CtsCarrierApiTestCases --test android.carrierapi.cts.NetworkScanApiTest
+ * Unit tests for {@link TelephonyManager}'s network scan APIs.
+ *
+ * <p>Test using `atest CtsCarrierApiTestCases:NetworkScanApiTest` or `make cts -j64 && cts-tradefed
+ * run cts -m CtsCarrierApiTestCases --test android.carrierapi.cts.NetworkScanApiTest`
  */
 @RunWith(AndroidJUnit4.class)
-public class NetworkScanApiTest {
-    private TelephonyManager mTelephonyManager;
-    private PackageManager mPackageManager;
+public class NetworkScanApiTest extends BaseCarrierApiTest {
     private static final String TAG = "NetworkScanApiTest";
+
+    private TelephonyManager mTelephonyManager;
     private int mNetworkScanStatus;
     private static final int EVENT_NETWORK_SCAN_START = 100;
     private static final int EVENT_NETWORK_SCAN_RESULTS = 200;
@@ -103,18 +103,18 @@
     private static final int INCREMENTAL_RESULTS_PERIODICITY_SEC = 3;
     private static final ArrayList<String> MCC_MNC = new ArrayList<>();
     private static final RadioAccessSpecifier[] RADIO_ACCESS_SPECIFIERS = {
-            new RadioAccessSpecifier(
-                    AccessNetworkConstants.AccessNetworkType.GERAN,
-                    null /* bands */,
-                    null /* channels */),
-            new RadioAccessSpecifier(
-                    AccessNetworkConstants.AccessNetworkType.EUTRAN,
-                    null /* bands */,
-                    null /* channels */),
-            new RadioAccessSpecifier(
-                    AccessNetworkConstants.AccessNetworkType.UTRAN,
-                    null /* bands */,
-                    null /* channels */)
+        new RadioAccessSpecifier(
+                AccessNetworkConstants.AccessNetworkType.GERAN,
+                null /* bands */,
+                null /* channels */),
+        new RadioAccessSpecifier(
+                AccessNetworkConstants.AccessNetworkType.EUTRAN,
+                null /* bands */,
+                null /* channels */),
+        new RadioAccessSpecifier(
+                AccessNetworkConstants.AccessNetworkType.UTRAN,
+                null /* bands */,
+                null /* channels */)
     };
 
     // Needed because NETWORK_SCAN_PERMISSION is a systemapi
@@ -122,20 +122,25 @@
 
     @Before
     public void setUp() throws Exception {
-        Context context = InstrumentationRegistry.getContext();
-        mTelephonyManager = (TelephonyManager)
-                context.getSystemService(Context.TELEPHONY_SERVICE);
-        mPackageManager = context.getPackageManager();
-        InstrumentationRegistry.getInstrumentation().getUiAutomation().grantRuntimePermission(
-                context.getPackageName(), ACCESS_FINE_LOCATION);
-        InstrumentationRegistry.getInstrumentation().getUiAutomation().grantRuntimePermission(
-                context.getPackageName(), ACCESS_BACKGROUND_LOCATION);
+        mTelephonyManager = getContext().getSystemService(TelephonyManager.class);
+        String selfPackageName = getContext().getPackageName();
+        InstrumentationRegistry.getInstrumentation()
+                .getUiAutomation()
+                .grantRuntimePermission(selfPackageName, ACCESS_FINE_LOCATION);
+        InstrumentationRegistry.getInstrumentation()
+                .getUiAutomation()
+                .grantRuntimePermission(selfPackageName, ACCESS_BACKGROUND_LOCATION);
         mTestHandlerThread = new NetworkScanHandlerThread(TAG);
         mTestHandlerThread.start();
     }
 
     @After
     public void tearDown() throws Exception {
+        if (!werePreconditionsSatisfied()) return;
+
+        // Revoking runtime permissions makes ActivityManager kill our process, so we don't do it,
+        // as the test harness will eventually uninstall this APK after testing completes anyway, so
+        // we aren't really leaking anything long-term.
         mTestHandlerThread.quit();
     }
 
@@ -146,9 +151,7 @@
             } catch (InterruptedException ie) {
             }
 
-            if (!mReady) {
-                fail("NetworkScanApiTest failed to initialize");
-            }
+            assertWithMessage("NetworkScanApiTest failed to initialize").that(mReady).isTrue();
         }
     }
 
@@ -168,41 +171,45 @@
         @Override
         public void onLooperPrepared() {
             /* create a custom handler for the Handler Thread */
-            mHandler = new Handler(mTestHandlerThread.getLooper()) {
-                @Override
-                public void handleMessage(Message msg) {
-                    switch (msg.what) {
-                        case EVENT_NETWORK_SCAN_START:
-                            Log.d(TAG, "request network scan");
-                            boolean useShellIdentity = (Boolean) msg.obj;
-                            if (useShellIdentity) {
-                                InstrumentationRegistry.getInstrumentation().getUiAutomation()
-                                        .adoptShellPermissionIdentity();
+            mHandler =
+                    new Handler(mTestHandlerThread.getLooper()) {
+                        @Override
+                        public void handleMessage(Message msg) {
+                            switch (msg.what) {
+                                case EVENT_NETWORK_SCAN_START:
+                                    Log.d(TAG, "request network scan");
+                                    boolean useShellIdentity = (Boolean) msg.obj;
+                                    if (useShellIdentity) {
+                                        InstrumentationRegistry.getInstrumentation()
+                                                .getUiAutomation()
+                                                .adoptShellPermissionIdentity();
+                                    }
+                                    try {
+                                        mNetworkScan =
+                                                mTelephonyManager.requestNetworkScan(
+                                                        mNetworkScanRequest,
+                                                        AsyncTask.SERIAL_EXECUTOR,
+                                                        mNetworkScanCallback);
+                                        if (mNetworkScan == null) {
+                                            mNetworkScanStatus = EVENT_SCAN_DENIED;
+                                            setReady(true);
+                                        }
+                                    } catch (SecurityException e) {
+                                        mNetworkScanStatus = EVENT_SCAN_DENIED;
+                                        setReady(true);
+                                    } finally {
+                                        if (useShellIdentity) {
+                                            InstrumentationRegistry.getInstrumentation()
+                                                    .getUiAutomation()
+                                                    .dropShellPermissionIdentity();
+                                        }
+                                    }
+                                    break;
+                                default:
+                                    Log.d(TAG, "Unknown Event " + msg.what);
                             }
-                            try {
-                                mNetworkScan = mTelephonyManager.requestNetworkScan(
-                                        mNetworkScanRequest,
-                                        AsyncTask.SERIAL_EXECUTOR,
-                                        mNetworkScanCallback);
-                                if (mNetworkScan == null) {
-                                    mNetworkScanStatus = EVENT_SCAN_DENIED;
-                                    setReady(true);
-                                }
-                            } catch (SecurityException e) {
-                                mNetworkScanStatus = EVENT_SCAN_DENIED;
-                                setReady(true);
-                            } finally {
-                                if (useShellIdentity) {
-                                    InstrumentationRegistry.getInstrumentation().getUiAutomation()
-                                            .dropShellPermissionIdentity();
-                                }
-                            }
-                            break;
-                        default:
-                            Log.d(TAG, "Unknown Event " + msg.what);
-                    }
-                }
-            };
+                        }
+                    };
         }
     }
 
@@ -265,39 +272,35 @@
             Log.d(TAG, "lte channels" + lteChannels.toString());
             int ranLte = AccessNetworkConstants.AccessNetworkType.EUTRAN;
             radioAccessSpecifier.add(
-                    new RadioAccessSpecifier(ranLte, null /* bands */,
-                            lteChannels.stream().mapToInt(i->i).toArray()));
+                    new RadioAccessSpecifier(
+                            ranLte,
+                            null /* bands */,
+                            lteChannels.stream().mapToInt(i -> i).toArray()));
         }
         if (!wcdmaChannels.isEmpty()) {
             Log.d(TAG, "wcdma channels" + wcdmaChannels.toString());
             int ranWcdma = AccessNetworkConstants.AccessNetworkType.UTRAN;
             radioAccessSpecifier.add(
-                    new RadioAccessSpecifier(ranWcdma, null /* bands */,
-                            wcdmaChannels.stream().mapToInt(i->i).toArray()));
+                    new RadioAccessSpecifier(
+                            ranWcdma,
+                            null /* bands */,
+                            wcdmaChannels.stream().mapToInt(i -> i).toArray()));
         }
         if (!gsmChannels.isEmpty()) {
             Log.d(TAG, "gsm channels" + gsmChannels.toString());
             int ranGsm = AccessNetworkConstants.AccessNetworkType.GERAN;
             radioAccessSpecifier.add(
-                    new RadioAccessSpecifier(ranGsm, null /* bands */,
-                            gsmChannels.stream().mapToInt(i->i).toArray()));
+                    new RadioAccessSpecifier(
+                            ranGsm,
+                            null /* bands */,
+                            gsmChannels.stream().mapToInt(i -> i).toArray()));
         }
         return radioAccessSpecifier;
     }
 
-    /**
-     * Tests that the device properly requests a network scan.
-     */
+    /** Tests that the device properly requests a network scan. */
     @Test
     public void testRequestNetworkScan() {
-        if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
-            // Checks whether the cellular stack should be running on this device.
-            Log.e(TAG, "No cellular support, the test will be skipped.");
-            return;
-        }
-        if (!mTelephonyManager.hasCarrierPrivileges()) {
-            fail("This test requires a SIM card with carrier privilege rule on it.");
-        }
         boolean isLocationSwitchOn = getAndSetLocationSwitch(true);
         try {
             mNetworkScanRequest = buildNetworkScanRequest(true);
@@ -308,11 +311,16 @@
             waitUntilReady();
 
             Log.d(TAG, "mNetworkScanStatus: " + mNetworkScanStatus);
-            assertTrue("The final scan status is " + mNetworkScanStatus + " with error code "
-                            + mErrorCode + ", not ScanCompleted"
-                            + " or ScanError with an error code ERROR_MODEM_UNAVAILABLE or"
-                            + " ERROR_UNSUPPORTED",
-                    isScanStatusValid());
+            assertWithMessage(
+                            "The final scan status is "
+                                    + mNetworkScanStatus
+                                    + " with error code "
+                                    + mErrorCode
+                                    + ", not ScanCompleted"
+                                    + " or ScanError with an error code ERROR_MODEM_UNAVAILABLE or"
+                                    + " ERROR_UNSUPPORTED")
+                    .that(isScanStatusValid())
+                    .isTrue();
         } finally {
             getAndSetLocationSwitch(isLocationSwitchOn);
         }
@@ -328,40 +336,36 @@
         requestNetworkScanLocationOffHelper(true, true);
     }
 
-    public void requestNetworkScanLocationOffHelper(boolean includeBandsAndChannels,
-            boolean useSpecialScanPermission) {
-        if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
-            // Checks whether the cellular stack should be running on this device.
-            Log.e(TAG, "No cellular support, the test will be skipped.");
-            return;
-        }
-        if (!mTelephonyManager.hasCarrierPrivileges()) {
-            fail("This test requires a SIM card with carrier privilege rule on it.");
-        }
-
+    public void requestNetworkScanLocationOffHelper(
+            boolean includeBandsAndChannels, boolean useSpecialScanPermission) {
         mNetworkScanRequest = buildNetworkScanRequest(includeBandsAndChannels);
 
         boolean isLocationSwitchOn = getAndSetLocationSwitch(false);
         try {
             mNetworkScanCallback = new NetworkScanCallbackImpl();
-            Message startNetworkScan = mHandler.obtainMessage(EVENT_NETWORK_SCAN_START,
-                    useSpecialScanPermission);
+            Message startNetworkScan =
+                    mHandler.obtainMessage(EVENT_NETWORK_SCAN_START, useSpecialScanPermission);
             setReady(false);
             startNetworkScan.sendToTarget();
             waitUntilReady();
             if (includeBandsAndChannels) {
                 // If we included the bands when location is off, expect a security error and
                 // nothing else.
-                assertEquals(EVENT_SCAN_DENIED, mNetworkScanStatus);
+                assertThat(mNetworkScanStatus).isEqualTo(EVENT_SCAN_DENIED);
                 return;
             }
 
             Log.d(TAG, "mNetworkScanStatus: " + mNetworkScanStatus);
-            assertTrue("The final scan status is " + mNetworkScanStatus + " with error code "
-                            + mErrorCode + ", not ScanCompleted"
-                            + " or ScanError with an error code ERROR_MODEM_UNAVAILABLE or"
-                            + " ERROR_UNSUPPORTED",
-                    isScanStatusValid());
+            assertWithMessage(
+                            "The final scan status is "
+                                    + mNetworkScanStatus
+                                    + " with error code "
+                                    + mErrorCode
+                                    + ", not ScanCompleted"
+                                    + " or ScanError with an error code ERROR_MODEM_UNAVAILABLE or"
+                                    + " ERROR_UNSUPPORTED")
+                    .that(isScanStatusValid())
+                    .isTrue();
         } finally {
             getAndSetLocationSwitch(isLocationSwitchOn);
         }
@@ -376,32 +380,40 @@
             // Construct a NetworkScanRequest
             radioAccessSpecifier = getRadioAccessSpecifier(allCellInfo);
             if (!includeBandsAndChannels) {
-                radioAccessSpecifier = radioAccessSpecifier.stream().map(spec ->
-                    new RadioAccessSpecifier(spec.getRadioAccessNetwork(), null, null))
-                    .collect(Collectors.toList());
+                radioAccessSpecifier =
+                        radioAccessSpecifier.stream()
+                                .map(
+                                        spec ->
+                                                new RadioAccessSpecifier(
+                                                        spec.getRadioAccessNetwork(), null, null))
+                                .collect(Collectors.toList());
             }
         }
 
         Log.d(TAG, "number of radioAccessSpecifier: " + radioAccessSpecifier.size());
         if (radioAccessSpecifier.isEmpty()) {
             // Put in some arbitrary bands and channels so that we trip the location check if needed
-            int[] fakeBands = includeBandsAndChannels
-                    ? new int[] { AccessNetworkConstants.EutranBand.BAND_5 }
-                    : null;
-            int[] fakeChannels = includeBandsAndChannels ? new int[] { 2400 } : null;
+            int[] fakeBands =
+                    includeBandsAndChannels
+                            ? new int[] {AccessNetworkConstants.EutranBand.BAND_5}
+                            : null;
+            int[] fakeChannels = includeBandsAndChannels ? new int[] {2400} : null;
 
-            RadioAccessSpecifier gsm = new RadioAccessSpecifier(
-                    AccessNetworkConstants.AccessNetworkType.GERAN,
-                    null /* bands */,
-                    null /* channels */);
-            RadioAccessSpecifier lte = new RadioAccessSpecifier(
-                    AccessNetworkConstants.AccessNetworkType.EUTRAN,
-                    fakeBands /* bands */,
-                    fakeChannels /* channels */);
-            RadioAccessSpecifier wcdma = new RadioAccessSpecifier(
-                    AccessNetworkConstants.AccessNetworkType.UTRAN,
-                    null /* bands */,
-                    null /* channels */);
+            RadioAccessSpecifier gsm =
+                    new RadioAccessSpecifier(
+                            AccessNetworkConstants.AccessNetworkType.GERAN,
+                            null /* bands */,
+                            null /* channels */);
+            RadioAccessSpecifier lte =
+                    new RadioAccessSpecifier(
+                            AccessNetworkConstants.AccessNetworkType.EUTRAN,
+                            fakeBands /* bands */,
+                            fakeChannels /* channels */);
+            RadioAccessSpecifier wcdma =
+                    new RadioAccessSpecifier(
+                            AccessNetworkConstants.AccessNetworkType.UTRAN,
+                            null /* bands */,
+                            null /* channels */);
             radioAccessSpecifier.add(gsm);
             radioAccessSpecifier.add(lte);
             radioAccessSpecifier.add(wcdma);
@@ -416,7 +428,6 @@
                 true /*enable incremental results*/,
                 5 /* incremental results periodicity */,
                 null /* List of PLMN ids (MCC-MNC) */);
-
     }
 
     private List<CellInfo> getCellInfo() {
@@ -432,71 +443,87 @@
 
     @Test
     public void testNetworkScanPermission() {
-        PackageManager pm = InstrumentationRegistry.getContext().getPackageManager();
+        PackageManager pm = getContext().getPackageManager();
 
-        List<Integer> specialUids = Arrays.asList(Process.SYSTEM_UID,
-                Process.PHONE_UID, Process.SHELL_UID);
+        List<Integer> specialUids =
+                Arrays.asList(Process.SYSTEM_UID, Process.PHONE_UID, Process.SHELL_UID);
 
-        List<PackageInfo> holding = pm.getPackagesHoldingPermissions(
-                new String[] { NETWORK_SCAN_PERMISSION },
-                PackageManager.MATCH_DISABLED_COMPONENTS);
+        List<PackageInfo> holding =
+                pm.getPackagesHoldingPermissions(
+                        new String[] {NETWORK_SCAN_PERMISSION},
+                        PackageManager.MATCH_DISABLED_COMPONENTS);
 
-        List<Integer> nonSpecialPackages = holding.stream()
-                .map(pi -> {
-                    try {
-                        return pm.getPackageUid(pi.packageName, 0);
-                    } catch (PackageManager.NameNotFoundException e) {
-                        return Process.INVALID_UID;
-                    }
-                })
-                .filter(uid -> !specialUids.contains(UserHandle.getAppId(uid)))
-                .collect(Collectors.toList());
+        List<Integer> nonSpecialPackages =
+                holding.stream()
+                        .map(
+                                pi -> {
+                                    try {
+                                        return pm.getPackageUid(pi.packageName, 0);
+                                    } catch (PackageManager.NameNotFoundException e) {
+                                        return Process.INVALID_UID;
+                                    }
+                                })
+                        .filter(uid -> !specialUids.contains(UserHandle.getAppId(uid)))
+                        .collect(Collectors.toList());
 
-        if (nonSpecialPackages.size() > 1) {
-            fail("Only one app on the device is allowed to hold the NETWORK_SCAN permission.");
-        }
+        assertWithMessage(
+                        "Only one app on the device is allowed to hold the NETWORK_SCAN"
+                                + " permission.")
+                .that(nonSpecialPackages.size())
+                .isAtMost(1);
     }
 
     private boolean getAndSetLocationSwitch(boolean enabled) {
         CountDownLatch locationChangeLatch = new CountDownLatch(1);
-        ContentObserver settingsObserver = new ContentObserver(mHandler) {
-            @Override
-            public void onChange(boolean selfChange) {
-                locationChangeLatch.countDown();
-                super.onChange(selfChange);
-            }
-        };
+        ContentObserver settingsObserver =
+                new ContentObserver(mHandler) {
+                    @Override
+                    public void onChange(boolean selfChange) {
+                        locationChangeLatch.countDown();
+                        super.onChange(selfChange);
+                    }
+                };
 
-        InstrumentationRegistry.getInstrumentation().getUiAutomation()
+        InstrumentationRegistry.getInstrumentation()
+                .getUiAutomation()
                 .adoptShellPermissionIdentity();
+        ContentResolver contentResolver = getContext().getContentResolver();
         try {
-            int oldLocationMode = Settings.Secure.getInt(
-                    InstrumentationRegistry.getContext().getContentResolver(),
-                    Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
+            int oldLocationMode =
+                    Settings.Secure.getInt(
+                            contentResolver,
+                            Settings.Secure.LOCATION_MODE,
+                            Settings.Secure.LOCATION_MODE_OFF);
 
-            int locationMode = enabled ? Settings.Secure.LOCATION_MODE_HIGH_ACCURACY
-                    : Settings.Secure.LOCATION_MODE_OFF;
+            int locationMode =
+                    enabled
+                            ? Settings.Secure.LOCATION_MODE_HIGH_ACCURACY
+                            : Settings.Secure.LOCATION_MODE_OFF;
             if (locationMode != oldLocationMode) {
-                InstrumentationRegistry.getContext().getContentResolver().registerContentObserver(
+                contentResolver.registerContentObserver(
                         Settings.Secure.getUriFor(Settings.Secure.LOCATION_MODE),
-                        false, settingsObserver);
-                Settings.Secure.putInt(InstrumentationRegistry.getContext().getContentResolver(),
-                        Settings.Secure.LOCATION_MODE, locationMode);
+                        false,
+                        settingsObserver);
+                Settings.Secure.putInt(
+                        contentResolver, Settings.Secure.LOCATION_MODE, locationMode);
                 try {
-                    assertTrue(locationChangeLatch.await(LOCATION_SETTING_CHANGE_WAIT_MS,
-                            TimeUnit.MILLISECONDS));
+                    assertThat(
+                                    locationChangeLatch.await(
+                                            LOCATION_SETTING_CHANGE_WAIT_MS, TimeUnit.MILLISECONDS))
+                            .isTrue();
                 } catch (InterruptedException e) {
-                    Log.w(NetworkScanApiTest.class.getSimpleName(),
+                    Log.w(
+                            NetworkScanApiTest.class.getSimpleName(),
                             "Interrupted while waiting for location settings change. Test results"
-                            + " may not be accurate.");
+                                    + " may not be accurate.");
                 } finally {
-                    InstrumentationRegistry.getContext().getContentResolver()
-                            .unregisterContentObserver(settingsObserver);
+                    contentResolver.unregisterContentObserver(settingsObserver);
                 }
             }
             return oldLocationMode == Settings.Secure.LOCATION_MODE_HIGH_ACCURACY;
         } finally {
-            InstrumentationRegistry.getInstrumentation().getUiAutomation()
+            InstrumentationRegistry.getInstrumentation()
+                    .getUiAutomation()
                     .dropShellPermissionIdentity();
         }
     }
@@ -509,7 +536,7 @@
         }
         if ((mNetworkScanStatus == EVENT_NETWORK_SCAN_ERROR)
                 && ((mErrorCode == NetworkScan.ERROR_MODEM_UNAVAILABLE)
-                || (mErrorCode == NetworkScan.ERROR_UNSUPPORTED))) {
+                        || (mErrorCode == NetworkScan.ERROR_UNSUPPORTED))) {
             // Scan error but the error type is allowed.
             return true;
         }
@@ -523,130 +550,140 @@
         return mccMncs;
     }
 
-    /**
-     * To test its constructor and getters.
-     */
+    /** To test its constructor and getters. */
     @Test
-    public void testNetworkScanRequest_ConstructorAndGetters() {
-        NetworkScanRequest networkScanRequest = new NetworkScanRequest(
-                SCAN_TYPE,
-                RADIO_ACCESS_SPECIFIERS,
-                SEARCH_PERIODICITY_SEC,
-                MAX_SEARCH_TIME_SEC,
-                INCREMENTAL_RESULTS,
-                INCREMENTAL_RESULTS_PERIODICITY_SEC,
-                getPlmns());
+    public void testNetworkScanRequest_constructorAndGetters() {
+        NetworkScanRequest networkScanRequest =
+                new NetworkScanRequest(
+                        SCAN_TYPE,
+                        RADIO_ACCESS_SPECIFIERS,
+                        SEARCH_PERIODICITY_SEC,
+                        MAX_SEARCH_TIME_SEC,
+                        INCREMENTAL_RESULTS,
+                        INCREMENTAL_RESULTS_PERIODICITY_SEC,
+                        getPlmns());
 
-        assertEquals("getScanType() returns wrong value",
-                SCAN_TYPE, networkScanRequest.getScanType());
-        assertEquals("getSpecifiers() returns wrong value",
-                RADIO_ACCESS_SPECIFIERS, networkScanRequest.getSpecifiers());
-        assertEquals("getSearchPeriodicity() returns wrong value",
-                SEARCH_PERIODICITY_SEC, networkScanRequest.getSearchPeriodicity());
-        assertEquals("getMaxSearchTime() returns wrong value",
-                MAX_SEARCH_TIME_SEC, networkScanRequest.getMaxSearchTime());
-        assertEquals("getIncrementalResults() returns wrong value",
-                INCREMENTAL_RESULTS, networkScanRequest.getIncrementalResults());
-        assertEquals("getIncrementalResultsPeriodicity() returns wrong value",
-                INCREMENTAL_RESULTS_PERIODICITY_SEC,
-                networkScanRequest.getIncrementalResultsPeriodicity());
-        assertEquals("getPlmns() returns wrong value", getPlmns(), networkScanRequest.getPlmns());
-        assertEquals("describeContents() returns wrong value",
-                0, networkScanRequest.describeContents());
+        assertWithMessage("getScanType() returns wrong value")
+                .that(networkScanRequest.getScanType())
+                .isEqualTo(SCAN_TYPE);
+        assertWithMessage("getSpecifiers() returns wrong value")
+                .that(networkScanRequest.getSpecifiers())
+                .isEqualTo(RADIO_ACCESS_SPECIFIERS);
+        assertWithMessage("getSearchPeriodicity() returns wrong value")
+                .that(networkScanRequest.getSearchPeriodicity())
+                .isEqualTo(SEARCH_PERIODICITY_SEC);
+        assertWithMessage("getMaxSearchTime() returns wrong value")
+                .that(networkScanRequest.getMaxSearchTime())
+                .isEqualTo(MAX_SEARCH_TIME_SEC);
+        assertWithMessage("getIncrementalResults() returns wrong value")
+                .that(networkScanRequest.getIncrementalResults())
+                .isEqualTo(INCREMENTAL_RESULTS);
+        assertWithMessage("getIncrementalResultsPeriodicity() returns wrong value")
+                .that(networkScanRequest.getIncrementalResultsPeriodicity())
+                .isEqualTo(INCREMENTAL_RESULTS_PERIODICITY_SEC);
+        assertWithMessage("getPlmns() returns wrong value")
+                .that(networkScanRequest.getPlmns())
+                .isEqualTo(getPlmns());
+        assertWithMessage("describeContents() returns wrong value")
+                .that(networkScanRequest.describeContents())
+                .isEqualTo(0);
     }
 
-    /**
-     * To test its hashCode method.
-     */
+    /** To test its hashCode method. */
     @Test
-    public void testNetworkScanRequestParcel_Hashcode() {
-        NetworkScanRequest networkScanRequest1 = new NetworkScanRequest(
-                SCAN_TYPE,
-                RADIO_ACCESS_SPECIFIERS,
-                SEARCH_PERIODICITY_SEC,
-                MAX_SEARCH_TIME_SEC,
-                INCREMENTAL_RESULTS,
-                INCREMENTAL_RESULTS_PERIODICITY_SEC,
-                getPlmns());
+    public void testNetworkScanRequestParcel_hashCode() {
+        NetworkScanRequest networkScanRequest1 =
+                new NetworkScanRequest(
+                        SCAN_TYPE,
+                        RADIO_ACCESS_SPECIFIERS,
+                        SEARCH_PERIODICITY_SEC,
+                        MAX_SEARCH_TIME_SEC,
+                        INCREMENTAL_RESULTS,
+                        INCREMENTAL_RESULTS_PERIODICITY_SEC,
+                        getPlmns());
 
-        NetworkScanRequest networkScanRequest2 = new NetworkScanRequest(
-                SCAN_TYPE,
-                RADIO_ACCESS_SPECIFIERS,
-                SEARCH_PERIODICITY_SEC,
-                MAX_SEARCH_TIME_SEC,
-                INCREMENTAL_RESULTS,
-                INCREMENTAL_RESULTS_PERIODICITY_SEC,
-                getPlmns());
+        NetworkScanRequest networkScanRequest2 =
+                new NetworkScanRequest(
+                        SCAN_TYPE,
+                        RADIO_ACCESS_SPECIFIERS,
+                        SEARCH_PERIODICITY_SEC,
+                        MAX_SEARCH_TIME_SEC,
+                        INCREMENTAL_RESULTS,
+                        INCREMENTAL_RESULTS_PERIODICITY_SEC,
+                        getPlmns());
 
-        NetworkScanRequest networkScanRequest3 = new NetworkScanRequest(
-                SCAN_TYPE,
-                null,
-                SEARCH_PERIODICITY_SEC,
-                MAX_SEARCH_TIME_SEC,
-                false,
-                0,
-                getPlmns());
+        NetworkScanRequest networkScanRequest3 =
+                new NetworkScanRequest(
+                        SCAN_TYPE,
+                        null,
+                        SEARCH_PERIODICITY_SEC,
+                        MAX_SEARCH_TIME_SEC,
+                        false,
+                        0,
+                        getPlmns());
 
-        assertEquals("hashCode() returns different hash code for same objects",
-                networkScanRequest1.hashCode(), networkScanRequest2.hashCode());
-        assertNotSame("hashCode() returns same hash code for different objects",
-                networkScanRequest1.hashCode(), networkScanRequest3.hashCode());
+        assertWithMessage("hashCode() returns different hash code for same objects")
+                .that(networkScanRequest1.hashCode())
+                .isEqualTo(networkScanRequest2.hashCode());
+        assertWithMessage("hashCode() returns same hash code for different objects")
+                .that(networkScanRequest1.hashCode())
+                .isNotEqualTo(networkScanRequest3.hashCode());
     }
 
-    /**
-     * To test its comparision method.
-     */
+    /** To test its comparison method. */
     @Test
-    public void testNetworkScanRequestParcel_Equals() {
-        NetworkScanRequest networkScanRequest1 = new NetworkScanRequest(
-                SCAN_TYPE,
-                RADIO_ACCESS_SPECIFIERS,
-                SEARCH_PERIODICITY_SEC,
-                MAX_SEARCH_TIME_SEC,
-                INCREMENTAL_RESULTS,
-                INCREMENTAL_RESULTS_PERIODICITY_SEC,
-                getPlmns());
+    public void testNetworkScanRequestParcel_equals() {
+        NetworkScanRequest networkScanRequest1 =
+                new NetworkScanRequest(
+                        SCAN_TYPE,
+                        RADIO_ACCESS_SPECIFIERS,
+                        SEARCH_PERIODICITY_SEC,
+                        MAX_SEARCH_TIME_SEC,
+                        INCREMENTAL_RESULTS,
+                        INCREMENTAL_RESULTS_PERIODICITY_SEC,
+                        getPlmns());
 
-        NetworkScanRequest networkScanRequest2 = new NetworkScanRequest(
-                SCAN_TYPE,
-                RADIO_ACCESS_SPECIFIERS,
-                SEARCH_PERIODICITY_SEC,
-                MAX_SEARCH_TIME_SEC,
-                INCREMENTAL_RESULTS,
-                INCREMENTAL_RESULTS_PERIODICITY_SEC,
-                getPlmns());
+        NetworkScanRequest networkScanRequest2 =
+                new NetworkScanRequest(
+                        SCAN_TYPE,
+                        RADIO_ACCESS_SPECIFIERS,
+                        SEARCH_PERIODICITY_SEC,
+                        MAX_SEARCH_TIME_SEC,
+                        INCREMENTAL_RESULTS,
+                        INCREMENTAL_RESULTS_PERIODICITY_SEC,
+                        getPlmns());
 
-        assertTrue(networkScanRequest1.equals(networkScanRequest2));
+        assertThat(networkScanRequest1).isEqualTo(networkScanRequest2);
 
-        networkScanRequest2 = new NetworkScanRequest(
-                SCAN_TYPE,
-                RADIO_ACCESS_SPECIFIERS,
-                SEARCH_PERIODICITY_SEC,
-                MAX_SEARCH_TIME_SEC,
-                INCREMENTAL_RESULTS,
-                INCREMENTAL_RESULTS_PERIODICITY_SEC,
-                null /* List of PLMN ids (MCC-MNC) */);
-        assertFalse(networkScanRequest1.equals(networkScanRequest2));
+        networkScanRequest2 =
+                new NetworkScanRequest(
+                        SCAN_TYPE,
+                        RADIO_ACCESS_SPECIFIERS,
+                        SEARCH_PERIODICITY_SEC,
+                        MAX_SEARCH_TIME_SEC,
+                        INCREMENTAL_RESULTS,
+                        INCREMENTAL_RESULTS_PERIODICITY_SEC,
+                        null /* List of PLMN ids (MCC-MNC) */);
+        assertThat(networkScanRequest1).isNotEqualTo(networkScanRequest2);
     }
 
-    /**
-     * To test its writeToParcel and createFromParcel methods.
-     */
+    /** To test its writeToParcel and createFromParcel methods. */
     @Test
-    public void testNetworkScanRequestParcel_Parcel() {
-        NetworkScanRequest networkScanRequest = new NetworkScanRequest(
-                SCAN_TYPE,
-                null /* Radio Access Specifier */,
-                SEARCH_PERIODICITY_SEC,
-                MAX_SEARCH_TIME_SEC,
-                INCREMENTAL_RESULTS,
-                INCREMENTAL_RESULTS_PERIODICITY_SEC,
-                getPlmns());
+    public void testNetworkScanRequestParcel_parcel() {
+        NetworkScanRequest networkScanRequest =
+                new NetworkScanRequest(
+                        SCAN_TYPE,
+                        null /* Radio Access Specifier */,
+                        SEARCH_PERIODICITY_SEC,
+                        MAX_SEARCH_TIME_SEC,
+                        INCREMENTAL_RESULTS,
+                        INCREMENTAL_RESULTS_PERIODICITY_SEC,
+                        getPlmns());
 
         Parcel p = Parcel.obtain();
         networkScanRequest.writeToParcel(p, 0);
         p.setDataPosition(0);
         NetworkScanRequest newnsr = NetworkScanRequest.CREATOR.createFromParcel(p);
-        assertTrue(networkScanRequest.equals(newnsr));
+        assertThat(networkScanRequest).isEqualTo(newnsr);
     }
 }
diff --git a/tests/tests/content/Android.bp b/tests/tests/content/Android.bp
index 77eb483..1d8d43f 100644
--- a/tests/tests/content/Android.bp
+++ b/tests/tests/content/Android.bp
@@ -91,6 +91,7 @@
         "data/HelloWorld5_hdpi-v4.digests.signature",
         "data/HelloWorld5_mdpi-v4.digests",
         "data/HelloWorld5_mdpi-v4.digests.signature",
+        "data/malformed.apk.idsig",
         "data/test-cert.x509.pem",
     ],
     java_resources: [
diff --git a/tests/tests/content/AndroidTest.xml b/tests/tests/content/AndroidTest.xml
index 9153d34..d221460 100644
--- a/tests/tests/content/AndroidTest.xml
+++ b/tests/tests/content/AndroidTest.xml
@@ -89,6 +89,8 @@
         <option name="push-file" key="HelloWorld5_hdpi-v4.digests.signature" value="/data/local/tmp/cts/content/HelloWorld5_hdpi-v4.digests.signature" />
         <option name="push-file" key="HelloWorld5_mdpi-v4.digests" value="/data/local/tmp/cts/content/HelloWorld5_mdpi-v4.digests" />
         <option name="push-file" key="HelloWorld5_mdpi-v4.digests.signature" value="/data/local/tmp/cts/content/HelloWorld5_mdpi-v4.digests.signature" />
+        <option name="push-file" key="HelloWorld5.apk" value="/data/local/tmp/cts/content/malformed.apk" />
+        <option name="push-file" key="malformed.apk.idsig" value="/data/local/tmp/cts/content/malformed.apk.idsig" />
         <option name="push-file" key="test-cert.x509.pem" value="/data/local/tmp/cts/content/test-cert.x509.pem" />
 
     </target_preparer>
@@ -100,7 +102,6 @@
         <option name="test-file-name" value="CtsContentPartiallyDirectBootAwareTestApp.apk" />
         <option name="test-file-name" value="CtsSyncAccountAccessStubs.apk" />
         <option name="test-file-name" value="CtsBinderPermissionTestService.apk" />
-        <option name="test-file-name" value="CtsContentTestsHelperApp.apk" />
     </target_preparer>
 
     <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
diff --git a/tests/tests/content/app/AndroidManifest.xml b/tests/tests/content/app/AndroidManifest.xml
deleted file mode 100644
index 07978ce..0000000
--- a/tests/tests/content/app/AndroidManifest.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  - Copyright (C) 2020 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.
-  -->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="android.content.pm.cts.app">
-    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
-    <application>
-        <uses-library android:name="android.test.runner" />
-        <activity android:name="android.content.pm.cts.app.MainActivity"
-                  android:exported="true" />
-    </application>
-</manifest>
diff --git a/tests/tests/content/app/src/android/content/pm/cts/app/MainActivity.java b/tests/tests/content/app/src/android/content/pm/cts/app/MainActivity.java
deleted file mode 100644
index 4e62a01..0000000
--- a/tests/tests/content/app/src/android/content/pm/cts/app/MainActivity.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2019 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.content.pm.cts.app;
-
-import android.app.Activity;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.Bundle;
-import android.os.PatternMatcher;
-import android.os.RemoteCallback;
-
-/**
- * Helper activity to listen for Incremental package state change broadcasts.
- */
-public class MainActivity extends Activity {
-    private IncrementalStatesBroadcastReceiver mReceiver;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        final Intent intent = getIntent();
-        final String targetPackageName = intent.getStringExtra(Intent.EXTRA_PACKAGE_NAME);
-        final RemoteCallback remoteCallback = intent.getParcelableExtra("callback");
-        final IntentFilter filter = new IntentFilter();
-        filter.addAction(Intent.ACTION_PACKAGE_FULLY_LOADED);
-        filter.addDataScheme("package");
-        filter.addDataSchemeSpecificPart(targetPackageName, PatternMatcher.PATTERN_LITERAL);
-        mReceiver = new IncrementalStatesBroadcastReceiver(targetPackageName, remoteCallback);
-        registerReceiver(mReceiver, filter);
-    }
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        unregisterReceiver(mReceiver);
-    }
-
-    private class IncrementalStatesBroadcastReceiver extends BroadcastReceiver {
-        private final String mPackageName;
-        private final RemoteCallback mCallback;
-        IncrementalStatesBroadcastReceiver(String packageName, RemoteCallback callback) {
-            mPackageName = packageName;
-            mCallback = callback;
-        }
-
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            final Bundle extras = intent.getExtras();
-            final String packageName = extras.getString(Intent.EXTRA_PACKAGE_NAME, "");
-            if (!mPackageName.equals(packageName)) {
-                return;
-            }
-            Bundle result = new Bundle();
-            result.putString("intent", intent.getAction());
-            result.putBundle("extras", intent.getExtras());
-            mCallback.sendResult(result);
-        }
-    }
-}
diff --git a/tests/tests/content/data/malformed.apk.idsig b/tests/tests/content/data/malformed.apk.idsig
new file mode 100644
index 0000000..3293c29
--- /dev/null
+++ b/tests/tests/content/data/malformed.apk.idsig
Binary files differ
diff --git a/tests/tests/content/data/readme.txt b/tests/tests/content/data/readme.txt
index 2984469..1c1436f 100644
--- a/tests/tests/content/data/readme.txt
+++ b/tests/tests/content/data/readme.txt
@@ -36,3 +36,5 @@
     openssl cms -verify -binary -in CtsPkgInstallTinyAppV2V3V4.digests.signature -inform der -CAfile test-cert.x509.pem -signer test-cert.x509.pem -content CtsPkgInstallTinyAppV2V3V4.digests
 Print out the content of the signature:
     openssl pkcs7 -print -inform DER -in CtsPkgInstallTinyAppV2V3V4.digests.signature
+
+malformed.apk is a copy of CtsPkgInstallTinyAppV2V3V4.apk, and malformed.apk.idsig is a purposefully created idsig causing OOM
\ No newline at end of file
diff --git a/tests/tests/content/src/android/content/cts/ContentProviderTest.java b/tests/tests/content/src/android/content/cts/ContentProviderTest.java
index 1bc4ddc..b53f9f8 100644
--- a/tests/tests/content/src/android/content/cts/ContentProviderTest.java
+++ b/tests/tests/content/src/android/content/cts/ContentProviderTest.java
@@ -261,29 +261,29 @@
                 provider.checkUriPermission(uri, android.os.Process.myUid(), 0));
     }
 
-    public void testCreateContentUriAsUser_nullUri_throwsNPE() {
+    public void testCreateContentUriForUser_nullUri_throwsNPE() {
         assertThrows(
                 NullPointerException.class,
-                () -> ContentProvider.createContentUriAsUser(null, UserHandle.of(7)));
+                () -> ContentProvider.createContentUriForUser(null, UserHandle.of(7)));
     }
 
-    public void testCreateContentUriAsUser_nonContentUri_throwsIAE() {
+    public void testCreateContentUriForUser_nonContentUri_throwsIAE() {
         final Uri uri = Uri.parse("notcontent://test");
         assertThrows(
                 IllegalArgumentException.class,
-                () -> ContentProvider.createContentUriAsUser(uri, UserHandle.of(7)));
+                () -> ContentProvider.createContentUriForUser(uri, UserHandle.of(7)));
     }
 
-    public void testCreateContentUriAsUser_UriWithDifferentUserID_throwsIAE() {
+    public void testCreateContentUriForUser_UriWithDifferentUserID_throwsIAE() {
         final Uri uri = Uri.parse("content://07@test");
         assertThrows(
                 IllegalArgumentException.class,
-                () -> ContentProvider.createContentUriAsUser(uri, UserHandle.of(7)));
+                () -> ContentProvider.createContentUriForUser(uri, UserHandle.of(7)));
     }
 
-    public void testCreateContentUriAsUser_UriWithUserID_unchanged() {
+    public void testCreateContentUriForUser_UriWithUserID_unchanged() {
         final Uri uri = Uri.parse("content://7@test");
-        assertEquals(uri, ContentProvider.createContentUriAsUser(uri, UserHandle.of(7)));
+        assertEquals(uri, ContentProvider.createContentUriForUser(uri, UserHandle.of(7)));
     }
 
     private class MockContentProvider extends ContentProvider {
diff --git a/tests/tests/content/src/android/content/cts/wm/OWNERS b/tests/tests/content/src/android/content/cts/wm/OWNERS
deleted file mode 100644
index 940ab87..0000000
--- a/tests/tests/content/src/android/content/cts/wm/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-include /tests/framework/base/windowmanager/OWNERS
-charlesccchen@google.com
diff --git a/tests/tests/content/src/android/content/pm/cts/IncrementalDeviceConnection.java b/tests/tests/content/src/android/content/pm/cts/IncrementalDeviceConnection.java
index a4b6cd7..ea96139 100644
--- a/tests/tests/content/src/android/content/pm/cts/IncrementalDeviceConnection.java
+++ b/tests/tests/content/src/android/content/pm/cts/IncrementalDeviceConnection.java
@@ -32,6 +32,7 @@
 import android.system.Os;
 import android.system.OsConstants;
 import android.system.StructPollfd;
+import android.util.Log;
 import android.util.Slog;
 
 import com.android.incfs.install.IDeviceConnection;
@@ -41,17 +42,18 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.FileDescriptor;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.ByteBuffer;
 
 public class IncrementalDeviceConnection implements IDeviceConnection {
     private static final String TAG = "IncrementalDeviceConnection";
-    private static final boolean DEBUG = true;
+    private static final boolean DEBUG = false;
 
     private static final int POLL_TIMEOUT_MS = 300000;
 
-    enum ConnectionType {
+    private enum ConnectionType {
         RELIABLE,
         UNRELIABLE,
     }
@@ -125,8 +127,8 @@
 
     @Override
     public void close() throws Exception {
-        IoUtils.closeQuietly(mPfd);
         mShellCommand.join();
+        IoUtils.closeQuietly(mPfd);
     }
 
     static class Logger implements ILogger {
@@ -156,9 +158,23 @@
 
     static class Factory implements IDeviceConnection.Factory {
         private final ConnectionType mConnectionType;
+        private final boolean mExpectInstallationSuccess;
 
-        Factory(ConnectionType connectionType) {
+        static Factory reliable() {
+            return new Factory(ConnectionType.RELIABLE, true);
+        }
+
+        static Factory ureliable() {
+            return new Factory(ConnectionType.UNRELIABLE, false);
+        }
+
+        static Factory reliableExpectInstallationFailure() {
+            return new Factory(ConnectionType.RELIABLE, false);
+        }
+
+        private Factory(ConnectionType connectionType, boolean expectInstallationSuccess) {
             mConnectionType = connectionType;
+            mExpectInstallationSuccess = expectInstallationSuccess;
         }
 
         @Override
@@ -172,31 +188,29 @@
             final ParcelFileDescriptor processPfd = pipe[1];
 
             final ResultReceiver resultReceiver;
-            if (mConnectionType == ConnectionType.RELIABLE) {
+            if (mExpectInstallationSuccess) {
                 resultReceiver = new ResultReceiver(null) {
                     @Override
                     protected void onReceiveResult(int resultCode, Bundle resultData) {
                         if (resultCode == 0) {
                             return;
                         }
-                        try {
-                            final String message = readFullStream(
-                                    new ParcelFileDescriptor.AutoCloseInputStream(localPfd));
-                            assertEquals(message, 0, resultCode);
-                        } catch (IOException e) {
-                            assertNull("Failed to pull error from failed command: " + resultCode
-                                    + ", exception: " + e, e);
-                        }
+                        final String message = readFullStreamOrError(
+                                new FileInputStream(localPfd.getFileDescriptor()));
+                        assertEquals(message, 0, resultCode);
                     }
                 };
             } else {
                 resultReceiver = new ResultReceiver(null) {
                     @Override
                     protected void onReceiveResult(int resultCode, Bundle resultData) {
-                        try {
-                            readFullStream(new ParcelFileDescriptor.AutoCloseInputStream(localPfd));
-                        } catch (IOException ignored) {
+                        if (resultCode == 0) {
+                            return;
                         }
+                        final String message = readFullStreamOrError(
+                                new FileInputStream(localPfd.getFileDescriptor()));
+                        Log.i(TAG, "Installation finished with code: " + resultCode + ", message: "
+                                + message);
                     }
                 };
             }
@@ -218,14 +232,20 @@
         }
     }
 
-    private static String readFullStream(InputStream inputStream) throws IOException {
+    private static String readFullStreamOrError(InputStream inputStream) {
         try (ByteArrayOutputStream result = new ByteArrayOutputStream()) {
-            final byte[] buffer = new byte[1024];
-            int length;
-            while ((length = inputStream.read(buffer)) != -1) {
-                result.write(buffer, 0, length);
+            try {
+                final byte[] buffer = new byte[1024];
+                int length;
+                while ((length = inputStream.read(buffer)) != -1) {
+                    result.write(buffer, 0, length);
+                }
+            } catch (IOException e) {
+                return result.toString("UTF-8") + " exception [" + e + "]";
             }
             return result.toString("UTF-8");
+        } catch (IOException e) {
+            return e.toString();
         }
     }
 }
diff --git a/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java b/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java
index 240d0be..f44b8b7 100644
--- a/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java
@@ -23,15 +23,12 @@
 
 import android.annotation.NonNull;
 import android.app.UiAutomation;
-import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
-import android.net.Uri;
 import android.os.IBinder;
 import android.os.ParcelFileDescriptor;
 import android.os.Process;
-import android.os.RemoteCallback;
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.UserHandle;
@@ -40,11 +37,13 @@
 import android.service.dataloader.DataLoaderService;
 import android.text.TextUtils;
 import android.util.ArrayMap;
+import android.util.Log;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.LargeTest;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.incfs.install.IBlockFilter;
 import com.android.incfs.install.IBlockTransformer;
 import com.android.incfs.install.IncrementalInstallSession;
 import com.android.incfs.install.PendingBlock;
@@ -56,6 +55,7 @@
 import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -72,13 +72,12 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Optional;
+import java.util.Random;
 import java.util.Scanner;
-import java.util.UUID;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -88,6 +87,8 @@
 @AppModeFull
 @LargeTest
 public class PackageManagerShellCommandIncrementalTest {
+    private static final String TAG = "PackageManagerShellCommandIncrementalTest";
+
     private static final String CTS_PACKAGE_NAME = "android.content.cts";
     private static final String TEST_APP_PACKAGE = "com.example.helloworld";
 
@@ -102,6 +103,7 @@
     private static final String TEST_APK_SPLIT1_IDSIG = "HelloWorld5_hdpi-v4.apk.idsig";
     private static final String TEST_APK_SPLIT2 = "HelloWorld5_xhdpi-v4.apk";
     private static final String TEST_APK_SPLIT2_IDSIG = "HelloWorld5_xhdpi-v4.apk.idsig";
+    private static final String TEST_APK_MALFORMED = "malformed.apk";
 
     private static final long EXPECTED_READ_TIME = 1000L;
 
@@ -152,18 +154,15 @@
 
     @Test
     public void testInstallWithIdSig() throws Exception {
-        final Result stateListenerResult = startListeningForBroadcast();
         installPackage(TEST_APK);
-        assertTrue(stateListenerResult.await());
         assertTrue(isAppInstalled(TEST_APP_PACKAGE));
     }
 
     @Test
+    @Ignore("Wait until the kernel change lands in RVC branch for the mixed vendor image tests")
     public void testBug183952694Fixed() throws Exception {
         // first ensure the IncFS is up and running, e.g. if it's a module
-        final Result stateListenerResult = startListeningForBroadcast();
         installPackage(TEST_APK);
-        assertTrue(stateListenerResult.await());
         assertTrue(isAppInstalled(TEST_APP_PACKAGE));
 
         // the bug is fixed in the v2 version, or when the specific marker feature is present
@@ -179,9 +178,7 @@
     public void testSplitInstallWithIdSig() throws Exception {
         // First fully install the apk.
         {
-            final Result stateListenerResult = startListeningForBroadcast();
             installPackage(TEST_APK);
-            assertTrue(stateListenerResult.await());
             assertTrue(isAppInstalled(TEST_APP_PACKAGE));
         }
 
@@ -202,6 +199,7 @@
                 executeShellCommand("pm install-incremental -t -g " + file.getPath()));
     }
 
+    @LargeTest
     @Test
     public void testInstallWithIdSigAndSplit() throws Exception {
         File apkfile = new File(createApkPath(TEST_APK));
@@ -209,12 +207,10 @@
         File[] files = new File[]{apkfile, splitfile};
         String param = Arrays.stream(files).map(
                 file -> file.getName() + ":" + file.length()).collect(Collectors.joining(" "));
-        final Result stateListenerResult = startListeningForBroadcast();
         assertEquals("Success\n", executeShellCommand(
                 String.format("pm install-incremental -t -g -S %s %s",
                         (apkfile.length() + splitfile.length()), param),
                 files));
-        assertTrue(stateListenerResult.await());
         assertTrue(isAppInstalled(TEST_APP_PACKAGE));
         assertEquals("base, config.mdpi", getSplits(TEST_APP_PACKAGE));
     }
@@ -232,10 +228,8 @@
                         .build();
         getUiAutomation().adoptShellPermissionIdentity();
         try {
-            mSession.start(
-                    Executors.newSingleThreadExecutor(),
-                    new IncrementalDeviceConnection.Factory(
-                            IncrementalDeviceConnection.ConnectionType.RELIABLE));
+            mSession.start(Executors.newSingleThreadExecutor(),
+                    IncrementalDeviceConnection.Factory.reliable());
             mSession.waitForInstallCompleted(30, TimeUnit.SECONDS);
         } finally {
             getUiAutomation().dropShellPermissionIdentity();
@@ -243,6 +237,65 @@
         assertTrue(isAppInstalled(TEST_APP_PACKAGE));
     }
 
+    @LargeTest
+    @Test
+    public void testInstallWithMissingBlocks() throws Exception {
+        setDeviceProperty("incfs_default_timeouts", "0:0:0");
+        setDeviceProperty("known_digesters_list", CTS_PACKAGE_NAME);
+        setSystemProperty("debug.incremental.always_enable_read_timeouts_for_system_dataloaders",
+                "0");
+
+        final long randomSeed = System.currentTimeMillis();
+        Log.i(TAG, "Randomizing missing blocks with seed: " + randomSeed);
+        final Random random = new Random(randomSeed);
+
+        // TODO: add detection of orphaned IncFS instances after failed installations
+
+        final int blockSize = 4096;
+        final int retries = 7; // 7 * 3s + leeway ~= 30secs of test timeout
+
+        final File apk = new File(createApkPath(TEST_APK));
+        final int blocks = (int) (apk.length() / blockSize);
+
+        for (int i = 0; i < retries; ++i) {
+            final int skipBlock = random.nextInt(blocks);
+            Log.i(TAG, "skipBlock: " + skipBlock + " out of " + blocks);
+            try {
+                installWithBlockFilter((block -> block.getType() == PendingBlock.Type.SIGNATURE_TREE
+                        || block.getBlockIndex() != skipBlock));
+                if (isAppInstalled(TEST_APP_PACKAGE)) {
+                    uninstallPackageSilently(TEST_APP_PACKAGE);
+                }
+            } catch (RuntimeException re) {
+                Log.i(TAG, "RuntimeException: ", re);
+                assertTrue(re.toString(), re.getCause() instanceof IOException);
+            } catch (IOException e) {
+                Log.i(TAG, "IOException: ", e);
+                throw e;
+            }
+        }
+    }
+
+    public void installWithBlockFilter(IBlockFilter blockFilter) throws Exception {
+        final String apk = createApkPath(TEST_APK);
+        final String idsig = createApkPath(TEST_APK_IDSIG);
+        mSession =
+                new IncrementalInstallSession.Builder()
+                        .addApk(Paths.get(apk), Paths.get(idsig))
+                        .addExtraArgs("-t", "-i", CTS_PACKAGE_NAME)
+                        .setLogger(new IncrementalDeviceConnection.Logger())
+                        .setBlockFilter(blockFilter)
+                        .build();
+        getUiAutomation().adoptShellPermissionIdentity();
+        try {
+            mSession.start(Executors.newSingleThreadExecutor(),
+                    IncrementalDeviceConnection.Factory.reliableExpectInstallationFailure());
+            mSession.waitForAnyCompletion(3, TimeUnit.SECONDS);
+        } finally {
+            getUiAutomation().dropShellPermissionIdentity();
+        }
+    }
+
     /**
      * Compress the data if the compressed size is < original size, otherwise return the original
      * data.
@@ -322,10 +375,8 @@
                         .build();
         getUiAutomation().adoptShellPermissionIdentity();
         try {
-            mSession.start(
-                    Executors.newSingleThreadExecutor(),
-                    new IncrementalDeviceConnection.Factory(
-                            IncrementalDeviceConnection.ConnectionType.RELIABLE));
+            mSession.start(Executors.newSingleThreadExecutor(),
+                    IncrementalDeviceConnection.Factory.reliable());
             mSession.waitForInstallCompleted(30, TimeUnit.SECONDS);
         } finally {
             getUiAutomation().dropShellPermissionIdentity();
@@ -346,10 +397,8 @@
                         .build();
         getUiAutomation().adoptShellPermissionIdentity();
         try {
-            mSession.start(
-                    Executors.newSingleThreadExecutor(),
-                    new IncrementalDeviceConnection.Factory(
-                            IncrementalDeviceConnection.ConnectionType.UNRELIABLE));
+            mSession.start(Executors.newSingleThreadExecutor(),
+                    IncrementalDeviceConnection.Factory.ureliable());
             mSession.waitForInstallCompleted(30, TimeUnit.SECONDS);
         } catch (Exception ignored) {
             // Ignore, we are looking for crashes anyway.
@@ -361,12 +410,18 @@
     @Test
     public void testInstallWithIdSigInvalidLength() throws Exception {
         File file = new File(createApkPath(TEST_APK));
-        final Result stateListenerResult = startListeningForBroadcast();
         assertTrue(
                 executeShellCommand("pm install-incremental -t -g -S " + (file.length() - 1),
                         new File[]{file}).contains(
                         "Failure"));
-        assertFalse(stateListenerResult.await());
+        assertFalse(isAppInstalled(TEST_APP_PACKAGE));
+    }
+
+    @Test
+    public void testInstallWithInvalidIdSig() throws Exception {
+        File file = new File(createApkPath(TEST_APK_MALFORMED));
+        String result = executeShellCommand("pm install-incremental -t -g " + file.getPath());
+        assertTrue(result, result.contains("Failure"));
         assertFalse(isAppInstalled(TEST_APP_PACKAGE));
     }
 
@@ -377,14 +432,12 @@
         long length = file.length();
         // Streaming happens in blocks of 1024 bytes, new length will not stream the last block.
         long newLength = length - (length % 1024 == 0 ? 1024 : length % 1024);
-        final Result stateListenerResult = startListeningForBroadcast();
         assertTrue(
                 executeShellCommand(
                         "pm install-incremental -t -g -S " + length,
                         new File[] {file},
                         new long[] {newLength})
                         .contains("Failure"));
-        assertFalse(stateListenerResult.await());
         assertFalse(isAppInstalled(TEST_APP_PACKAGE));
     }
 
@@ -693,9 +746,7 @@
             setDeviceProperty("incfs_default_timeouts", "5000000:5000000:5000000");
             setDeviceProperty("known_digesters_list", CTS_PACKAGE_NAME);
 
-            final Result stateListenerResult = startListeningForBroadcast();
             installPackage(TEST_APK);
-            assertTrue(stateListenerResult.await());
             assertTrue(isAppInstalled(TEST_APP_PACKAGE));
         } finally {
             executeShellCommand("atrace --async_stop");
@@ -730,10 +781,8 @@
             // Partially install the apk+split0+split1.
             getUiAutomation().adoptShellPermissionIdentity();
             try {
-                mSession.start(
-                        Executors.newSingleThreadExecutor(),
-                        new IncrementalDeviceConnection.Factory(
-                                IncrementalDeviceConnection.ConnectionType.RELIABLE));
+                mSession.start(Executors.newSingleThreadExecutor(),
+                        IncrementalDeviceConnection.Factory.reliable());
                 mSession.waitForInstallCompleted(30, TimeUnit.SECONDS);
                 assertEquals("base, config.hdpi, config.mdpi", getSplits(TEST_APP_PACKAGE));
             } finally {
@@ -762,9 +811,7 @@
 
         // First fully install the apk and a split0.
         {
-            final Result stateListenerResult = startListeningForBroadcast();
             installPackage(TEST_APK);
-            assertTrue(stateListenerResult.await());
             assertTrue(isAppInstalled(TEST_APP_PACKAGE));
             installSplit(TEST_APK_SPLIT0);
             assertEquals("base, config.mdpi", getSplits(TEST_APP_PACKAGE));
@@ -791,13 +838,11 @@
         File[] files = new File[]{apkfile, splitfile};
         String param = Arrays.stream(files).map(
                 file -> file.getName() + ":" + file.length()).collect(Collectors.joining(" "));
-        final Result stateListenerResult = startListeningForBroadcast();
         assertTrue(executeShellCommand(
                 String.format("pm install-incremental -t -g -S %s %s",
                         (apkfile.length() + splitfile.length()), param),
                 files, new long[]{apkfile.length(), newSplitLength}).contains(
                 "Failure"));
-        assertFalse(stateListenerResult.await());
         assertFalse(isAppInstalled(TEST_APP_PACKAGE));
     }
 
@@ -959,14 +1004,12 @@
 
     private void installSplit(String splitName) throws Exception {
         final File splitfile = new File(createApkPath(splitName));
-        final Result stateListenerResult = startListeningForBroadcast();
 
         try (InputStream inputStream = executeShellCommandStream(
                 "pm install-incremental -t -g -p " + TEST_APP_PACKAGE + " "
                         + splitfile.getPath())) {
             assertEquals("Success\n", readFullStream(inputStream));
         }
-        assertTrue(stateListenerResult.await());
     }
 
     private void readSplitInChunks(String splitName) throws Exception {
@@ -1021,38 +1064,6 @@
         boolean await() throws Exception;
     }
 
-    private Result startListeningForBroadcast() {
-        final Intent intent = new Intent()
-                .setComponent(new ComponentName("android.content.pm.cts.app", "android.content"
-                        + ".pm.cts.app.MainActivity"))
-                // data uri unique to each activity start to ensure actual launch and not just
-                // redisplay
-                .setData(Uri.parse("test://" + UUID.randomUUID().toString()))
-                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
-        intent.putExtra(Intent.EXTRA_PACKAGE_NAME, TEST_APP_PACKAGE);
-        // Should receive at least one fully_loaded broadcast
-        final CompletableFuture<Boolean> fullyLoaded = new CompletableFuture<>();
-        final RemoteCallback callback = new RemoteCallback(
-                bundle -> {
-                    if (bundle == null) {
-                        return;
-                    }
-                    if (bundle.getString("intent").equals(
-                            Intent.ACTION_PACKAGE_FULLY_LOADED)) {
-                        fullyLoaded.complete(true);
-                    }
-                });
-        intent.putExtra("callback", callback);
-        getContext().startActivity(intent);
-        return () -> {
-            try {
-                return fullyLoaded.get(10, TimeUnit.SECONDS);
-            } catch (TimeoutException e) {
-                return false;
-            }
-        };
-    }
-
     private static String executeShellCommand(String command) throws IOException {
         try (InputStream inputStream = executeShellCommandStream(command)) {
             return readFullStream(inputStream);
@@ -1131,6 +1142,8 @@
         setSystemProperty("debug.incremental.enforce_readlogs_max_interval_for_system_dataloaders",
                 "0");
         setSystemProperty("debug.incremental.readlogs_max_interval_sec", "10000");
+        setSystemProperty("debug.incremental.always_enable_read_timeouts_for_system_dataloaders",
+                "1");
         IoUtils.closeQuietly(mSession);
         mSession = null;
     }
diff --git a/tests/tests/content/src/android/content/wm/cts/OWNERS b/tests/tests/content/src/android/content/wm/cts/OWNERS
new file mode 100644
index 0000000..5ed5c56
--- /dev/null
+++ b/tests/tests/content/src/android/content/wm/cts/OWNERS
@@ -0,0 +1,2 @@
+include platform/frameworks/base:/services/core/java/com/android/server/wm/OWNERS
+charlesccchen@google.com
diff --git a/tests/tests/display/src/android/display/cts/DisplayTest.java b/tests/tests/display/src/android/display/cts/DisplayTest.java
index 0ce4d68..1ac4507 100644
--- a/tests/tests/display/src/android/display/cts/DisplayTest.java
+++ b/tests/tests/display/src/android/display/cts/DisplayTest.java
@@ -77,9 +77,14 @@
 import java.util.Optional;
 import java.util.Random;
 import java.util.Scanner;
+import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.function.Predicate;
 import java.util.function.Supplier;
 
 @RunWith(AndroidJUnit4.class)
@@ -272,11 +277,18 @@
      */
     @Test
     public void
-            testGetHdrCapabilitiesWhenUserDisabledFormatsAreNotAllowedReturnsFilteredHdrTypes() {
+            testGetHdrCapabilitiesWhenUserDisabledFormatsAreNotAllowedReturnsFilteredHdrTypes()
+                    throws Exception {
         final IBinder displayToken = SurfaceControl.getInternalDisplayToken();
         SurfaceControl.overrideHdrTypes(displayToken, new int[]{
                 HdrCapabilities.HDR_TYPE_DOLBY_VISION, HdrCapabilities.HDR_TYPE_HDR10,
                 HdrCapabilities.HDR_TYPE_HLG, HdrCapabilities.HDR_TYPE_HDR10_PLUS});
+        waitUntil(
+                mDefaultDisplay,
+                mDefaultDisplay ->
+                        mDefaultDisplay.getHdrCapabilities().getSupportedHdrTypes().length == 4,
+                Duration.ofSeconds(5));
+        assertEquals(4, mDefaultDisplay.getHdrCapabilities().getSupportedHdrTypes().length);
 
         mDisplayManager.setAreUserDisabledHdrTypesAllowed(false);
         int[] emptyUserDisabledFormats = {};
@@ -310,11 +322,18 @@
      */
     @Test
     public void
-            testGetHdrCapabilitiesWhenUserDisabledFormatsAreAllowedReturnsNonFilteredHdrTypes() {
+            testGetHdrCapabilitiesWhenUserDisabledFormatsAreAllowedReturnsNonFilteredHdrTypes()
+                    throws Exception {
         final IBinder displayToken = SurfaceControl.getInternalDisplayToken();
         SurfaceControl.overrideHdrTypes(displayToken, new int[]{
                 HdrCapabilities.HDR_TYPE_DOLBY_VISION, HdrCapabilities.HDR_TYPE_HDR10,
                 HdrCapabilities.HDR_TYPE_HLG, HdrCapabilities.HDR_TYPE_HDR10_PLUS});
+        waitUntil(
+                mDefaultDisplay,
+                mDefaultDisplay ->
+                        mDefaultDisplay.getHdrCapabilities().getSupportedHdrTypes().length == 4,
+                Duration.ofSeconds(5));
+        assertEquals(4, mDefaultDisplay.getHdrCapabilities().getSupportedHdrTypes().length);
 
         mDisplayManager.setAreUserDisabledHdrTypesAllowed(true);
         int[] userDisabledHdrTypes =
@@ -337,12 +356,17 @@
      * setUserDisabledHdrTypes, the setting is persisted in Settings.Global.
      */
     @Test
-    public void testSetUserDisabledHdrTypesStoresDisabledFormatsInSettings()
-            throws NumberFormatException {
+    public void testSetUserDisabledHdrTypesStoresDisabledFormatsInSettings() throws Exception {
         final IBinder displayToken = SurfaceControl.getInternalDisplayToken();
         SurfaceControl.overrideHdrTypes(displayToken, new int[]{
                 HdrCapabilities.HDR_TYPE_DOLBY_VISION, HdrCapabilities.HDR_TYPE_HDR10,
                 HdrCapabilities.HDR_TYPE_HLG, HdrCapabilities.HDR_TYPE_HDR10_PLUS});
+        waitUntil(
+                mDefaultDisplay,
+                mDefaultDisplay ->
+                        mDefaultDisplay.getHdrCapabilities().getSupportedHdrTypes().length == 4,
+                Duration.ofSeconds(5));
+        assertEquals(4, mDefaultDisplay.getHdrCapabilities().getSupportedHdrTypes().length);
 
         mDisplayManager.setAreUserDisabledHdrTypesAllowed(false);
         int[] emptyUserDisabledFormats = {};
@@ -363,6 +387,44 @@
         assertEquals(HdrCapabilities.HDR_TYPE_HLG, userDisabledFormats[1]);
     }
 
+    private void waitUntil(Display d, Predicate<Display> pred, Duration maxWait) throws Exception {
+        final int id = d.getDisplayId();
+        final Lock lock = new ReentrantLock();
+        final Condition displayChanged = lock.newCondition();
+        DisplayListener listener = new DisplayListener() {
+            @Override
+            public void onDisplayChanged(int displayId) {
+                if (displayId != id) {
+                    return;
+                }
+                lock.lock();
+                try {
+                    displayChanged.signal();
+                } finally {
+                    lock.unlock();
+                }
+            }
+            @Override
+            public void onDisplayAdded(int displayId) {}
+            @Override
+            public void onDisplayRemoved(int displayId) {}
+        };
+        Handler handler = new Handler(Looper.getMainLooper());
+        mDisplayManager.registerDisplayListener(listener, handler);
+        long remainingNanos = maxWait.toNanos();
+        lock.lock();
+        try {
+            while (!pred.test(mDefaultDisplay)) {
+                if (remainingNanos <= 0L) {
+                    throw new TimeoutException();
+                }
+                displayChanged.awaitNanos(remainingNanos);
+            }
+        } finally {
+            lock.unlock();
+        }
+    }
+
     /**
      * Verify that there is a secondary display.
      */
@@ -745,7 +807,6 @@
         }
     }
 
-
     @Test
     public void testGetDeviceProductInfo() {
         DeviceProductInfo deviceProductInfo = mDefaultDisplay.getDeviceProductInfo();
@@ -777,6 +838,23 @@
     }
 
     @Test
+    public void testDeviceProductInfo() {
+        DeviceProductInfo deviceProductInfo = new DeviceProductInfo(
+                "DeviceName" /* name */,
+                "TTL" /* manufacturePnpId */,
+                "ProductId1" /* productId */,
+                2000 /* modelYear */,
+                DeviceProductInfo.CONNECTION_TO_SINK_DIRECT);
+
+        assertEquals("DeviceName", deviceProductInfo.getName());
+        assertEquals("TTL", deviceProductInfo.getManufacturerPnpId());
+        assertEquals("ProductId1", deviceProductInfo.getProductId());
+        assertEquals(2000, deviceProductInfo.getModelYear());
+        assertEquals(DeviceProductInfo.CONNECTION_TO_SINK_DIRECT,
+                deviceProductInfo.getConnectionToSinkType());
+    }
+
+    @Test
     public void testFailBrightnessChangeWithoutPermission() throws Exception {
         final DisplayTestActivity activity = launchActivity(mDisplayTestActivity);
         final int originalValue = Settings.System.getInt(mContext.getContentResolver(),
diff --git a/tests/tests/display/src/android/display/cts/VirtualDisplayTest.java b/tests/tests/display/src/android/display/cts/VirtualDisplayTest.java
index c4db581..051ad1a 100644
--- a/tests/tests/display/src/android/display/cts/VirtualDisplayTest.java
+++ b/tests/tests/display/src/android/display/cts/VirtualDisplayTest.java
@@ -19,6 +19,14 @@
 import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS;
 import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_TRUSTED;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import android.Manifest;
 import android.app.Presentation;
 import android.content.Context;
 import android.graphics.Color;
@@ -35,7 +43,7 @@
 import android.os.Looper;
 import android.os.SystemClock;
 import android.platform.test.annotations.SecurityTest;
-import android.test.AndroidTestCase;
+import android.provider.Settings;
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.view.Display;
@@ -43,6 +51,19 @@
 import android.view.ViewGroup.LayoutParams;
 import android.widget.ImageView;
 
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.compatibility.common.util.AdoptShellPermissionsRule;
+import com.android.compatibility.common.util.SettingsStateKeeperRule;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
 import java.nio.ByteBuffer;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
@@ -53,7 +74,8 @@
  * This CTS test is unable to test public virtual displays since special permissions
  * are required.  See also framework VirtualDisplayTest unit tests.
  */
-public class VirtualDisplayTest extends AndroidTestCase {
+@RunWith(AndroidJUnit4.class)
+public class VirtualDisplayTest {
     private static final String TAG = "VirtualDisplayTest";
 
     private static final String NAME = TAG;
@@ -70,6 +92,7 @@
     private static final int BLUEISH = 0xff1122ee;
     private static final int GREENISH = 0xff33dd44;
 
+    private Context mContext;
     private DisplayManager mDisplayManager;
     private Handler mHandler;
     private final Lock mImageReaderLock = new ReentrantLock(true /*fair*/);
@@ -79,10 +102,24 @@
     private HandlerThread mCheckThread;
     private Handler mCheckHandler;
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
+    @Rule
+    public AdoptShellPermissionsRule mAdoptShellPermissionsRule = new AdoptShellPermissionsRule(
+            InstrumentationRegistry.getInstrumentation().getUiAutomation(),
+            Manifest.permission.WRITE_SECURE_SETTINGS);
 
+    @ClassRule
+    public static final SettingsStateKeeperRule mAreUserDisabledHdrFormatsAllowedSettingsKeeper =
+            new SettingsStateKeeperRule(InstrumentationRegistry.getTargetContext(),
+                    Settings.Global.ARE_USER_DISABLED_HDR_FORMATS_ALLOWED);
+
+    @ClassRule
+    public static final SettingsStateKeeperRule mUserDisabledHdrFormatsSettingsKeeper =
+            new SettingsStateKeeperRule(InstrumentationRegistry.getTargetContext(),
+                    Settings.Global.USER_DISABLED_HDR_FORMATS);
+
+    @Before
+    public void setUp() throws Exception {
+        mContext = InstrumentationRegistry.getInstrumentation().getContext();
         mDisplayManager = (DisplayManager)mContext.getSystemService(Context.DISPLAY_SERVICE);
         mHandler = new Handler(Looper.getMainLooper());
         mImageListener = new ImageListener();
@@ -101,9 +138,8 @@
         }
     }
 
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
+    @After
+    public void tearDown() throws Exception {
         mImageReaderLock.lock();
         try {
             mImageReader.close();
@@ -120,6 +156,7 @@
      * its own windows on it.
      */
     @SecurityTest
+    @Test
     public void testPrivateVirtualDisplay() throws Exception {
         VirtualDisplay virtualDisplay = mDisplayManager.createVirtualDisplay(NAME,
                 WIDTH, HEIGHT, DENSITY, mSurface, 0);
@@ -144,6 +181,7 @@
      * its own windows on it.
      */
     @SecurityTest
+    @Test
     public void testPrivatePresentationVirtualDisplay() throws Exception {
         VirtualDisplay virtualDisplay = mDisplayManager.createVirtualDisplay(NAME,
                 WIDTH, HEIGHT, DENSITY, mSurface,
@@ -169,6 +207,7 @@
      * its own windows on it where the surface is attached or detached dynamically.
      */
     @SecurityTest
+    @Test
     public void testPrivateVirtualDisplayWithDynamicSurface() throws Exception {
         VirtualDisplay virtualDisplay = mDisplayManager.createVirtualDisplay(NAME,
                 WIDTH, HEIGHT, DENSITY, null, 0);
@@ -202,6 +241,7 @@
      * flag {@link DisplayManager#VIRTUAL_DISPLAY_FLAG_TRUSTED}.
      */
     @SecurityTest
+    @Test
     public void testUntrustedSysDecorVirtualDisplay() throws Exception {
         VirtualDisplay virtualDisplay = mDisplayManager.createVirtualDisplay(NAME,
                 WIDTH, HEIGHT, DENSITY, mSurface,
@@ -229,6 +269,7 @@
      * display without holding the permission {@code ADD_TRUSTED_DISPLAY}.
      */
     @SecurityTest
+    @Test
     public void testTrustedVirtualDisplay() throws Exception {
         try {
             VirtualDisplay virtualDisplay = mDisplayManager.createVirtualDisplay(NAME,
@@ -241,6 +282,36 @@
                 + "holding the permission ADD_TRUSTED_DISPLAY.");
     }
 
+    @Test
+    public void testHdrApiMethods() {
+        VirtualDisplay virtualDisplay = mDisplayManager.createVirtualDisplay(NAME,
+                WIDTH, HEIGHT, DENSITY, mSurface, /*flags*/ 0);
+        try {
+            assertFalse(virtualDisplay.getDisplay().isHdr());
+            assertNull(virtualDisplay.getDisplay().getHdrCapabilities());
+        } finally {
+            virtualDisplay.release();
+        }
+    }
+
+    @Test
+    public void testGetHdrCapabilitiesWithUserDisabledFormats() {
+        VirtualDisplay virtualDisplay = mDisplayManager.createVirtualDisplay(NAME,
+                WIDTH, HEIGHT, DENSITY, mSurface, /*flags*/ 0);
+        mDisplayManager.setAreUserDisabledHdrTypesAllowed(false);
+        int[] userDisabledHdrTypes = {
+                Display.HdrCapabilities.HDR_TYPE_DOLBY_VISION,
+                Display.HdrCapabilities.HDR_TYPE_HLG};
+        mDisplayManager.setUserDisabledHdrTypes(userDisabledHdrTypes);
+
+        try {
+            assertFalse(virtualDisplay.getDisplay().isHdr());
+            assertNull(virtualDisplay.getDisplay().getHdrCapabilities());
+        } finally {
+            virtualDisplay.release();
+        }
+    }
+
     private void assertDisplayRegistered(Display display, int flags) {
         assertNotNull("display object must not be null", display);
         assertTrue("display must be valid", display.isValid());
@@ -286,7 +357,7 @@
             runOnUiThread(new Runnable() {
                 @Override
                 public void run() {
-                    presentation[0] = new TestPresentation(getContext(), display,
+                    presentation[0] = new TestPresentation(mContext, display,
                             color, windowFlags);
                     presentation[0].show();
                 }
diff --git a/tests/tests/graphics/res/drawable/rippledrawable_effect.xml b/tests/tests/graphics/res/drawable/rippledrawable_effect.xml
new file mode 100644
index 0000000..ec80965
--- /dev/null
+++ b/tests/tests/graphics/res/drawable/rippledrawable_effect.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+        android:color="#f00" android:effectColor="#ff0" />
\ No newline at end of file
diff --git a/tests/tests/graphics/src/android/graphics/cts/TypefaceTest.java b/tests/tests/graphics/src/android/graphics/cts/TypefaceTest.java
index e6cceb7..74508e8 100644
--- a/tests/tests/graphics/src/android/graphics/cts/TypefaceTest.java
+++ b/tests/tests/graphics/src/android/graphics/cts/TypefaceTest.java
@@ -33,6 +33,7 @@
 import android.graphics.Typeface.Builder;
 import android.os.SharedMemory;
 import android.system.ErrnoException;
+import android.util.ArrayMap;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.filters.SmallTest;
@@ -860,7 +861,8 @@
         }
         assertNotNull(shm);
 
-        Map<String, Typeface> reversedMap = Typeface.deserializeFontMap(shm.mapReadOnly());
+        Map<String, Typeface> reversedMap = new ArrayMap<>();
+        Typeface.deserializeFontMap(shm.mapReadOnly(), reversedMap);
 
         // Typeface equality doesn't work here since the backing native object is different.
         assertEquals(3, reversedMap.size());
diff --git a/tests/tests/graphics/src/android/graphics/cts/VulkanPreTransformCtsActivity.java b/tests/tests/graphics/src/android/graphics/cts/VulkanPreTransformCtsActivity.java
index b00a072..227e6d7 100644
--- a/tests/tests/graphics/src/android/graphics/cts/VulkanPreTransformCtsActivity.java
+++ b/tests/tests/graphics/src/android/graphics/cts/VulkanPreTransformCtsActivity.java
@@ -24,13 +24,14 @@
 import android.os.Bundle;
 import android.util.Log;
 import android.view.Surface;
+import android.view.SurfaceHolder;
 import android.view.SurfaceView;
 import android.view.WindowManager;
 
 /**
  * Activity for VulkanPreTransformTest.
  */
-public class VulkanPreTransformCtsActivity extends Activity {
+public class VulkanPreTransformCtsActivity extends Activity implements SurfaceHolder.Callback {
     static {
         System.loadLibrary("ctsgraphics_jni");
     }
@@ -48,7 +49,7 @@
         setActivityOrientation();
         setContentView(R.layout.vulkan_pretransform_layout);
         SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceview);
-        mSurface = surfaceView.getHolder().getSurface();
+        surfaceView.getHolder().addCallback(this);
     }
 
     private void setActivityOrientation() {
@@ -76,10 +77,36 @@
     }
 
     public void testVulkanPreTransform(boolean setPreTransform) {
+        synchronized (this) {
+            if (mSurface == null) {
+                try {
+                    // Wait for surfaceCreated callback on UI thread.
+                    this.wait();
+                } catch (Exception e) {
+                }
+            }
+        }
         nCreateNativeTest(getAssets(), mSurface, setPreTransform);
         sOrientationRequested = false;
     }
 
     private static native void nCreateNativeTest(
             AssetManager manager, Surface surface, boolean setPreTransform);
+
+    @Override
+    public void surfaceCreated(SurfaceHolder holder) {
+        synchronized (this) {
+            mSurface = holder.getSurface();
+            this.notify();
+        }
+    }
+
+    @Override
+    public void surfaceChanged(SurfaceHolder holder, int format,
+      int width, int height) {
+    }
+
+    @Override
+    public void surfaceDestroyed(SurfaceHolder holder) {
+    }
 }
diff --git a/tests/tests/graphics/src/android/graphics/cts/VulkanPreTransformTest.java b/tests/tests/graphics/src/android/graphics/cts/VulkanPreTransformTest.java
index 427ae77..79c8342 100644
--- a/tests/tests/graphics/src/android/graphics/cts/VulkanPreTransformTest.java
+++ b/tests/tests/graphics/src/android/graphics/cts/VulkanPreTransformTest.java
@@ -105,9 +105,6 @@
     @Before
     public void setUp() {
         Log.d(TAG, "setUp!");
-        // Work around for b/77148807
-        // Activity was falsely created before ActivityManager set config change to landscape
-        SystemClock.sleep(2000);
         mContext = InstrumentationRegistry.getContext();
     }
 
@@ -120,7 +117,6 @@
             return;
         }
         sActivity = mActivityRule.launchActivity(null);
-        SystemClock.sleep(5000);
         sActivity.testVulkanPreTransform(true);
         sActivity.finish();
         sActivity = null;
@@ -135,7 +131,6 @@
             return;
         }
         sActivity = mActivityRule.launchActivity(null);
-        SystemClock.sleep(5000);
         sActivity.testVulkanPreTransform(false);
         sActivity.finish();
         sActivity = null;
diff --git a/tests/tests/graphics/src/android/graphics/drawable/cts/RippleDrawableTest.java b/tests/tests/graphics/src/android/graphics/drawable/cts/RippleDrawableTest.java
index 30afaf9..6993ddc 100644
--- a/tests/tests/graphics/src/android/graphics/drawable/cts/RippleDrawableTest.java
+++ b/tests/tests/graphics/src/android/graphics/drawable/cts/RippleDrawableTest.java
@@ -47,6 +47,7 @@
 @SmallTest
 @RunWith(AndroidJUnit4.class)
 public class RippleDrawableTest {
+    private static final ColorStateList DEFAULT_EFFECT_COLOR = ColorStateList.valueOf(0x80ffffff);
     private Context mContext;
 
     @Before
@@ -86,6 +87,22 @@
         }
     }
 
+    @Test
+    public void testEffectColor() {
+        RippleDrawable drawable =
+                new RippleDrawable(ColorStateList.valueOf(Color.RED), null, null);
+        assertEquals(DEFAULT_EFFECT_COLOR, drawable.getEffectColor());
+        drawable.setEffectColor(ColorStateList.valueOf(Color.BLUE));
+        assertEquals(ColorStateList.valueOf(Color.BLUE), drawable.getEffectColor());
+    }
+
+    @Test
+    public void testEffectColorInflation() {
+        RippleDrawable drawable =
+                (RippleDrawable) mContext.getDrawable(R.drawable.rippledrawable_effect);
+        assertEquals(ColorStateList.valueOf(Color.YELLOW), drawable.getEffectColor());
+    }
+
     private void verifyPreloadDensityInner(Resources res, int densityDpi)
             throws XmlPullParserException, IOException {
         // Capture initial state at default density.
diff --git a/tests/tests/graphics/src/android/graphics/fonts/FontFamilyUpdateRequestTest.java b/tests/tests/graphics/src/android/graphics/fonts/FontFamilyUpdateRequestTest.java
index 95b1600..094a950 100644
--- a/tests/tests/graphics/src/android/graphics/fonts/FontFamilyUpdateRequestTest.java
+++ b/tests/tests/graphics/src/android/graphics/fonts/FontFamilyUpdateRequestTest.java
@@ -77,17 +77,18 @@
     @Test
     public void fontFamily() {
         String name = "test";
-        List<FontFamilyUpdateRequest.Font> fonts = Arrays.asList(
-                new FontFamilyUpdateRequest.Font.Builder("Test",
-                        new FontStyle(FONT_WEIGHT_NORMAL, FONT_SLANT_UPRIGHT)).build(),
-                new FontFamilyUpdateRequest.Font.Builder("Test",
-                        new FontStyle(FONT_WEIGHT_NORMAL, FONT_SLANT_ITALIC)).build());
+        FontFamilyUpdateRequest.Font font1 = new FontFamilyUpdateRequest.Font.Builder("Test",
+                new FontStyle(FONT_WEIGHT_NORMAL, FONT_SLANT_UPRIGHT)).build();
+        FontFamilyUpdateRequest.Font font2 = new FontFamilyUpdateRequest.Font.Builder("Test",
+                new FontStyle(FONT_WEIGHT_NORMAL, FONT_SLANT_ITALIC)).build();
         FontFamilyUpdateRequest.FontFamily fontFamily =
-                new FontFamilyUpdateRequest.FontFamily.Builder(name, fonts).build();
+                new FontFamilyUpdateRequest.FontFamily.Builder(name,
+                        Collections.singletonList(font1)).addFont(font2).build();
         assertThat(fontFamily.getName()).isEqualTo(name);
-        assertThat(fontFamily.getFonts()).containsExactlyElementsIn(fonts).inOrder();
+        assertThat(fontFamily.getFonts()).containsExactly(font1, font2).inOrder();
 
         // Invalid parameters
+        List<FontFamilyUpdateRequest.Font> fonts = Arrays.asList(font1, font2);
         assertThrows(NullPointerException.class, () ->
                 new FontFamilyUpdateRequest.FontFamily.Builder(null, fonts).build());
         assertThrows(IllegalArgumentException.class, () ->
diff --git a/tests/tests/graphics/src/android/graphics/fonts/FontFileTestUtil.java b/tests/tests/graphics/src/android/graphics/fonts/FontFileTestUtil.java
new file mode 100644
index 0000000..acb0c76
--- /dev/null
+++ b/tests/tests/graphics/src/android/graphics/fonts/FontFileTestUtil.java
@@ -0,0 +1,91 @@
+/*
+ * 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 android.graphics.fonts;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.channels.FileChannel;
+import java.nio.charset.StandardCharsets;
+
+public class FontFileTestUtil {
+    private static final int SFNT_VERSION_1 = 0x00010000;
+    private static final int SFNT_VERSION_OTTO = 0x4F54544F;
+    private static final int TTC_TAG = 0x74746366;
+    private static final int NAME_TAG = 0x6E616D65;
+
+    public static String getPostScriptName(File file) throws IOException {
+        try (FileInputStream fis = new FileInputStream(file)) {
+            final FileChannel fc = fis.getChannel();
+            long size = fc.size();
+            ByteBuffer buffer = fc.map(FileChannel.MapMode.READ_ONLY, 0, size)
+                    .order(ByteOrder.BIG_ENDIAN);
+
+            int magicNumber = buffer.getInt(0);
+
+            int fontOffset = 0;
+            if (magicNumber == TTC_TAG) {
+                fontOffset = buffer.getInt(12);  // 0th offset
+                magicNumber = buffer.getInt(fontOffset);
+                if (magicNumber != SFNT_VERSION_1 && magicNumber != SFNT_VERSION_OTTO) {
+                    throw new IOException("Unknown magic number at 0th font: #" + magicNumber);
+                }
+            } else if (magicNumber != SFNT_VERSION_1 && magicNumber != SFNT_VERSION_OTTO) {
+                throw new IOException("Unknown magic number: #" + magicNumber);
+            }
+
+            int numTables = buffer.getShort(fontOffset + 4);  // offset to number of table
+            int nameTableOffset = 0;
+            for (int i = 0; i < numTables; ++i) {
+                int tableEntryOffset = fontOffset + 12 + i * 16;
+                int tableTag = buffer.getInt(tableEntryOffset);
+                if (tableTag == NAME_TAG) {
+                    nameTableOffset = buffer.getInt(tableEntryOffset + 8);
+                    break;
+                }
+            }
+
+            if (nameTableOffset == 0) {
+                throw new IOException("name table not found.");
+            }
+
+            int nameTableCount = buffer.getShort(nameTableOffset + 2);
+            int storageOffset = buffer.getShort(nameTableOffset + 4);
+
+            for (int i = 0; i < nameTableCount; ++i) {
+                int platformID = buffer.getShort(nameTableOffset + 6 + i * 12);
+                int encodingID = buffer.getShort(nameTableOffset + 6 + i * 12 + 2);
+                int languageID = buffer.getShort(nameTableOffset + 6 + i * 12 + 4);
+                int nameID = buffer.getShort(nameTableOffset + 6 + i * 12 + 6);
+                int length = buffer.getShort(nameTableOffset + 6 + i * 12 + 8);
+                int stringOffset = buffer.getShort(nameTableOffset + 6 + i * 12 + 10);
+
+                if (nameID == 6 && platformID == 3 && encodingID == 1 && languageID == 1033) {
+                    byte[] name = new byte[length];
+                    ByteBuffer slice = buffer.slice();
+                    slice.position(nameTableOffset + storageOffset + stringOffset);
+                    slice.get(name);
+                    // encoded in UTF-16BE for platform ID = 3
+                    return new String(name, StandardCharsets.UTF_16BE);
+                }
+            }
+        }
+        return null;
+    }
+}
diff --git a/tests/tests/graphics/src/android/graphics/fonts/FontManagerTest.java b/tests/tests/graphics/src/android/graphics/fonts/FontManagerTest.java
index 85b75d4..dd9576f 100644
--- a/tests/tests/graphics/src/android/graphics/fonts/FontManagerTest.java
+++ b/tests/tests/graphics/src/android/graphics/fonts/FontManagerTest.java
@@ -258,5 +258,16 @@
         }
     }
 
+    @Test
+    public void fontManager_PostScriptName() throws IOException {
+        FontConfig fontConfig = getFontConfig();
+        for (FontConfig.FontFamily family : fontConfig.getFontFamilies()) {
+            for (FontConfig.Font font : family.getFontList()) {
+                String psNameInFile = FontFileTestUtil.getPostScriptName(font.getFile());
+                assertThat(font.getPostScriptName()).isEqualTo(psNameInFile);
+            }
+        }
+    }
+
     // TODO: Add more tests once we sign test fonts.
 }
diff --git a/tests/tests/graphics/src/android/graphics/fonts/SystemFontsUniqueNameTest.java b/tests/tests/graphics/src/android/graphics/fonts/SystemFontsUniqueNameTest.java
index 812cf3b..7e25ce5 100644
--- a/tests/tests/graphics/src/android/graphics/fonts/SystemFontsUniqueNameTest.java
+++ b/tests/tests/graphics/src/android/graphics/fonts/SystemFontsUniqueNameTest.java
@@ -26,81 +26,13 @@
 import org.junit.runner.RunWith;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.channels.FileChannel;
-import java.nio.charset.StandardCharsets;
 import java.util.HashSet;
 import java.util.Set;
 
 @MediumTest
 @RunWith(AndroidJUnit4.class)
 public class SystemFontsUniqueNameTest {
-    private static final int SFNT_VERSION_1 = 0x00010000;
-    private static final int SFNT_VERSION_OTTO = 0x4F54544F;
-    private static final int TTC_TAG = 0x74746366;
-    private static final int NAME_TAG = 0x6E616D65;
-
-    private static String getPostScriptName(File file) throws IOException {
-        try (FileInputStream fis = new FileInputStream(file)) {
-            final FileChannel fc = fis.getChannel();
-            long size = fc.size();
-            ByteBuffer buffer = fc.map(FileChannel.MapMode.READ_ONLY, 0, size)
-                    .order(ByteOrder.BIG_ENDIAN);
-
-            int magicNumber = buffer.getInt(0);
-
-            int fontOffset = 0;
-            if (magicNumber == TTC_TAG) {
-                fontOffset = buffer.getInt(12);  // 0th offset
-                magicNumber = buffer.getInt(fontOffset);
-                if (magicNumber != SFNT_VERSION_1 && magicNumber != SFNT_VERSION_OTTO) {
-                    throw new IOException("Unknown magic number at 0th font: #" + magicNumber);
-                }
-            } else if (magicNumber != SFNT_VERSION_1 && magicNumber != SFNT_VERSION_OTTO) {
-                throw new IOException("Unknown magic number: #" + magicNumber);
-            }
-
-            int numTables = buffer.getShort(fontOffset + 4);  // offset to number of table
-            int nameTableOffset = 0;
-            for (int i = 0; i < numTables; ++i) {
-                int tableEntryOffset = fontOffset + 12 + i * 16;
-                int tableTag = buffer.getInt(tableEntryOffset);
-                if (tableTag == NAME_TAG) {
-                    nameTableOffset = buffer.getInt(tableEntryOffset + 8);
-                    break;
-                }
-            }
-
-            if (nameTableOffset == 0) {
-                throw new IOException("name table not found.");
-            }
-
-            int nameTableCount = buffer.getShort(nameTableOffset + 2);
-            int storageOffset = buffer.getShort(nameTableOffset + 4);
-
-            for (int i = 0; i < nameTableCount; ++i) {
-                int platformID = buffer.getShort(nameTableOffset + 6 + i * 12);
-                int encodingID = buffer.getShort(nameTableOffset + 6 + i * 12 + 2);
-                int languageID = buffer.getShort(nameTableOffset + 6 + i * 12 + 4);
-                int nameID = buffer.getShort(nameTableOffset + 6 + i * 12 + 6);
-                int length = buffer.getShort(nameTableOffset + 6 + i * 12 + 8);
-                int stringOffset = buffer.getShort(nameTableOffset + 6 + i * 12 + 10);
-
-                if (nameID == 6 && platformID == 3 && encodingID == 1 && languageID == 1033) {
-                    byte[] name = new byte[length];
-                    ByteBuffer slice = buffer.slice();
-                    slice.position(nameTableOffset + storageOffset + stringOffset);
-                    slice.get(name);
-                    // encoded in UTF-16BE for platform ID = 3
-                    return new String(name, StandardCharsets.UTF_16BE);
-                }
-            }
-        }
-        return null;
-    }
 
     @Test
     public void uniquePostScript() throws IOException {
@@ -111,7 +43,7 @@
             if (seenFile.contains(font.getFile())) {
                 continue;
             }
-            String psName = getPostScriptName(font.getFile());
+            String psName = FontFileTestUtil.getPostScriptName(font.getFile());
             assertThat(psName).isNotNull();
             assertThat(set).doesNotContain(psName);
 
diff --git a/tests/tests/hardware/res/raw/sony_dualsense_bluetooth_keyeventtests.json b/tests/tests/hardware/res/raw/sony_dualsense_bluetooth_keyeventtests.json
new file mode 100644
index 0000000..95f30bd
--- /dev/null
+++ b/tests/tests/hardware/res/raw/sony_dualsense_bluetooth_keyeventtests.json
@@ -0,0 +1,301 @@
+[
+  {
+    "name": "Press BUTTON_A",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a,
+        0x1a, 0x8a, 0xc9],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_A"},
+      {"action": "UP", "keycode": "BUTTON_A"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_B",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5,
+        0x16, 0xab, 0x5b],
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_B"},
+      {"action": "UP", "keycode": "BUTTON_B"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_X",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d,
+        0x1f, 0x22, 0x6d],
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_X"},
+      {"action": "UP", "keycode": "BUTTON_X"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_Y",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa,
+        0x09, 0x98, 0xa4],
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_Y"},
+      {"action": "UP", "keycode": "BUTTON_Y"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_L1",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85,
+        0x31, 0x8f, 0x81],
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_L1"},
+      {"action": "UP", "keycode": "BUTTON_L1"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_R1",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b,
+        0x41, 0xa1, 0xcb],
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_R1"},
+      {"action": "UP", "keycode": "BUTTON_R1"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_L2",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87,
+        0xa0, 0xfd, 0x5f],
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_L2"},
+      {"action": "UP", "keycode": "BUTTON_L2"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_R2",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e,
+        0x65, 0x35, 0xac],
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_R2"},
+      {"action": "UP", "keycode": "BUTTON_R2"}
+    ]
+  },
+
+  {
+    "name": "Press left thumb button",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x40, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7,
+        0xc6, 0x96, 0x1a],
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_THUMBL"},
+      {"action": "UP", "keycode": "BUTTON_THUMBL"}
+    ]
+  },
+
+  {
+    "name": "Press right thumb button",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
+        0xa9, 0xe3, 0x26],
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_THUMBR"},
+      {"action": "UP", "keycode": "BUTTON_THUMBR"}
+    ]
+  },
+
+  {
+    "name": "Press 'share' button",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d,
+        0xe8, 0xd5, 0x90],
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_SELECT"},
+      {"action": "UP", "keycode": "BUTTON_SELECT"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_OPTIONS",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b,
+        0xf2, 0x14, 0xe9],
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_START"},
+      {"action": "UP", "keycode": "BUTTON_START"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_PS",
+    "reports": [
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc,
+        0x76, 0x09, 0x5e],
+      [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+        0x1c, 0xba, 0x0e]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_MODE"},
+      {"action": "UP", "keycode": "BUTTON_MODE"}
+    ]
+  }
+
+]
diff --git a/tests/tests/hardware/res/raw/sony_dualsense_bluetooth_motioneventtests.json b/tests/tests/hardware/res/raw/sony_dualsense_bluetooth_motioneventtests.json
new file mode 100644
index 0000000..f182830
--- /dev/null
+++ b/tests/tests/hardware/res/raw/sony_dualsense_bluetooth_motioneventtests.json
@@ -0,0 +1,408 @@
+[
+  {
+    "name": "Initial check - should not produce any events",
+    "reports": [
+        [0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3,
+          0x5a, 0x8c, 0xa]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+    ]
+  },
+
+  {
+    "name": "Press left DPAD key",
+    "reports": [
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+          0xcc, 0x24, 0x52],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_HAT_X": -1}},
+      {"action": "MOVE", "axes": {"AXIS_HAT_X": 0}}
+    ]
+  },
+
+  {
+    "name": "Press right DPAD key",
+    "reports": [
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b,
+          0x8d, 0x1e, 0x3c],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_HAT_X": 1}},
+      {"action": "MOVE", "axes": {"AXIS_HAT_X": 0}}
+    ]
+  },
+
+  {
+    "name": "Press up DPAD key",
+    "reports": [
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96,
+          0x2e, 0xbb, 0xe6],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_HAT_Y": -1}},
+      {"action": "MOVE", "axes": {"AXIS_HAT_Y": 0}}
+    ]
+  },
+
+  {
+    "name": "Press down DPAD key",
+    "reports": [
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd,
+          0x6f, 0x81, 0x88],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_HAT_Y": 1}},
+      {"action": "MOVE", "axes": {"AXIS_HAT_Y": 0}}
+    ]
+  },
+
+  {
+    "name": "Left stick - press left",
+    "reports": [
+        [0x31, 0x00, 0x3f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa,
+          0x6b, 0x34, 0x38],
+        [0x31, 0x00, 0x00, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0,
+          0x77, 0xb7, 0x4f],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_X": -0.51}},
+      {"action": "MOVE", "axes": {"AXIS_X": -1}},
+      {"action": "MOVE", "axes": {"AXIS_X": 0}}
+    ]
+  },
+
+  {
+    "name": "Left stick - press right",
+    "reports": [
+        [0x31, 0x00, 0xbf, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde,
+          0x84, 0x28, 0x55],
+        [0x31, 0x00, 0xff, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
+          0xf3, 0xa6, 0x63],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_X": 0.5}},
+      {"action": "MOVE", "axes": {"AXIS_X": 1}},
+      {"action": "MOVE", "axes": {"AXIS_X": 0}}
+    ]
+  },
+
+  {
+    "name": "Left stick - press up",
+    "reports": [
+        [0x31, 0x00, 0x7f, 0x3f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba,
+          0x50, 0x87, 0x83],
+        [0x31, 0x00, 0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb,
+          0xdc, 0xab, 0x07],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_Y": -0.51}},
+      {"action": "MOVE", "axes": {"AXIS_Y": -1}},
+      {"action": "MOVE", "axes": {"AXIS_Y": 0}}
+    ]
+  },
+
+  {
+    "name": "Left stick - press down",
+    "reports": [
+        [0x31, 0x00, 0x7f, 0xbf, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf,
+          0xcf, 0x8c, 0x42],
+        [0x31, 0x00, 0x7f, 0xff, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+          0x83, 0xb1, 0xcf],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_Y": 0.5}},
+      {"action": "MOVE", "axes": {"AXIS_Y": 1}},
+      {"action": "MOVE", "axes": {"AXIS_Y": 0}}
+    ]
+  },
+
+  {
+    "name": "Right stick - press left",
+    "reports": [
+        [0x31, 0x00, 0x7f, 0x7f, 0x3f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
+          0x43, 0xfb, 0x3b],
+        [0x31, 0x00, 0x7f, 0x7f, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c,
+          0x9c, 0x36, 0xa9],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_Z": -0.51}},
+      {"action": "MOVE", "axes": {"AXIS_Z": -1}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 0}}
+    ]
+  },
+
+  {
+    "name": "Right stick - press right",
+    "reports": [
+        [0x31, 0x00, 0x7f, 0x7f, 0xbf, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31,
+          0xfd, 0x79, 0x51],
+        [0x31, 0x00, 0x7f, 0x7f, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e,
+          0xa2, 0x38, 0x64],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_Z": 0.5}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 1}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 0}}
+    ]
+  },
+
+  {
+    "name": "Right stick - press up",
+    "reports": [
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x3f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
+          0xf9, 0x4d, 0xfa],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4,
+          0x71, 0x1c, 0xe5],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_RZ": -0.51}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": -1}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": 0}}
+    ]
+  },
+
+  {
+    "name": "Right stick - press down",
+    "reports": [
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0xbf, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29,
+          0x35, 0xd3, 0xc8],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+          0xd0, 0x24, 0x3c],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_RZ": 0.5}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": 1}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": 0}}
+    ]
+  },
+
+  {
+    "name": "Left trigger - quick press",
+    "reports": [
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd5,
+          0xc7, 0xe1, 0xa6],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9,
+          0x35, 0x41, 0xe0],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_LTRIGGER": 0.5, "AXIS_BRAKE": 0.5}},
+      {"action": "MOVE", "axes": {"AXIS_LTRIGGER": 1.0, "AXIS_BRAKE": 1.0}},
+      {"action": "MOVE", "axes": {"AXIS_LTRIGGER": 0, "AXIS_BRAKE": 0}}
+    ]
+  },
+
+  {
+    "name": "Right trigger - quick press",
+    "reports": [
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x7f, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd,
+          0x8c, 0xbe, 0x32],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0xff, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+          0xd9, 0xf2, 0xfb],
+        [0x31, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+          0x1c, 0xba, 0x0e]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_RTRIGGER": 0.5, "AXIS_GAS": 0.5}},
+      {"action": "MOVE", "axes": {"AXIS_RTRIGGER": 1.0, "AXIS_GAS": 1.0}},
+      {"action": "MOVE", "axes": {"AXIS_RTRIGGER": 0, "AXIS_GAS": 0}}
+    ]
+  }
+]
diff --git a/tests/tests/hardware/res/raw/sony_dualsense_bluetooth_register.json b/tests/tests/hardware/res/raw/sony_dualsense_bluetooth_register.json
new file mode 100644
index 0000000..3d4f9e8
--- /dev/null
+++ b/tests/tests/hardware/res/raw/sony_dualsense_bluetooth_register.json
@@ -0,0 +1,52 @@
+{
+  "id": 1,
+  "command": "register",
+  "name": "Sony DualSense (model 409B-CFIZCT1)(Bluetooth Test)",
+  "vid": 0x054c,
+  "pid": 0x0ce6,
+  "bus": "bluetooth",
+  "source": "KEYBOARD | GAMEPAD | JOYSTICK | MOUSE | SENSOR",
+  "descriptor": [
+    0x05, 0x01, 0x09, 0x05, 0xa1, 0x01, 0x85, 0x01, 0x09, 0x30, 0x09, 0x31, 0x09, 0x32, 0x09, 0x35,
+    0x15, 0x00, 0x26, 0xff, 0x00, 0x75, 0x08, 0x95, 0x04, 0x81, 0x02, 0x09, 0x39, 0x15, 0x00, 0x25,
+    0x07, 0x35, 0x00, 0x46, 0x3b, 0x01, 0x65, 0x14, 0x75, 0x04, 0x95, 0x01, 0x81, 0x42, 0x65, 0x00,
+    0x05, 0x09, 0x19, 0x01, 0x29, 0x0e, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x0e, 0x81, 0x02,
+    0x75, 0x06, 0x95, 0x01, 0x81, 0x01, 0x05, 0x01, 0x09, 0x33, 0x09, 0x34, 0x15, 0x00, 0x26, 0xff,
+    0x00, 0x75, 0x08, 0x95, 0x02, 0x81, 0x02, 0x06, 0x00, 0xff, 0x15, 0x00, 0x26, 0xff, 0x00, 0x75,
+    0x08, 0x95, 0x4d, 0x85, 0x31, 0x09, 0x31, 0x91, 0x02, 0x09, 0x3b, 0x81, 0x02, 0x85, 0x32, 0x09,
+    0x32, 0x95, 0x8d, 0x91, 0x02, 0x85, 0x33, 0x09, 0x33, 0x95, 0xcd, 0x91, 0x02, 0x85, 0x34, 0x09,
+    0x34, 0x96, 0x0d, 0x01, 0x91, 0x02, 0x85, 0x35, 0x09, 0x35, 0x96, 0x4d, 0x01, 0x91, 0x02, 0x85,
+    0x36, 0x09, 0x36, 0x96, 0x8d, 0x01, 0x91, 0x02, 0x85, 0x37, 0x09, 0x37, 0x96, 0xcd, 0x01, 0x91,
+    0x02, 0x85, 0x38, 0x09, 0x38, 0x96, 0x0d, 0x02, 0x91, 0x02, 0x85, 0x39, 0x09, 0x39, 0x96, 0x22,
+    0x02, 0x91, 0x02, 0x06, 0x80, 0xff, 0x85, 0x05, 0x09, 0x33, 0x95, 0x28, 0xb1, 0x02, 0x85, 0x08,
+    0x09, 0x34, 0x95, 0x2f, 0xb1, 0x02, 0x85, 0x09, 0x09, 0x24, 0x95, 0x13, 0xb1, 0x02, 0x85, 0x20,
+    0x09, 0x26, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0x22, 0x09, 0x40, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0x80,
+    0x09, 0x28, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0x81, 0x09, 0x29, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0x82,
+    0x09, 0x2a, 0x95, 0x09, 0xb1, 0x02, 0x85, 0x83, 0x09, 0x2b, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0xf1,
+    0x09, 0x31, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0xf2, 0x09, 0x32, 0x95, 0x0f, 0xb1, 0x02, 0x85, 0xf0,
+    0x09, 0x30, 0x95, 0x3f, 0xb1, 0x02, 0xc0
+  ],
+
+  "feature_reports": [
+    {
+      "id": 0x05,
+      "data":
+        [0x5, 0xff, 0xff, 0xf2, 0xff, 0x4, 0x0, 0x9d, 0x22, 0x5e, 0xdd, 0x92, 0x22, 0x52, 0xdd, 0xba, 0x22, 0x51, 0xdd, 0x1c, 0x2, 0x1c, 0x2, 0xfb, 0x1f, 0x5, 0xe0, 0x83, 0x1f, 0x99, 0xdf, 0x7, 0x20, 0xfc, 0xdf, 0x5, 0x0, 0x72, 0xad, 0x2c, 0x13]
+    },
+    {
+      "id": 0x09,
+      "data":
+        [0x09, 0xa9, 0x3e, 0x7a, 0x7e, 0x0b, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0xdf, 0xec, 0xe0]
+    },
+    {
+      "id": 0x20,
+      "data": [
+        0x20, 0x41, 0x75, 0x67, 0x20, 0x31, 0x38, 0x20, 0x32, 0x30, 0x32, 0x30,
+        0x30, 0x36, 0x3a, 0x32, 0x30, 0x3a, 0x32, 0x39, 0x03, 0x00, 0x04, 0x00,
+        0x13, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x01, 0x41, 0x0a, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00,
+        0x2a, 0x00, 0x01, 0x00, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00,
+        0x98, 0xd8, 0xb3, 0xb7]
+    }
+  ]
+}
diff --git a/tests/tests/hardware/res/raw/sony_dualsense_usb_keyeventtests.json b/tests/tests/hardware/res/raw/sony_dualsense_usb_keyeventtests.json
new file mode 100644
index 0000000..5f4d5fe
--- /dev/null
+++ b/tests/tests/hardware/res/raw/sony_dualsense_usb_keyeventtests.json
@@ -0,0 +1,275 @@
+[
+  {
+    "name": "Press BUTTON_A",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_A"},
+      {"action": "UP", "keycode": "BUTTON_A"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_B",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_B"},
+      {"action": "UP", "keycode": "BUTTON_B"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_X",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_X"},
+      {"action": "UP", "keycode": "BUTTON_X"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_Y",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_Y"},
+      {"action": "UP", "keycode": "BUTTON_Y"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_L1",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_L1"},
+      {"action": "UP", "keycode": "BUTTON_L1"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_R1",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_R1"},
+      {"action": "UP", "keycode": "BUTTON_R1"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_L2",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_L2"},
+      {"action": "UP", "keycode": "BUTTON_L2"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_R2",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_R2"},
+      {"action": "UP", "keycode": "BUTTON_R2"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_L3",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_THUMBL"},
+      {"action": "UP", "keycode": "BUTTON_THUMBL"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_R3",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_THUMBR"},
+      {"action": "UP", "keycode": "BUTTON_THUMBR"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_SHARE",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_SELECT"},
+      {"action": "UP", "keycode": "BUTTON_SELECT"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_OPTIONS",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_START"},
+      {"action": "UP", "keycode": "BUTTON_START"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_PS",
+    "reports": [
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00],
+      [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "KEYBOARD | GAMEPAD",
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_MODE"},
+      {"action": "UP", "keycode": "BUTTON_MODE"}
+    ]
+  }
+
+]
diff --git a/tests/tests/hardware/res/raw/sony_dualsense_usb_motioneventtests.json b/tests/tests/hardware/res/raw/sony_dualsense_usb_motioneventtests.json
new file mode 100644
index 0000000..eb6eed8
--- /dev/null
+++ b/tests/tests/hardware/res/raw/sony_dualsense_usb_motioneventtests.json
@@ -0,0 +1,369 @@
+[
+  {
+    "name": "Initial check - should not produce any events",
+    "reports": [
+        [0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+    ]
+  },
+
+  {
+    "name": "Press left DPAD key",
+    "reports": [
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_HAT_X": -1}},
+      {"action": "MOVE", "axes": {"AXIS_HAT_X": 0}}
+    ]
+  },
+
+  {
+    "name": "Press right DPAD key",
+    "reports": [
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_HAT_X": 1}},
+      {"action": "MOVE", "axes": {"AXIS_HAT_X": 0}}
+    ]
+  },
+
+  {
+    "name": "Press up DPAD key",
+    "reports": [
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_HAT_Y": -1}},
+      {"action": "MOVE", "axes": {"AXIS_HAT_Y": 0}}
+    ]
+  },
+
+  {
+    "name": "Press down DPAD key",
+    "reports": [
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_HAT_Y": 1}},
+      {"action": "MOVE", "axes": {"AXIS_HAT_Y": 0}}
+    ]
+  },
+
+  {
+    "name": "Left stick - press left",
+    "reports": [
+        [0x01, 0x3f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x00, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_X": -0.51}},
+      {"action": "MOVE", "axes": {"AXIS_X": -1}},
+      {"action": "MOVE", "axes": {"AXIS_X": 0}}
+    ]
+  },
+
+  {
+    "name": "Left stick - press right",
+    "reports": [
+        [0x01, 0xbf, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0xff, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_X": 0.5}},
+      {"action": "MOVE", "axes": {"AXIS_X": 1}},
+      {"action": "MOVE", "axes": {"AXIS_X": 0}}
+    ]
+  },
+
+  {
+    "name": "Left stick - press up",
+    "reports": [
+        [0x01, 0x7f, 0x3f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x00, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_Y": -0.51}},
+      {"action": "MOVE", "axes": {"AXIS_Y": -1}},
+      {"action": "MOVE", "axes": {"AXIS_Y": 0}}
+    ]
+  },
+
+  {
+    "name": "Left stick - press down",
+    "reports": [
+        [0x01, 0x7f, 0xbf, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0xff, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_Y": 0.5}},
+      {"action": "MOVE", "axes": {"AXIS_Y": 1}},
+      {"action": "MOVE", "axes": {"AXIS_Y": 0}}
+    ]
+  },
+
+  {
+    "name": "Right stick - press left",
+    "reports": [
+        [0x01, 0x7f, 0x7f, 0x3f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_Z": -0.51}},
+      {"action": "MOVE", "axes": {"AXIS_Z": -1}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 0}}
+    ]
+  },
+
+  {
+    "name": "Right stick - press right",
+    "reports": [
+        [0x01, 0x7f, 0x7f, 0xbf, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_Z": 0.5}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 1}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 0}}
+    ]
+  },
+
+  {
+    "name": "Right stick - press up",
+    "reports": [
+        [0x01, 0x7f, 0x7f, 0x7f, 0x3f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_RZ": -0.51}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": -1}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": 0}}
+    ]
+  },
+
+  {
+    "name": "Right stick - press down",
+    "reports": [
+        [0x01, 0x7f, 0x7f, 0x7f, 0xbf, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_RZ": 0.5}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": 1}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": 0}}
+    ]
+  },
+
+  {
+    "name": "Left trigger - quick press",
+    "reports": [
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_LTRIGGER": 0.5, "AXIS_BRAKE": 0.5}},
+      {"action": "MOVE", "axes": {"AXIS_LTRIGGER": 1.0, "AXIS_BRAKE": 1.0}},
+      {"action": "MOVE", "axes": {"AXIS_LTRIGGER": 0, "AXIS_BRAKE": 0}}
+    ]
+  },
+
+  {
+    "name": "Right trigger - quick press",
+    "reports": [
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x7f, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0xff, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],
+        [0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x00, 0x00, 0x8e, 0xff, 0x02, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
+          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    ],
+    "source": "JOYSTICK",
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_RTRIGGER": 0.5, "AXIS_GAS": 0.5}},
+      {"action": "MOVE", "axes": {"AXIS_RTRIGGER": 1.0, "AXIS_GAS": 1.0}},
+      {"action": "MOVE", "axes": {"AXIS_RTRIGGER": 0, "AXIS_GAS": 0}}
+    ]
+  }
+]
diff --git a/tests/tests/hardware/res/raw/sony_dualsense_usb_register.json b/tests/tests/hardware/res/raw/sony_dualsense_usb_register.json
new file mode 100644
index 0000000..e40d5a6
--- /dev/null
+++ b/tests/tests/hardware/res/raw/sony_dualsense_usb_register.json
@@ -0,0 +1,54 @@
+{
+  "id": 1,
+  "command": "register",
+  "name": "Sony DualSense (model 409B-CFIZCT1)(USB Test)",
+  "vid": 0x054c,
+  "pid": 0x0ce6,
+  "bus": "usb",
+  "source": "KEYBOARD | GAMEPAD | JOYSTICK | MOUSE | SENSOR",
+  "descriptor": [
+    0x05, 0x01, 0x09, 0x05, 0xa1, 0x01, 0x85, 0x01, 0x09, 0x30, 0x09, 0x31, 0x09, 0x32, 0x09, 0x35,
+    0x09, 0x33, 0x09, 0x34, 0x15, 0x00, 0x26, 0xff, 0x00, 0x75, 0x08, 0x95, 0x06, 0x81, 0x02, 0x06,
+    0x00, 0xff, 0x09, 0x20, 0x95, 0x01, 0x81, 0x02, 0x05, 0x01, 0x09, 0x39, 0x15, 0x00, 0x25, 0x07,
+    0x35, 0x00, 0x46, 0x3b, 0x01, 0x65, 0x14, 0x75, 0x04, 0x95, 0x01, 0x81, 0x42, 0x65, 0x00, 0x05,
+    0x09, 0x19, 0x01, 0x29, 0x0f, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x0f, 0x81, 0x02, 0x06,
+    0x00, 0xff, 0x09, 0x21, 0x95, 0x0d, 0x81, 0x02, 0x06, 0x00, 0xff, 0x09, 0x22, 0x15, 0x00, 0x26,
+    0xff, 0x00, 0x75, 0x08, 0x95, 0x34, 0x81, 0x02, 0x85, 0x02, 0x09, 0x23, 0x95, 0x2f, 0x91, 0x02,
+    0x85, 0x05, 0x09, 0x23, 0x95, 0x28, 0xb1, 0x02, 0x85, 0x08, 0x09, 0x24, 0x95, 0x2f, 0xb1, 0x02,
+    0x85, 0x09, 0x09, 0x24, 0x95, 0x13, 0xb1, 0x02, 0x85, 0x0a, 0x09, 0x25, 0x95, 0x1a, 0xb1, 0x02,
+    0x85, 0x20, 0x09, 0x26, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0x21, 0x09, 0x27, 0x95, 0x04, 0xb1, 0x02,
+    0x85, 0x22, 0x09, 0x40, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0x80, 0x09, 0x28, 0x95, 0x3f, 0xb1, 0x02,
+    0x85, 0x81, 0x09, 0x29, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0x82, 0x09, 0x2a, 0x95, 0x09, 0xb1, 0x02,
+    0x85, 0x83, 0x09, 0x2b, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0x84, 0x09, 0x2c, 0x95, 0x3f, 0xb1, 0x02,
+    0x85, 0x85, 0x09, 0x2d, 0x95, 0x02, 0xb1, 0x02, 0x85, 0xa0, 0x09, 0x2e, 0x95, 0x01, 0xb1, 0x02,
+    0x85, 0xe0, 0x09, 0x2f, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0xf0, 0x09, 0x30, 0x95, 0x3f, 0xb1, 0x02,
+    0x85, 0xf1, 0x09, 0x31, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0xf2, 0x09, 0x32, 0x95, 0x0f, 0xb1, 0x02,
+    0xc0],
+
+  "feature_reports": [
+    {
+      "id": 0x05,
+      "data": [
+        0x05, 0xff, 0xff, 0xf2, 0xff, 0x04, 0x00, 0x9d, 0x22, 0x5e, 0xdd, 0x92,
+        0x22, 0x52, 0xdd, 0xba, 0x22, 0x51, 0xdd, 0x1c, 0x02, 0x1c, 0x02, 0xfb,
+        0x1f, 0x05, 0xe0, 0x83, 0x1f, 0x99, 0xdf, 0x07, 0x20, 0xfc, 0xdf, 0x05,
+        0x00, 0x00, 0x00, 0x00, 0x00]
+    },
+    {
+      "id": 0x09,
+      "data": [
+        0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
+    },
+    {
+      "id": 0x20,
+      "data": [
+        0x20, 0x41, 0x75, 0x67, 0x20, 0x31, 0x38, 0x20, 0x32, 0x30, 0x32, 0x30,
+        0x30, 0x36, 0x3a, 0x32, 0x30, 0x3a, 0x32, 0x39, 0x03, 0x00, 0x04, 0x00,
+        0x13, 0x03, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x01, 0x41, 0x0a, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00,
+        0x2a, 0x00, 0x01, 0x00, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00,
+        0x98, 0xd8, 0xb3, 0xb7]
+    }
+  ]
+}
diff --git a/tests/tests/hardware/res/raw/sony_dualshock3_usb_keyeventtests.json b/tests/tests/hardware/res/raw/sony_dualshock3_usb_keyeventtests.json
index fd152c2..af036bd 100644
--- a/tests/tests/hardware/res/raw/sony_dualshock3_usb_keyeventtests.json
+++ b/tests/tests/hardware/res/raw/sony_dualshock3_usb_keyeventtests.json
@@ -152,7 +152,7 @@
   },
 
   {
-    "name": "Press BUTTON_L3",
+    "name": "Press left thumb button",
     "reports": [
       [0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
@@ -171,7 +171,7 @@
   },
 
   {
-    "name": "Press BUTTON_R3",
+    "name": "Press right thumb button",
     "reports": [
       [0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
diff --git a/tests/tests/hardware/src/android/hardware/hdmi/cts/HdmiControlManagerTest.java b/tests/tests/hardware/src/android/hardware/hdmi/cts/HdmiControlManagerTest.java
index 8bd230d..fcf0c31 100644
--- a/tests/tests/hardware/src/android/hardware/hdmi/cts/HdmiControlManagerTest.java
+++ b/tests/tests/hardware/src/android/hardware/hdmi/cts/HdmiControlManagerTest.java
@@ -109,8 +109,8 @@
                     mHdmiControlManager.getClient(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM)).isNotNull();
         }
 
-        boolean isSwitchDevice = SystemProperties.getBoolean("ro.hdmi.cec.source.is_switch.enabled",
-                false);
+        boolean isSwitchDevice = SystemProperties.getBoolean(
+                "ro.hdmi.property_is_device_hdmi_cec_switch", false);
         if (deviceTypes.contains("6") || isSwitchDevice) {
             assertThat(mHdmiControlManager.getSwitchClient()).isInstanceOf(HdmiSwitchClient.class);
             assertThat(mHdmiControlManager.getClient(6)).isInstanceOf(HdmiSwitchClient.class);
@@ -135,8 +135,8 @@
                     HdmiDeviceInfo.DEVICE_PLAYBACK);
         }
 
-        boolean isSwitchDevice = SystemProperties.getBoolean("ro.hdmi.cec.source.is_switch.enabled",
-                false);
+        boolean isSwitchDevice = SystemProperties.getBoolean(
+                "ro.hdmi.property_is_device_hdmi_cec_switch", false);
 
         if (deviceTypes.contains(String.valueOf(DEVICE_TYPE_SWITCH)) || isSwitchDevice) {
             assertThat(mHdmiControlManager.getSwitchClient().getDeviceType()).isEqualTo(
diff --git a/tests/tests/hardware/src/android/hardware/input/cts/tests/NintendoSwitchProTest.java b/tests/tests/hardware/src/android/hardware/input/cts/tests/NintendoSwitchProTest.java
index 28ce6dc..1477720 100644
--- a/tests/tests/hardware/src/android/hardware/input/cts/tests/NintendoSwitchProTest.java
+++ b/tests/tests/hardware/src/android/hardware/input/cts/tests/NintendoSwitchProTest.java
@@ -16,6 +16,10 @@
 
 package android.hardware.input.cts.tests;
 
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+import static org.junit.Assume.assumeFalse;
+
+import android.content.pm.PackageManager;
 import android.hardware.cts.R;
 import android.os.SystemClock;
 
@@ -49,11 +53,18 @@
 
     @Test
     public void testAllKeys() {
+        assumeFalse("Skipping test for wear devices", isWatch());
         testInputEvents(R.raw.nintendo_switchpro_keyeventtests);
     }
 
     @Test
     public void testAllMotions() {
+        assumeFalse("Skipping test for wear devices", isWatch());
         testInputEvents(R.raw.nintendo_switchpro_motioneventtests);
     }
+
+    static boolean isWatch() {
+        final PackageManager pm = getInstrumentation().getContext().getPackageManager();
+        return pm.hasSystemFeature(PackageManager.FEATURE_WATCH);
+    }
 }
diff --git a/tests/tests/hardware/src/android/hardware/input/cts/tests/SonyDualSenseBluetoothTest.java b/tests/tests/hardware/src/android/hardware/input/cts/tests/SonyDualSenseBluetoothTest.java
new file mode 100644
index 0000000..08a98b8
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/input/cts/tests/SonyDualSenseBluetoothTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 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 android.hardware.input.cts.tests;
+
+import android.hardware.cts.R;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class SonyDualSenseBluetoothTest extends InputHidTestCase {
+
+    // Simulates the behavior of PlayStation DualSense gamepad
+    public SonyDualSenseBluetoothTest() {
+        super(R.raw.sony_dualsense_bluetooth_register);
+    }
+
+    @Test
+    public void testAllKeys() {
+        testInputEvents(R.raw.sony_dualsense_bluetooth_keyeventtests);
+    }
+
+    @Test
+    public void testAllMotions() {
+        testInputEvents(R.raw.sony_dualsense_bluetooth_motioneventtests);
+    }
+}
diff --git a/tests/tests/hardware/src/android/hardware/input/cts/tests/SonyDualSenseUsbTest.java b/tests/tests/hardware/src/android/hardware/input/cts/tests/SonyDualSenseUsbTest.java
new file mode 100644
index 0000000..8baf254
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/input/cts/tests/SonyDualSenseUsbTest.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 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 android.hardware.input.cts.tests;
+
+import android.hardware.cts.R;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class SonyDualSenseUsbTest extends InputHidTestCase {
+
+    // Simulates the behavior of PlayStation DualSense gamepad
+    public SonyDualSenseUsbTest() {
+        super(R.raw.sony_dualsense_usb_register);
+    }
+
+    @Test
+    public void testAllKeys() {
+        testInputEvents(R.raw.sony_dualsense_usb_keyeventtests);
+    }
+
+    @Test
+    public void testAllMotions() {
+        testInputEvents(R.raw.sony_dualsense_usb_motioneventtests);
+    }
+}
diff --git a/tests/tests/media/src/android/media/cts/AudioDeviceInfoTest.java b/tests/tests/media/src/android/media/cts/AudioDeviceInfoTest.java
new file mode 100644
index 0000000..a2a90dc
--- /dev/null
+++ b/tests/tests/media/src/android/media/cts/AudioDeviceInfoTest.java
@@ -0,0 +1,127 @@
+/*
+ * 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 android.media.cts;
+
+import static org.junit.Assert.*;
+
+import android.media.AudioDeviceInfo;
+import android.util.Log;
+import androidx.test.runner.AndroidJUnit4;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@NonMediaMainlineTest
+@RunWith(AndroidJUnit4.class)
+public class AudioDeviceInfoTest {
+    private static final Set<Integer> INPUT_TYPES = Stream.of(
+        AudioDeviceInfo.TYPE_BUILTIN_MIC,
+        AudioDeviceInfo.TYPE_BLUETOOTH_SCO,
+        AudioDeviceInfo.TYPE_BLUETOOTH_A2DP,
+        AudioDeviceInfo.TYPE_WIRED_HEADSET,
+        AudioDeviceInfo.TYPE_HDMI,
+        AudioDeviceInfo.TYPE_TELEPHONY,
+        AudioDeviceInfo.TYPE_DOCK,
+        AudioDeviceInfo.TYPE_USB_ACCESSORY,
+        AudioDeviceInfo.TYPE_USB_DEVICE,
+        AudioDeviceInfo.TYPE_USB_HEADSET,
+        AudioDeviceInfo.TYPE_FM_TUNER,
+        AudioDeviceInfo.TYPE_TV_TUNER,
+        AudioDeviceInfo.TYPE_LINE_ANALOG,
+        AudioDeviceInfo.TYPE_LINE_DIGITAL,
+        AudioDeviceInfo.TYPE_IP,
+        AudioDeviceInfo.TYPE_BUS,
+        AudioDeviceInfo.TYPE_REMOTE_SUBMIX,
+        AudioDeviceInfo.TYPE_BLE_HEADSET,
+        AudioDeviceInfo.TYPE_HDMI_ARC,
+        AudioDeviceInfo.TYPE_HDMI_EARC,
+        AudioDeviceInfo.TYPE_ECHO_REFERENCE)
+            .collect(Collectors.toCollection(HashSet::new));
+
+    private static final Set<Integer> OUTPUT_TYPES = Stream.of(
+        AudioDeviceInfo.TYPE_BUILTIN_EARPIECE,
+        AudioDeviceInfo.TYPE_BUILTIN_SPEAKER,
+        AudioDeviceInfo.TYPE_WIRED_HEADSET,
+        AudioDeviceInfo.TYPE_WIRED_HEADPHONES,
+        AudioDeviceInfo.TYPE_BLUETOOTH_SCO,
+        AudioDeviceInfo.TYPE_BLUETOOTH_A2DP,
+        AudioDeviceInfo.TYPE_HDMI,
+        AudioDeviceInfo.TYPE_DOCK,
+        AudioDeviceInfo.TYPE_USB_ACCESSORY,
+        AudioDeviceInfo.TYPE_USB_DEVICE,
+        AudioDeviceInfo.TYPE_USB_HEADSET,
+        AudioDeviceInfo.TYPE_TELEPHONY,
+        AudioDeviceInfo.TYPE_LINE_ANALOG,
+        AudioDeviceInfo.TYPE_HDMI_ARC,
+        AudioDeviceInfo.TYPE_HDMI_EARC,
+        AudioDeviceInfo.TYPE_LINE_DIGITAL,
+        AudioDeviceInfo.TYPE_FM,
+        AudioDeviceInfo.TYPE_AUX_LINE,
+        AudioDeviceInfo.TYPE_IP,
+        AudioDeviceInfo.TYPE_BUS,
+        AudioDeviceInfo.TYPE_HEARING_AID,
+        AudioDeviceInfo.TYPE_BUILTIN_SPEAKER_SAFE,
+        AudioDeviceInfo.TYPE_BLE_HEADSET,
+        AudioDeviceInfo.TYPE_BLE_SPEAKER)
+            .collect(Collectors.toCollection(HashSet::new));
+
+    private static int MAX_TYPE;
+    private static int MIN_TYPE;
+    {
+        int maxType = Integer.MIN_VALUE;
+        int minType = Integer.MAX_VALUE;
+        for (int type : INPUT_TYPES) {
+            minType = Integer.min(minType, type);
+            maxType = Integer.max(maxType, type);
+        }
+        for (int type : OUTPUT_TYPES) {
+            minType = Integer.min(minType, type);
+            maxType = Integer.max(maxType, type);
+        }
+        MIN_TYPE = minType;
+        MAX_TYPE = maxType;
+    }
+
+    /**
+     * Ensure no regression on accepted input device types.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testDeviceTypeIn() throws Exception {
+        for (int type : INPUT_TYPES) {
+            // throws IllegalArgumentException on failure
+            AudioDeviceInfo.enforceValidAudioDeviceTypeIn(type);
+        }
+    }
+
+    /**
+     * Ensure no regression on accepted output device types.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testDeviceTypeOut() throws Exception {
+        for (int type : OUTPUT_TYPES) {
+            // throws IllegalArgumentException on failure
+            AudioDeviceInfo.enforceValidAudioDeviceTypeOut(type);
+        }
+    }
+}
diff --git a/tests/tests/media/src/android/media/cts/AudioManagerTest.java b/tests/tests/media/src/android/media/cts/AudioManagerTest.java
index 87e69b5..56df011 100644
--- a/tests/tests/media/src/android/media/cts/AudioManagerTest.java
+++ b/tests/tests/media/src/android/media/cts/AudioManagerTest.java
@@ -108,6 +108,9 @@
     private final static long POLL_TIME_PLAY_MUSIC = 2000;
     private final static long TIME_TO_PLAY = 2000;
     private final static String APPOPS_OP_STR = "android:write_settings";
+    private final static Set<Integer> ALL_KNOWN_ENCAPSULATION_TYPES = new HashSet<>() {{
+            add(AudioProfile.AUDIO_ENCAPSULATION_TYPE_IEC61937);
+    }};
     private final static Set<Integer> ALL_ENCAPSULATION_TYPES = new HashSet<>() {{
             add(AudioProfile.AUDIO_ENCAPSULATION_TYPE_NONE);
             add(AudioProfile.AUDIO_ENCAPSULATION_TYPE_IEC61937);
@@ -1863,6 +1866,8 @@
             for (AudioDescriptor descriptor : device.getAudioDescriptors()) {
                 assertNotEquals(AudioDescriptor.STANDARD_NONE, descriptor.getStandard());
                 assertNotNull(descriptor.getDescriptor());
+                assertTrue(
+                        ALL_KNOWN_ENCAPSULATION_TYPES.contains(descriptor.getEncapsulationType()));
             }
             assertEquals(formats, formatsFromProfile);
             assertEquals(channelMasks, channelMasksFromProfile);
diff --git a/tests/tests/media/src/android/media/cts/DecoderTestXheAac.java b/tests/tests/media/src/android/media/cts/DecoderTestXheAac.java
index 44ddf6fb..d90bf4f 100755
--- a/tests/tests/media/src/android/media/cts/DecoderTestXheAac.java
+++ b/tests/tests/media/src/android/media/cts/DecoderTestXheAac.java
@@ -43,6 +43,8 @@
 
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -51,6 +53,7 @@
 import java.util.List;
 
 @AppModeFull(reason = "DecoderTest is non-instant")
+@RunWith(JUnit4.class)
 public class DecoderTestXheAac {
     private static final String TAG = "DecoderTestXheAac";
 
diff --git a/tests/tests/media/src/android/media/cts/MediaMetadataRetrieverTest.java b/tests/tests/media/src/android/media/cts/MediaMetadataRetrieverTest.java
index 7d064b5..0233b73 100644
--- a/tests/tests/media/src/android/media/cts/MediaMetadataRetrieverTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaMetadataRetrieverTest.java
@@ -21,7 +21,6 @@
 import static android.media.MediaMetadataRetriever.OPTION_NEXT_SYNC;
 import static android.media.MediaMetadataRetriever.OPTION_PREVIOUS_SYNC;
 
-import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.res.AssetFileDescriptor;
 import android.graphics.Bitmap;
@@ -33,7 +32,6 @@
 import android.media.MediaExtractor;
 import android.media.MediaFormat;
 import android.media.MediaMetadataRetriever;
-import android.media.MediaRecorder;
 import android.os.ParcelFileDescriptor;
 import android.net.Uri;
 import android.os.Build;
@@ -59,7 +57,6 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.function.Function;
 
@@ -391,7 +388,9 @@
         if(!ApiLevelUtil.isAtLeast(Build.VERSION_CODES.R)) {
             // The fix for b/154357105 was released in mainline release 30.09.007.01
             // See https://android-build.googleplex.com/builds/treetop/googleplex-android-review/11174063
-            TestUtils.assumeMainlineModuleAtLeast("com.google.android.media", 300900701);
+            if (TestUtils.skipTestIfMainlineLessThan("com.google.android.media", 300900701)) {
+                return;
+            }
         }
         setDataSourceFd("sinesweepid3v24ext.mp3");
         assertEquals("Mime type was other than expected",
diff --git a/tests/tests/media/src/android/media/cts/MediaSessionTest.java b/tests/tests/media/src/android/media/cts/MediaSessionTest.java
index 8a51982..016c9ba 100644
--- a/tests/tests/media/src/android/media/cts/MediaSessionTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaSessionTest.java
@@ -23,7 +23,7 @@
 import static android.media.cts.MediaSessionTestService.STEP_CLEAN_UP;
 import static android.media.cts.MediaSessionTestService.STEP_SET_UP;
 import static android.media.cts.MediaSessionTestService.TEST_SERIES_OF_SET_QUEUE;
-import static android.media.cts.MediaSessionTestService.TEST_SET_QUEUE_WITH_LARGE_NUMBER_OF_ITEMS;
+import static android.media.cts.MediaSessionTestService.TEST_SET_QUEUE;
 import static android.media.cts.Utils.compareRemoteUserInfo;
 
 import android.app.PendingIntent;
@@ -54,6 +54,7 @@
 import android.view.KeyEvent;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -941,7 +942,7 @@
         }
 
         try (RemoteService.Invoker invoker = new RemoteService.Invoker(mContext,
-                MediaSessionTestService.class, TEST_SET_QUEUE_WITH_LARGE_NUMBER_OF_ITEMS)) {
+                MediaSessionTestService.class, TEST_SET_QUEUE)) {
             Bundle args = new Bundle();
             args.putParcelable(KEY_SESSION_TOKEN, mSession.getSessionToken());
             args.putInt(KEY_EXPECTED_QUEUE_SIZE, queueSize);
@@ -952,6 +953,19 @@
         }
     }
 
+    public void testSetQueueWithEmptyQueue() throws Exception {
+        try (RemoteService.Invoker invoker = new RemoteService.Invoker(mContext,
+                MediaSessionTestService.class, TEST_SET_QUEUE)) {
+            Bundle args = new Bundle();
+            args.putParcelable(KEY_SESSION_TOKEN, mSession.getSessionToken());
+            args.putInt(KEY_EXPECTED_QUEUE_SIZE, 0);
+            invoker.run(STEP_SET_UP, args);
+            mSession.setQueue(Collections.emptyList());
+            invoker.run(STEP_CHECK);
+            invoker.run(STEP_CLEAN_UP);
+        }
+    }
+
     /**
      * Verifies that a new session hasn't had any configuration bits set yet.
      *
diff --git a/tests/tests/media/src/android/media/cts/MediaSessionTestService.java b/tests/tests/media/src/android/media/cts/MediaSessionTestService.java
index 1b82872..08476ba 100644
--- a/tests/tests/media/src/android/media/cts/MediaSessionTestService.java
+++ b/tests/tests/media/src/android/media/cts/MediaSessionTestService.java
@@ -33,7 +33,7 @@
 
 public class MediaSessionTestService extends RemoteService {
     public static final int TEST_SERIES_OF_SET_QUEUE = 0;
-    public static final int TEST_SET_QUEUE_WITH_LARGE_NUMBER_OF_ITEMS = 1;
+    public static final int TEST_SET_QUEUE = 1;
 
     public static final int STEP_SET_UP = 0;
     public static final int STEP_CHECK = 1;
@@ -80,7 +80,7 @@
         mAllItemsNotified = null;
     }
 
-    private void testSetQueueWithLargeNumberOfItems_setUp(Bundle args) {
+    private void testSetQueue_setUp(Bundle args) {
         MediaSession.Token token = args.getParcelable(KEY_SESSION_TOKEN);
         int expectedQueueSize = args.getInt(KEY_EXPECTED_QUEUE_SIZE);
 
@@ -98,11 +98,11 @@
                 new Handler(Looper.getMainLooper()));
     }
 
-    private void testSetQueueWithLargeNumberOfItems_check() throws Exception {
+    private void testSetQueue_check() throws Exception {
         assertTrue(mQueueNotified.await(TIMEOUT_MS, MILLISECONDS));
     }
 
-    private void testSetQueueWithLargeNumberOfItems_cleanUp() {
+    private void testSetQueue_cleanUp() {
         mMediaController.unregisterCallback(mMediaControllerCallback);
         mMediaController = null;
         mMediaControllerCallback = null;
@@ -121,13 +121,13 @@
             } else {
                 throw new IllegalArgumentException("Unknown step=" + step);
             }
-        } else if (testId == TEST_SET_QUEUE_WITH_LARGE_NUMBER_OF_ITEMS) {
+        } else if (testId == TEST_SET_QUEUE) {
             if (step == STEP_SET_UP) {
-                testSetQueueWithLargeNumberOfItems_setUp(args);
+                testSetQueue_setUp(args);
             } else if (step == STEP_CHECK) {
-                testSetQueueWithLargeNumberOfItems_check();
+                testSetQueue_check();
             } else if (step == STEP_CLEAN_UP) {
-                testSetQueueWithLargeNumberOfItems_cleanUp();
+                testSetQueue_cleanUp();
             } else {
                 throw new IllegalArgumentException("Unknown step=" + step);
             }
diff --git a/tests/tests/media/src/android/media/cts/RoutingTest.java b/tests/tests/media/src/android/media/cts/RoutingTest.java
index f3972a8..cd70a51 100644
--- a/tests/tests/media/src/android/media/cts/RoutingTest.java
+++ b/tests/tests/media/src/android/media/cts/RoutingTest.java
@@ -456,7 +456,7 @@
         }
     }
 
-    public void test_audioTrack_getRoutedDevice() {
+    public void test_audioTrack_getRoutedDevice() throws Exception {
         if (!DeviceUtils.hasOutputDevice(mAudioManager)) {
             Log.i(TAG, "No output devices. Test skipped");
             return; // nothing to test here
@@ -484,17 +484,25 @@
         Thread fillerThread = new Thread(filler);
         fillerThread.start();
 
-        try { Thread.sleep(1000); } catch (InterruptedException ex) {}
-
-        // No explicit route
-        AudioDeviceInfo routedDevice = audioTrack.getRoutedDevice();
-        assertNotNull(routedDevice); // we probably can't say anything more than this
+        assertHasNonNullRoutedDevice(audioTrack);
 
         filler.stop();
         audioTrack.stop();
         audioTrack.release();
     }
 
+    private void assertHasNonNullRoutedDevice(AudioRouting router) throws Exception {
+        AudioDeviceInfo routedDevice = null;
+        // Give a chance for playback or recording to start so routing can be established
+        final long timeouts[] = { 100, 200, 500, 500, 1000};
+        int attempt = 0;
+        do {
+            try { Thread.sleep(timeouts[attempt++]); } catch (InterruptedException ex) {}
+            routedDevice = router.getRoutedDevice();
+        } while (routedDevice == null && attempt < timeouts.length);
+        assertNotNull(routedDevice); // we probably can't say anything more than this
+    }
+
     private class AudioRecordPuller implements Runnable {
         AudioRecord mAudioRecord;
         int mBufferSize;
@@ -520,7 +528,7 @@
         }
     }
 
-    public void test_audioRecord_getRoutedDevice() {
+    public void test_audioRecord_getRoutedDevice() throws Exception {
         if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MICROPHONE)) {
             return;
         }
@@ -550,11 +558,7 @@
         Thread pullerThread = new Thread(puller);
         pullerThread.start();
 
-        try { Thread.sleep(1000); } catch (InterruptedException ex) {}
-
-        // No explicit route
-        AudioDeviceInfo routedDevice = audioRecord.getRoutedDevice();
-        assertNotNull(routedDevice); // we probably can't say anything more than this
+        assertHasNonNullRoutedDevice(audioRecord);
 
         puller.stop();
         audioRecord.stop();
@@ -645,7 +649,7 @@
         mediaPlayer.release();
     }
 
-    public void test_mediaPlayer_getRoutedDevice() {
+    public void test_mediaPlayer_getRoutedDevice() throws Exception {
         if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUDIO_OUTPUT)) {
             // Can't do it so skip this test
             return;
@@ -654,12 +658,7 @@
         MediaPlayer mediaPlayer = allocMediaPlayer();
         assertTrue(mediaPlayer.isPlaying());
 
-        // Sleep for 1s to ensure the output device open
-        SystemClock.sleep(1000);
-
-        // No explicit route
-        AudioDeviceInfo routedDevice = mediaPlayer.getRoutedDevice();
-        assertNotNull(routedDevice);
+        assertHasNonNullRoutedDevice(mediaPlayer);
 
         mediaPlayer.stop();
         mediaPlayer.release();
diff --git a/tests/tests/media/src/android/media/cts/TestUtils.java b/tests/tests/media/src/android/media/cts/TestUtils.java
index fb8212f..ae4cb59 100644
--- a/tests/tests/media/src/android/media/cts/TestUtils.java
+++ b/tests/tests/media/src/android/media/cts/TestUtils.java
@@ -18,16 +18,17 @@
 
 import static android.content.pm.PackageManager.MATCH_APEX;
 
-import static org.junit.Assume.assumeNoException;
 import static org.junit.Assume.assumeTrue;
 
 import android.content.Context;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
+import android.util.Log;
 
 import androidx.test.core.app.ApplicationProvider;
 
+import org.junit.Assert;
 import org.junit.AssumptionViolatedException;
 
 import java.util.Objects;
@@ -36,6 +37,7 @@
  * Utilities for tests.
  */
 public final class TestUtils {
+    private static String TAG = "TestUtils";
     private static final int WAIT_TIME_MS = 1000;
     private static final int WAIT_SERVICE_TIME_MS = 5000;
 
@@ -74,23 +76,60 @@
      *
      * @param module     the apex module name
      * @param minVersion the minimum version
-     * @throws AssumptionViolatedException if module.minVersion < minVersion
+     * @throws AssumptionViolatedException if module version < minVersion
      */
     static void assumeMainlineModuleAtLeast(String module, long minVersion) {
-        Context context = ApplicationProvider.getApplicationContext();
-        PackageInfo info;
         try {
-            info = context.getPackageManager().getPackageInfo(module,
-                    MATCH_APEX);
-            long actualVersion = info.getLongVersionCode();
-            assumeTrue("Assumed Module  " + module + " minVersion " + actualVersion + " >= "
-                            + minVersion,
-                    actualVersion >= minVersion);
+            long actualVersion = getModuleVersion(module);
+            assumeTrue("Assume  module  " + module + " version " + actualVersion + " < minVersion"
+                    + minVersion, actualVersion >= minVersion);
         } catch (PackageManager.NameNotFoundException e) {
-            assumeNoException(e);
+            Assert.fail(e.getMessage());
         }
     }
 
+    /**
+     * Checks if {@code module} is < {@code minVersion}
+     *
+     * <p>
+     * {@link AssumptionViolatedException} is not handled properly by {@code JUnit3} so just return
+     * the test
+     * early instead.
+     *
+     * @param module     the apex module name
+     * @param minVersion the minimum version
+     * @deprecated convert test to JUnit4 and use
+     * {@link #assumeMainlineModuleAtLeast(String, long)} instead.
+     */
+    @Deprecated
+    static boolean skipTestIfMainlineLessThan(String module, long minVersion) {
+        try {
+            long actualVersion = getModuleVersion(module);
+            if (actualVersion < minVersion) {
+                Log.i(TAG, "Skipping test because Module  " + module + " minVersion " + minVersion
+                        + " > "
+                        + minVersion
+                );
+                return true;
+            } else {
+                return false;
+            }
+        } catch (PackageManager.NameNotFoundException e) {
+            Assert.fail(e.getMessage());
+            return false;
+        }
+    }
+
+    private static long getModuleVersion(String module)
+            throws PackageManager.NameNotFoundException {
+        Context context = ApplicationProvider.getApplicationContext();
+        PackageInfo info;
+        info = context.getPackageManager().getPackageInfo(module,
+                MATCH_APEX);
+        return info.getLongVersionCode();
+    }
+
+
     private TestUtils() {
     }
 
diff --git a/tests/tests/mediatranscoding/assets/MediaCapabilities.xml b/tests/tests/mediatranscoding/assets/MediaCapabilities.xml
index b2a1aee..1df175f 100644
--- a/tests/tests/mediatranscoding/assets/MediaCapabilities.xml
+++ b/tests/tests/mediatranscoding/assets/MediaCapabilities.xml
@@ -16,5 +16,6 @@
 
 <media-capabilities xmlns:android="http://schemas.android.com/apk/res/android">
     <format android:name="HEVC" supported="true"/>
+    <format android:name="VP9" supported="false"/>
     <format android:name="HDR10" supported="false"/>
 </media-capabilities>
diff --git a/tests/tests/mediatranscoding/src/android/media/mediatranscoding/cts/ApplicationMediaCapabilitiesTest.java b/tests/tests/mediatranscoding/src/android/media/mediatranscoding/cts/ApplicationMediaCapabilitiesTest.java
index 6a82ce4..ba40ca5 100644
--- a/tests/tests/mediatranscoding/src/android/media/mediatranscoding/cts/ApplicationMediaCapabilitiesTest.java
+++ b/tests/tests/mediatranscoding/src/android/media/mediatranscoding/cts/ApplicationMediaCapabilitiesTest.java
@@ -32,6 +32,7 @@
 
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.util.List;
 
 @Presubmit
 @AppModeFull(reason = "Instant apps cannot access the SD card")
@@ -45,12 +46,27 @@
         assertTrue(capability.isVideoMimeTypeSupported(MediaFormat.MIMETYPE_VIDEO_HEVC));
     }
 
+    public void testSetUnsupportVideoMime() throws Exception {
+        ApplicationMediaCapabilities capability =
+                new ApplicationMediaCapabilities.Builder().addUnsupportedVideoMimeType(
+                        MediaFormat.MIMETYPE_VIDEO_HEVC).build();
+        assertFalse(capability.isVideoMimeTypeSupported(MediaFormat.MIMETYPE_VIDEO_HEVC));
+    }
+
     public void testSetSupportHdr() throws Exception {
         ApplicationMediaCapabilities capability =
                 new ApplicationMediaCapabilities.Builder().addSupportedHdrType(
                         MediaFeature.HdrType.HDR10_PLUS).addSupportedVideoMimeType(
                         MediaFormat.MIMETYPE_VIDEO_HEVC).build();
-        assertEquals(true, capability.isHdrTypeSupported(MediaFeature.HdrType.HDR10_PLUS));
+        assertTrue(capability.isHdrTypeSupported(MediaFeature.HdrType.HDR10_PLUS));
+    }
+
+    public void testSetUnsupportHdr() throws Exception {
+        ApplicationMediaCapabilities capability =
+                new ApplicationMediaCapabilities.Builder().addUnsupportedHdrType(
+                        MediaFeature.HdrType.HDR10_PLUS).addSupportedVideoMimeType(
+                        MediaFormat.MIMETYPE_VIDEO_HEVC).build();
+        assertFalse(capability.isHdrTypeSupported(MediaFeature.HdrType.HDR10_PLUS));
     }
 
     // Test supports HDR without supporting hevc, expect exception.
@@ -86,6 +102,7 @@
 
     //   Test read the xml from assets folder using the InputStream.
     //    <format android:name="HEVC" supported="true"/>
+    //    <format android:name="VP9" supported="false"/>
     //    <format android:name="HDR10" supported="false"/>
     public void testReadFromCorrectXmlWithInputStreamInAssets() throws Exception {
         InputStream xmlIs = mContext.getAssets().open("MediaCapabilities.xml");
@@ -96,6 +113,12 @@
                 parser);
         assertFalse(capability.isHdrTypeSupported(MediaFeature.HdrType.HDR10));
         assertTrue(capability.isVideoMimeTypeSupported(MediaFormat.MIMETYPE_VIDEO_HEVC));
+        List<String> supportedVideoMimetypes = capability.getSupportedVideoMimeTypes();
+        assertTrue(supportedVideoMimetypes.contains(MediaFormat.MIMETYPE_VIDEO_HEVC));
+        List<String> unsupportedVideoMimetypes = capability.getUnsupportedVideoMimeTypes();
+        assertTrue(unsupportedVideoMimetypes.contains(MediaFormat.MIMETYPE_VIDEO_VP9));
+        List<String> unsupportedHdr = capability.getUnsupportedHdrTypes();
+        assertTrue(unsupportedHdr.contains(MediaFeature.HdrType.HDR10));
     }
 
     //   Test read the application's xml from assets folder using the XmlResourceParser.
@@ -116,6 +139,12 @@
         assertTrue(capability.isHdrTypeSupported(MediaFeature.HdrType.DOLBY_VISION));
         assertTrue(capability.isHdrTypeSupported(MediaFeature.HdrType.HLG));
         assertTrue(capability.isVideoMimeTypeSupported(MediaFormat.MIMETYPE_VIDEO_HEVC));
+        List<String> supportedHdrTypes = capability.getSupportedHdrTypes();
+        assertTrue(supportedHdrTypes.contains(MediaFeature.HdrType.HDR10));
+        assertTrue(supportedHdrTypes.contains(MediaFeature.HdrType.HDR10_PLUS));
+        assertTrue(supportedHdrTypes.contains(MediaFeature.HdrType.DOLBY_VISION));
+        assertTrue(supportedHdrTypes.contains(MediaFeature.HdrType.HLG));
+        assertEquals(4, supportedHdrTypes.size());
     }
 
     // Test parsing invalid xml with wrong tag expect UnsupportedOperationException
@@ -243,8 +272,9 @@
     }
 
     // Test unspecified codec type.
-    // VP9 is not declare in the XML which leads to isFormatSpecified return false.
+    // AV1 is not declare in the XML which leads to isFormatSpecified return false.
     //    <format android:name="HEVC" supported="true"/>
+    //    <format android:name="VP9" supported="false"/>
     //    <format android:name="HDR10" supported="false"/>
     public void testUnspecifiedCodecMimetype() throws Exception {
         InputStream xmlIs = mContext.getAssets().open("MediaCapabilities.xml");
@@ -252,7 +282,7 @@
         parser.setInput(xmlIs, StandardCharsets.UTF_8.name());
         ApplicationMediaCapabilities capability = ApplicationMediaCapabilities.createFromXml(
                 parser);
-        assertFalse(capability.isFormatSpecified(MediaFormat.MIMETYPE_VIDEO_VP9));
+        assertFalse(capability.isFormatSpecified(MediaFormat.MIMETYPE_VIDEO_AV1));
         assertFalse(capability.isVideoMimeTypeSupported(MediaFormat.MIMETYPE_VIDEO_VP9));
     }
 
diff --git a/tests/tests/mediatranscoding/src/android/media/mediatranscoding/cts/MediaTranscodeManagerTest.java b/tests/tests/mediatranscoding/src/android/media/mediatranscoding/cts/MediaTranscodeManagerTest.java
index bda7f19..805086f 100644
--- a/tests/tests/mediatranscoding/src/android/media/mediatranscoding/cts/MediaTranscodeManagerTest.java
+++ b/tests/tests/mediatranscoding/src/android/media/mediatranscoding/cts/MediaTranscodeManagerTest.java
@@ -466,16 +466,18 @@
                         .setClientPid(pid)
                         .setClientUid(uid);
 
+        AssetFileDescriptor srcFd = null;
+        AssetFileDescriptor dstFd = null;
         if (testFileDescriptor) {
             // Open source Uri.
-            AssetFileDescriptor afd = mContentResolver.openAssetFileDescriptor(fileUri,
+            srcFd = mContentResolver.openAssetFileDescriptor(fileUri,
                     "r");
-            builder.setSourceFileDescriptor(afd.getParcelFileDescriptor());
+            builder.setSourceFileDescriptor(srcFd.getParcelFileDescriptor());
             // Open destination Uri
-            afd = mContentResolver.openAssetFileDescriptor(destinationUri, "rw");
-            builder.setDestinationFileDescriptor(afd.getParcelFileDescriptor());
+            dstFd = mContentResolver.openAssetFileDescriptor(destinationUri, "rw");
+            builder.setDestinationFileDescriptor(dstFd.getParcelFileDescriptor());
         }
-        TranscodingRequest request = builder.build();
+        VideoTranscodingRequest request = builder.build();
         Executor listenerExecutor = Executors.newSingleThreadExecutor();
         assertEquals(pid, request.getClientPid());
         assertEquals(uid, request.getClientUid());
@@ -492,6 +494,13 @@
                     transcodeCompleteSemaphore.release();
                 });
         assertNotNull(session);
+        assertTrue(compareFormat(videoTrackFormat, request.getVideoTrackFormat()));
+        assertEquals(fileUri, request.getSourceUri());
+        assertEquals(destinationUri, request.getDestinationUri());
+        if (testFileDescriptor) {
+            assertEquals(srcFd.getParcelFileDescriptor(), request.getSourceFileDescriptor());
+            assertEquals(dstFd.getParcelFileDescriptor(), request.getDestinationFileDescriptor());
+        }
 
         if (session != null) {
             Log.d(TAG, "testMediaTranscodeManager - Waiting for transcode to cancel.");
@@ -517,6 +526,10 @@
             }
         }
 
+        assertEquals(TranscodingSession.STATUS_FINISHED, session.getStatus());
+        assertEquals(TranscodingSession.RESULT_SUCCESS, session.getResult());
+        assertEquals(TranscodingSession.ERROR_NONE, session.getErrorCode());
+
         // TODO(hkuang): Validate the transcoded video's width and height, framerate.
 
         // Validates the transcoded video's psnr.
@@ -527,6 +540,17 @@
                 stats.mAveragePSNR >= PSNR_THRESHOLD);
     }
 
+    private boolean compareFormat(MediaFormat fmt1, MediaFormat fmt2) {
+        if (fmt1 == fmt2) return true;
+        if (fmt1 == null || fmt2 == null) return false;
+
+        return (fmt1.getString(MediaFormat.KEY_MIME) == fmt2.getString(MediaFormat.KEY_MIME) &&
+                fmt1.getInteger(MediaFormat.KEY_WIDTH) == fmt2.getInteger(MediaFormat.KEY_WIDTH) &&
+                fmt1.getInteger(MediaFormat.KEY_HEIGHT) == fmt2.getInteger(MediaFormat.KEY_HEIGHT)
+                && fmt1.getInteger(MediaFormat.KEY_BIT_RATE) == fmt2.getInteger(
+                MediaFormat.KEY_BIT_RATE));
+    }
+
     public void testCancelTranscoding() throws Exception {
         if (shouldSkip()) {
             return;
@@ -556,6 +580,8 @@
                 });
         assertNotNull(session);
 
+        assertTrue(session.getSessionId() != -1);
+
         // Wait for progress update before cancel the transcoding.
         session.setOnProgressUpdateListener(listenerExecutor,
                 new TranscodingSession.OnProgressUpdateListener() {
@@ -564,6 +590,7 @@
                         if (newProgress > 0) {
                             statusLatch.countDown();
                         }
+                        assertEquals(newProgress, session.getProgress());
                     }
                 });
 
@@ -573,6 +600,10 @@
         Log.d(TAG, "testMediaTranscodeManager - Waiting for transcode to cancel.");
         boolean finishedOnTime = transcodeCompleteSemaphore.tryAcquire(
                 30, TimeUnit.MILLISECONDS);
+
+        assertEquals(TranscodingSession.STATUS_FINISHED, session.getStatus());
+        assertEquals(TranscodingSession.RESULT_CANCELED, session.getResult());
+        assertEquals(TranscodingSession.ERROR_NONE, session.getErrorCode());
         assertTrue("Fails to cancel transcoding", finishedOnTime);
     }
 
diff --git a/tests/tests/neuralnetworks/Android.mk b/tests/tests/neuralnetworks/Android.mk
index abd6818..01cf38f 100644
--- a/tests/tests/neuralnetworks/Android.mk
+++ b/tests/tests/neuralnetworks/Android.mk
@@ -38,6 +38,7 @@
 
 LOCAL_SDK_VERSION := current
 LOCAL_NDK_STL_VARIANT := c++_static
+LOCAL_MIN_SDK_VERSION := 30
 
 include $(BUILD_CTS_EXECUTABLE)
 
diff --git a/tests/tests/neuralnetworks/AndroidManifest.xml b/tests/tests/neuralnetworks/AndroidManifest.xml
new file mode 100644
index 0000000..de2efbd
--- /dev/null
+++ b/tests/tests/neuralnetworks/AndroidManifest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.neuralnetworks">
+    <uses-sdk android:minSdkVersion="30" android:targetSdkVersion="31" />
+</manifest>
+
diff --git a/tests/tests/neuralnetworks/benchmark/Android.mk b/tests/tests/neuralnetworks/benchmark/Android.mk
index 7f67499..5e57c06 100644
--- a/tests/tests/neuralnetworks/benchmark/Android.mk
+++ b/tests/tests/neuralnetworks/benchmark/Android.mk
@@ -36,6 +36,6 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 LOCAL_ASSET_DIR := test/mlts/models/assets
 
-LOCAL_SDK_VERSION := current
+LOCAL_SDK_VERSION := 30
 
 include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/notificationlegacy/notificationlegacy29/Android.bp b/tests/tests/notificationlegacy/notificationlegacy29/Android.bp
index 179a1bd..0d01e20 100644
--- a/tests/tests/notificationlegacy/notificationlegacy29/Android.bp
+++ b/tests/tests/notificationlegacy/notificationlegacy29/Android.bp
@@ -34,7 +34,6 @@
     test_suites: [
         "cts",
         "general-tests",
-        "mts-extservices"
     ],
     sdk_version: "test_current",
     target_sdk_version: "29",
diff --git a/tests/tests/notificationlegacy/notificationlegacy29/AndroidTest.xml b/tests/tests/notificationlegacy/notificationlegacy29/AndroidTest.xml
index fbfd309..9421128 100644
--- a/tests/tests/notificationlegacy/notificationlegacy29/AndroidTest.xml
+++ b/tests/tests/notificationlegacy/notificationlegacy29/AndroidTest.xml
@@ -29,8 +29,4 @@
         <option name="runtime-hint" value="5m" />
         <option name="hidden-api-checks" value="false" />
     </test>
-
-    <object type="module_controller" class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
-        <option name="mainline-module-package-name" value="com.google.android.extservices" />
-    </object>
 </configuration>
diff --git a/tests/tests/os/src/android/os/cts/BuildTest.java b/tests/tests/os/src/android/os/cts/BuildTest.java
index 19e2479..b089a39 100644
--- a/tests/tests/os/src/android/os/cts/BuildTest.java
+++ b/tests/tests/os/src/android/os/cts/BuildTest.java
@@ -322,13 +322,14 @@
                         + " is invalid; must be at least VERSION_CODES.BASE",
                 Build.VERSION.SDK_INT >= Build.VERSION_CODES.BASE);
         assertTrue(
-                "First SDK version " + Build.VERSION.FIRST_SDK_INT
+                "First SDK version " + Build.VERSION.DEVICE_INITIAL_SDK_INT
                         + " is invalid; must be at least VERSION_CODES.BASE",
-                Build.VERSION.FIRST_SDK_INT >= Build.VERSION_CODES.BASE);
+                Build.VERSION.DEVICE_INITIAL_SDK_INT >= Build.VERSION_CODES.BASE);
         assertTrue(
                 "Current SDK version " + Build.VERSION.SDK_INT
-                        + " must be at least first SDK version " + Build.VERSION.FIRST_SDK_INT,
-                Build.VERSION.SDK_INT >= Build.VERSION.FIRST_SDK_INT);
+                        + " must be at least first SDK version "
+                        + Build.VERSION.DEVICE_INITIAL_SDK_INT,
+                Build.VERSION.SDK_INT >= Build.VERSION.DEVICE_INITIAL_SDK_INT);
     }
 
     /**
diff --git a/tests/tests/os/src/android/os/cts/CombinedVibrationEffectTest.java b/tests/tests/os/src/android/os/cts/CombinedVibrationTest.java
similarity index 67%
rename from tests/tests/os/src/android/os/cts/CombinedVibrationEffectTest.java
rename to tests/tests/os/src/android/os/cts/CombinedVibrationTest.java
index 90e38a7..8da9be8 100644
--- a/tests/tests/os/src/android/os/cts/CombinedVibrationEffectTest.java
+++ b/tests/tests/os/src/android/os/cts/CombinedVibrationTest.java
@@ -20,7 +20,7 @@
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.fail;
 
-import android.os.CombinedVibrationEffect;
+import android.os.CombinedVibration;
 import android.os.Parcel;
 import android.os.VibrationEffect;
 
@@ -34,60 +34,60 @@
 
 @SmallTest
 @RunWith(AndroidJUnit4.class)
-public class CombinedVibrationEffectTest {
+public class CombinedVibrationTest {
 
     private static final VibrationEffect TEST_EFFECT =
             VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
 
-    private static final CombinedVibrationEffect TEST_MONO =
-            CombinedVibrationEffect.createSynced(TEST_EFFECT);
-    private static final CombinedVibrationEffect TEST_STEREO =
-            CombinedVibrationEffect.startSynced()
+    private static final CombinedVibration TEST_MONO =
+            CombinedVibration.createParallel(TEST_EFFECT);
+    private static final CombinedVibration TEST_STEREO =
+            CombinedVibration.startParallel()
                     .addVibrator(1, TEST_EFFECT)
                     .addVibrator(2, TEST_EFFECT)
                     .combine();
-    private static final CombinedVibrationEffect TEST_SEQUENTIAL =
-            CombinedVibrationEffect.startSequential()
+    private static final CombinedVibration TEST_SEQUENTIAL =
+            CombinedVibration.startSequential()
                     .addNext(TEST_MONO)
                     .addNext(1, TEST_EFFECT, /* delay= */ 100)
                     .combine();
 
     @Test
-    public void testCreateSynced() {
-        CombinedVibrationEffect.Mono synced =
-                (CombinedVibrationEffect.Mono) CombinedVibrationEffect.createSynced(TEST_EFFECT);
-        assertEquals(TEST_EFFECT, synced.getEffect());
-        assertEquals(TEST_EFFECT.getDuration(), synced.getDuration());
+    public void testcreateParallel() {
+        CombinedVibration.Mono mono =
+                (CombinedVibration.Mono) CombinedVibration.createParallel(TEST_EFFECT);
+        assertEquals(TEST_EFFECT, mono.getEffect());
+        assertEquals(TEST_EFFECT.getDuration(), mono.getDuration());
     }
 
     @Test
-    public void testStartSynced() {
-        CombinedVibrationEffect.Stereo synced =
-                (CombinedVibrationEffect.Stereo) CombinedVibrationEffect.startSynced()
+    public void testStartParallel() {
+        CombinedVibration.Stereo stereo =
+                (CombinedVibration.Stereo) CombinedVibration.startParallel()
                         .addVibrator(1, TEST_EFFECT)
                         .combine();
-        assertEquals(1, synced.getEffects().size());
-        assertEquals(TEST_EFFECT, synced.getEffects().get(1));
-        assertEquals(TEST_EFFECT.getDuration(), synced.getDuration());
+        assertEquals(1, stereo.getEffects().size());
+        assertEquals(TEST_EFFECT, stereo.getEffects().get(1));
+        assertEquals(TEST_EFFECT.getDuration(), stereo.getDuration());
     }
 
     @Test
-    public void testStartSyncedEmptyCombinationIsInvalid() {
+    public void testStartParallelEmptyCombinationIsInvalid() {
         try {
-            CombinedVibrationEffect.startSynced().combine();
+            CombinedVibration.startParallel().combine();
             fail("Illegal combination, should throw IllegalStateException");
         } catch (IllegalStateException expected) {
         }
     }
 
     @Test
-    public void testSyncedEquals() {
-        CombinedVibrationEffect otherMono = CombinedVibrationEffect.createSynced(
+    public void testParallelEquals() {
+        CombinedVibration otherMono = CombinedVibration.createParallel(
                 VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
         assertEquals(TEST_MONO, otherMono);
         assertEquals(TEST_MONO.hashCode(), otherMono.hashCode());
 
-        CombinedVibrationEffect otherStereo = CombinedVibrationEffect.startSynced()
+        CombinedVibration otherStereo = CombinedVibration.startParallel()
                 .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
                 .addVibrator(2, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
                 .combine();
@@ -96,15 +96,15 @@
     }
 
     @Test
-    public void testSyncedNotEqualsDifferentEffect() {
-        CombinedVibrationEffect otherMono = CombinedVibrationEffect.createSynced(
+    public void testParallelNotEqualsDifferentEffect() {
+        CombinedVibration otherMono = CombinedVibration.createParallel(
                 VibrationEffect.get(VibrationEffect.EFFECT_TICK));
         assertNotEquals(TEST_MONO, otherMono);
     }
 
     @Test
-    public void testSyncedNotEqualsDifferentVibrators() {
-        CombinedVibrationEffect otherStereo = CombinedVibrationEffect.startSynced()
+    public void testParallelNotEqualsDifferentVibrators() {
+        CombinedVibration otherStereo = CombinedVibration.startParallel()
                 .addVibrator(5, TEST_EFFECT)
                 .combine();
         assertNotEquals(TEST_STEREO, otherStereo);
@@ -112,15 +112,15 @@
 
     @Test
     public void testCreateSequential() {
-        CombinedVibrationEffect.Sequential sequential =
-                (CombinedVibrationEffect.Sequential) CombinedVibrationEffect.startSequential()
+        CombinedVibration.Sequential sequential =
+                (CombinedVibration.Sequential) CombinedVibration.startSequential()
                         .addNext(TEST_MONO)
                         .addNext(TEST_STEREO, /* delay= */ 100)
                         .addNext(1, TEST_EFFECT)
                         .combine();
         assertEquals(
                 Arrays.asList(TEST_MONO, TEST_STEREO,
-                        CombinedVibrationEffect.startSynced().addVibrator(1,
+                        CombinedVibration.startParallel().addVibrator(1,
                                 TEST_EFFECT).combine()),
                 sequential.getEffects());
         assertEquals(-1, sequential.getDuration());
@@ -129,7 +129,7 @@
     @Test
     public void testStartSequentialEmptyCombinationIsInvalid() {
         try {
-            CombinedVibrationEffect.startSequential().combine();
+            CombinedVibration.startSequential().combine();
             fail("Illegal combination, should throw IllegalStateException");
         } catch (IllegalStateException expected) {
         }
@@ -137,8 +137,8 @@
 
     @Test
     public void testSequentialEquals() {
-        CombinedVibrationEffect otherSequential =
-                CombinedVibrationEffect.startSequential()
+        CombinedVibration otherSequential =
+                CombinedVibration.startSequential()
                         .addNext(TEST_MONO)
                         .addNext(1, TEST_EFFECT, /* delay= */ 100)
                         .combine();
@@ -148,8 +148,8 @@
 
     @Test
     public void testSequentialNotEqualsDifferentEffects() {
-        CombinedVibrationEffect otherSequential =
-                CombinedVibrationEffect.startSequential()
+        CombinedVibration otherSequential =
+                CombinedVibration.startSequential()
                         .addNext(TEST_STEREO)
                         .combine();
         assertNotEquals(TEST_SEQUENTIAL, otherSequential);
@@ -157,8 +157,8 @@
 
     @Test
     public void testSequentialNotEqualsDifferentOrder() {
-        CombinedVibrationEffect otherSequential =
-                CombinedVibrationEffect.startSequential()
+        CombinedVibration otherSequential =
+                CombinedVibration.startSequential()
                         .addNext(1, TEST_EFFECT, /* delay= */ 100)
                         .addNext(TEST_MONO)
                         .combine();
@@ -167,8 +167,8 @@
 
     @Test
     public void testSequentialNotEqualsDifferentDelays() {
-        CombinedVibrationEffect otherSequential =
-                CombinedVibrationEffect.startSequential()
+        CombinedVibration otherSequential =
+                CombinedVibration.startSequential()
                         .addNext(TEST_MONO)
                         .addNext(1, TEST_EFFECT, /* delay= */ 1)
                         .combine();
@@ -177,8 +177,8 @@
 
     @Test
     public void testSequentialNotEqualsDifferentVibrator() {
-        CombinedVibrationEffect otherSequential =
-                CombinedVibrationEffect.startSequential()
+        CombinedVibration otherSequential =
+                CombinedVibration.startSequential()
                         .addNext(TEST_MONO)
                         .addNext(5, TEST_EFFECT, /* delay= */ 100)
                         .combine();
@@ -186,20 +186,20 @@
     }
 
     @Test
-    public void testParcelingSyncedMono() {
+    public void testParcelingParallelMono() {
         Parcel p = Parcel.obtain();
         TEST_MONO.writeToParcel(p, 0);
         p.setDataPosition(0);
-        CombinedVibrationEffect parceled = CombinedVibrationEffect.CREATOR.createFromParcel(p);
+        CombinedVibration parceled = CombinedVibration.CREATOR.createFromParcel(p);
         assertEquals(TEST_MONO, parceled);
     }
 
     @Test
-    public void testParcelingSyncedStereo() {
+    public void testParcelingParallelStereo() {
         Parcel p = Parcel.obtain();
         TEST_STEREO.writeToParcel(p, 0);
         p.setDataPosition(0);
-        CombinedVibrationEffect parceled = CombinedVibrationEffect.CREATOR.createFromParcel(p);
+        CombinedVibration parceled = CombinedVibration.CREATOR.createFromParcel(p);
         assertEquals(TEST_STEREO, parceled);
     }
 
@@ -208,7 +208,7 @@
         Parcel p = Parcel.obtain();
         TEST_SEQUENTIAL.writeToParcel(p, 0);
         p.setDataPosition(0);
-        CombinedVibrationEffect parceled = CombinedVibrationEffect.CREATOR.createFromParcel(p);
+        CombinedVibration parceled = CombinedVibration.CREATOR.createFromParcel(p);
         assertEquals(TEST_SEQUENTIAL, parceled);
     }
 
@@ -227,15 +227,15 @@
     }
 
     @Test
-    public void testSyncedMonoCombinationDuration() {
-        CombinedVibrationEffect effect = CombinedVibrationEffect.createSynced(
+    public void testParallelMonoCombinationDuration() {
+        CombinedVibration effect = CombinedVibration.createParallel(
                 VibrationEffect.createOneShot(100, 100));
         assertEquals(100, effect.getDuration());
     }
 
     @Test
-    public void testSyncedStereoCombinationDuration() {
-        CombinedVibrationEffect effect = CombinedVibrationEffect.startSynced()
+    public void testParallelStereoCombinationDuration() {
+        CombinedVibration effect = CombinedVibration.startParallel()
                 .addVibrator(1, VibrationEffect.createOneShot(1, 100))
                 .addVibrator(2, VibrationEffect.createOneShot(100, 100))
                 .addVibrator(3, VibrationEffect.createOneShot(10, 100))
@@ -244,8 +244,8 @@
     }
 
     @Test
-    public void testSyncedCombinationUnknownDuration() {
-        CombinedVibrationEffect effect = CombinedVibrationEffect.startSynced()
+    public void testParallelCombinationUnknownDuration() {
+        CombinedVibration effect = CombinedVibration.startParallel()
                 .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
                 .addVibrator(2, VibrationEffect.createOneShot(100, 100))
                 .combine();
@@ -253,8 +253,8 @@
     }
 
     @Test
-    public void testSyncedCombinationRepeatingDuration() {
-        CombinedVibrationEffect effect = CombinedVibrationEffect.startSynced()
+    public void testParallelCombinationRepeatingDuration() {
+        CombinedVibration effect = CombinedVibration.startParallel()
                 .addVibrator(1, VibrationEffect.createWaveform(new long[]{1}, new int[]{1}, 0))
                 .addVibrator(2, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
                 .addVibrator(3, VibrationEffect.createOneShot(100, 100))
@@ -264,7 +264,7 @@
 
     @Test
     public void testSequentialCombinationDuration() {
-        CombinedVibrationEffect effect = CombinedVibrationEffect.startSequential()
+        CombinedVibration effect = CombinedVibration.startSequential()
                 .addNext(1, VibrationEffect.createOneShot(10, 100), /* delay= */ 1)
                 .addNext(1, VibrationEffect.createOneShot(10, 100), /* delay= */ 1)
                 .addNext(1, VibrationEffect.createOneShot(10, 100), /* delay= */ 1)
@@ -274,7 +274,7 @@
 
     @Test
     public void testSequentialCombinationUnknownDuration() {
-        CombinedVibrationEffect effect = CombinedVibrationEffect.startSequential()
+        CombinedVibration effect = CombinedVibration.startSequential()
                 .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
                 .addNext(1, VibrationEffect.createOneShot(100, 100))
                 .combine();
@@ -283,7 +283,7 @@
 
     @Test
     public void testSequentialCombinationRepeatingDuration() {
-        CombinedVibrationEffect effect = CombinedVibrationEffect.startSequential()
+        CombinedVibration effect = CombinedVibration.startSequential()
                 .addNext(1, VibrationEffect.createWaveform(new long[]{1}, new int[]{1}, 0))
                 .addNext(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
                 .addNext(1, VibrationEffect.createOneShot(100, 100))
diff --git a/tests/tests/os/src/android/os/cts/PerformanceHintManagerTest.java b/tests/tests/os/src/android/os/cts/PerformanceHintManagerTest.java
new file mode 100644
index 0000000..b47ebe8
--- /dev/null
+++ b/tests/tests/os/src/android/os/cts/PerformanceHintManagerTest.java
@@ -0,0 +1,116 @@
+/*
+ * 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 android.os.cts;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeNotNull;
+
+import android.os.PerformanceHintManager;
+import android.os.PerformanceHintManager.Session;
+import android.os.Process;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class PerformanceHintManagerTest {
+    private final long DEFAULT_TARGET_NS = 16666666L;
+    private PerformanceHintManager mPerformanceHintManager;
+
+    @Before
+    public void setUp() {
+        mPerformanceHintManager =
+                InstrumentationRegistry.getInstrumentation().getContext().getSystemService(
+                        PerformanceHintManager.class);
+    }
+
+    private Session createSession() {
+        return mPerformanceHintManager.createHintSession(
+                new int[]{Process.myPid()}, DEFAULT_TARGET_NS);
+    }
+
+    @Test
+    public void testCreateHintSession() {
+        Session a = createSession();
+        Session b = createSession();
+        if (a == null) {
+            assertNull(b);
+        } else {
+            assertNotEquals(a, b);
+        }
+    }
+
+    @Test
+    public void testGetPreferredUpdateRateNanos() {
+        if (createSession() != null) {
+            assertTrue(mPerformanceHintManager.getPreferredUpdateRateNanos() > 0);
+        } else {
+            assertEquals(-1, mPerformanceHintManager.getPreferredUpdateRateNanos());
+        }
+    }
+
+    @Test
+    public void testUpdateTargetWorkDuration() {
+        Session s = createSession();
+        assumeNotNull(s);
+        s.updateTargetWorkDuration(100);
+    }
+
+    @Test
+    public void testUpdateTargetWorkDurationWithNegativeDuration() {
+        Session s = createSession();
+        assumeNotNull(s);
+        assertThrows(IllegalArgumentException.class, () -> {
+            s.updateTargetWorkDuration(-1);
+        });
+    }
+
+    @Test
+    public void testReportActualWorkDuration() {
+        Session s = createSession();
+        assumeNotNull(s);
+        s.updateTargetWorkDuration(100);
+        s.reportActualWorkDuration(1);
+        s.reportActualWorkDuration(100);
+        s.reportActualWorkDuration(1000);
+    }
+
+    @Test
+    public void testReportActualWorkDurationWithIllegalArgument() {
+        Session s = createSession();
+        assumeNotNull(s);
+        s.updateTargetWorkDuration(100);
+        assertThrows(IllegalArgumentException.class, () -> {
+            s.reportActualWorkDuration(-1);
+        });
+    }
+
+    @Test
+    public void testCloseHintSession() {
+        Session s = createSession();
+        assumeNotNull(s);
+        s.close();
+    }
+}
diff --git a/tests/tests/os/src/android/os/cts/VibratorManagerTest.java b/tests/tests/os/src/android/os/cts/VibratorManagerTest.java
index ee7f974..398938bb 100644
--- a/tests/tests/os/src/android/os/cts/VibratorManagerTest.java
+++ b/tests/tests/os/src/android/os/cts/VibratorManagerTest.java
@@ -27,7 +27,7 @@
 import static org.mockito.Mockito.timeout;
 import static org.mockito.Mockito.verify;
 
-import android.os.CombinedVibrationEffect;
+import android.os.CombinedVibration;
 import android.os.SystemClock;
 import android.os.VibrationAttributes;
 import android.os.VibrationEffect;
@@ -98,7 +98,7 @@
 
     @Test
     public void testCancel() {
-        mVibratorManager.vibrate(CombinedVibrationEffect.createSynced(
+        mVibratorManager.vibrate(CombinedVibration.createParallel(
                 VibrationEffect.createOneShot(10_000, VibrationEffect.DEFAULT_AMPLITUDE)));
         assertStartsVibrating();
 
@@ -111,18 +111,18 @@
     public void testVibrateOneShot() {
         VibrationEffect oneShot =
                 VibrationEffect.createOneShot(300, VibrationEffect.DEFAULT_AMPLITUDE);
-        mVibratorManager.vibrate(CombinedVibrationEffect.createSynced(oneShot));
+        mVibratorManager.vibrate(CombinedVibration.createParallel(oneShot));
         assertStartsThenStopsVibrating(300);
 
         oneShot = VibrationEffect.createOneShot(500, 255 /* Max amplitude */);
-        mVibratorManager.vibrate(CombinedVibrationEffect.createSynced(oneShot));
+        mVibratorManager.vibrate(CombinedVibration.createParallel(oneShot));
         assertStartsVibrating();
 
         mVibratorManager.cancel();
         assertStopsVibrating();
 
         oneShot = VibrationEffect.createOneShot(100, 1 /* Min amplitude */);
-        mVibratorManager.vibrate(CombinedVibrationEffect.createSynced(oneShot),
+        mVibratorManager.vibrate(CombinedVibration.createParallel(oneShot),
                 VIBRATION_ATTRIBUTES);
         assertStartsVibrating();
     }
@@ -133,11 +133,11 @@
         final long[] timings = new long[]{100, 200, 300, 400, 500};
         final int[] amplitudes = new int[]{64, 128, 255, 128, 64};
         VibrationEffect waveform = VibrationEffect.createWaveform(timings, amplitudes, -1);
-        mVibratorManager.vibrate(CombinedVibrationEffect.createSynced(waveform));
+        mVibratorManager.vibrate(CombinedVibration.createParallel(waveform));
         assertStartsThenStopsVibrating(1500);
 
         waveform = VibrationEffect.createWaveform(timings, amplitudes, 0);
-        mVibratorManager.vibrate(CombinedVibrationEffect.createSynced(waveform));
+        mVibratorManager.vibrate(CombinedVibration.createParallel(waveform));
         assertStartsVibrating();
 
         mVibratorManager.cancel();
@@ -157,7 +157,7 @@
         for (int vibratorId : vibratorIds) {
             Vibrator vibrator = mVibratorManager.getVibrator(vibratorId);
             mVibratorManager.vibrate(
-                    CombinedVibrationEffect.startSynced()
+                    CombinedVibration.startParallel()
                             .addVibrator(vibratorId, oneShot)
                             .combine());
             assertStartsVibrating(vibratorId);
diff --git a/tests/tests/permission/src/android/permission/cts/NfcPermissionTest.java b/tests/tests/permission/src/android/permission/cts/NfcPermissionTest.java
index a45fbf8..d9819a6 100644
--- a/tests/tests/permission/src/android/permission/cts/NfcPermissionTest.java
+++ b/tests/tests/permission/src/android/permission/cts/NfcPermissionTest.java
@@ -19,24 +19,46 @@
 import static android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON;
 
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
 
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.nfc.NfcAdapter;
+import android.nfc.NfcAdapter.ControllerAlwaysOnListener;
 import android.os.Process;
+import android.platform.test.annotations.AppModeFull;
 
 import androidx.test.InstrumentationRegistry;
 
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.concurrent.Executor;
 import java.util.stream.Collectors;
 
 @RunWith(JUnit4.class)
 public final class NfcPermissionTest {
 
+    private NfcAdapter mNfcAdapter;
+
+    private boolean supportsHardware() {
+        final PackageManager pm = InstrumentationRegistry.getContext().getPackageManager();
+        return pm.hasSystemFeature(PackageManager.FEATURE_NFC);
+    }
+
+    @Before
+    public void setUp() {
+        assumeTrue(supportsHardware());
+        mNfcAdapter = NfcAdapter.getDefaultAdapter(InstrumentationRegistry.getTargetContext());
+    }
+
+    /**
+     * Verifies that there's only one dedicated app holds the NfcSetControllerAlwaysOnPermission.
+     */
     @Test
     public void testNfcSetControllerAlwaysOnPermission() {
         PackageManager pm = InstrumentationRegistry.getContext().getPackageManager();
@@ -63,4 +85,103 @@
                      + "NFC_SET_CONTROLLER_ALWAYS_ON permission.");
         }
     }
+
+    /**
+     * Verifies that isControllerAlwaysOnSupported() requires Permission.
+     * <p>
+     * Requires Permission: {@link android.Manifest.permission#NFC_SET_CONTROLLER_ALWAYS_ON}.
+     */
+    @Test
+    @AppModeFull
+    public void testIsControllerAlwaysOnSupported() {
+        try {
+            mNfcAdapter.isControllerAlwaysOnSupported();
+            fail("mNfcAdapter.isControllerAlwaysOnSupported() did not throw SecurityException"
+                    + " as expected");
+        } catch (SecurityException se) {
+            // Expected Exception
+        }
+    }
+
+    /**
+     * Verifies that isControllerAlwaysOn() requires Permission.
+     * <p>
+     * Requires Permission: {@link android.Manifest.permission#NFC_SET_CONTROLLER_ALWAYS_ON}.
+     */
+    @Test
+    @AppModeFull
+    public void testIsControllerAlwaysOn() {
+        try {
+            mNfcAdapter.isControllerAlwaysOn();
+            fail("mNfcAdapter.isControllerAlwaysOn() did not throw SecurityException"
+                    + " as expected");
+        } catch (SecurityException se) {
+            // Expected Exception
+        }
+    }
+
+    /**
+     * Verifies that setControllerAlwaysOn(true) requires Permission.
+     * <p>
+     * Requires Permission: {@link android.Manifest.permission#NFC_SET_CONTROLLER_ALWAYS_ON}.
+     */
+    @Test
+    @AppModeFull
+    public void testSetControllerAlwaysOnTrue() {
+        try {
+            mNfcAdapter.setControllerAlwaysOn(true);
+            fail("mNfcAdapter.setControllerAlwaysOn(true) did not throw SecurityException"
+                    + " as expected");
+        } catch (SecurityException se) {
+            // Expected Exception
+        }
+    }
+
+    /**
+     * Verifies that setControllerAlwaysOn(false) requires Permission.
+     * <p>
+     * Requires Permission: {@link android.Manifest.permission#NFC_SET_CONTROLLER_ALWAYS_ON}.
+     */
+    @Test
+    @AppModeFull
+    public void testSetControllerAlwaysOnFalse() {
+        try {
+            mNfcAdapter.setControllerAlwaysOn(false);
+            fail("mNfcAdapter.setControllerAlwaysOn(true) did not throw SecurityException"
+                    + " as expected");
+        } catch (SecurityException se) {
+            // Expected Exception
+        }
+    }
+
+    /**
+     * Verifies that registerControllerAlwaysOnListener() requires Permission.
+     * <p>
+     * Requires Permission: {@link android.Manifest.permission#NFC_SET_CONTROLLER_ALWAYS_ON}.
+     */
+    @Test
+    @AppModeFull
+    public void testRegisterControllerAlwaysOnListener() {
+        try {
+            mNfcAdapter.registerControllerAlwaysOnListener(
+                    new SynchronousExecutor(), new AlwaysOnStateListener());
+            fail("mNfcAdapter.registerControllerAlwaysOnListener did not throw"
+                    + "SecurityException as expected");
+        } catch (SecurityException se) {
+            // Expected Exception
+        }
+    }
+
+    private class SynchronousExecutor implements Executor {
+        public void execute(Runnable r) {
+            r.run();
+        }
+    }
+
+    private class AlwaysOnStateListener implements ControllerAlwaysOnListener {
+        @Override
+        public void onControllerAlwaysOnChanged(boolean isEnabled) {
+            // Do nothing
+        }
+    }
 }
diff --git a/tests/tests/permission2/res/raw/android_manifest.xml b/tests/tests/permission2/res/raw/android_manifest.xml
index 4749ab6..bbfaf17 100644
--- a/tests/tests/permission2/res/raw/android_manifest.xml
+++ b/tests/tests/permission2/res/raw/android_manifest.xml
@@ -4099,6 +4099,15 @@
     <permission android:name="com.android.permission.INSTALL_EXISTING_PACKAGES"
         android:protectionLevel="signature|privileged" />
 
+    <!-- Allows an application to use the package installer v2 APIs.
+         <p>The package installer v2 APIs are still a work in progress and we're
+         currently validating they work in all scenarios.
+         <p>Not for use by third-party applications.
+         @hide
+    -->
+    <permission android:name="com.android.permission.USE_INSTALLER_V2"
+        android:protectionLevel="signature|installer" />
+
     <!-- Allows an application to use System Data Loaders.
          <p>Not for use by third-party applications.
          @hide
@@ -5673,12 +5682,12 @@
     <permission android:name="android.permission.CONTROL_DEVICE_STATE"
                 android:protectionLevel="signature" />
 
-    <!-- Must be required by a
-        {@link android.service.displayhash.DisplayHasherService}
+    <!-- @hide @SystemApi Must be required by a
+        {@link android.service.displayhash.DisplayHashingService}
         to ensure that only the system can bind to it.
-        @hide This is not a third-party API (intended for OEMs and system apps).
+        This is not a third-party API (intended for OEMs and system apps).
     -->
-    <permission android:name="android.permission.BIND_DISPLAY_HASHER_SERVICE"
+    <permission android:name="android.permission.BIND_DISPLAY_HASHING_SERVICE"
         android:protectionLevel="signature" />
 
     <!-- @hide @TestApi Allows an application to enable/disable toast rate limiting.
diff --git a/tests/tests/preference/AndroidTest.xml b/tests/tests/preference/AndroidTest.xml
index 625ff4d..09741b9 100644
--- a/tests/tests/preference/AndroidTest.xml
+++ b/tests/tests/preference/AndroidTest.xml
@@ -34,10 +34,4 @@
         <option name="collect-on-run-ended-only" value="true" />
         <option name="clean-up" value="false" />
     </metrics_collector>
-    <!-- Automotive tests run on user 10 -->
-    <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
-        <option name="directory-keys" value="/storage/emulated/10/CtsPreferenceTestCases" />
-        <option name="collect-on-run-ended-only" value="true" />
-        <option name="clean-up" value="false" />
-    </metrics_collector>
 </configuration>
diff --git a/tests/tests/provider/src/android/provider/cts/contacts/CallLogTest.java b/tests/tests/provider/src/android/provider/cts/contacts/CallLogTest.java
index 1de465e..b836871 100644
--- a/tests/tests/provider/src/android/provider/cts/contacts/CallLogTest.java
+++ b/tests/tests/provider/src/android/provider/cts/contacts/CallLogTest.java
@@ -168,7 +168,8 @@
         Pair<Uri, CallLog.CallComposerLoggingException> result;
         try (InputStream inputStream =
                      context.getResources().openRawResource(R.drawable.testimage)) {
-            CallLog.storeCallComposerPictureAsUser(context, android.os.Process.myUserHandle(),
+            CallLog.storeCallComposerPicture(
+                    context.createContextAsUser(android.os.Process.myUserHandle(), 0),
                     inputStream,
                     Executors.newSingleThreadExecutor(),
                     new OutcomeReceiver<Uri, CallLog.CallComposerLoggingException>() {
diff --git a/tests/tests/provider/src/android/provider/cts/media/MediaStoreTest.java b/tests/tests/provider/src/android/provider/cts/media/MediaStoreTest.java
index 949b691..ed33af8 100644
--- a/tests/tests/provider/src/android/provider/cts/media/MediaStoreTest.java
+++ b/tests/tests/provider/src/android/provider/cts/media/MediaStoreTest.java
@@ -212,7 +212,7 @@
         final ProviderInfo legacy = getContext().getPackageManager()
                 .resolveContentProvider(MediaStore.AUTHORITY_LEGACY, 0);
         if (legacy == null) {
-            if (Build.VERSION.FIRST_SDK_INT >= Build.VERSION_CODES.R) {
+            if (Build.VERSION.DEVICE_INITIAL_SDK_INT >= Build.VERSION_CODES.R) {
                 // If we're a brand new device, we don't require a legacy
                 // provider, since there's nothing to upgrade
                 return;
diff --git a/tests/tests/shortcutmanager/src/android/content/pm/cts/shortcutmanager/ShortcutManagerClientApiTest.java b/tests/tests/shortcutmanager/src/android/content/pm/cts/shortcutmanager/ShortcutManagerClientApiTest.java
index 49c0354..a1475ff 100644
--- a/tests/tests/shortcutmanager/src/android/content/pm/cts/shortcutmanager/ShortcutManagerClientApiTest.java
+++ b/tests/tests/shortcutmanager/src/android/content/pm/cts/shortcutmanager/ShortcutManagerClientApiTest.java
@@ -25,14 +25,21 @@
 import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.setDefaultLauncher;
 
 import android.app.PendingIntent;
+import android.app.appsearch.AppSearchManager;
+import android.app.appsearch.SearchResult;
+import android.app.appsearch.SearchSpec;
 import android.content.ComponentName;
 import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
 import android.content.pm.ShortcutInfo;
 import android.content.pm.ShortcutManager;
+import android.content.pm.Signature;
 import android.graphics.BitmapFactory;
 import android.graphics.drawable.Icon;
 import android.net.Uri;
 import android.test.suitebuilder.annotation.SmallTest;
+import android.util.ArraySet;
 
 import com.android.compatibility.common.util.CddTest;
 
@@ -42,6 +49,13 @@
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
 
 /**
  * Tests for {@link ShortcutManager} and {@link ShortcutInfo}.
@@ -1414,6 +1428,62 @@
         });
     }
 
+    public void testUpdateShortcutVisibility_GrantShortcutAccess() throws Exception {
+        final List<byte[]> certs = new ArrayList<>(1);
+
+        // retrieve cert from package1
+        runWithCallerWithStrictMode(mPackageContext1, () -> {
+            try {
+                final PackageManager pm = mPackageContext1.getPackageManager();
+                final String pkgName = mPackageContext1.getPackageName();
+                PackageInfo packageInfo = pm.getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);
+                for (Signature signature : packageInfo.signatures) {
+                    MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
+                    certs.add(sha256.digest(signature.toByteArray()));
+                }
+            } catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) {
+            }
+        });
+
+        // Push shortcuts for package2 and make them visible to package1
+        runWithCallerWithStrictMode(mPackageContext2, () -> {
+            final ShortcutManager manager = getManager();
+            for (byte[] cert : certs) {
+                manager.updateShortcutVisibility(mPackageContext1.getPackageName(), cert, true);
+            }
+            assertTrue(manager.setDynamicShortcuts(list(
+                    makeShortcut("s1", "1a"),
+                    makeShortcut("s2", "2a"),
+                    makeShortcut("s3", "3a"))));
+        });
+
+        // Verify package1 can see these shortcuts
+        final Executor executor = Executors.newSingleThreadExecutor();
+        runWithCallerWithStrictMode(mPackageContext1, () -> {
+            final AppSearchManager apm = mPackageContext1.getSystemService(
+                    AppSearchManager.class);
+            apm.createGlobalSearchSession(executor, res -> {
+                        assertTrue(res.getErrorMessage(), res.isSuccess());
+                        res.getResultValue().search("", new SearchSpec.Builder()
+                                .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY).build()
+                        ).getNextPage(executor, page -> {
+                            assertTrue(page.getErrorMessage(), page.isSuccess());
+                            final List<SearchResult> results = page.getResultValue();
+                            final Set<String> shortcuts =
+                                    new ArraySet<>(results.size());
+                            for (SearchResult result : results) {
+                                shortcuts.add(result.getGenericDocument().getUri());
+                            }
+                            final Set<String> expected = new ArraySet<>(3);
+                            expected.add("s1");
+                            expected.add("s2");
+                            expected.add("s3");
+                            assertEquals("Unexpected results", expected, shortcuts);
+                        });
+                    });
+        });
+    }
+
     public void testDisableAndEnableShortcut() {
         runWithCallerWithStrictMode(mPackageContext1, () -> {
             assertTrue(getManager().setDynamicShortcuts(list(
diff --git a/tests/tests/shortcutmanager/src/android/content/pm/cts/shortcutmanager/ShortcutManagerConfigActivityTest.java b/tests/tests/shortcutmanager/src/android/content/pm/cts/shortcutmanager/ShortcutManagerConfigActivityTest.java
index cc8df51..5947c39 100644
--- a/tests/tests/shortcutmanager/src/android/content/pm/cts/shortcutmanager/ShortcutManagerConfigActivityTest.java
+++ b/tests/tests/shortcutmanager/src/android/content/pm/cts/shortcutmanager/ShortcutManagerConfigActivityTest.java
@@ -17,8 +17,12 @@
 
 import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.*;
 
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
 import android.app.Activity;
 import android.app.Instrumentation;
+import android.content.ComponentName;
 import android.content.Intent;
 import android.content.IntentSender;
 import android.content.pm.LauncherActivityInfo;
@@ -58,6 +62,22 @@
         });
     }
 
+    public void testIntentSenderNotCreatedForWrongActivity() throws Throwable {
+        setDefaultLauncher(getInstrumentation(), mLauncherContext1);
+        runWithCallerWithStrictMode(mLauncherContext1, () -> {
+            LauncherActivityInfo originalLai = getConfigActivity();
+            assertNotNull(originalLai);
+
+            LauncherActivityInfo lai = spy(originalLai);
+            assertNotNull(lai);
+            doReturn(new ComponentName(getTestContext(), MyActivity.class))
+                    .when(lai).getComponentName();
+            doReturn(originalLai.getUser()).when(lai).getUser();
+
+            assertNull(getLauncherApps().getShortcutConfigActivityIntent(lai));
+        });
+    }
+
     public void testCorrectIntentSenderCreated() throws Throwable {
         setDefaultLauncher(getInstrumentation(), mLauncherContext1);
         final AtomicReference<IntentSender> sender = new AtomicReference<>();
diff --git a/tests/tests/simpleperf/Android.mk b/tests/tests/simpleperf/Android.mk
index 351ff22..23e9245 100644
--- a/tests/tests/simpleperf/Android.mk
+++ b/tests/tests/simpleperf/Android.mk
@@ -21,7 +21,7 @@
   libsimpleperf_etm_decoder \
   libbacktrace \
   libunwindstack \
-  libdexfile_external_static \
+  libdexfile_static \
   libziparchive \
   libz \
   libgtest \
diff --git a/tests/tests/telecom/AndroidManifest.xml b/tests/tests/telecom/AndroidManifest.xml
index e88a5ca..ad9f709 100644
--- a/tests/tests/telecom/AndroidManifest.xml
+++ b/tests/tests/telecom/AndroidManifest.xml
@@ -40,6 +40,8 @@
     <uses-permission android:name="android.permission.MANAGE_ROLE_HOLDERS" />
     <uses-permission android:name="android.permission.MANAGE_USERS" />
     <uses-permission android:name="android.permission.REGISTER_SIM_SUBSCRIPTION" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
 
     <application>
         <uses-library android:name="android.test.runner"/>
diff --git a/tests/tests/telecom/src/android/telecom/cts/BaseTelecomTestWithMockServices.java b/tests/tests/telecom/src/android/telecom/cts/BaseTelecomTestWithMockServices.java
index 9f936f9..8c8cd05 100644
--- a/tests/tests/telecom/src/android/telecom/cts/BaseTelecomTestWithMockServices.java
+++ b/tests/tests/telecom/src/android/telecom/cts/BaseTelecomTestWithMockServices.java
@@ -26,6 +26,7 @@
 import static org.junit.Assert.assertThat;
 
 import android.app.AppOpsManager;
+import android.app.UiAutomation;
 import android.app.UiModeManager;
 import android.content.Context;
 import android.content.Intent;
@@ -40,6 +41,7 @@
 import android.os.Looper;
 import android.os.RemoteException;
 import android.os.Process;
+import android.os.UserHandle;
 import android.provider.CallLog;
 import android.telecom.Call;
 import android.telecom.CallAudioState;
@@ -62,6 +64,8 @@
 import android.util.Log;
 import android.util.Pair;
 
+import androidx.test.InstrumentationRegistry;
+
 import com.android.compatibility.common.util.ShellIdentityUtils;
 
 import java.util.ArrayList;
@@ -90,6 +94,9 @@
 
     public static final String TEST_EMERGENCY_NUMBER = "5553637";
     public static final Uri TEST_EMERGENCY_URI = Uri.fromParts("tel", TEST_EMERGENCY_NUMBER, null);
+    public static final String PKG_NAME = "android.telecom.cts";
+    public static final String PERMISSION_PROCESS_OUTGOING_CALLS =
+            "android.permission.PROCESS_OUTGOING_CALLS";
 
     Context mContext;
     TelecomManager mTelecomManager;
@@ -295,6 +302,10 @@
                 (tm) -> tm.registerTelephonyCallback(
                         mTelephonyCallbackHandler::post,
                         mTelephonyCallback));
+        UiAutomation uiAutomation =
+                InstrumentationRegistry.getInstrumentation().getUiAutomation();
+        uiAutomation.grantRuntimePermissionAsUser(PKG_NAME, PERMISSION_PROCESS_OUTGOING_CALLS,
+                UserHandle.CURRENT);
     }
 
     @Override
@@ -324,6 +335,10 @@
             TestUtils.executeShellCommand(getInstrumentation(), "telecom cleanup-stuck-calls");
             throw t;
         }
+        UiAutomation uiAutomation =
+                InstrumentationRegistry.getInstrumentation().getUiAutomation();
+        uiAutomation.revokeRuntimePermissionAsUser(PKG_NAME, PERMISSION_PROCESS_OUTGOING_CALLS,
+                UserHandle.CURRENT);
     }
 
     protected PhoneAccount setupConnectionService(MockConnectionService connectionService,
diff --git a/tests/tests/telecom/src/android/telecom/cts/ThirdPartyCallScreeningServiceTest.java b/tests/tests/telecom/src/android/telecom/cts/ThirdPartyCallScreeningServiceTest.java
index 6deea62..0b1903b 100644
--- a/tests/tests/telecom/src/android/telecom/cts/ThirdPartyCallScreeningServiceTest.java
+++ b/tests/tests/telecom/src/android/telecom/cts/ThirdPartyCallScreeningServiceTest.java
@@ -378,20 +378,23 @@
             contactUri = TestUtils.insertContact(mContentResolver,
                     TEST_OUTGOING_NUMBER.getSchemeSpecificPart());
         }
-        Bundle extras = new Bundle();
-        extras.putParcelable(TestUtils.EXTRA_PHONE_NUMBER, TEST_OUTGOING_NUMBER);
-        // Create a new outgoing call.
-        placeAndVerifyCall(extras);
 
-        if (addContact) {
-            assertEquals(1, TestUtils.deleteContact(mContentResolver, contactUri));
+        try {
+            Bundle extras = new Bundle();
+            extras.putParcelable(TestUtils.EXTRA_PHONE_NUMBER, TEST_OUTGOING_NUMBER);
+            // Create a new outgoing call.
+            placeAndVerifyCall(extras);
+
+            mInCallCallbacks.getService().disconnectAllCalls();
+            assertNumCalls(mInCallCallbacks.getService(), 0);
+
+            // Wait for it to log.
+            callLogEntryLatch.await(ASYNC_TIMEOUT, TimeUnit.MILLISECONDS);
+        } finally {
+            if (addContact) {
+                assertEquals(1, TestUtils.deleteContact(mContentResolver, contactUri));
+            }
         }
-
-        mInCallCallbacks.getService().disconnectAllCalls();
-        assertNumCalls(mInCallCallbacks.getService(), 0);
-
-        // Wait for it to log.
-        callLogEntryLatch.await(ASYNC_TIMEOUT, TimeUnit.MILLISECONDS);
     }
 
     private Uri addIncoming(boolean disconnectImmediately, boolean addContact) throws Exception {
diff --git a/tests/tests/telecom/src/android/telecom/cts/carmodetestapp/CtsCarModeInCallService.java b/tests/tests/telecom/src/android/telecom/cts/carmodetestapp/CtsCarModeInCallService.java
index 0635754..13d34ba 100644
--- a/tests/tests/telecom/src/android/telecom/cts/carmodetestapp/CtsCarModeInCallService.java
+++ b/tests/tests/telecom/src/android/telecom/cts/carmodetestapp/CtsCarModeInCallService.java
@@ -36,8 +36,8 @@
     private static boolean sIsServiceUnbound = false;
     private static CtsCarModeInCallService sInstance = null;
     private int mCallCount = 0;
-    private static CountDownLatch sBoundLatch = new CountDownLatch(1);;
-    private static CountDownLatch sUnboundLatch = new CountDownLatch(1);;
+    private static CountDownLatch sBoundLatch = new CountDownLatch(1);
+    private static CountDownLatch sUnboundLatch = new CountDownLatch(1);
     private List<Call> mCalls = new ArrayList<>();
 
     @Override
diff --git a/tests/tests/telephony/current/EmbmsMiddlewareTestApp/src/android/telephony/cts/embmstestapp/CtsDownloadService.java b/tests/tests/telephony/current/EmbmsMiddlewareTestApp/src/android/telephony/cts/embmstestapp/CtsDownloadService.java
index e74c315..3d968b4 100644
--- a/tests/tests/telephony/current/EmbmsMiddlewareTestApp/src/android/telephony/cts/embmstestapp/CtsDownloadService.java
+++ b/tests/tests/telephony/current/EmbmsMiddlewareTestApp/src/android/telephony/cts/embmstestapp/CtsDownloadService.java
@@ -148,7 +148,9 @@
 
     private final MbmsDownloadServiceBase mDownloadServiceImpl = new MbmsDownloadServiceBase() {
         @Override
-        public int initialize(int subscriptionId, MbmsDownloadSessionCallback callback) {
+        public int initialize(int subscriptionId, MbmsDownloadSessionCallback callback)
+                throws RemoteException {
+            super.initialize(subscriptionId, callback); // noop to placate the coverage tool
             Bundle b = new Bundle();
             b.putString(METHOD_NAME, METHOD_INITIALIZE);
             b.putInt(ARGUMENT_SUBSCRIPTION_ID, subscriptionId);
@@ -182,7 +184,11 @@
         }
 
         @Override
-        public int requestUpdateFileServices(int subscriptionId, List<String> serviceClasses) {
+        public int requestUpdateFileServices(int subscriptionId, List<String> serviceClasses)
+                throws RemoteException {
+            // noop to placate the coverage tool
+            super.requestUpdateFileServices(subscriptionId, serviceClasses);
+
             Bundle b = new Bundle();
             b.putString(METHOD_NAME, METHOD_REQUEST_UPDATE_FILE_SERVICES);
             b.putInt(ARGUMENT_SUBSCRIPTION_ID, subscriptionId);
@@ -205,13 +211,17 @@
         }
 
         @Override
-        public int download(DownloadRequest downloadRequest) {
+        public int download(DownloadRequest downloadRequest) throws RemoteException {
+            super.download(downloadRequest); // noop to placate the coverage tool
             mReceivedRequests.add(downloadRequest);
             return MbmsErrors.SUCCESS;
         }
 
         @Override
-        public int setTempFileRootDirectory(int subscriptionId, String rootDirectoryPath) {
+        public int setTempFileRootDirectory(int subscriptionId, String rootDirectoryPath)
+                throws RemoteException {
+            // noop to placate the coverage tool
+            super.setTempFileRootDirectory(subscriptionId, rootDirectoryPath);
             if (mErrorCodeOverride != MbmsErrors.SUCCESS) {
                 return mErrorCodeOverride;
             }
@@ -228,6 +238,8 @@
         @Override
         public int addProgressListener(DownloadRequest downloadRequest,
                 DownloadProgressListener listener) throws RemoteException {
+            // noop to placate the coverage tool
+            super.addProgressListener(downloadRequest, listener);
             mDownloadProgressListener = listener;
             return MbmsErrors.SUCCESS;
         }
@@ -235,12 +247,16 @@
         @Override
         public int addStatusListener(DownloadRequest downloadRequest,
                 DownloadStatusListener listener) throws RemoteException {
+            // noop to placate the coverage tool
+            super.addStatusListener(downloadRequest, listener);
             mDownloadStatusListener = listener;
             return MbmsErrors.SUCCESS;
         }
 
         @Override
-        public void dispose(int subscriptionId) {
+        public void dispose(int subscriptionId) throws RemoteException {
+            // noop to placate the coverage tool
+            super.dispose(subscriptionId);
             Bundle b = new Bundle();
             b.putString(METHOD_NAME, METHOD_CLOSE);
             b.putInt(ARGUMENT_SUBSCRIPTION_ID, subscriptionId);
@@ -248,7 +264,10 @@
         }
 
         @Override
-        public int requestDownloadState(DownloadRequest downloadRequest, FileInfo fileInfo) {
+        public int requestDownloadState(DownloadRequest downloadRequest, FileInfo fileInfo)
+                throws RemoteException {
+            // noop to placate the coverage tool
+            super.requestDownloadState(downloadRequest, fileInfo);
             Bundle b = new Bundle();
             b.putString(METHOD_NAME, METHOD_GET_DOWNLOAD_STATUS);
             b.putParcelable(ARGUMENT_DOWNLOAD_REQUEST, downloadRequest);
@@ -259,6 +278,12 @@
 
         @Override
         public int addServiceAnnouncement(int subscriptionId, byte[] announcementFile) {
+            try {
+                // noop to placate the coverage tool
+                super.addServiceAnnouncement(subscriptionId, announcementFile);
+            } catch (UnsupportedOperationException e) {
+                // expected
+            }
             Bundle b = new Bundle();
             b.putString(METHOD_NAME, METHOD_ADD_SERVICE_ANNOUNCEMENT);
             b.putInt(ARGUMENT_SUBSCRIPTION_ID, subscriptionId);
@@ -268,7 +293,9 @@
         }
 
         @Override
-        public int cancelDownload(DownloadRequest request) {
+        public int cancelDownload(DownloadRequest request) throws RemoteException {
+            // noop to placate the coverage tool
+            super.cancelDownload(request);
             Bundle b = new Bundle();
             b.putString(METHOD_NAME, METHOD_CANCEL_DOWNLOAD);
             b.putParcelable(ARGUMENT_DOWNLOAD_REQUEST, request);
@@ -278,19 +305,26 @@
         }
 
         @Override
-        public List<DownloadRequest> listPendingDownloads(int subscriptionId) {
+        public List<DownloadRequest> listPendingDownloads(int subscriptionId)
+                throws RemoteException {
+            // noop to placate the coverage tool
+            super.listPendingDownloads(subscriptionId);
             return mReceivedRequests;
         }
 
         @Override
         public int removeStatusListener(DownloadRequest downloadRequest,
-                DownloadStatusListener callback) {
+                DownloadStatusListener callback) throws RemoteException {
+            // noop to placate the coverage tool
+            super.removeStatusListener(downloadRequest, callback);
             mDownloadStatusListener = null;
             return MbmsErrors.SUCCESS;
         }
 
         @Override
-        public int resetDownloadKnowledge(DownloadRequest downloadRequest) {
+        public int resetDownloadKnowledge(DownloadRequest downloadRequest) throws RemoteException {
+            // noop to placate the coverage tool
+            super.resetDownloadKnowledge(downloadRequest);
             Bundle b = new Bundle();
             b.putString(METHOD_NAME, METHOD_RESET_DOWNLOAD_KNOWLEDGE);
             b.putParcelable(ARGUMENT_DOWNLOAD_REQUEST, downloadRequest);
@@ -300,6 +334,8 @@
 
         @Override
         public void onAppCallbackDied(int uid, int subscriptionId) {
+            // noop to placate the coverage tool
+            super.onAppCallbackDied(uid, subscriptionId);
             mAppCallback = null;
         }
     };
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/CellInfoTest.java b/tests/tests/telephony/current/src/android/telephony/cts/CellInfoTest.java
index bf13b0c..66554d4 100644
--- a/tests/tests/telephony/current/src/android/telephony/cts/CellInfoTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/cts/CellInfoTest.java
@@ -62,6 +62,7 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.Executor;
 
@@ -585,6 +586,9 @@
 
         if (mRadioHalVersion >= RADIO_HAL_VERSION_1_5) {
             int[] bands = nr.getBands();
+
+            verifyCellIdentityNrBands(bands);
+
             for (int band: bands) {
                 assertTrue("getBand out of range [1, 95] or [257, 261], band = " + band,
                         (band >= BAND_FR1_MIN_NR && band <= BAND_FR1_MAX_NR)
@@ -643,6 +647,14 @@
                 + ssSinr, -23 <= ssSinr && ssSinr <= 40 || ssSinr == CellInfo.UNAVAILABLE);
     }
 
+    private void verifyCellIdentityNrBands(int[] nrBands) {
+        //Verify the registered cell reports non-null band.
+        assertTrue(nrBands != null);
+
+        //Verify the registered cell reports at least one band.
+        assertTrue(Arrays.stream(nrBands).anyMatch(band -> band > 0));
+    }
+
     private void verifyCellInfoLteParcelandHashcode(CellInfoLte lte) {
         Parcel p = Parcel.obtain();
         lte.writeToParcel(p, 0);
@@ -701,6 +713,9 @@
 
         if (mRadioHalVersion >= RADIO_HAL_VERSION_1_5) {
             int[] bands = lte.getBands();
+
+            verifyCellIdentityLteBands(bands);
+
             for (int band: bands) {
                 assertTrue("getBand out of range [1, 88], band = " + band,
                         band >= BAND_MIN_LTE && band <= BAND_MAX_LTE);
@@ -809,6 +824,14 @@
         assertEquals(cellSignalStrengthLte, newCss);
     }
 
+    private void verifyCellIdentityLteBands(int[] lteBands) {
+        //Verify the registered cell reports non-null band.
+        assertTrue(lteBands != null);
+
+        //Verify the registered cell reports at least one band.
+        assertTrue(Arrays.stream(lteBands).anyMatch(band -> band > 0));
+    }
+
     // Verify wcdma cell information is within correct range.
     private void verifyWcdmaInfo(CellInfoWcdma wcdma) {
         verifyCellConnectionStatus(wcdma.getCellConnectionStatus());
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/DataCallResponseTest.java b/tests/tests/telephony/current/src/android/telephony/cts/DataCallResponseTest.java
index 8229f98..6b8499d 100644
--- a/tests/tests/telephony/current/src/android/telephony/cts/DataCallResponseTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/cts/DataCallResponseTest.java
@@ -68,7 +68,7 @@
                 .setMappedHplmnSliceServiceType(TEST_HPLMN_SLICE_SERVICE_TYPE)
                 .build();
     private static final String DNN = "DNN";
-    private static final String OS_APP_ID = "OS_APP_ID";
+    private static final byte[] OS_APP_ID = {1, 2, 3, 4};
     private static final List<TrafficDescriptor> TRAFFIC_DESCRIPTORS =
             Arrays.asList(new TrafficDescriptor(DNN, OS_APP_ID));
 
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/NetworkSliceInfoTest.java b/tests/tests/telephony/current/src/android/telephony/cts/NetworkSliceInfoTest.java
index 8e2d490..54e6a1f 100644
--- a/tests/tests/telephony/current/src/android/telephony/cts/NetworkSliceInfoTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/cts/NetworkSliceInfoTest.java
@@ -18,6 +18,7 @@
 
 import static android.telephony.data.NetworkSliceInfo.SLICE_SERVICE_TYPE_EMBB;
 import static android.telephony.data.NetworkSliceInfo.SLICE_SERVICE_TYPE_MIOT;
+import static android.telephony.data.NetworkSliceInfo.SLICE_STATUS_CONFIGURED;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -33,6 +34,7 @@
     private static final int TEST_SLICE_SERVICE_TYPE = SLICE_SERVICE_TYPE_EMBB;
     private static final int TEST_HPLMN_SLICE_DIFFERENTIATOR = 10;
     private static final int TEST_HPLMN_SLICE_SERVICE_TYPE = SLICE_SERVICE_TYPE_MIOT;
+    private static final int TEST_SLICE_STATUS = SLICE_STATUS_CONFIGURED;
 
     @Test
     public void testParceling() {
@@ -106,4 +108,10 @@
         } catch (IllegalArgumentException ignored) {
         }
     }
+
+    @Test
+    public void testGetterAndSetterForSliceStatus() {
+        NetworkSliceInfo si = new NetworkSliceInfo.Builder().setStatus(TEST_SLICE_STATUS).build();
+        assertThat(si.getStatus()).isEqualTo(SLICE_STATUS_CONFIGURED);
+    }
 }
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/NetworkSlicingConfigTest.java b/tests/tests/telephony/current/src/android/telephony/cts/NetworkSlicingConfigTest.java
new file mode 100644
index 0000000..79d6009
--- /dev/null
+++ b/tests/tests/telephony/current/src/android/telephony/cts/NetworkSlicingConfigTest.java
@@ -0,0 +1,32 @@
+/*
+ * 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 android.telephony.cts;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.telephony.data.NetworkSlicingConfig;
+
+import org.junit.Test;
+
+public class NetworkSlicingConfigTest {
+    @Test
+    public void testConstructorAndGetters() {
+        NetworkSlicingConfig sc = new NetworkSlicingConfig();
+        assertThat(sc.getUrspRules()).isNotEqualTo(null);
+        assertThat(sc.getSliceInfo()).isNotEqualTo(null);
+    }
+}
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/RouteSelectionDescriptorTest.java b/tests/tests/telephony/current/src/android/telephony/cts/RouteSelectionDescriptorTest.java
new file mode 100644
index 0000000..7a76502
--- /dev/null
+++ b/tests/tests/telephony/current/src/android/telephony/cts/RouteSelectionDescriptorTest.java
@@ -0,0 +1,49 @@
+/*
+ * 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 android.telephony.cts;
+
+import static android.telephony.data.RouteSelectionDescriptor.ROUTE_SSC_MODE_1;
+import static android.telephony.data.RouteSelectionDescriptor.SESSION_TYPE_IPV4;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.hardware.radio.V1_6.SliceInfo;
+import android.telephony.data.RouteSelectionDescriptor;
+
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RouteSelectionDescriptorTest {
+    private static final int TEST_PRECEDENCE = 1;
+    private static final int TEST_SESSION_TYPE = SESSION_TYPE_IPV4;
+    private static final int TEST_SSC_MODE = ROUTE_SSC_MODE_1;
+
+    @Test
+    public void testConstructorAndGetters() {
+        List<SliceInfo> si = new ArrayList<SliceInfo>();
+        List<String> dnn = new ArrayList<String>();
+        RouteSelectionDescriptor rsd = new RouteSelectionDescriptor(
+                TEST_PRECEDENCE, TEST_SESSION_TYPE, TEST_SSC_MODE, si, dnn);
+        assertThat(rsd.getPrecedence()).isEqualTo(TEST_PRECEDENCE);
+        assertThat(rsd.getSessionType()).isEqualTo(TEST_SESSION_TYPE);
+        assertThat(rsd.getSscMode()).isEqualTo(TEST_SSC_MODE);
+        assertThat(rsd.getSliceInfo()).isNotEqualTo(null);
+        assertThat(rsd.getDataNetworkName()).isNotEqualTo(null);
+    }
+}
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/ServiceStateTest.java b/tests/tests/telephony/current/src/android/telephony/cts/ServiceStateTest.java
index 3ec048b..60b9106 100644
--- a/tests/tests/telephony/current/src/android/telephony/cts/ServiceStateTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/cts/ServiceStateTest.java
@@ -29,7 +29,10 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
+import android.content.Context;
+import android.os.Build;
 import android.os.Parcel;
 import android.telephony.AccessNetworkConstants;
 import android.telephony.LteVopsSupportInfo;
@@ -37,10 +40,14 @@
 import android.telephony.ServiceState;
 import android.telephony.TelephonyManager;
 
+import androidx.test.InstrumentationRegistry;
+
 import org.junit.Before;
 import org.junit.Test;
 
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class ServiceStateTest {
     private static final String OPERATOR_ALPHA_LONG = "CtsOperatorLong";
@@ -150,12 +157,38 @@
         assertEquals(DUPLEX_MODE_TDD, serviceState.getDuplexMode());
     }
 
+    private static Context getContext() {
+        return InstrumentationRegistry.getContext();
+    }
+
     @Test
     public void testToString() {
         assertNotNull(serviceState.toString());
     }
 
     @Test
+    public void testNrStateRedacted() {
+        final TelephonyManager tm = getContext().getSystemService(TelephonyManager.class);
+
+        // Verify that NR State is not leaked in user builds.
+        if (!Build.IS_DEBUGGABLE) {
+            final String sss = tm.getServiceState().toString();
+            // The string leaked in previous releases is "nrState=<val>"; test that there is
+            // no matching or highly similar string leak, such as:
+            // nrState=NONE
+            // nrState=0
+            // mNrState=RESTRICTED
+            // NRSTATE=NOT_RESTRICTED
+            // nrState = CONNECTED
+            // etc.
+            Pattern p = Pattern.compile("nrState\\s*=\\s*[a-zA-Z0-9_]+", Pattern.CASE_INSENSITIVE);
+            Matcher m = p.matcher(sss);
+            // Need to use if (find) fail to ensure that the start and end are populated
+            if (m.find()) fail("Found nrState reported as: " + sss.substring(m.start(), m.end()));
+        }
+    }
+
+    @Test
     public void testCopyConstructor() {
         ServiceState serviceState = getServiceStateWithOperatorName("name", "numeric");
         assertEquals(serviceState, new ServiceState(serviceState));
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/TelephonyManagerTest.java b/tests/tests/telephony/current/src/android/telephony/cts/TelephonyManagerTest.java
index 69e1901..3c7d4e8 100644
--- a/tests/tests/telephony/current/src/android/telephony/cts/TelephonyManagerTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/cts/TelephonyManagerTest.java
@@ -89,7 +89,7 @@
 import android.telephony.UiccCardInfo;
 import android.telephony.UiccSlotInfo;
 import android.telephony.data.ApnSetting;
-import android.telephony.data.SlicingConfig;
+import android.telephony.data.NetworkSlicingConfig;
 import android.telephony.emergency.EmergencyNumber;
 import android.text.TextUtils;
 import android.util.Log;
@@ -672,7 +672,7 @@
         mTelephonyManager.getNetworkOperator();
         ShellIdentityUtils.invokeMethodWithShellPermissions(mTelephonyManager,
                 (tm) -> tm.getPhoneAccountHandle(),
-                "android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE");
+                "android.permission.READ_PRIVILEGED_PHONE_STATE");
         mTelephonyManager.getSimCountryIso();
         mTelephonyManager.getVoiceMailAlphaTag();
         mTelephonyManager.isNetworkRoaming();
@@ -993,7 +993,7 @@
         PhoneAccountHandle phoneAccountHandle = ShellIdentityUtils.invokeMethodWithShellPermissions(
                 mTelephonyManager,
                 (tm) -> tm.getPhoneAccountHandle(),
-                "android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE");
+                "android.permission.READ_PRIVILEGED_PHONE_STATE");
         assertEquals(phoneAccountHandle, defaultAccount);
     }
 
@@ -4535,7 +4535,7 @@
         if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
             return;
         }
-        CompletableFuture<SlicingConfig> resultFuture = new CompletableFuture<>();
+        CompletableFuture<NetworkSlicingConfig> resultFuture = new CompletableFuture<>();
         ShellIdentityUtils.invokeMethodWithShellPermissionsNoReturn(mTelephonyManager,
                 (tm) -> tm.getNetworkSlicingConfiguration(mSimpleExecutor, resultFuture::complete));
     }
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/TrafficDescriptorTest.java b/tests/tests/telephony/current/src/android/telephony/cts/TrafficDescriptorTest.java
index 1ab317d..c7751f3 100644
--- a/tests/tests/telephony/current/src/android/telephony/cts/TrafficDescriptorTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/cts/TrafficDescriptorTest.java
@@ -25,7 +25,7 @@
 
 public class TrafficDescriptorTest {
     private static final String DNN = "DNN";
-    private static final String OS_APP_ID = "OS_APP_ID";
+    private static final byte[] OS_APP_ID = {1, 2, 3, 4};
 
     @Test
     public void testConstructorAndGetters() {
@@ -44,7 +44,8 @@
     @Test
     public void testNotEquals() {
         TrafficDescriptor td = new TrafficDescriptor(DNN, OS_APP_ID);
-        TrafficDescriptor notEqualsTd = new TrafficDescriptor("NOT_DNN", "NOT_OS_APP_ID");
+        byte[] notOsAppId = {5, 6, 7, 8};
+        TrafficDescriptor notEqualsTd = new TrafficDescriptor("NOT_DNN", notOsAppId);
         assertThat(td).isNotEqualTo(notEqualsTd);
         assertThat(td).isNotEqualTo(null);
     }
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/UrspRuleTest.java b/tests/tests/telephony/current/src/android/telephony/cts/UrspRuleTest.java
new file mode 100644
index 0000000..919fe82
--- /dev/null
+++ b/tests/tests/telephony/current/src/android/telephony/cts/UrspRuleTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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 android.telephony.cts;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.hardware.radio.V1_6.RouteSelectionDescriptor;
+import android.hardware.radio.V1_6.TrafficDescriptor;
+import android.telephony.data.UrspRule;
+
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class UrspRuleTest {
+    private static final int TEST_PRECEDENCE = 1;
+
+    @Test
+    public void testConstructorAndGetters() {
+        List<TrafficDescriptor> tds = new ArrayList<TrafficDescriptor>();
+        List<RouteSelectionDescriptor> rsds = new ArrayList<RouteSelectionDescriptor>();
+        UrspRule ur = new UrspRule(TEST_PRECEDENCE, tds, rsds);
+        assertThat(ur.getPrecedence()).isEqualTo(TEST_PRECEDENCE);
+        assertThat(ur.getTrafficDescriptors()).isNotEqualTo(null);
+        assertThat(ur.getRouteSelectionDescriptor()).isNotEqualTo(null);
+    }
+}
diff --git a/tests/tests/telephony/current/src/android/telephony/gba/cts/GbaServiceTest.java b/tests/tests/telephony/current/src/android/telephony/gba/cts/GbaServiceTest.java
index 64a1538..c5baf84 100644
--- a/tests/tests/telephony/current/src/android/telephony/gba/cts/GbaServiceTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/gba/cts/GbaServiceTest.java
@@ -134,6 +134,7 @@
                       TelephonyManager.BootstrapAuthenticationCallback() {
                 @Override
                 public void onKeysAvailable(byte[] gbaKey, String btId) {
+                    super.onKeysAvailable(gbaKey, btId);
                     assertNotNull(gbaKey);
                     assertNotNull(btId);
                     assertArrayEquals(key, gbaKey);
@@ -146,6 +147,7 @@
 
                 @Override
                 public void onAuthenticationFailure(int reason) {
+                    super.onAuthenticationFailure(reason);
                     synchronized (isSuccess) {
                         isFail.set(true);
                         isSuccess.notify();
diff --git a/tests/tests/telephony/current/src/android/telephony/ims/cts/ImsServiceTest.java b/tests/tests/telephony/current/src/android/telephony/ims/cts/ImsServiceTest.java
index 73ac9ac..f5f9804 100644
--- a/tests/tests/telephony/current/src/android/telephony/ims/cts/ImsServiceTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/ims/cts/ImsServiceTest.java
@@ -110,28 +110,57 @@
     private static final int TEST_CONFIG_VALUE_INT = 0xDEADBEEF;
     private static final String TEST_CONFIG_VALUE_STRING = "DEADBEEF";
 
-    private static final String TEST_RCS_CONFIG_DEFAULT = "<RCSConfig>\n"
-            + "\t<rcsVolteSingleRegistration>1</rcsVolteSingleRegistration>\n"
-            + "\t<SERVICES>\n"
-            + "\t\t<SupportedRCSProfileVersions>UP_2.0</SupportedRCSProfileVersions>\n"
-            + "\t\t<ChatAuth>1</ChatAuth>\n"
-            + "\t\t<GroupChatAuth>1</GroupChatAuth>\n"
-            + "\t\t<ftAuth>1</ftAuth>\n"
-            + "\t\t<standaloneMsgAuth>1</standaloneMsgAuth>\n"
-            + "\t\t<geolocPushAuth>1</geolocPushAuth>\n"
-            + "\t\t<Ext>\n"
-            + "\t\t\t<DataOff>\n"
-            + "\t\t\t\t<rcsMessagingDataOff>1</rcsMessagingDataOff>\n"
-            + "\t\t\t\t<fileTransferDataOff>1</fileTransferDataOff>\n"
-            + "\t\t\t\t<mmsDataOff>1</mmsDataOff>\n"
-            + "\t\t\t\t<syncDataOff>1</syncDataOff>\n"
-            + "\t\t\t</DataOff>\n"
-            + "\t\t</Ext>\n"
-            + "\t</SERVICES>\n"
-            + "</RCSConfig>";
-    private static final String TEST_RCS_CONFIG_SINGLE_REGISTRATION_DISABLED = "<RCSConfig>\n"
-            + "\t<rcsVolteSingleRegistration>0</rcsVolteSingleRegistration>\n"
-            + "</RCSConfig>";
+    private static final String TEST_RCS_CONFIG_DEFAULT = "<?xml version=\"1.0\"?>\n"
+            + "<wap-provisioningdoc version=\"1.1\">\n"
+            + "\t<characteristic type=\"APPLICATION\">\n"
+            + "\t\t<parm name=\"AppID\" value=\"urn:oma:mo:ext-3gpp-ims:1.0\"/>\n"
+            + "\t\t<characteristic type=\"3GPP_IMS\">\n"
+            + "\t\t\t<parm name=\"AppID\" value=\"ap2001\"/>\n"
+            + "\t\t\t<parm name=\"Name\" value=\"RCS IMS Settings\"/>\n"
+            + "\t\t\t<characteristic type=\"Ext\">\n"
+            + "\t\t\t\t<characteristic type=\"GSMA\">\n"
+            + "\t\t\t\t\t<parm name=\"AppRef\" value=\"IMS-Setting\"/>\n"
+            + "\t\t\t\t\t<parm name=\"rcsVolteSingleRegistration\" value=\"1\"/>\n"
+            + "\t\t\t\t</characteristic>\n"
+            + "\t\t\t</characteristic>\n"
+            + "\t\t</characteristic>\n"
+            + "\t\t<characteristic type=\"SERVICES\">\n"
+            + "\t\t\t<parm name=\"SupportedRCSProfileVersions\" value=\"UP2.3\"/>\n"
+            + "\t\t\t<parm name=\"ChatAuth\" value=\"1\"/>\n"
+            + "\t\t\t<parm name=\"GroupChatAuth\" value=\"1\"/>\n"
+            + "\t\t\t<parm name=\"ftAuth\" value=\"1\"/>\n"
+            + "\t\t\t<parm name=\"standaloneMsgAuth\" value=\"1\"/>\n"
+            + "\t\t\t<parm name=\"geolocPushAuth\" value=\"1\"/>\n"
+            + "\t\t\t<characteristic type=\"Ext\">\n"
+            + "\t\t\t\t<characteristic type=\"DataOff\">\n"
+            + "\t\t\t\t\t<parm name=\"rcsMessagingDataOff\" value=\"1\"/>\n"
+            + "\t\t\t\t\t<parm name=\"fileTransferDataOff\" value=\"1\"/>\n"
+            + "\t\t\t\t\t<parm name=\"mmsDataOff\" value=\"1\"/>\n"
+            + "\t\t\t\t\t<parm name=\"syncDataOff\" value=\"1\"/>\n"
+            + "\t\t\t\t\t<characteristic type=\"Ext\"/>\n"
+            + "\t\t\t\t</characteristic>\n"
+            + "\t\t\t</characteristic>\n"
+            + "\t\t</characteristic>\n"
+            + "\t</characteristic>\n"
+            + "</wap-provisioningdoc>\n";
+
+    private static final String TEST_RCS_CONFIG_SINGLE_REGISTRATION_DISABLED =
+            "<?xml version=\"1.0\"?>\n"
+            + "<wap-provisioningdoc version=\"1.1\">\n"
+            + "\t<characteristic type=\"APPLICATION\">\n"
+            + "\t\t<parm name=\"AppID\" value=\"urn:oma:mo:ext-3gpp-ims:1.0\"/>\n"
+            + "\t\t<characteristic type=\"3GPP_IMS\">\n"
+            + "\t\t\t<parm name=\"AppID\" value=\"ap2001\"/>\n"
+            + "\t\t\t<parm name=\"Name\" value=\"RCS IMS Settings\"/>\n"
+            + "\t\t\t<characteristic type=\"Ext\">\n"
+            + "\t\t\t\t<characteristic type=\"GSMA\">\n"
+            + "\t\t\t\t\t<parm name=\"AppRef\" value=\"IMS-Setting\"/>\n"
+            + "\t\t\t\t\t<parm name=\"rcsVolteSingleRegistration\" value=\"0\"/>\n"
+            + "\t\t\t\t</characteristic>\n"
+            + "\t\t\t</characteristic>\n"
+            + "\t\t</characteristic>\n"
+            + "\t</characteristic>\n"
+            + "</wap-provisioningdoc>\n";
     private static final String TEST_RCS_PRE_CONFIG = "<RCSPreProvisiniongConfig>\n"
             + "\t<VERS>\n"
             + "\t\t<version>1</version>\n"
@@ -2772,7 +2801,7 @@
                 buildRcsProvisioningCallback(clientQueue, paramsQueue);
         ProvisioningManager provisioningManager =
                 ProvisioningManager.createForSubscriptionId(sTestSub);
-        String configStr = "<test01/>\n" + TEST_RCS_CONFIG_DEFAULT;
+        String configStr = TEST_RCS_CONFIG_DEFAULT;
 
         //notify rcs configuration received, wait rcs gets ready and receives notification
         try {
@@ -2802,7 +2831,7 @@
         assertTrue(Arrays.equals(
                 configStr.getBytes(), TestAcsClient.getInstance().getConfig()));
 
-        configStr = "<test02/>\n" + TEST_RCS_CONFIG_DEFAULT;
+        configStr = TEST_RCS_CONFIG_SINGLE_REGISTRATION_DISABLED;
         try {
             automan.adoptShellPermissionIdentity();
             provisioningManager.notifyRcsAutoConfigurationReceived(
diff --git a/tests/tests/telephony/current/src/android/telephony/ims/cts/SipDelegateManagerTest.java b/tests/tests/telephony/current/src/android/telephony/ims/cts/SipDelegateManagerTest.java
index 88267b6..6699f29 100644
--- a/tests/tests/telephony/current/src/android/telephony/ims/cts/SipDelegateManagerTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/ims/cts/SipDelegateManagerTest.java
@@ -1078,8 +1078,8 @@
         // Send a message and ensure it gets received on the other end as well as acked
         delegateConn.sendMessageAndVerifyCompletedSuccessfully(ImsUtils.TEST_SIP_MESSAGE);
         delegate.verifyMessageSend(ImsUtils.TEST_SIP_MESSAGE);
-        delegateConn.sendCloseDialog(ImsUtils.TEST_CALL_ID);
-        delegate.verifyCloseDialog(ImsUtils.TEST_CALL_ID);
+        delegateConn.sendCloseSession(ImsUtils.TEST_CALL_ID);
+        delegate.verifyCloseSession(ImsUtils.TEST_CALL_ID);
         // send a message and notify connection that it failed
         delegate.setSendMessageDenyReason(
                 SipDelegateManager.MESSAGE_FAILURE_REASON_NETWORK_NOT_AVAILABLE);
diff --git a/tests/tests/telephony/current/src/android/telephony/ims/cts/TestSipDelegate.java b/tests/tests/telephony/current/src/android/telephony/ims/cts/TestSipDelegate.java
index 729efb9..a35f80b 100644
--- a/tests/tests/telephony/current/src/android/telephony/ims/cts/TestSipDelegate.java
+++ b/tests/tests/telephony/current/src/android/telephony/ims/cts/TestSipDelegate.java
@@ -48,7 +48,8 @@
     // Pair is <transactionId, error reason>
     private final LinkedBlockingQueue<Pair<String, Integer>> mReceivedMessageAcks =
             new LinkedBlockingQueue<>();
-    private final LinkedBlockingQueue<String> mCloseDialogRequests = new LinkedBlockingQueue<>();
+    private final LinkedBlockingQueue<String> mCleanupSipSessionRequests =
+            new LinkedBlockingQueue<>();
     private int mSendMessageDenyReason = -1;
 
     public TestSipDelegate(int sub, DelegateRequest request, DelegateStateCallback cb,
@@ -72,9 +73,9 @@
     }
 
     @Override
-    public void closeDialog(@NonNull String callId) {
-        if (ImsUtils.VDBG) Log.d(LOG_TAG, "closeDialog");
-        mCloseDialogRequests.offer(callId);
+    public void cleanupSession(@NonNull String callId) {
+        if (ImsUtils.VDBG) Log.d(LOG_TAG, "CleanSession");
+        mCleanupSipSessionRequests.offer(callId);
     }
 
     @Override
@@ -94,8 +95,8 @@
         assertEquals(messageToVerify, m);
     }
 
-    public void verifyCloseDialog(String callIdToVerify) throws Exception {
-        String requestedCallId = mCloseDialogRequests.poll(ImsUtils.TEST_TIMEOUT_MS,
+    public void verifyCloseSession(String callIdToVerify) throws Exception {
+        String requestedCallId = mCleanupSipSessionRequests.poll(ImsUtils.TEST_TIMEOUT_MS,
                 TimeUnit.MILLISECONDS);
         assertEquals(callIdToVerify, requestedCallId);
     }
diff --git a/tests/tests/telephony/current/src/android/telephony/ims/cts/TestSipDelegateConnection.java b/tests/tests/telephony/current/src/android/telephony/ims/cts/TestSipDelegateConnection.java
index 1118009..4732011 100644
--- a/tests/tests/telephony/current/src/android/telephony/ims/cts/TestSipDelegateConnection.java
+++ b/tests/tests/telephony/current/src/android/telephony/ims/cts/TestSipDelegateConnection.java
@@ -154,9 +154,9 @@
         mLatch.countDown();
     }
 
-    public void sendCloseDialog(String callId) {
-        assertNotNull("SipDelegate was null when closing dialog", connection);
-        connection.closeDialog(callId);
+    public void sendCloseSession(String callId) {
+        assertNotNull("SipDelegate was null when closing session", connection);
+        connection.cleanupSession(callId);
     }
 
     public void sendMessageAndVerifyCompletedSuccessfully(SipMessage messageToSend)
diff --git a/tests/tests/telephonyprovider/src/android/telephonyprovider/cts/ServiceStateTest.java b/tests/tests/telephonyprovider/src/android/telephonyprovider/cts/ServiceStateTest.java
index 7318e8b..9c21aa9 100644
--- a/tests/tests/telephonyprovider/src/android/telephonyprovider/cts/ServiceStateTest.java
+++ b/tests/tests/telephonyprovider/src/android/telephonyprovider/cts/ServiceStateTest.java
@@ -16,6 +16,7 @@
 
 package android.telephonyprovider.cts;
 
+import static android.content.pm.PackageManager.FEATURE_TELEPHONY;
 import static android.provider.Telephony.ServiceStateTable.DATA_NETWORK_TYPE;
 import static android.provider.Telephony.ServiceStateTable.DATA_REG_STATE;
 import static android.provider.Telephony.ServiceStateTable.DUPLEX_MODE;
@@ -27,6 +28,8 @@
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assertWithMessage;
 
+import static org.junit.Assume.assumeTrue;
+
 import android.Manifest;
 import android.content.ContentResolver;
 import android.content.ContentValues;
@@ -71,6 +74,8 @@
 
     @Before
     public void setUp() {
+        assumeTrue(hasTelephonyFeature());
+
         mContentResolver = getInstrumentation().getContext().getContentResolver();
         mTelephonyManager =
                 getInstrumentation().getContext().getSystemService(TelephonyManager.class);
@@ -80,6 +85,10 @@
 
     @After
     public void tearDown() {
+        if (!hasTelephonyFeature()) {
+            return;
+        }
+
         // Recover the initial ServiceState to remove the impact of manual ServiceState insertion.
         insertServiceState(mInitialServiceState);
     }
@@ -379,4 +388,9 @@
             mObserved.add(uri);
         }
     }
+
+    private static boolean hasTelephonyFeature() {
+        return getInstrumentation().getContext().getPackageManager().hasSystemFeature(
+                FEATURE_TELEPHONY);
+    }
 }
diff --git a/tests/tests/time/src/android/app/time/cts/ExternalTimeSuggestionTest.java b/tests/tests/time/src/android/app/time/cts/ExternalTimeSuggestionTest.java
new file mode 100644
index 0000000..e7a5fcd
--- /dev/null
+++ b/tests/tests/time/src/android/app/time/cts/ExternalTimeSuggestionTest.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 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 android.app.time.cts;
+
+import static android.app.time.cts.ParcelableTestSupport.assertRoundTripParcelable;
+import static android.app.time.cts.ParcelableTestSupport.roundTripParcelable;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+import android.app.time.ExternalTimeSuggestion;
+
+import org.junit.Test;
+
+public class ExternalTimeSuggestionTest {
+
+    private static final long ARBITRARY_REFERENCE_TIME = 1111L;
+    private static final long ARBITRARY_UTC_TIME = 2222L;
+
+    @Test
+    public void testEquals() {
+        ExternalTimeSuggestion one = new ExternalTimeSuggestion(
+                ARBITRARY_REFERENCE_TIME, ARBITRARY_UTC_TIME);
+        assertEquals(one, one);
+
+        ExternalTimeSuggestion two = new ExternalTimeSuggestion(
+                ARBITRARY_REFERENCE_TIME, ARBITRARY_UTC_TIME);
+        assertEquals(one, two);
+        assertEquals(two, one);
+
+        ExternalTimeSuggestion three = new ExternalTimeSuggestion(
+                ARBITRARY_REFERENCE_TIME + 1, ARBITRARY_UTC_TIME);
+        assertNotEquals(one, three);
+        assertNotEquals(three, one);
+
+        // DebugInfo must not be considered in equals().
+        one.addDebugInfo("Debug info 1");
+        two.addDebugInfo("Debug info 2");
+        assertEquals(one, two);
+    }
+
+    @Test
+    public void testParcelable() {
+        ExternalTimeSuggestion suggestion = new ExternalTimeSuggestion(
+                ARBITRARY_REFERENCE_TIME, ARBITRARY_UTC_TIME);
+        assertRoundTripParcelable(suggestion);
+
+        // DebugInfo should also be stored (but is not checked by equals())
+        suggestion.addDebugInfo("This is debug info");
+        ExternalTimeSuggestion rtSuggestion = roundTripParcelable(suggestion);
+        assertEquals(suggestion.getDebugInfo(), rtSuggestion.getDebugInfo());
+    }
+}
diff --git a/tests/tests/time/src/android/app/time/cts/ParcelableTestSupport.java b/tests/tests/time/src/android/app/time/cts/ParcelableTestSupport.java
new file mode 100644
index 0000000..1fa3f26
--- /dev/null
+++ b/tests/tests/time/src/android/app/time/cts/ParcelableTestSupport.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2019 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.app.time.cts;
+
+import static org.junit.Assert.assertEquals;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.reflect.Field;
+
+/** Utility methods related to {@link Parcelable} objects used in several tests. */
+public final class ParcelableTestSupport {
+
+    private ParcelableTestSupport() {}
+
+    /** Returns the result of parceling and unparceling the argument. */
+    @SuppressWarnings("unchecked")
+    public static <T extends Parcelable> T roundTripParcelable(T parcelable) {
+        Parcel parcel = Parcel.obtain();
+        parcel.writeTypedObject(parcelable, 0);
+        parcel.setDataPosition(0);
+
+        Parcelable.Creator<T> creator;
+        try {
+            Field creatorField = parcelable.getClass().getField("CREATOR");
+            creator = (Parcelable.Creator<T>) creatorField.get(null);
+        } catch (NoSuchFieldException | IllegalAccessException e) {
+            throw new AssertionError(e);
+        }
+        T toReturn = parcel.readTypedObject(creator);
+        parcel.recycle();
+        return toReturn;
+    }
+
+    public static <T extends Parcelable> void assertRoundTripParcelable(T instance) {
+        assertEquals(instance, roundTripParcelable(instance));
+    }
+}
diff --git a/tests/tests/time/src/android/time/cts/TimeManagerTest.java b/tests/tests/time/src/android/app/time/cts/TimeManagerTest.java
similarity index 78%
rename from tests/tests/time/src/android/time/cts/TimeManagerTest.java
rename to tests/tests/time/src/android/app/time/cts/TimeManagerTest.java
index 4719d82..72f74ad 100644
--- a/tests/tests/time/src/android/time/cts/TimeManagerTest.java
+++ b/tests/tests/time/src/android/app/time/cts/TimeManagerTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package android.time.cts;
+package android.app.time.cts;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -195,66 +195,4 @@
         }
         assertEquals(expectedValue, actualValue.get());
     }
-
-    @Test
-    public void testExternalTimeSuggestionEquals() {
-        long referenceTimeMillis = 1111;
-        long currentTimeMillis = 2222;
-        ExternalTimeSuggestion one = new ExternalTimeSuggestion(
-                referenceTimeMillis,
-                currentTimeMillis);
-        assertEquals(one, one);
-
-        ExternalTimeSuggestion two = new ExternalTimeSuggestion(
-                referenceTimeMillis,
-                currentTimeMillis);
-        assertEquals(one, two);
-        assertEquals(two, one);
-
-        ExternalTimeSuggestion three = new ExternalTimeSuggestion(
-                referenceTimeMillis + 1,
-                currentTimeMillis);
-        assertNotEquals(one, three);
-        assertNotEquals(three, one);
-
-        // DebugInfo must not be considered in equals().
-        one.addDebugInfo("Debug info 1");
-        two.addDebugInfo("Debug info 2");
-        assertEquals(one, two);
-    }
-
-
-    /** Returns the result of parceling and unparceling the argument. */
-    @SuppressWarnings("unchecked")
-    public static ExternalTimeSuggestion roundTripParcelable(ExternalTimeSuggestion parcelable) {
-        Parcel parcel = Parcel.obtain();
-        parcel.writeTypedObject(parcelable, 0);
-        parcel.setDataPosition(0);
-
-        Parcelable.Creator<ExternalTimeSuggestion> creator;
-        try {
-            Field creatorField = parcelable.getClass().getField("CREATOR");
-            creator = (Parcelable.Creator<ExternalTimeSuggestion>) creatorField.get(null);
-        } catch (NoSuchFieldException | IllegalAccessException e) {
-            throw new AssertionError(e);
-        }
-        ExternalTimeSuggestion toReturn = parcel.readTypedObject(creator);
-        parcel.recycle();
-        return toReturn;
-    }
-
-    @Test
-    public void testExternalTimeSuggestionParcelable() {
-        long referenceTimeMillis = 1111;
-        long currentTimeMillis = 2222;
-        ExternalTimeSuggestion suggestion = new ExternalTimeSuggestion(
-                referenceTimeMillis,
-                currentTimeMillis);
-        assertEquals(suggestion, roundTripParcelable(suggestion));
-
-        // DebugInfo should also be stored (but is not checked by equals())
-        suggestion.addDebugInfo("This is debug info");
-        ExternalTimeSuggestion rtSuggestion = roundTripParcelable(suggestion);
-        assertEquals(suggestion.getDebugInfo(), rtSuggestion.getDebugInfo());
-    }
 }
diff --git a/tests/tests/time/src/android/service/timezone/cts/TimeZoneProviderSuggestionTest.java b/tests/tests/time/src/android/service/timezone/cts/TimeZoneProviderSuggestionTest.java
new file mode 100644
index 0000000..ae4a14d
--- /dev/null
+++ b/tests/tests/time/src/android/service/timezone/cts/TimeZoneProviderSuggestionTest.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2020 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.service.timezone.cts;
+
+import static android.app.time.cts.ParcelableTestSupport.assertRoundTripParcelable;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+import static java.util.Collections.singletonList;
+
+import android.service.timezone.TimeZoneProviderSuggestion;
+
+import org.junit.Test;
+
+import java.util.List;
+
+public class TimeZoneProviderSuggestionTest {
+
+    private static final long ARBITRARY_ELAPSED_REALTIME_MILLIS = 9999;
+
+    private static final List<String> ARBITRARY_TIME_ZONE_IDS = singletonList("Europe/London");
+
+    @Test(expected = RuntimeException.class)
+    public void testInvalidTimeZoneIds() {
+        new TimeZoneProviderSuggestion.Builder()
+                .setTimeZoneIds(null);
+    }
+
+    @Test
+    public void testAccessors() {
+        TimeZoneProviderSuggestion suggestion = new TimeZoneProviderSuggestion.Builder()
+                .setTimeZoneIds(ARBITRARY_TIME_ZONE_IDS)
+                .setElapsedRealtimeMillis(ARBITRARY_ELAPSED_REALTIME_MILLIS)
+                .build();
+
+        assertEquals(ARBITRARY_TIME_ZONE_IDS, suggestion.getTimeZoneIds());
+        assertEquals(ARBITRARY_ELAPSED_REALTIME_MILLIS, suggestion.getElapsedRealtimeMillis());
+    }
+
+    @Test
+    public void testEquals() {
+        TimeZoneProviderSuggestion.Builder builder1 = new TimeZoneProviderSuggestion.Builder()
+                .setElapsedRealtimeMillis(ARBITRARY_ELAPSED_REALTIME_MILLIS);
+        {
+            TimeZoneProviderSuggestion one = builder1.build();
+            assertEquals(one, one);
+        }
+
+        TimeZoneProviderSuggestion.Builder builder2 = new TimeZoneProviderSuggestion.Builder()
+                .setElapsedRealtimeMillis(ARBITRARY_ELAPSED_REALTIME_MILLIS);
+        {
+            TimeZoneProviderSuggestion one = builder1.build();
+            TimeZoneProviderSuggestion two = builder2.build();
+            assertEquals(one, two);
+            assertEquals(two, one);
+        }
+
+        builder1.setElapsedRealtimeMillis(ARBITRARY_ELAPSED_REALTIME_MILLIS + 1);
+        {
+            TimeZoneProviderSuggestion one = builder1.build();
+            TimeZoneProviderSuggestion two = builder2.build();
+            assertNotEquals(one, two);
+            assertNotEquals(two, one);
+        }
+
+        builder2.setElapsedRealtimeMillis(ARBITRARY_ELAPSED_REALTIME_MILLIS + 1);
+        {
+            TimeZoneProviderSuggestion one = builder1.build();
+            TimeZoneProviderSuggestion two = builder2.build();
+            assertEquals(one, two);
+            assertEquals(two, one);
+        }
+
+        builder2.setTimeZoneIds(ARBITRARY_TIME_ZONE_IDS);
+        {
+            TimeZoneProviderSuggestion one = builder1.build();
+            TimeZoneProviderSuggestion two = builder2.build();
+            assertNotEquals(one, two);
+            assertNotEquals(two, one);
+        }
+
+        builder1.setTimeZoneIds(ARBITRARY_TIME_ZONE_IDS);
+        {
+            TimeZoneProviderSuggestion one = builder1.build();
+            TimeZoneProviderSuggestion two = builder2.build();
+            assertEquals(one, two);
+            assertEquals(two, one);
+        }
+    }
+
+    @Test
+    public void testParcelable_noTimeZoneIds() {
+        TimeZoneProviderSuggestion.Builder builder = new TimeZoneProviderSuggestion.Builder()
+                .setElapsedRealtimeMillis(ARBITRARY_ELAPSED_REALTIME_MILLIS);
+        assertRoundTripParcelable(builder.build());
+    }
+
+    @Test
+    public void testParcelable_withTimeZoneIds() {
+        TimeZoneProviderSuggestion.Builder builder = new TimeZoneProviderSuggestion.Builder()
+                .setElapsedRealtimeMillis(ARBITRARY_ELAPSED_REALTIME_MILLIS)
+                .setTimeZoneIds(ARBITRARY_TIME_ZONE_IDS);
+        assertRoundTripParcelable(builder.build());
+    }
+}
diff --git a/tests/tests/tv/src/android/media/tv/cts/TvInputServiceTest.java b/tests/tests/tv/src/android/media/tv/cts/TvInputServiceTest.java
index 0c8f856..e643161 100644
--- a/tests/tests/tv/src/android/media/tv/cts/TvInputServiceTest.java
+++ b/tests/tests/tv/src/android/media/tv/cts/TvInputServiceTest.java
@@ -1066,6 +1066,7 @@
 
         @Override
         public IBinder createExtension() {
+            super.createExtension();
             return null;
         }
 
diff --git a/tests/tests/tv/src/android/media/tv/tuner/cts/TunerTest.java b/tests/tests/tv/src/android/media/tv/tuner/cts/TunerTest.java
index 689ab97..62fa719 100644
--- a/tests/tests/tv/src/android/media/tv/tuner/cts/TunerTest.java
+++ b/tests/tests/tv/src/android/media/tv/tuner/cts/TunerTest.java
@@ -1204,13 +1204,19 @@
             public void onSignalTypeReported(int signalType) {}
 
             @Override
-            public void onModulationReported(int modulation) {}
+            public void onModulationReported(int modulation) {
+                ScanCallback.super.onModulationReported(modulation);
+            }
 
             @Override
-            public void onPriorityReported(boolean isHighPriority) {}
+            public void onPriorityReported(boolean isHighPriority) {
+                ScanCallback.super.onPriorityReported(isHighPriority);
+            }
 
             @Override
-            public void onDvbcAnnexReported(int dvbcAnnext) {}
+            public void onDvbcAnnexReported(int dvbcAnnext) {
+                ScanCallback.super.onDvbcAnnexReported(dvbcAnnext);
+            }
         };
     }
 }
diff --git a/tests/tests/uiautomation/src/android/app/uiautomation/cts/UiAutomationTest.java b/tests/tests/uiautomation/src/android/app/uiautomation/cts/UiAutomationTest.java
index e9c050a..95de736 100755
--- a/tests/tests/uiautomation/src/android/app/uiautomation/cts/UiAutomationTest.java
+++ b/tests/tests/uiautomation/src/android/app/uiautomation/cts/UiAutomationTest.java
@@ -104,13 +104,13 @@
 
         // Access APIs guarded by a platform defined signature permissions
         try {
+            assertSame(packageManager.checkPermission(Manifest.permission.ANSWER_PHONE_CALLS,
+                    context.getPackageName()), PackageManager.PERMISSION_DENIED);
             getInstrumentation().getUiAutomation().adoptShellPermissionIdentity();
             // Access APIs guarded by a platform defined signature permission
             activityManager.getPackageImportance("foo.bar.baz");
 
             // Grant ourselves a runtime permission (was granted at install)
-            assertSame(packageManager.checkPermission(Manifest.permission.ANSWER_PHONE_CALLS,
-                    context.getPackageName()), PackageManager.PERMISSION_DENIED);
             packageManager.grantRuntimePermission(context.getPackageName(),
                     Manifest.permission.ANSWER_PHONE_CALLS, Process.myUserHandle());
         } catch (SecurityException e) {
diff --git a/tests/tests/uirendering/src/android/uirendering/cts/testclasses/EdgeEffectTests.java b/tests/tests/uirendering/src/android/uirendering/cts/testclasses/EdgeEffectTests.java
index 3fc9273..6dec22e 100644
--- a/tests/tests/uirendering/src/android/uirendering/cts/testclasses/EdgeEffectTests.java
+++ b/tests/tests/uirendering/src/android/uirendering/cts/testclasses/EdgeEffectTests.java
@@ -344,6 +344,22 @@
     }
 
     @Test
+    public void testInvalidPullDistanceDoesNotCrash() {
+        EdgeEffect edgeEffect = new EdgeEffect(getContext());
+        edgeEffect.setType(EdgeEffect.TYPE_STRETCH);
+        // Verify that bad inputs to onPull do not crash
+        edgeEffect.onPull(Float.NaN, Float.NaN);
+
+        edgeEffect.setSize(TEST_WIDTH, TEST_HEIGHT);
+        RenderNode node = new RenderNode("");
+        node.setPosition(0, 0, TEST_WIDTH, TEST_HEIGHT);
+        RecordingCanvas canvas = node.beginRecording();
+
+        edgeEffect.draw(canvas);
+        node.endRecording();
+    }
+
+    @Test
     public void testAbsorbThenDrawDoesNotCrash() {
         MockVsyncHelper.runOnVsyncThread(() -> {
             EdgeEffect edgeEffect = new EdgeEffect(getContext());
diff --git a/tests/tests/view/res/layout-round/gesture_exclusion_basic.xml b/tests/tests/view/res/layout-round/gesture_exclusion_basic.xml
new file mode 100644
index 0000000..71754b6
--- /dev/null
+++ b/tests/tests/view/res/layout-round/gesture_exclusion_basic.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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
+  -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/abslistview_root"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+    <View android:id="@+id/animating_view"
+          android:layout_width="5px"
+          android:layout_height="5px"
+          android:layout_gravity="center|left"
+          android:background="#ff00ff00" />
+</FrameLayout>
diff --git a/tests/tests/view/src/android/view/cts/ASurfaceControlTest.java b/tests/tests/view/src/android/view/cts/ASurfaceControlTest.java
index cf168e7..faf820c 100644
--- a/tests/tests/view/src/android/view/cts/ASurfaceControlTest.java
+++ b/tests/tests/view/src/android/view/cts/ASurfaceControlTest.java
@@ -937,31 +937,31 @@
                     }
                 };
         verifyTest(callback,
-                new PixelChecker(PixelColor.RED) { //2500
+                new PixelChecker(PixelColor.RED) { //1111
                     @Override
                     public boolean checkPixels(int pixelCount, int width, int height) {
-                        return pixelCount > 2250 && pixelCount < 2750;
+                        return pixelCount > 1000 && pixelCount < 1250;
                     }
                 });
         verifyTest(callback,
-                new PixelChecker(PixelColor.BLUE) { //2500
+                new PixelChecker(PixelColor.BLUE) { //1111
                     @Override
                     public boolean checkPixels(int pixelCount, int width, int height) {
-                        return pixelCount > 2250 && pixelCount < 2750;
+                        return pixelCount > 1000 && pixelCount < 1250;
                     }
                 });
         verifyTest(callback,
-                new PixelChecker(PixelColor.MAGENTA) { //2500
+                new PixelChecker(PixelColor.MAGENTA) { //1111
                     @Override
                     public boolean checkPixels(int pixelCount, int width, int height) {
-                        return pixelCount > 2250 && pixelCount < 2750;
+                        return pixelCount > 1000 && pixelCount < 1250;
                     }
                 });
         verifyTest(callback,
-                new PixelChecker(PixelColor.GREEN) { //2500
+                new PixelChecker(PixelColor.GREEN) { //1111
                     @Override
                     public boolean checkPixels(int pixelCount, int width, int height) {
-                        return pixelCount > 2250 && pixelCount < 2750;
+                        return pixelCount > 1000 && pixelCount < 1250;
                     }
                 });
     }
diff --git a/tests/tests/view/src/android/view/cts/input/InputDeviceVibratorManagerTest.java b/tests/tests/view/src/android/view/cts/input/InputDeviceVibratorManagerTest.java
index 9a46a3d..fca9854 100644
--- a/tests/tests/view/src/android/view/cts/input/InputDeviceVibratorManagerTest.java
+++ b/tests/tests/view/src/android/view/cts/input/InputDeviceVibratorManagerTest.java
@@ -22,7 +22,7 @@
 
 import android.app.Instrumentation;
 import android.hardware.input.InputManager;
-import android.os.CombinedVibrationEffect;
+import android.os.CombinedVibration;
 import android.os.SystemClock;
 import android.os.VibrationEffect;
 import android.os.Vibrator;
@@ -155,7 +155,7 @@
 
             final long totalVibrations = testData.durations.size();
             long timeoutMills = 0;
-            CombinedVibrationEffect.SyncedCombination comb = CombinedVibrationEffect.startSynced();
+            CombinedVibration.ParallelCombination comb = CombinedVibration.startParallel();
 
             final int[] ids = mVibratorManager.getVibratorIds();
             for (int i = 0; i < testData.amplitudes.size(); i++) {
@@ -181,14 +181,14 @@
                 }
 
                 if (testData.amplitudes.size() == 1) {
-                    CombinedVibrationEffect mono = CombinedVibrationEffect.createSynced(effect);
+                    CombinedVibration mono = CombinedVibration.createParallel(effect);
                     // Start vibration
                     mVibratorManager.vibrate(mono);
                 } else {  // testData.amplitudes.size() == 2
                     comb.addVibrator(ids[i], effect);
                     if (i > 0) {
                         // Start vibration
-                        CombinedVibrationEffect stereo = comb.combine();
+                        CombinedVibration stereo = comb.combine();
                         mVibratorManager.vibrate(stereo);
                     }
                 }
@@ -222,12 +222,12 @@
     @Test
     public void testUnsupportedVibrationEffectsPreBaked() {
         final int[] ids = mVibratorManager.getVibratorIds();
-        CombinedVibrationEffect.SyncedCombination comb = CombinedVibrationEffect.startSynced();
+        CombinedVibration.ParallelCombination comb = CombinedVibration.startParallel();
         for (int i = 0; i < ids.length; i++) {
             comb.addVibrator(ids[i], VibrationEffect.createPredefined(
                     VibrationEffect.EFFECT_CLICK));
         }
-        CombinedVibrationEffect stereo = comb.combine();
+        CombinedVibration stereo = comb.combine();
         mVibratorManager.vibrate(stereo);
         // Shouldn't get any vibrations for unsupported effects
         assertEquals(0, getVibrationCount(1 /* totalVibrations */, 1000 /* timeoutMills */));
@@ -236,12 +236,12 @@
     @Test
     public void testMixedVibrationEffectsOneShotAndPreBaked() {
         final int[] ids = mVibratorManager.getVibratorIds();
-        CombinedVibrationEffect.SyncedCombination comb = CombinedVibrationEffect.startSynced();
+        CombinedVibration.ParallelCombination comb = CombinedVibration.startParallel();
         comb.addVibrator(ids[0], VibrationEffect.createOneShot(1000,
                 VibrationEffect.DEFAULT_AMPLITUDE));
         comb.addVibrator(ids[1], VibrationEffect.createPredefined(
                 VibrationEffect.EFFECT_CLICK));
-        CombinedVibrationEffect stereo = comb.combine();
+        CombinedVibration stereo = comb.combine();
         mVibratorManager.vibrate(stereo);
         // Shouldn't get any vibrations for combination of OneShot and Prebaked.
         // Prebaked effect is not supported by input device vibrator, if the second effect
@@ -252,12 +252,12 @@
     @Test
     public void testMixedVibrationEffectsPreBakedAndOneShot() {
         final int[] ids = mVibratorManager.getVibratorIds();
-        CombinedVibrationEffect.SyncedCombination comb = CombinedVibrationEffect.startSynced();
+        CombinedVibration.ParallelCombination comb = CombinedVibration.startParallel();
         comb.addVibrator(ids[0], VibrationEffect.createPredefined(
                 VibrationEffect.EFFECT_CLICK));
         comb.addVibrator(ids[1], VibrationEffect.createOneShot(1000,
                 VibrationEffect.DEFAULT_AMPLITUDE));
-        CombinedVibrationEffect stereo = comb.combine();
+        CombinedVibration stereo = comb.combine();
         mVibratorManager.vibrate(stereo);
         // Shouldn't get any vibrations for combination of Prebaked and OneShot.
         // Prebaked effect is not supported by input device vibrator, if the first effect
@@ -266,10 +266,9 @@
     }
 
     @Test
-    public void testCombinedVibrationEffectsSingleVibratorId() {
+    public void testCombinedVibrationOnSingleVibratorId() {
         final int[] ids = mVibratorManager.getVibratorIds();
-        CombinedVibrationEffect.SyncedCombination comb = CombinedVibrationEffect.startSynced();
-        int[] vibratorIds = mVibratorManager.getVibratorIds();
+        CombinedVibration.ParallelCombination comb = CombinedVibration.startParallel();
         comb.addVibrator(ids[0], VibrationEffect.createOneShot(1000,
                 VibrationEffect.DEFAULT_AMPLITUDE));
         mVibratorManager.vibrate(comb.combine());
diff --git a/tests/tests/voiceinteraction/common/src/android/voiceinteraction/common/Utils.java b/tests/tests/voiceinteraction/common/src/android/voiceinteraction/common/Utils.java
index dd60884..4d8a54c 100644
--- a/tests/tests/voiceinteraction/common/src/android/voiceinteraction/common/Utils.java
+++ b/tests/tests/voiceinteraction/common/src/android/voiceinteraction/common/Utils.java
@@ -56,12 +56,15 @@
     public static final int VOICE_INTERACTION_SERVICE_NORMAL_TEST = 0;
     public static final int HOTWORD_DETECTION_SERVICE_TRIGGER_TEST = 1;
     public static final int HOTWORD_DETECTION_SERVICE_TRIGGER_WITHOUT_PERMISSION_TEST = 2;
+    public static final int HOTWORD_DETECTION_SERVICE_DSP_ONDETECT_TEST = 3;
 
     public static final int HOTWORD_DETECTION_SERVICE_TRIGGER_SUCCESS = 1;
     public static final int HOTWORD_DETECTION_SERVICE_TRIGGER_ILLEGAL_STATE_EXCEPTION = 2;
     public static final int HOTWORD_DETECTION_SERVICE_TRIGGER_SECURITY_EXCEPTION = 3;
     public static final int HOTWORD_DETECTION_SERVICE_TRIGGER_SHARED_MEMORY_NOT_READ_ONLY = 4;
 
+    public static final int HOTWORD_DETECTION_SERVICE_ONDETECT_SUCCESS = 1;
+
     public static final String TESTCASE_TYPE = "testcase_type";
     public static final String TESTINFO = "testinfo";
     public static final String BROADCAST_INTENT = "android.intent.action.VOICE_TESTAPP";
@@ -136,6 +139,8 @@
 
     public static final String BROADCAST_HOTWORD_DETECTION_SERVICE_TRIGGER_RESULT_INTENT =
             "android.intent.action.HOTWORD_DETECTION_SERVICE_TRIGGER_RESULT";
+    public static final String BROADCAST_HOTWORD_DETECTION_SERVICE_DSP_ONDETECT_RESULT_INTENT =
+            "android.intent.action.HOTWORD_DETECTION_SERVICE_DSP_ONDETECT_RESULT";
     public static final String KEY_SERVICE_TYPE = "serviceType";
     public static final String KEY_TEST_EVENT = "testEvent";
     public static final String KEY_TEST_RESULT = "testResult";
diff --git a/tests/tests/voiceinteraction/service/src/android/voiceinteraction/service/BasicVoiceInteractionService.java b/tests/tests/voiceinteraction/service/src/android/voiceinteraction/service/BasicVoiceInteractionService.java
index 2af7e13..5fb5e11 100644
--- a/tests/tests/voiceinteraction/service/src/android/voiceinteraction/service/BasicVoiceInteractionService.java
+++ b/tests/tests/voiceinteraction/service/src/android/voiceinteraction/service/BasicVoiceInteractionService.java
@@ -19,6 +19,7 @@
 import static com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity;
 
 import android.content.Intent;
+import android.media.AudioFormat;
 import android.os.PersistableBundle;
 import android.os.SharedMemory;
 import android.service.voice.AlwaysOnHotwordDetector;
@@ -30,6 +31,7 @@
 
 import java.nio.ByteBuffer;
 import java.util.Locale;
+import java.util.Objects;
 
 /**
  * This service included a basic HotwordDetectionService for testing.
@@ -43,6 +45,7 @@
     public static byte[] FAKE_BYTE_ARRAY_DATA = new byte[] {1, 2, 3};
 
     private boolean mReady = false;
+    private AlwaysOnHotwordDetector mAlwaysOnHotwordDetector = null;
 
     @Override
     public void onReady() {
@@ -61,21 +64,32 @@
         }
 
         final int testEvent = intent.getIntExtra(Utils.KEY_TEST_EVENT, -1);
+        Log.i(TAG, "testEvent = " + testEvent);
         if (testEvent == Utils.HOTWORD_DETECTION_SERVICE_TRIGGER_TEST) {
             runWithShellPermissionIdentity(() -> {
-                callCreateAlwaysOnHotwordDetector();
+                mAlwaysOnHotwordDetector = callCreateAlwaysOnHotwordDetector();
             });
         } else if (testEvent == Utils.HOTWORD_DETECTION_SERVICE_TRIGGER_WITHOUT_PERMISSION_TEST) {
             callCreateAlwaysOnHotwordDetector();
+        } else if (testEvent == Utils.HOTWORD_DETECTION_SERVICE_DSP_ONDETECT_TEST) {
+            runWithShellPermissionIdentity(() -> {
+                if (mAlwaysOnHotwordDetector != null) {
+                    mAlwaysOnHotwordDetector.triggerHardwareRecognitionEventForTest(/* status */ 0,
+                            /* soundModelHandle */ 100, /* captureAvailable */ true,
+                            /* captureSession */ 101, /* captureDelayMs */ 1000,
+                            /* capturePreambleMs */ 1001, /* triggerInData */ true,
+                            createFakeAudioFormat(), new byte[1024]);
+                }
+            });
         }
 
         return START_NOT_STICKY;
     }
 
-    private void callCreateAlwaysOnHotwordDetector() {
+    private AlwaysOnHotwordDetector callCreateAlwaysOnHotwordDetector() {
         Log.i(TAG, "callCreateAlwaysOnHotwordDetector()");
         try {
-            createAlwaysOnHotwordDetector(/* keyphrase */ "Hello Google",
+            return createAlwaysOnHotwordDetector(/* keyphrase */ "Hello Google",
                     Locale.forLanguageTag("en-US"),
                     createFakePersistableBundleData(),
                     createFakeSharedMemoryData(),
@@ -88,6 +102,7 @@
                         @Override
                         public void onDetected(AlwaysOnHotwordDetector.EventPayload eventPayload) {
                             Log.i(TAG, "onDetected");
+                            broadcastOnDetectedEvent();
                         }
 
                         @Override
@@ -121,6 +136,7 @@
                     Utils.BROADCAST_HOTWORD_DETECTION_SERVICE_TRIGGER_RESULT_INTENT,
                     Utils.HOTWORD_DETECTION_SERVICE_TRIGGER_SECURITY_EXCEPTION);
         }
+        return null;
     }
 
     private void broadcastIntentWithResult(String intentName, int result) {
@@ -150,6 +166,13 @@
         return persistableBundle;
     }
 
+    private AudioFormat createFakeAudioFormat() {
+        return new AudioFormat.Builder()
+                .setSampleRate(32000)
+                .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
+                .setChannelMask(AudioFormat.CHANNEL_IN_MONO).build();
+    }
+
     private void verifyHotwordDetectionServiceInitializedStatus(int status) {
         if (status == HotwordDetectionService.INITIALIZATION_STATUS_SUCCESS) {
             broadcastIntentWithResult(
@@ -157,4 +180,10 @@
                     Utils.HOTWORD_DETECTION_SERVICE_TRIGGER_SUCCESS);
         }
     }
+
+    private void broadcastOnDetectedEvent() {
+        broadcastIntentWithResult(
+                Utils.BROADCAST_HOTWORD_DETECTION_SERVICE_DSP_ONDETECT_RESULT_INTENT,
+                Utils.HOTWORD_DETECTION_SERVICE_ONDETECT_SUCCESS);
+    }
 }
diff --git a/tests/tests/voiceinteraction/service/src/android/voiceinteraction/service/MainHotwordDetectionService.java b/tests/tests/voiceinteraction/service/src/android/voiceinteraction/service/MainHotwordDetectionService.java
index e37ec08..8f2535f 100644
--- a/tests/tests/voiceinteraction/service/src/android/voiceinteraction/service/MainHotwordDetectionService.java
+++ b/tests/tests/voiceinteraction/service/src/android/voiceinteraction/service/MainHotwordDetectionService.java
@@ -28,6 +28,8 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.function.IntConsumer;
 
 public class MainHotwordDetectionService extends HotwordDetectionService {
@@ -44,7 +46,39 @@
             Log.w(TAG, "callback is null");
             return;
         }
-        callback.onDetected(null);
+        if (audioStream == null) {
+            Log.w(TAG, "audioStream is null");
+            return;
+        }
+
+        long startTime = System.currentTimeMillis();
+        try (InputStream fis =
+                     new ParcelFileDescriptor.AutoCloseInputStream(audioStream)) {
+
+            // We added the fake audio data and set "hotword!" string at the head. Then we simulated
+            // to verify the audio data with "hotword!" in HotwordDetectionService. If the audio
+            // data includes "hotword!", it means that the hotword is valid.
+            while (fis.available() < 8) {
+                try {
+                    Thread.sleep(10);
+                } catch (InterruptedException e) {
+                    // Nothing
+                }
+                if (System.currentTimeMillis() - startTime > timeoutMillis) {
+                    Log.w(TAG, "Over timeout");
+                    return;
+                }
+            }
+            Log.d(TAG, "fis.available() = " + fis.available());
+            byte[] buffer = new byte[8];
+            fis.read(buffer, 0, 8);
+            if(isSame(buffer, new byte[] {'h', 'o', 't', 'w', 'o', 'r', 'd', '!'}, buffer.length)) {
+                Log.d(TAG, "call callback.onDetected");
+                callback.onDetected(null);
+            }
+        } catch (IOException e) {
+            Log.w(TAG, "Failed to read data : ", e);
+        }
     }
 
     @Override
@@ -81,4 +115,19 @@
             statusCallback.accept(INITIALIZATION_STATUS_SUCCESS);
         }
     }
+
+    private boolean isSame(byte[] array1, byte[] array2, int length) {
+        if (length <= 0) {
+            return false;
+        }
+        if (array1 == null || array2 == null || array1.length < length || array2.length < length) {
+            return false;
+        }
+        for (int i = 0; i < length; i++) {
+            if (array1[i] != array2[i]) {
+                return false;
+            }
+        }
+        return true;
+    }
 }
diff --git a/tests/tests/voiceinteraction/src/android/voiceinteraction/cts/HotwordDetectionServiceBasicTest.java b/tests/tests/voiceinteraction/src/android/voiceinteraction/cts/HotwordDetectionServiceBasicTest.java
index 6fe406e..700f891 100644
--- a/tests/tests/voiceinteraction/src/android/voiceinteraction/cts/HotwordDetectionServiceBasicTest.java
+++ b/tests/tests/voiceinteraction/src/android/voiceinteraction/cts/HotwordDetectionServiceBasicTest.java
@@ -80,6 +80,42 @@
         receiver.unregisterQuietly();
     }
 
+    @Test
+    public void testHotwordDetectionService_onDetectFromDsp_success()
+            throws Throwable {
+        // Create AlwaysOnHotwordDetector and wait the HotwordDetectionService ready
+        final BlockingBroadcastReceiver receiver = new BlockingBroadcastReceiver(mContext,
+                Utils.BROADCAST_HOTWORD_DETECTION_SERVICE_TRIGGER_RESULT_INTENT);
+        receiver.register();
+
+        mActivityTestRule.getScenario().onActivity(activity -> {
+            activity.triggerHotwordDetectionServiceTest(
+                    Utils.HOTWORD_DETECTION_SERVICE_BASIC,
+                    Utils.HOTWORD_DETECTION_SERVICE_TRIGGER_TEST);
+        });
+
+        receiver.awaitForBroadcast(TIMEOUT_MS);
+        receiver.unregisterQuietly();
+
+        // Use AlwaysOnHotwordDetector to test the onDetect function of HotwordDetectionService
+        final BlockingBroadcastReceiver onDetectReceiver = new BlockingBroadcastReceiver(mContext,
+                Utils.BROADCAST_HOTWORD_DETECTION_SERVICE_DSP_ONDETECT_RESULT_INTENT);
+        onDetectReceiver.register();
+
+        mActivityTestRule.getScenario().onActivity(activity -> {
+            activity.triggerHotwordDetectionServiceTest(
+                    Utils.HOTWORD_DETECTION_SERVICE_BASIC,
+                    Utils.HOTWORD_DETECTION_SERVICE_DSP_ONDETECT_TEST);
+        });
+
+        final Intent intent = onDetectReceiver.awaitForBroadcast(TIMEOUT_MS);
+        assertThat(intent).isNotNull();
+        assertThat(intent.getIntExtra(Utils.KEY_TEST_RESULT, -1)).isEqualTo(
+                Utils.HOTWORD_DETECTION_SERVICE_ONDETECT_SUCCESS);
+
+        onDetectReceiver.unregisterQuietly();
+    }
+
     @Override
     public String getVoiceInteractionService() {
         return "android.voiceinteraction.cts/"
diff --git a/tests/tests/widget/res/layout/remoteviews_good.xml b/tests/tests/widget/res/layout/remoteviews_good.xml
index 1878890..c0f2abb 100644
--- a/tests/tests/widget/res/layout/remoteviews_good.xml
+++ b/tests/tests/widget/res/layout/remoteviews_good.xml
@@ -17,6 +17,7 @@
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/remoteViews_good"
+    android:theme="@style/Theme.DeviceDefault.DayNight.TestWidget"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">
diff --git a/tests/tests/widget/res/values-night/themes.xml b/tests/tests/widget/res/values-night/themes.xml
new file mode 100644
index 0000000..8791f1e
--- /dev/null
+++ b/tests/tests/widget/res/values-night/themes.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  -->
+<resources>
+    <style name="Theme.DeviceDefault.DayNight.TestWidget"
+        parent="@android:style/Theme.DeviceDefault.DayNight">
+        <item name="themeDimension">@dimen/remoteviews_theme_dimen</item>
+        <item name="themeDimension2">4.5dp</item>
+        <item name="themeDimension3">5.5dp</item>
+        <item name="themeDimension4">6.5dp</item>
+        <item name="themeColor">#0f00ffff</item>
+        <item name="themeString">Night</item>
+    </style>
+</resources>
\ No newline at end of file
diff --git a/tests/tests/widget/res/values/attrs.xml b/tests/tests/widget/res/values/attrs.xml
index b2bea6f..cff1d56 100644
--- a/tests/tests/widget/res/values/attrs.xml
+++ b/tests/tests/widget/res/values/attrs.xml
@@ -142,6 +142,10 @@
     <attr name="themeGravity" />
     <attr name="themeTileMode" />
     <attr name="themeAngle" />
+    <attr name="themeDimension2" />
+    <attr name="themeDimension3" />
+    <attr name="themeDimension4" />
+    <attr name="themeString" />
 
     <attr name="chronometerStyle" format="string" />
 
diff --git a/tests/tests/widget/res/values/colors.xml b/tests/tests/widget/res/values/colors.xml
index c947b7a..1b97411 100644
--- a/tests/tests/widget/res/values/colors.xml
+++ b/tests/tests/widget/res/values/colors.xml
@@ -34,4 +34,6 @@
     <color name="calendarview_unfocusedmonthdate_new">#4070F0F0</color>
     <color name="calendarview_week_number_new">#9090FF</color>
     <color name="calendarview_week_separatorline_new">#AFAF00</color>
+
+    <color name="remoteviews_theme_color">#0f00ff00</color>
 </resources>
diff --git a/tests/tests/widget/res/values/dimens.xml b/tests/tests/widget/res/values/dimens.xml
index da31065..46f9eda 100644
--- a/tests/tests/widget/res/values/dimens.xml
+++ b/tests/tests/widget/res/values/dimens.xml
@@ -62,4 +62,5 @@
     <dimen name="listviewfixed_layout_height">300dp</dimen>
 
     <dimen name="remoteviews_float_dimen">4.5dp</dimen>
+    <dimen name="remoteviews_theme_dimen">7.5123dp</dimen>
 </resources>
diff --git a/tests/tests/widget/res/values/strings.xml b/tests/tests/widget/res/values/strings.xml
index 91084e9..0bb9976 100644
--- a/tests/tests/widget/res/values/strings.xml
+++ b/tests/tests/widget/res/values/strings.xml
@@ -215,4 +215,6 @@
     <string name="radio_choice_1">choice 1</string>
     <string name="radio_choice_2">choice 2</string>
     <string name="radio_choice_3">choice 3</string>
+
+    <string name="remoteviews_theme_string">Day</string>
 </resources>
diff --git a/tests/tests/widget/res/values/themes.xml b/tests/tests/widget/res/values/themes.xml
new file mode 100644
index 0000000..bbce31f
--- /dev/null
+++ b/tests/tests/widget/res/values/themes.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  -->
+<resources>
+    <style name="Theme.DeviceDefault.DayNight.TestWidget"
+        parent="@android:style/Theme.DeviceDefault.DayNight">
+        <item name="themeDimension">5.5123dp</item>
+        <item name="themeDimension2">2.5dp</item>
+        <item name="themeDimension3">3.5dp</item>
+        <item name="themeDimension4">4.5dp</item>
+        <item name="themeColor">@color/remoteviews_theme_color</item>
+        <item name="themeString">@string/remoteviews_theme_string</item>
+    </style>
+</resources>
\ No newline at end of file
diff --git a/tests/tests/widget/src/android/widget/cts/RemoteViewsTest.java b/tests/tests/widget/src/android/widget/cts/RemoteViewsTest.java
index 2c78dfe..61a939b 100644
--- a/tests/tests/widget/src/android/widget/cts/RemoteViewsTest.java
+++ b/tests/tests/widget/src/android/widget/cts/RemoteViewsTest.java
@@ -34,6 +34,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.assertTrue;
 
 import android.app.Activity;
@@ -232,9 +233,8 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertEquals("", textView.getText().toString());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setTextViewText(R.id.remoteView_absolute, "");
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -246,9 +246,8 @@
         assertEquals(mContext.getResources().getDisplayMetrics().scaledDensity * 18,
                 textView.getTextSize(), 0.001f);
 
-        mExpectedException.expect(Throwable.class);
         mRemoteViews.setTextViewTextSize(R.id.remoteView_absolute, TypedValue.COMPLEX_UNIT_SP, 20);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(Throwable.class);
     }
 
     @Test
@@ -272,13 +271,13 @@
         Icon iconDark = Icon.createWithResource(mContext, R.drawable.icon_blue);
         mRemoteViews.setIcon(R.id.remoteView_image, "setImageIcon", iconLight, iconDark);
 
-        applyNightModeThenTest(false, () -> {
+        applyNightModeThenReapplyAndTest(false, () -> {
             assertNotNull(image.getDrawable());
             BitmapDrawable dLight = (BitmapDrawable) mContext.getDrawable(R.drawable.icon_green);
             WidgetTestUtils.assertEquals(dLight.getBitmap(),
                     ((BitmapDrawable) image.getDrawable()).getBitmap());
         });
-        applyNightModeThenTest(true, () -> {
+        applyNightModeThenReapplyAndTest(true, () -> {
             assertNotNull(image.getDrawable());
             BitmapDrawable dDark = (BitmapDrawable) mContext.getDrawable(R.drawable.icon_blue);
             WidgetTestUtils.assertEquals(dDark.getBitmap(),
@@ -313,9 +312,8 @@
         WidgetTestUtils.assertEquals(d.getBitmap(),
                 ((BitmapDrawable) image.getDrawable()).getBitmap());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setImageViewResource(R.id.remoteView_absolute, R.drawable.testimage);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -373,9 +371,8 @@
         assertEquals(base1, chronometer.getBase());
         assertEquals("invalid", chronometer.getFormat());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setChronometer(R.id.remoteView_absolute, base1, "invalid", true);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -390,9 +387,8 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertFalse(chronometer.isCountDown());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setChronometerCountDown(R.id.remoteView_absolute, true);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -416,9 +412,8 @@
         assertEquals(50, progress.getProgress());
         assertFalse(progress.isIndeterminate());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setProgressBar(R.id.remoteView_relative, 60, 50, false);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -540,9 +535,8 @@
         assertNotNull(image.getDrawable());
         WidgetTestUtils.assertEquals(bitmap, ((BitmapDrawable) image.getDrawable()).getBitmap());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setImageViewBitmap(R.id.remoteView_absolute, bitmap);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -557,9 +551,8 @@
         assertNotNull(image.getDrawable());
         WidgetTestUtils.assertEquals(bitmap, ((BitmapDrawable) image.getDrawable()).getBitmap());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setBitmap(R.id.remoteView_absolute, "setImageBitmap", bitmap);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -572,9 +565,8 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertTrue(progress.isIndeterminate());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setBoolean(R.id.remoteView_relative, "setIndeterminate", false);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -591,9 +583,26 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertEquals("", textView.getText().toString());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setCharSequence(R.id.remoteView_absolute, "setText", "");
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
+    }
+
+    @Test
+    public void testSetCharSequenceAttr() throws Throwable {
+        mRemoteViews.setCharSequenceAttr(R.id.remoteView_text, "setText", R.attr.themeString);
+        applyNightModeThenApplyAndTest(false, () -> {
+            TextView textView = (TextView) mResult.findViewById(R.id.remoteView_text);
+            assertEquals("Day", textView.getText().toString());
+        });
+
+        applyNightModeThenApplyAndTest(true, () -> {
+            TextView textView = (TextView) mResult.findViewById(R.id.remoteView_text);
+            assertEquals("Night", textView.getText().toString());
+        });
+
+        mRemoteViews.setCharSequenceAttr(R.id.remoteView_absolute, "setText",
+                R.attr.themeColor);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -624,9 +633,8 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertEquals(format, chronometer.getFormat());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setString(R.id.remoteView_image, "setFormat", format);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -649,9 +657,8 @@
                     mContext.getResources(), R.raw.testimage, imageViewBitmap.getConfig());
             WidgetTestUtils.assertEquals(expectedBitmap, imageViewBitmap);
 
-            mExpectedException.expect(ActionException.class);
             mRemoteViews.setUri(R.id.remoteView_absolute, "setImageURI", uri);
-            mRemoteViews.reapply(mContext, mResult);
+            assertThrowsOnReapply(ActionException.class);
         } finally {
             // remove the test image file
             imagefile.delete();
@@ -670,9 +677,8 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertSame(ColorStateList.valueOf(R.color.testcolor2), textView.getTextColors());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setTextColor(R.id.remoteView_absolute, R.color.testcolor1);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -693,10 +699,9 @@
         TestUtils.verifyCompoundDrawables(textView, -1,  R.drawable.icon_red, R.drawable.icon_black,
                 R.drawable.icon_green);
 
-        mExpectedException.expect(Throwable.class);
         mRemoteViews.setTextViewCompoundDrawables(R.id.remoteView_absolute, 0,
                 R.drawable.start, R.drawable.failed, 0);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(Throwable.class);
     }
 
     @Test
@@ -727,10 +732,9 @@
         TestUtils.verifyCompoundDrawables(textViewRtl, R.drawable.icon_red, -1,
                 R.drawable.icon_black, R.drawable.icon_green);
 
-        mExpectedException.expect(Throwable.class);
         mRemoteViews.setTextViewCompoundDrawablesRelative(R.id.remoteView_absolute, 0,
                 R.drawable.start, R.drawable.failed, 0);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(Throwable.class);
     }
 
     @LargeTest
@@ -811,9 +815,8 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertEquals(base2, chronometer.getBase());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setLong(R.id.remoteView_absolute, "setBase", base1);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -825,9 +828,8 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertEquals(0.5f, linearLayout.getWeightSum(), 0.001f);
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setFloat(R.id.remoteView_absolute, "setWeightSum", 1.0f);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -840,9 +842,8 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertEquals(b, customView.getByteField());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setByte(R.id.remoteView_absolute, "setByteField", b);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -854,9 +855,8 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertEquals('q', customView.getCharField());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setChar(R.id.remoteView_absolute, "setCharField", 'w');
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -868,9 +868,8 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertEquals(0.5, customView.getDoubleField(), 0.001f);
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setDouble(R.id.remoteView_absolute, "setDoubleField", 1.0);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -883,9 +882,8 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertEquals(s, customView.getShortField());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setShort(R.id.remoteView_absolute, "setShortField", s);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -902,9 +900,8 @@
         assertEquals("brexit", fromRemote.getString("STR", ""));
         assertEquals(2016, fromRemote.getInt("INT", 0));
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setBundle(R.id.remoteView_absolute, "setBundleField", bundle);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -922,9 +919,8 @@
         assertEquals("brexit", fromRemote.getStringExtra("STR"));
         assertEquals(2016, fromRemote.getIntExtra("INT", 0));
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setIntent(R.id.remoteView_absolute, "setIntentField", intent);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -1143,6 +1139,83 @@
     }
 
     @Test
+    public void testSetViewLayoutMarginAttr() throws Throwable {
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text, MARGIN_LEFT, R.attr.themeDimension);
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text, MARGIN_TOP, R.attr.themeDimension2);
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text, MARGIN_RIGHT, R.attr.themeDimension3);
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text, MARGIN_BOTTOM, R.attr.themeDimension4);
+
+        applyNightModeThenApplyAndTest(false, () -> {
+            View textView = mResult.findViewById(R.id.remoteView_text);
+            DisplayMetrics displayMetrics = textView.getResources().getDisplayMetrics();
+            assertMargins(
+                    textView,
+                    resolveDimenOffset(5.5f, COMPLEX_UNIT_DIP, displayMetrics),
+                    resolveDimenOffset(2.5f, COMPLEX_UNIT_DIP, displayMetrics),
+                    resolveDimenOffset(3.5f, COMPLEX_UNIT_DIP, displayMetrics),
+                    resolveDimenOffset(4.5f, COMPLEX_UNIT_DIP, displayMetrics));
+        });
+
+        applyNightModeThenApplyAndTest(true, () -> {
+            View textView = mResult.findViewById(R.id.remoteView_text);
+            DisplayMetrics displayMetrics = textView.getResources().getDisplayMetrics();
+            assertMargins(
+                    textView,
+                    resolveDimenOffset(7.5123f, COMPLEX_UNIT_DIP, displayMetrics),
+                    resolveDimenOffset(4.5f, COMPLEX_UNIT_DIP, displayMetrics),
+                    resolveDimenOffset(5.5f, COMPLEX_UNIT_DIP, displayMetrics),
+                    resolveDimenOffset(6.5f, COMPLEX_UNIT_DIP, displayMetrics));
+        });
+
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text, MARGIN_LEFT, R.attr.themeColor);
+        assertThrowsOnReapply(ActionException.class);
+    }
+
+    @Test
+    public void testSetViewLayoutMarginAttr_layoutDirection() throws Throwable {
+        View textViewLtr = mResult.findViewById(R.id.remoteView_text_ltr);
+        DisplayMetrics displayMetrics = textViewLtr.getResources().getDisplayMetrics();
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text_ltr, MARGIN_START, R.attr.themeDimension);
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text_ltr, MARGIN_TOP, R.attr.themeDimension2);
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text_ltr, MARGIN_END, R.attr.themeDimension3);
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text_ltr, MARGIN_BOTTOM, R.attr.themeDimension4);
+        mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
+        assertMargins(
+                textViewLtr,
+                resolveDimenOffset(5.5f, COMPLEX_UNIT_DIP, displayMetrics),
+                resolveDimenOffset(2.5f, COMPLEX_UNIT_DIP, displayMetrics),
+                resolveDimenOffset(3.5f, COMPLEX_UNIT_DIP, displayMetrics),
+                resolveDimenOffset(4.5f, COMPLEX_UNIT_DIP, displayMetrics));
+
+        View textViewRtl = mResult.findViewById(R.id.remoteView_text_rtl);
+        displayMetrics = textViewRtl.getResources().getDisplayMetrics();
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text_rtl, MARGIN_START, R.attr.themeDimension);
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text_rtl, MARGIN_TOP, R.attr.themeDimension2);
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text_rtl, MARGIN_END, R.attr.themeDimension3);
+        mRemoteViews.setViewLayoutMarginAttr(
+                R.id.remoteView_text_rtl, MARGIN_BOTTOM, R.attr.themeDimension4);
+        mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
+        assertMargins(
+                textViewRtl,
+                resolveDimenOffset(3.5f, COMPLEX_UNIT_DIP, displayMetrics),
+                resolveDimenOffset(2.5f, COMPLEX_UNIT_DIP, displayMetrics),
+                resolveDimenOffset(5.5123f, COMPLEX_UNIT_DIP, displayMetrics),
+                resolveDimenOffset(4.5f, COMPLEX_UNIT_DIP, displayMetrics));
+    }
+
+    @Test
     public void testSetViewLayoutWidth() throws Throwable {
         View textView = mResult.findViewById(R.id.remoteView_text);
         DisplayMetrics displayMetrics = textView.getResources().getDisplayMetrics();
@@ -1174,6 +1247,20 @@
     }
 
     @Test
+    public void testSetViewLayoutWidthAttr() throws Throwable {
+        View textView = mResult.findViewById(R.id.remoteView_text);
+        mRemoteViews.setViewLayoutWidthAttr(R.id.remoteView_text, R.attr.themeDimension);
+        mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
+        assertEquals(
+                resolveDimenSize(5.5123f, COMPLEX_UNIT_DIP,
+                        textView.getResources().getDisplayMetrics()),
+                textView.getLayoutParams().width);
+
+        mRemoteViews.setViewLayoutWidthAttr(R.id.remoteView_text, R.attr.themeColor);
+        assertThrowsOnReapply(ActionException.class);
+    }
+
+    @Test
     public void testSetViewLayoutHeight() throws Throwable {
         View textView = mResult.findViewById(R.id.remoteView_text);
         DisplayMetrics displayMetrics = textView.getResources().getDisplayMetrics();
@@ -1205,6 +1292,21 @@
     }
 
     @Test
+    public void testSetViewLayoutHeightAttr() throws Throwable {
+        View textView = mResult.findViewById(R.id.remoteView_text);
+        mRemoteViews.setViewLayoutHeightAttr(R.id.remoteView_text, R.attr.themeDimension);
+        mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
+        assertEquals(
+                resolveDimenSize(5.5123f, COMPLEX_UNIT_DIP,
+                        textView.getResources().getDisplayMetrics()),
+                textView.getLayoutParams().height);
+
+        mRemoteViews.setViewLayoutHeightAttr(
+                R.id.remoteView_text, R.attr.themeColor);
+        assertThrowsOnReapply(ActionException.class);
+    }
+
+    @Test
     public void testSetIntDimen_fromResources() throws Throwable {
         TextView textView = (TextView) mResult.findViewById(R.id.remoteView_text);
         int expectedValue = mContext.getResources().getDimensionPixelSize(R.dimen.popup_row_height);
@@ -1214,10 +1316,9 @@
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         assertEquals(expectedValue, textView.getCompoundDrawablePadding());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setIntDimen(R.id.remoteView_text, "setCompoundDrawablePadding",
                 R.color.testcolor1);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -1243,13 +1344,36 @@
         assertEquals(resolveDimenSize(12f, TypedValue.COMPLEX_UNIT_PX, displayMetrics),
                 textView.getCompoundDrawablePadding());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setIntDimen(R.id.remoteView_text, "setCompoundDrawablePadding",
                 12f, 123456);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
+    public void testSetIntDimenAttr() throws Throwable {
+        mRemoteViews.setIntDimenAttr(R.id.remoteView_text, "setCompoundDrawablePadding",
+                R.attr.themeDimension);
+        applyNightModeThenApplyAndTest(false, () -> {
+            TextView textView = (TextView) mResult.findViewById(R.id.remoteView_text);
+            assertEquals(resolveDimenSize(5.5123f, COMPLEX_UNIT_DIP,
+                    textView.getResources().getDisplayMetrics()),
+                    textView.getCompoundDrawablePadding());
+        });
+
+        applyNightModeThenApplyAndTest(true, () -> {
+            TextView textView = (TextView) mResult.findViewById(R.id.remoteView_text);
+            assertEquals(resolveDimenSize(7.5123f, COMPLEX_UNIT_DIP,
+                    textView.getResources().getDisplayMetrics()),
+                    textView.getCompoundDrawablePadding());
+        });
+
+        mRemoteViews.setIntDimenAttr(R.id.remoteView_text, "setCompoundDrawablePadding",
+                R.attr.themeColor);
+        assertThrowsOnReapply(ActionException.class);
+    }
+
+
+    @Test
     public void testSetFloatDimen_fromResources() throws Throwable {
         TextView textView = (TextView) mResult.findViewById(R.id.remoteView_text);
 
@@ -1259,9 +1383,8 @@
         assertEquals(textView.getResources().getDimension(R.dimen.remoteviews_float_dimen),
                 textView.getTextScaleX(), 1e-4f);
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setFloatDimen(R.id.remoteView_text, "setTextScaleX", R.color.testcolor1);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -1287,10 +1410,30 @@
         assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 3.5f, displayMetrics),
                 textView.getTextScaleX(), 1e-4f);
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setFloatDimen(R.id.remoteView_text, "setTextScaleX",
                 3.5f, 123456);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
+    }
+
+    @Test
+    public void testSetFloatDimenAttr() throws Throwable {
+        mRemoteViews.setFloatDimenAttr(R.id.remoteView_text, "setTextScaleX",
+                R.attr.themeDimension);
+        applyNightModeThenApplyAndTest(false, () -> {
+            TextView textView = (TextView) mResult.findViewById(R.id.remoteView_text);
+            assertEquals(TypedValue.applyDimension(COMPLEX_UNIT_DIP, 5.5123f,
+                    textView.getResources().getDisplayMetrics()), textView.getTextScaleX(), 1e-4f);
+        });
+
+        applyNightModeThenApplyAndTest(true, () -> {
+            TextView textView = (TextView) mResult.findViewById(R.id.remoteView_text);
+            assertEquals(TypedValue.applyDimension(COMPLEX_UNIT_DIP, 7.5123f,
+                    textView.getResources().getDisplayMetrics()), textView.getTextScaleX(), 1e-4f);
+        });
+
+        mRemoteViews.setFloatDimenAttr(R.id.remoteView_text, "setTextScaleX",
+                R.attr.themeColor);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -1300,11 +1443,30 @@
 
         mRemoteViews.setColor(R.id.remoteView_text, "setTextColor", R.color.testcolor1);
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
-        assertEquals(ColorStateList.valueOf(expectedValue), textView.getTextColors());
+        assertSameColorStateList(ColorStateList.valueOf(expectedValue), textView.getTextColors());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setColor(R.id.remoteView_text, "setTextColor", R.dimen.popup_row_height);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
+    }
+
+    @Test
+    public void testSetColorAttr() throws Throwable {
+        // Ensure the configuration is "light"
+        mRemoteViews.setColorAttr(R.id.remoteView_text, "setTextColor", R.attr.themeColor);
+
+        applyNightModeThenApplyAndTest(false, () -> {
+            TextView textView = (TextView) mResult.findViewById(R.id.remoteView_text);
+            assertSameColorStateList(ColorStateList.valueOf(0x0f00ff00), textView.getTextColors());
+        });
+
+        // Switch to night mode
+        applyNightModeThenApplyAndTest(true, () -> {
+            TextView textView = (TextView) mResult.findViewById(R.id.remoteView_text);
+            assertSameColorStateList(ColorStateList.valueOf(0x0f00ffff), textView.getTextColors());
+        });
+
+        mRemoteViews.setColorAttr(R.id.remoteView_text, "setTextColor", R.attr.themeDimension);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -1316,7 +1478,7 @@
                 new int[] {Color.BLACK, Color.WHITE});
         mRemoteViews.setColorStateList(R.id.remoteView_progress, "setProgressTintList", tintList);
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
-        assertEquals(tintList, progressBar.getProgressTintList());
+        assertSameColorStateList(tintList, progressBar.getProgressTintList());
 
         mRemoteViews.setColorStateList(R.id.remoteView_progress, "setProgressTintList", null);
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
@@ -1325,12 +1487,32 @@
         TextView textView = mResult.findViewById(R.id.remoteView_text);
         mRemoteViews.setColorStateList(R.id.remoteView_text, "setTextColor", tintList);
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
-        assertEquals(tintList, textView.getTextColors());
+        assertSameColorStateList(tintList, textView.getTextColors());
 
         ColorStateList solid = ColorStateList.valueOf(Color.RED);
         mRemoteViews.setColorStateList(R.id.remoteView_text, "setBackgroundTintList", solid);
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
-        assertEquals(solid, textView.getBackgroundTintList());
+        assertSameColorStateList(solid, textView.getBackgroundTintList());
+    }
+
+    @Test
+    public void testSetColorStateListAttr() throws Throwable {
+        mRemoteViews.setColorStateListAttr(R.id.remoteView_progress, "setProgressTintList",
+                R.attr.themeColor);
+        applyNightModeThenApplyAndTest(false, () -> {
+            ProgressBar progressBar = mResult.findViewById(R.id.remoteView_progress);
+            assertSameColorStateList(ColorStateList.valueOf(0x0f00ff00),
+                    progressBar.getProgressTintList());
+        });
+
+        applyNightModeThenApplyAndTest(true, () -> {
+            ProgressBar progressBar = mResult.findViewById(R.id.remoteView_progress);
+            assertSameColorStateList(ColorStateList.valueOf(0x0f00ffff),
+                    progressBar.getProgressTintList());
+        });
+
+        mRemoteViews.setColorAttr(R.id.remoteView_text, "setTextColor", R.attr.themeDimension);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -1338,12 +1520,16 @@
         TextView textView = (TextView) mResult.findViewById(R.id.remoteView_text);
         mRemoteViews.setColorInt(R.id.remoteView_text, "setTextColor", Color.BLACK, Color.WHITE);
 
-        applyNightModeThenTest(
+        applyNightModeThenReapplyAndTest(
                 false,
-                () -> assertEquals(ColorStateList.valueOf(Color.BLACK), textView.getTextColors()));
-        applyNightModeThenTest(
+                () -> assertSameColorStateList(ColorStateList.valueOf(Color.BLACK),
+                        textView.getTextColors())
+        );
+        applyNightModeThenReapplyAndTest(
                 true,
-                () -> assertEquals(ColorStateList.valueOf(Color.WHITE), textView.getTextColors()));
+                () -> assertSameColorStateList(ColorStateList.valueOf(Color.WHITE),
+                        textView.getTextColors())
+        );
     }
 
     @Test
@@ -1354,19 +1540,18 @@
         mRemoteViews.setColorStateList(R.id.remoteView_text, "setTextColor",
                 R.color.testcolorstatelist1);
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
-        assertEquals(expectedValue, textView.getTextColors());
+        assertSameColorStateList(expectedValue, textView.getTextColors());
 
         mRemoteViews.setColorStateList(R.id.remoteView_text, "setTextColor",
                 R.color.testcolor1);
         mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
         expectedValue = mContext.getResources().getColorStateList(R.color.testcolor1,
                 mContext.getTheme());
-        assertEquals(expectedValue, textView.getTextColors());
+        assertSameColorStateList(expectedValue, textView.getTextColors());
 
-        mExpectedException.expect(ActionException.class);
         mRemoteViews.setColorStateList(R.id.remoteView_text, "setTextColor",
                 R.dimen.popup_row_height);
-        mRemoteViews.reapply(mContext, mResult);
+        assertThrowsOnReapply(ActionException.class);
     }
 
     @Test
@@ -1376,8 +1561,10 @@
         ColorStateList darkMode = ColorStateList.valueOf(Color.WHITE);
         mRemoteViews.setColorStateList(R.id.remoteView_text, "setTextColor", lightMode, darkMode);
 
-        applyNightModeThenTest(false, () -> assertEquals(lightMode, textView.getTextColors()));
-        applyNightModeThenTest(true, () -> assertEquals(darkMode, textView.getTextColors()));
+        applyNightModeThenReapplyAndTest(false,
+                () -> assertSameColorStateList(lightMode, textView.getTextColors()));
+        applyNightModeThenReapplyAndTest(true,
+                () -> assertSameColorStateList(darkMode, textView.getTextColors()));
     }
 
     @Test
@@ -1424,6 +1611,38 @@
     }
 
     @Test
+    public void testSetViewOutlinePreferredRadiusAttr() throws Throwable {
+        mRemoteViews.setViewOutlinePreferredRadiusAttr(
+                R.id.remoteViews_good, R.attr.themeDimension);
+
+        applyNightModeThenApplyAndTest(false,
+                () -> {
+                    View root = mResult.findViewById(R.id.remoteViews_good);
+                    assertEquals(
+                            TypedValue.applyDimension(COMPLEX_UNIT_DIP, 5.5123f,
+                                    root.getResources().getDisplayMetrics()),
+                            ((RemoteViews.RemoteViewOutlineProvider)
+                                    root.getOutlineProvider()).getRadius(),
+                            0.1 /* delta */);
+                });
+
+        applyNightModeThenApplyAndTest(true,
+                () -> {
+                    View root = mResult.findViewById(R.id.remoteViews_good);
+                    assertEquals(
+                            TypedValue.applyDimension(COMPLEX_UNIT_DIP, 7.5123f,
+                                    root.getResources().getDisplayMetrics()),
+                            ((RemoteViews.RemoteViewOutlineProvider)
+                                    root.getOutlineProvider()).getRadius(),
+                            0.1 /* delta */);
+                });
+
+        mRemoteViews.setViewOutlinePreferredRadiusAttr(
+                R.id.remoteViews_good, R.attr.themeColor);
+        assertThrowsOnReapply(ActionException.class);
+    }
+
+    @Test
     public void testSetSwitchChecked() throws Throwable {
         Switch toggle = mResult.findViewById(R.id.remoteView_switch);
 
@@ -1526,8 +1745,23 @@
      * Sets the night mode, reapplies the remote views, runs test, and then restores the previous
      * night mode.
      */
-    private void applyNightModeThenTest(
+    private void applyNightModeThenReapplyAndTest(boolean nightMode, ThrowingRunnable test)
+            throws Throwable {
+        applyNightModeAndTest(nightMode, () -> mRemoteViews.reapply(mContext, mResult), test);
+    }
+
+    /**
+     * Sets the night mode, reapplies the remote views, runs test, and then restores the previous
+     * night mode.
+     */
+    private void applyNightModeThenApplyAndTest(
             boolean nightMode, ThrowingRunnable test) throws Throwable {
+        applyNightModeAndTest(nightMode,
+                () -> mResult = mRemoteViews.apply(mContext, null), test);
+    }
+
+    private void applyNightModeAndTest(
+            boolean nightMode, Runnable uiThreadSetup, ThrowingRunnable test) throws Throwable {
         final String nightModeText = runShellCommand("cmd uimode night");
         final String[] nightModeSplit = nightModeText.split(":");
         if (nightModeSplit.length != 2) {
@@ -1537,7 +1771,7 @@
 
         try {
             runShellCommand("cmd uimode night " + (nightMode ? "yes" : "no"));
-            mActivityRule.runOnUiThread(() -> mRemoteViews.reapply(mContext, mResult));
+            mActivityRule.runOnUiThread(uiThreadSetup);
             test.run();
         } finally {
             runShellCommand("cmd uimode night " + initialNightMode);
@@ -1576,4 +1810,12 @@
             mIntent = intent;
         }
     }
+
+    private void assertSameColorStateList(ColorStateList expected, ColorStateList actual) {
+        assertEquals(expected.toString(), actual.toString());
+    }
+
+    private <T extends Throwable>  void assertThrowsOnReapply(Class<T> klass) throws Throwable {
+        assertThrows(klass, () -> mRemoteViews.reapply(mContext, mResult));
+    }
 }
diff --git a/tests/tests/widget/src/android/widget/cts/ToastTest.java b/tests/tests/widget/src/android/widget/cts/ToastTest.java
index 5fbd5c0..08b9067 100644
--- a/tests/tests/widget/src/android/widget/cts/ToastTest.java
+++ b/tests/tests/widget/src/android/widget/cts/ToastTest.java
@@ -932,10 +932,12 @@
     }
 
     @Test
-    public void testRateLimitingToasts() throws Throwable {
+    public void testRateLimitingToastsWhenInBackground() throws Throwable {
         // enable rate limiting to test it
         SystemUtil.runWithShellPermissionIdentity(() -> mNotificationManager
                 .setToastRateLimitingEnabled(true));
+        // move to background
+        mActivityRule.finishActivity();
 
         long totalTimeSpentMs = 0;
         int shownToastsNum = 0;
@@ -966,6 +968,18 @@
     }
 
     @Test
+    public void testDontRateLimitToastsWhenInForeground() throws Throwable {
+        // enable rate limiting to test it
+        SystemUtil.runWithShellPermissionIdentity(() -> mNotificationManager
+                .setToastRateLimitingEnabled(true));
+
+        List<TextToastInfo> toasts =
+                createTextToasts(TOAST_RATE_LIMITS[0] + 1, "Text", Toast.LENGTH_SHORT);
+        showToasts(toasts);
+        assertTextToastsShownAndHidden(toasts);
+    }
+
+    @Test
     public void testCustomToastPostedWhileInForeground_notShownWhenAppGoesToBackground()
             throws Throwable {
         List<CustomToastInfo> toasts = createCustomToasts(2, "Custom", Toast.LENGTH_SHORT);
@@ -984,6 +998,8 @@
         // enable rate limiting to test it
         SystemUtil.runWithShellPermissionIdentity(() -> mNotificationManager
                 .setToastRateLimitingEnabled(true));
+        // move to background
+        mActivityRule.finishActivity();
 
         int highestToastRateLimit = TOAST_RATE_LIMITS[TOAST_RATE_LIMITS.length - 1];
         List<TextToastInfo> toasts = createTextToasts(highestToastRateLimit + 1, "Text",
diff --git a/tests/tests/wifi/src/android/net/wifi/cts/CoexUnsafeChannelTest.java b/tests/tests/wifi/src/android/net/wifi/cts/CoexUnsafeChannelTest.java
index 8b1cec7..a955143 100644
--- a/tests/tests/wifi/src/android/net/wifi/cts/CoexUnsafeChannelTest.java
+++ b/tests/tests/wifi/src/android/net/wifi/cts/CoexUnsafeChannelTest.java
@@ -16,6 +16,8 @@
 
 package android.net.wifi.cts;
 
+import static android.net.wifi.CoexUnsafeChannel.POWER_CAP_NONE;
+
 import android.net.wifi.CoexUnsafeChannel;
 import android.net.wifi.WifiScanner;
 import android.test.AndroidTestCase;
@@ -33,26 +35,17 @@
     public void testNoPowerCapConstructor() {
         CoexUnsafeChannel unsafeChannel = new CoexUnsafeChannel(TEST_BAND, TEST_CHANNEL);
 
-        assertEquals(unsafeChannel.getBand(), TEST_BAND);
-        assertEquals(unsafeChannel.getChannel(), TEST_CHANNEL);
-        assertFalse(unsafeChannel.isPowerCapAvailable());
+        assertEquals(TEST_BAND, unsafeChannel.getBand());
+        assertEquals(TEST_CHANNEL, unsafeChannel.getChannel());
+        assertEquals(POWER_CAP_NONE, unsafeChannel.getPowerCapDbm());
     }
 
     public void testPowerCapConstructor() {
         CoexUnsafeChannel unsafeChannel = new CoexUnsafeChannel(TEST_BAND, TEST_CHANNEL,
                 TEST_POWER_CAP_DBM);
 
-        assertEquals(unsafeChannel.getBand(), TEST_BAND);
-        assertEquals(unsafeChannel.getChannel(), TEST_CHANNEL);
-        assertTrue(unsafeChannel.isPowerCapAvailable());
-        assertEquals(unsafeChannel.getPowerCapDbm(), TEST_POWER_CAP_DBM);
-    }
-
-    public void testSetPowerCap() {
-        CoexUnsafeChannel unsafeChannel = new CoexUnsafeChannel(TEST_BAND, TEST_CHANNEL);
-
-        unsafeChannel.setPowerCapDbm(TEST_POWER_CAP_DBM);
-
-        assertEquals(unsafeChannel.getPowerCapDbm(), TEST_POWER_CAP_DBM);
+        assertEquals(TEST_BAND, unsafeChannel.getBand());
+        assertEquals(TEST_CHANNEL, unsafeChannel.getChannel());
+        assertEquals(TEST_POWER_CAP_DBM, unsafeChannel.getPowerCapDbm());
     }
 }
diff --git a/tests/tests/wifi/src/android/net/wifi/cts/ConnectedNetworkScorerTest.java b/tests/tests/wifi/src/android/net/wifi/cts/ConnectedNetworkScorerTest.java
index 3b979cc..101dc7c 100644
--- a/tests/tests/wifi/src/android/net/wifi/cts/ConnectedNetworkScorerTest.java
+++ b/tests/tests/wifi/src/android/net/wifi/cts/ConnectedNetworkScorerTest.java
@@ -22,6 +22,7 @@
 import static android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE;
 import static android.net.NetworkCapabilities.NET_CAPABILITY_OEM_PAID;
 import static android.net.NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE;
+import static android.net.wifi.WifiUsabilityStatsEntry.RadioStats;
 import static android.net.wifi.WifiUsabilityStatsEntry.RateStats;
 import static android.net.wifi.WifiUsabilityStatsEntry.PROBE_STATUS_FAILURE;
 import static android.net.wifi.WifiUsabilityStatsEntry.PROBE_STATUS_NO_PROBE;
@@ -299,13 +300,28 @@
                                 .isAtLeast(0);
                         assertThat(statsEntry.getRateStats().get(0).getRateMcsIdx()).isAtLeast(0);
                         assertThat(statsEntry.getRateStats().get(0).getBitRateInKbps())
-                                .isGreaterThan(0);
+                                .isAtLeast(0);
                         assertThat(statsEntry.getRateStats().get(0).getTxMpdu()).isAtLeast(0);
                         assertThat(statsEntry.getRateStats().get(0).getRxMpdu()).isAtLeast(0);
                         assertThat(statsEntry.getRateStats().get(0).getMpduLost()).isAtLeast(0);
                         assertThat(statsEntry.getRateStats().get(0).getRetries()).isAtLeast(0);
                     }
+                    RadioStats radioStat = new RadioStats(0, 10, 11, 12, 13, 14, 15, 16, 17, 18);
                     assertThat(statsEntry.getWifiLinkLayerRadioStats()).isNotNull();
+                    int numRadios = statsEntry.getWifiLinkLayerRadioStats().size();
+                    for (int i = 0; i < numRadios; i++) {
+                        RadioStats radioStats = statsEntry.getWifiLinkLayerRadioStats().get(i);
+                        assertThat(radioStats.getRadioId()).isAtLeast(0);
+                        assertThat(radioStats.getTotalRadioOnTimeMillis()).isAtLeast(0);
+                        assertThat(radioStats.getTotalRadioTxTimeMillis()).isAtLeast(0);
+                        assertThat(radioStats.getTotalRadioRxTimeMillis()).isAtLeast(0);
+                        assertThat(radioStats.getTotalScanTimeMillis()).isAtLeast(0);
+                        assertThat(radioStats.getTotalNanScanTimeMillis()).isAtLeast(0);
+                        assertThat(radioStats.getTotalBackgroundScanTimeMillis()).isAtLeast(0);
+                        assertThat(radioStats.getTotalRoamScanTimeMillis()).isAtLeast(0);
+                        assertThat(radioStats.getTotalPnoScanTimeMillis()).isAtLeast(0);
+                        assertThat(radioStats.getTotalHotspot2ScanTimeMillis()).isAtLeast(0);
+                    }
                 }
                 // no longer populated, return default value.
                 assertThat(statsEntry.getCellularDataNetworkType())
diff --git a/tests/tests/wifi/src/android/net/wifi/cts/WifiEnterpriseConfigTest.java b/tests/tests/wifi/src/android/net/wifi/cts/WifiEnterpriseConfigTest.java
index 218276c..ec7f740 100644
--- a/tests/tests/wifi/src/android/net/wifi/cts/WifiEnterpriseConfigTest.java
+++ b/tests/tests/wifi/src/android/net/wifi/cts/WifiEnterpriseConfigTest.java
@@ -1026,7 +1026,7 @@
         }
         WifiEnterpriseConfig config = new WifiEnterpriseConfig();
 
-        assertEquals("", config.getDecoratedIdentityPrefix());
+        assertNull(config.getDecoratedIdentityPrefix());
         config.setDecoratedIdentityPrefix(TEST_DECORATED_IDENTITY_PREFIX);
         assertEquals(TEST_DECORATED_IDENTITY_PREFIX, config.getDecoratedIdentityPrefix());
     }
diff --git a/tests/tests/wifi/src/android/net/wifi/cts/WifiManagerTest.java b/tests/tests/wifi/src/android/net/wifi/cts/WifiManagerTest.java
index 3ca5d3c..2987d0f 100644
--- a/tests/tests/wifi/src/android/net/wifi/cts/WifiManagerTest.java
+++ b/tests/tests/wifi/src/android/net/wifi/cts/WifiManagerTest.java
@@ -29,6 +29,7 @@
 
 import static org.junit.Assert.assertNotEquals;
 
+import android.annotation.NonNull;
 import android.app.UiAutomation;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -1118,8 +1119,8 @@
     }
 
     /**
-     * Verify that {@link WifiManager#addetworkPrivileged} throws a SecurityException when called
-     * by a normal app.
+     * Verify that {@link WifiManager#addNetworkPrivileged(WifiConfiguration)} throws a
+     * SecurityException when called by a normal app.
      */
     public void testAddNetworkPrivilegedNotAllowedForNormalApps() {
         if (!WifiFeature.isWifiSupported(getContext())) {
@@ -1140,7 +1141,8 @@
     }
 
     /**
-     * Verify {@link WifiManager#addetworkPrivileged} throws an exception when null is the input.
+     * Verify {@link WifiManager#addNetworkPrivileged(WifiConfiguration)} throws an exception when
+     * null is the input.
      */
     public void testAddNetworkPrivilegedBadInput() {
         if (!WifiFeature.isWifiSupported(getContext())) {
@@ -1163,8 +1165,8 @@
     }
 
     /**
-     * Verify {@link WifiManager#addetworkPrivileged} returns the proper failure status code
-     * when adding an enterprise config with mandatory fields not filled in.
+     * Verify {@link WifiManager#addNetworkPrivileged(WifiConfiguration)} returns the proper
+     * failure status code when adding an enterprise config with mandatory fields not filled in.
      */
     public void testAddNetworkPrivilegedFailureBadEnterpriseConfig() {
         if (!WifiFeature.isWifiSupported(getContext())) {
@@ -1193,8 +1195,8 @@
     }
 
     /**
-     * Verify {@link WifiManager#addetworkPrivileged} works properly when the calling app has
-     * permissions.
+     * Verify {@link WifiManager#addNetworkPrivileged(WifiConfiguration)} works properly when the
+     * calling app has permissions.
      */
     public void testAddNetworkPrivilegedSuccess() {
         if (!WifiFeature.isWifiSupported(getContext())) {
@@ -2962,6 +2964,28 @@
             assertFalse(mWifiManager.isVerboseLoggingEnabled());
             assertEquals(WifiManager.VERBOSE_LOGGING_LEVEL_DISABLED,
                     mWifiManager.getVerboseLoggingLevel());
+        } finally {
+            if (currState != null) mWifiManager.setVerboseLoggingEnabled(currState);
+            uiAutomation.dropShellPermissionIdentity();
+        }
+    }
+
+    /**
+     * Test {@link WifiManager#setVerboseLoggingLevel(int)} for show key mode.
+     * TODO(b/167575586): Wait for S SDK finalization to determine the final minSdkVersion.
+     */
+    @SdkSuppress(minSdkVersion = 31, codeName = "S")
+    public void testSetVerboseLoggingShowKeyModeNonUserBuild() throws Exception {
+        if (Build.TYPE.equals("user")) return;
+        if (!WifiFeature.isWifiSupported(getContext())) {
+            // skip the test if WiFi is not supported
+            return;
+        }
+        UiAutomation uiAutomation = InstrumentationRegistry.getInstrumentation().getUiAutomation();
+        Boolean currState = null;
+        try {
+            uiAutomation.adoptShellPermissionIdentity();
+            currState = mWifiManager.isVerboseLoggingEnabled();
 
             mWifiManager.setVerboseLoggingLevel(WifiManager.VERBOSE_LOGGING_LEVEL_ENABLED_SHOW_KEY);
             assertTrue(mWifiManager.isVerboseLoggingEnabled());
@@ -2974,6 +2998,36 @@
     }
 
     /**
+     * Test {@link WifiManager#setVerboseLoggingLevel(int)} for show key mode.
+     * TODO(b/167575586): Wait for S SDK finalization to determine the final minSdkVersion.
+     */
+    @SdkSuppress(minSdkVersion = 31, codeName = "S")
+    public void testSetVerboseLoggingShowKeyModeUserBuild() throws Exception {
+        if (!Build.TYPE.equals("user")) return;
+        if (!WifiFeature.isWifiSupported(getContext())) {
+            // skip the test if WiFi is not supported
+            return;
+        }
+        UiAutomation uiAutomation = InstrumentationRegistry.getInstrumentation().getUiAutomation();
+        Boolean currState = null;
+        try {
+            uiAutomation.adoptShellPermissionIdentity();
+            currState = mWifiManager.isVerboseLoggingEnabled();
+
+            mWifiManager.setVerboseLoggingLevel(WifiManager.VERBOSE_LOGGING_LEVEL_ENABLED_SHOW_KEY);
+            assertTrue(mWifiManager.isVerboseLoggingEnabled());
+            assertEquals(WifiManager.VERBOSE_LOGGING_LEVEL_ENABLED_SHOW_KEY,
+                    mWifiManager.getVerboseLoggingLevel());
+            fail("Verbosing logging show key mode should not be allowed for user build.");
+        } catch (SecurityException e) {
+            // expected
+        } finally {
+            if (currState != null) mWifiManager.setVerboseLoggingEnabled(currState);
+            uiAutomation.dropShellPermissionIdentity();
+        }
+    }
+
+    /**
      * Tests {@link WifiManager#factoryReset()} cannot be invoked from a non-privileged app.
      *
      * Note: This intentionally does not test the full reset functionality because it causes
@@ -3894,14 +3948,19 @@
     public class TestCoexCallback extends WifiManager.CoexCallback {
         private Object mCoexLock;
         private int mOnCoexUnsafeChannelChangedCount;
+        private List<CoexUnsafeChannel> mCoexUnsafeChannels;
+        private int mCoexRestrictions;
 
         TestCoexCallback(Object lock) {
             mCoexLock = lock;
         }
 
         @Override
-        public void onCoexUnsafeChannelsChanged() {
+        public void onCoexUnsafeChannelsChanged(
+                    @NonNull List<CoexUnsafeChannel> unsafeChannels, int restrictions) {
             synchronized (mCoexLock) {
+                mCoexUnsafeChannels = unsafeChannels;
+                mCoexRestrictions = restrictions;
                 mOnCoexUnsafeChannelChangedCount++;
                 mCoexLock.notify();
             }
@@ -3912,6 +3971,14 @@
                 return mOnCoexUnsafeChannelChangedCount;
             }
         }
+
+        public List<CoexUnsafeChannel> getCoexUnsafeChannels() {
+            return mCoexUnsafeChannels;
+        }
+
+        public int getCoexRestrictions() {
+            return mCoexRestrictions;
+        }
     }
 
     /**
@@ -3926,17 +3993,11 @@
         }
 
         try {
-            mWifiManager.setCoexUnsafeChannels(Collections.emptySet(), 0);
+            mWifiManager.setCoexUnsafeChannels(Collections.emptyList(), 0);
             fail("setCoexUnsafeChannels should not succeed - privileged call");
         } catch (SecurityException e) {
             // expected
         }
-        try {
-            mWifiManager.getCoexUnsafeChannels();
-            fail("getCoexUnsafeChannels should not succeed - privileged call");
-        } catch (SecurityException e) {
-            // expected
-        }
         final TestCoexCallback callback = new TestCoexCallback(mLock);
         try {
             mWifiManager.registerCoexCallback(mExecutor, callback);
@@ -3967,45 +4028,40 @@
         // These below API's only work with privileged permissions (obtained via shell identity
         // for test)
         UiAutomation uiAutomation = InstrumentationRegistry.getInstrumentation().getUiAutomation();
-        Set<CoexUnsafeChannel> prevUnsafeChannels = null;
+        List<CoexUnsafeChannel> prevUnsafeChannels = null;
         int prevRestrictions = -1;
         try {
             uiAutomation.adoptShellPermissionIdentity();
-            // Save the current state to reset after the test.
-            prevUnsafeChannels = mWifiManager.getCoexUnsafeChannels();
-            prevRestrictions = mWifiManager.getCoexRestrictions();
-
-            // Register callback
             final TestCoexCallback callback = new TestCoexCallback(mLock);
-            mWifiManager.registerCoexCallback(mExecutor, callback);
-            Set<CoexUnsafeChannel> unsafeChannels = new HashSet<>();
-            unsafeChannels.add(new CoexUnsafeChannel(WIFI_BAND_24_GHZ, 6));
-            final int restrictions = COEX_RESTRICTION_WIFI_DIRECT | COEX_RESTRICTION_SOFTAP
-                    | COEX_RESTRICTION_WIFI_AWARE;
-
+            final List<CoexUnsafeChannel> testUnsafeChannels = new ArrayList<>();
+            testUnsafeChannels.add(new CoexUnsafeChannel(WIFI_BAND_24_GHZ, 6));
+            final int testRestrictions = COEX_RESTRICTION_WIFI_DIRECT
+                    | COEX_RESTRICTION_SOFTAP | COEX_RESTRICTION_WIFI_AWARE;
             synchronized (mLock) {
                 try {
-                    mWifiManager.setCoexUnsafeChannels(unsafeChannels, restrictions);
-                    // Callback should be called if the default algorithm is disabled.
+                    mWifiManager.registerCoexCallback(mExecutor, callback);
+                    // Callback should be called after registering
                     mLock.wait(TEST_WAIT_DURATION_MS);
+                    assertEquals(1, callback.getOnCoexUnsafeChannelChangedCount());
+                    // Store the previous coex channels and set new coex channels
+                    prevUnsafeChannels = callback.getCoexUnsafeChannels();
+                    prevRestrictions = callback.getCoexRestrictions();
+                    mWifiManager.setCoexUnsafeChannels(testUnsafeChannels, testRestrictions);
+                    mLock.wait(TEST_WAIT_DURATION_MS);
+                    // Unregister callback and try setting again
                     mWifiManager.unregisterCoexCallback(callback);
-                    mWifiManager.setCoexUnsafeChannels(unsafeChannels, restrictions);
+                    mWifiManager.setCoexUnsafeChannels(testUnsafeChannels, testRestrictions);
                     // Callback should not be called here since it was unregistered.
                     mLock.wait(TEST_WAIT_DURATION_MS);
                 } catch (InterruptedException e) {
                     fail("Thread interrupted unexpectedly while waiting on mLock");
                 }
             }
-
-            if (callback.getOnCoexUnsafeChannelChangedCount() == 0) {
-                // Default algorithm enabled, setter should have done nothing
-                assertEquals(prevUnsafeChannels, mWifiManager.getCoexUnsafeChannels());
-                assertEquals(prevRestrictions, mWifiManager.getCoexRestrictions());
-            } else if (callback.getOnCoexUnsafeChannelChangedCount() == 1) {
+            if (callback.getOnCoexUnsafeChannelChangedCount() == 2) {
                 // Default algorithm disabled, setter should set the getter values.
-                assertEquals(unsafeChannels, mWifiManager.getCoexUnsafeChannels());
-                assertEquals(restrictions, mWifiManager.getCoexRestrictions());
-            } else {
+                assertEquals(testUnsafeChannels, callback.getCoexUnsafeChannels());
+                assertEquals(testRestrictions, callback.getCoexRestrictions());
+            } else if (callback.getOnCoexUnsafeChannelChangedCount() != 1) {
                 fail("Coex callback called " + callback.mOnCoexUnsafeChannelChangedCount
                         + " times. Expected 0 or 1 calls." );
             }
diff --git a/tests/tests/wifi/src/android/net/wifi/nl80211/cts/WifiNl80211ManagerTest.java b/tests/tests/wifi/src/android/net/wifi/nl80211/cts/WifiNl80211ManagerTest.java
index db08bee..b182fb6 100644
--- a/tests/tests/wifi/src/android/net/wifi/nl80211/cts/WifiNl80211ManagerTest.java
+++ b/tests/tests/wifi/src/android/net/wifi/nl80211/cts/WifiNl80211ManagerTest.java
@@ -70,7 +70,7 @@
     }
 
     private class TestCountryCodeChangeListener implements
-            WifiNl80211Manager.CountryCodeChangeListener {
+            WifiNl80211Manager.CountryCodeChangedListener {
         private String mCurrentCountryCode;
 
         public String getCurrentCountryCode() {
@@ -78,7 +78,7 @@
         }
 
         @Override
-        public void onChanged(String country) {
+        public void onCountryCodeChanged(String country) {
             mCurrentCountryCode = country;
         }
     }
@@ -153,8 +153,8 @@
         // Since current cts don't have sufficient permission to call WifiNl80211Manager API.
         // Assert register fail because the CTS don't have sufficient permission to call
         // WifiNl80211Manager API which are guarded by selinux.
-        assertFalse(manager.registerCountryCodeChangeListener(executor,
+        assertFalse(manager.registerCountryCodeChangedListener(executor,
                 testCountryCodeChangeListener));
-        manager.unregisterCountryCodeChangeListener(testCountryCodeChangeListener);
+        manager.unregisterCountryCodeChangedListener(testCountryCodeChangeListener);
     }
 }
diff --git a/tests/translation/src/android/translation/cts/Helper.java b/tests/translation/src/android/translation/cts/Helper.java
index a8b6b49..8a0871e 100644
--- a/tests/translation/src/android/translation/cts/Helper.java
+++ b/tests/translation/src/android/translation/cts/Helper.java
@@ -58,8 +58,7 @@
     public static void setTemporaryTranslationService(String service) {
         Log.d(TAG, "Setting translation service to " + service);
         final int userId = UserHandle.myUserId();
-        //TODO(b/181179744): restore to translation service before S release.
-        runShellCommand("cmd transformer set temporary-service %d %s 12000", userId, service);
+        runShellCommand("cmd translation set temporary-service %d %s 12000", userId, service);
     }
 
     /**
@@ -68,8 +67,7 @@
     public static void resetTemporaryTranslationService() {
         final int userId = UserHandle.myUserId();
         Log.d(TAG, "Resetting back user " + userId + " to default translation service");
-        //TODO(b/181179744): restore to translation service before S release.
-        runShellCommand("cmd transformer set temporary-service %d", userId);
+        runShellCommand("cmd translation set temporary-service %d", userId);
     }
 
     /**
diff --git a/tests/translation/src/android/translation/cts/TranslationManagerTest.java b/tests/translation/src/android/translation/cts/TranslationManagerTest.java
index ebfea89..597d124 100644
--- a/tests/translation/src/android/translation/cts/TranslationManagerTest.java
+++ b/tests/translation/src/android/translation/cts/TranslationManagerTest.java
@@ -24,6 +24,7 @@
 import android.app.Instrumentation;
 import android.app.PendingIntent;
 import android.content.pm.PackageManager;
+import android.os.CancellationSignal;
 import android.platform.test.annotations.AppModeFull;
 import android.util.ArraySet;
 import android.util.Log;
@@ -43,7 +44,6 @@
 
 import com.android.compatibility.common.util.ActivitiesWatcher;
 import com.android.compatibility.common.util.ActivitiesWatcher.ActivityWatcher;
-import com.android.compatibility.common.util.RequiredFeatureRule;
 import com.android.compatibility.common.util.RequiredServiceRule;
 
 import org.junit.After;
@@ -73,10 +73,6 @@
 public class TranslationManagerTest {
 
     @Rule
-    public final RequiredFeatureRule mFeatureRule = new RequiredFeatureRule(
-            PackageManager.FEATURE_TRANSLATION);
-
-    @Rule
     public final RequiredServiceRule mServiceRule = new RequiredServiceRule(
             android.content.Context.TRANSLATION_MANAGER_SERVICE);
 
@@ -152,7 +148,7 @@
 
         translator.translate(new TranslationRequest.Builder()
                 .addTranslationRequestValue(TranslationRequestValue.forText("hello world"))
-                .build(), (r) -> r.run(), callback);
+                .build(), new CancellationSignal(), (r) -> r.run(), callback);
 
         sTranslationReplier.getNextTranslationRequest();
 
@@ -186,6 +182,69 @@
     }
 
     @Test
+    public void testTranslationCancelled() throws Exception{
+        enableCtsTranslationService();
+
+        final TranslationManager manager = sInstrumentation.getContext().getSystemService(
+                TranslationManager.class);
+
+        sTranslationReplier.addResponse(
+                new TranslationResponse.Builder(TranslationResponse.TRANSLATION_STATUS_SUCCESS)
+                        .setTranslationResponseValue(0, new TranslationResponseValue
+                                .Builder(TranslationResponseValue.STATUS_SUCCESS)
+                                .setText("success")
+                                .build())
+                        .build());
+
+        final CountDownLatch translationLatch = new CountDownLatch(1);
+        final AtomicReference<TranslationResponse> responseRef = new AtomicReference<>();
+
+        final TranslationContext translationContext = new TranslationContext.Builder(
+                new TranslationSpec(Locale.ENGLISH.getLanguage(),
+                        TranslationSpec.DATA_FORMAT_TEXT),
+                new TranslationSpec(Locale.FRENCH.getLanguage(),
+                        TranslationSpec.DATA_FORMAT_TEXT))
+                .build();
+        final Translator translator = manager.createOnDeviceTranslator(translationContext);
+
+        try {
+            mServiceWatcher.waitOnConnected();
+        } catch (InterruptedException e) {
+            Log.w(TAG, "Exception waiting for onConnected");
+        }
+
+        assertThat(translator.isDestroyed()).isFalse();
+
+        final Consumer<TranslationResponse> callback = new Consumer<TranslationResponse>() {
+            @Override
+            public void accept(TranslationResponse translationResponse) {
+                responseRef.set(translationResponse);
+                translationLatch.countDown();
+            }
+        };
+
+        final CancellationSignal cancellationSignal = new CancellationSignal();
+
+        translator.translate(new TranslationRequest.Builder()
+                .addTranslationRequestValue(TranslationRequestValue.forText("hello world"))
+                .build(), cancellationSignal, (r) -> r.run(), callback);
+
+        // TODO: implement with cancellation signal listener
+        // cancel translation request
+        cancellationSignal.cancel();
+
+        sTranslationReplier.assertNoUnhandledTranslationRequests();
+
+        translator.destroy();
+        assertThat(translator.isDestroyed()).isTrue();
+        try {
+            mServiceWatcher.waitOnDisconnected();
+        } catch (InterruptedException e) {
+            Log.w(TAG, "Exception waiting for onDisconnected");
+        }
+    }
+
+    @Test
     public void testGetTranslationCapabilities() throws Exception{
         enableCtsTranslationService();
 
@@ -243,6 +302,8 @@
         watcher.waitFor(RESUMED);
     }
 
+    //TODO(183605243): add test for cancelling translation.
+
     protected void enableCtsTranslationService() {
         mServiceWatcher = CtsTranslationService.setServiceWatcher();
         Helper.setTemporaryTranslationService(CtsTranslationService.SERVICE_NAME);
diff --git a/tests/translation/src/android/translation/cts/UiTranslationManagerTest.java b/tests/translation/src/android/translation/cts/UiTranslationManagerTest.java
index e36f0ee..4338028 100644
--- a/tests/translation/src/android/translation/cts/UiTranslationManagerTest.java
+++ b/tests/translation/src/android/translation/cts/UiTranslationManagerTest.java
@@ -39,7 +39,6 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.PackageManager;
 import android.os.SystemClock;
 import android.platform.test.annotations.AppModeFull;
 import android.provider.Settings;
@@ -67,7 +66,6 @@
 
 import com.android.compatibility.common.util.BlockingBroadcastReceiver;
 import com.android.compatibility.common.util.PollingCheck;
-import com.android.compatibility.common.util.RequiredFeatureRule;
 import com.android.compatibility.common.util.RequiredServiceRule;
 
 import org.junit.After;
@@ -112,9 +110,6 @@
     private ActivityScenario<SimpleActivity> mActivityScenario;
 
     @Rule
-    public final RequiredFeatureRule mFeatureRule =
-            new RequiredFeatureRule(PackageManager.FEATURE_TRANSLATION);
-    @Rule
     public final RequiredServiceRule mContentCaptureServiceRule =
             new RequiredServiceRule(CONTENT_CAPTURE_MANAGER_SERVICE);
 
diff --git a/tools/cts-tradefed/res/config/cts-on-gsi-exclude.xml b/tools/cts-tradefed/res/config/cts-on-gsi-exclude.xml
index 1323093..0dab29e 100644
--- a/tools/cts-tradefed/res/config/cts-on-gsi-exclude.xml
+++ b/tools/cts-tradefed/res/config/cts-on-gsi-exclude.xml
@@ -59,4 +59,7 @@
     <!-- No Statsd -->
     <option name="compatibility:exclude-filter" value="CtsStatsdHostTestCases" />
 
+    <!-- b/183234756, b/80388296, b/110260628, b/159295445, b/159294948 CtsDevicePolicyManagerTestCases -->
+    <option name="compatibility:exclude-filter" value="CtsDevicePolicyManagerTestCases" />
+
 </configuration>