Merge "Force enable DeviceIdleController in imperceptible killing test" into rvc-dev
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index 0f708d7..3bc5bb6 100755
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -1673,8 +1673,8 @@
<string name="wifi_status_suggestion_get_failure">Failed to get suggestions.</string>
<string name="wifi_status_suggestion_remove">Removing suggestions from the device.</string>
<string name="wifi_status_suggestion_remove_failure">Failed to remove suggestions.</string>
- <string name="wifi_status_suggestion_wait_for_connect">Waiting for network connection. Please click \"Yes\" in the notification that pops up for approving the request.</string>
- <string name="wifi_status_suggestion_ensure_no_connect">Ensuring no network connection. Please click \"Yes\" in the notification that pops up for approving the request.</string>
+ <string name="wifi_status_suggestion_wait_for_connect">Waiting for network connection. Please click \"Allow\" in the dialog that pops up for approving the app.</string>
+ <string name="wifi_status_suggestion_ensure_no_connect">Ensuring no network connection. Please click \"Allow\" in the dialog that pops up for approving the app.</string>
<string name="wifi_status_suggestion_connect">Connected to the network.</string>
<string name="wifi_status_suggestion_not_connected">Did not connect to the network.</string>
<string name="wifi_status_suggestion_wait_for_post_connect_bcast">Waiting for post connection broadcast.</string>
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/p2p/testcase/P2pBroadcastReceiverTest.java b/apps/CtsVerifier/src/com/android/cts/verifier/p2p/testcase/P2pBroadcastReceiverTest.java
index 5cc23f1..0e5f356 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/p2p/testcase/P2pBroadcastReceiverTest.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/p2p/testcase/P2pBroadcastReceiverTest.java
@@ -42,7 +42,7 @@
private WifiP2pManager mP2pMgr;
private Channel mChannel;
- private WifiP2pDeviceList mPeers;
+ private WifiP2pDeviceList mPeers = new WifiP2pDeviceList();
private WifiP2pInfo mP2pInfo;
private WifiP2pGroup mP2pGroup;
@@ -79,12 +79,9 @@
Timeout t = new Timeout(msec);
while (!t.isTimeout()) {
- if (mPeers != null) {
- for (WifiP2pDevice dev: mPeers.getDeviceList()) {
- if (dev.deviceAddress.equals(targetAddr)) {
- return dev;
- }
- }
+ WifiP2pDevice dev = mPeers.get(targetAddr);
+ if (dev != null) {
+ return dev;
}
wait(t.getRemainTime());
}
@@ -125,14 +122,9 @@
Timeout t = new Timeout(msec);
while (!t.isTimeout()) {
- if (mPeers != null) {
- for (WifiP2pDevice dev: mPeers.getDeviceList()) {
- if (dev.deviceAddress.equals(targetAddr)) {
- if (dev.status == WifiP2pDevice.CONNECTED) {
- return true;
- }
- }
- }
+ WifiP2pDevice dev = mPeers.get(targetAddr);
+ if (dev != null && dev.status == WifiP2pDevice.CONNECTED) {
+ return true;
}
wait(t.getRemainTime());
}
@@ -152,21 +144,14 @@
Timeout t = new Timeout(msec);
- boolean devicePresent;
-
while (!t.isTimeout()) {
- devicePresent = false;
- if (mPeers != null) {
- for (WifiP2pDevice dev: mPeers.getDeviceList()) {
- if (dev.deviceAddress.equals(targetAddr)) {
- if (dev.status != WifiP2pDevice.CONNECTED) {
- return true;
- }
- devicePresent = true;
- }
- }
+ WifiP2pDevice dev = mPeers.get(targetAddr);
+
+ if (dev == null ) return true;
+
+ if (dev.status != WifiP2pDevice.CONNECTED) {
+ return true;
}
- if (!devicePresent) return true;
wait(t.getRemainTime());
}
Log.e(TAG, "Appropriate WIFI_P2P_PEERS_CHANGED_ACTION didn't occur");
@@ -217,7 +202,7 @@
@Override
public synchronized void onPeersAvailable(WifiP2pDeviceList peers) {
Log.d(TAG, "onPeersAvailable()");
- mPeers = peers;
+ mPeers = new WifiP2pDeviceList(peers);
notifyAll();
}
diff --git a/hostsidetests/appsecurity/test-apps/V3SigningSchemeRotation/Android.bp b/hostsidetests/appsecurity/test-apps/V3SigningSchemeRotation/Android.bp
index 4481d9e..9de8251 100644
--- a/hostsidetests/appsecurity/test-apps/V3SigningSchemeRotation/Android.bp
+++ b/hostsidetests/appsecurity/test-apps/V3SigningSchemeRotation/Android.bp
@@ -20,6 +20,7 @@
"cts",
"vts",
"general-tests",
+ "sts",
],
srcs: ["src/**/*.java"],
sdk_version: "current",
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 036f4a2..61fdb18 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
@@ -154,11 +154,12 @@
mDevicePolicyManager.setAutoTimeRequired(ADMIN_RECEIVER_COMPONENT, initialValue);
}
- public void testSetAutoTime() {
- final boolean initialValue = mDevicePolicyManager.getAutoTime(ADMIN_RECEIVER_COMPONENT);
- mDevicePolicyManager.setAutoTime(ADMIN_RECEIVER_COMPONENT, true);
- mDevicePolicyManager.setAutoTime(ADMIN_RECEIVER_COMPONENT, false);
- mDevicePolicyManager.setAutoTime(ADMIN_RECEIVER_COMPONENT, initialValue);
+ public void testSetAutoTimeEnabled() {
+ final boolean initialValue = mDevicePolicyManager.getAutoTimeEnabled(
+ ADMIN_RECEIVER_COMPONENT);
+ mDevicePolicyManager.setAutoTimeEnabled(ADMIN_RECEIVER_COMPONENT, true);
+ mDevicePolicyManager.setAutoTimeEnabled(ADMIN_RECEIVER_COMPONENT, false);
+ mDevicePolicyManager.setAutoTimeEnabled(ADMIN_RECEIVER_COMPONENT, initialValue);
}
public void testEnableSystemAppLogged() {
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/TimeManagementTest.java b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/TimeManagementTest.java
index 24428d8..1f33446 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/TimeManagementTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/TimeManagementTest.java
@@ -39,18 +39,18 @@
super.tearDown();
}
- public void testSetAutoTimeZone() {
- mDevicePolicyManager.setAutoTimeZone(ADMIN_RECEIVER_COMPONENT, true);
+ public void testSetAutoTimeZoneEnabled() {
+ mDevicePolicyManager.setAutoTimeZoneEnabled(ADMIN_RECEIVER_COMPONENT, true);
- assertThat(mDevicePolicyManager.getAutoTimeZone(ADMIN_RECEIVER_COMPONENT)).isTrue();
+ assertThat(mDevicePolicyManager.getAutoTimeZoneEnabled(ADMIN_RECEIVER_COMPONENT)).isTrue();
- mDevicePolicyManager.setAutoTimeZone(ADMIN_RECEIVER_COMPONENT, false);
+ mDevicePolicyManager.setAutoTimeZoneEnabled(ADMIN_RECEIVER_COMPONENT, false);
- assertThat(mDevicePolicyManager.getAutoTimeZone(ADMIN_RECEIVER_COMPONENT)).isFalse();
+ assertThat(mDevicePolicyManager.getAutoTimeZoneEnabled(ADMIN_RECEIVER_COMPONENT)).isFalse();
}
public void testSetTime() {
- mDevicePolicyManager.setAutoTime(ADMIN_RECEIVER_COMPONENT, false);
+ mDevicePolicyManager.setAutoTimeEnabled(ADMIN_RECEIVER_COMPONENT, false);
final long estimatedNow = mStartTimeWallClockMillis +
TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - mStartTimeElapsedNanos);
@@ -59,20 +59,20 @@
}
public void testSetTime_failWhenAutoTimeEnabled() {
- mDevicePolicyManager.setAutoTime(ADMIN_RECEIVER_COMPONENT, true);
+ mDevicePolicyManager.setAutoTimeEnabled(ADMIN_RECEIVER_COMPONENT, true);
assertThat(mDevicePolicyManager.setTime(ADMIN_RECEIVER_COMPONENT, 0)).isFalse();
}
public void testSetTimeZone() {
- mDevicePolicyManager.setAutoTimeZone(ADMIN_RECEIVER_COMPONENT, false);
+ mDevicePolicyManager.setAutoTimeZoneEnabled(ADMIN_RECEIVER_COMPONENT, false);
assertThat(
mDevicePolicyManager.setTimeZone(ADMIN_RECEIVER_COMPONENT, "Singapore")).isTrue();
}
public void testSetTimeZone_failIfAutoTimeZoneEnabled() {
- mDevicePolicyManager.setAutoTimeZone(ADMIN_RECEIVER_COMPONENT, true);
+ mDevicePolicyManager.setAutoTimeZoneEnabled(ADMIN_RECEIVER_COMPONENT, true);
assertThat(
mDevicePolicyManager.setTimeZone(ADMIN_RECEIVER_COMPONENT, "Singapore")).isFalse();
@@ -84,12 +84,12 @@
}
private void restoreTime() {
- mDevicePolicyManager.setAutoTime(ADMIN_RECEIVER_COMPONENT, false);
+ mDevicePolicyManager.setAutoTimeEnabled(ADMIN_RECEIVER_COMPONENT, false);
final long estimatedNow = mStartTimeWallClockMillis +
TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - mStartTimeElapsedNanos);
mDevicePolicyManager.setTime(ADMIN_RECEIVER_COMPONENT, estimatedNow);
- mDevicePolicyManager.setAutoTime(ADMIN_RECEIVER_COMPONENT, true);
+ mDevicePolicyManager.setAutoTimeEnabled(ADMIN_RECEIVER_COMPONENT, true);
}
}
diff --git a/hostsidetests/devicepolicy/app/ManagedProfile/src/com/android/cts/managedprofile/ParentProfileTest.java b/hostsidetests/devicepolicy/app/ManagedProfile/src/com/android/cts/managedprofile/ParentProfileTest.java
index 3a3d7fb..5bcf4be 100644
--- a/hostsidetests/devicepolicy/app/ManagedProfile/src/com/android/cts/managedprofile/ParentProfileTest.java
+++ b/hostsidetests/devicepolicy/app/ManagedProfile/src/com/android/cts/managedprofile/ParentProfileTest.java
@@ -85,8 +85,8 @@
.add("isDeviceIdAttestationSupported")
.add("isUniqueDeviceAttestationSupported")
.add("wipeData")
- .add("getAutoTime")
- .add("setAutoTime")
+ .add("getAutoTimeEnabled")
+ .add("setAutoTimeEnabled")
.add("addUserRestriction")
.add("clearUserRestriction")
.add("getUserRestrictions")
@@ -169,10 +169,11 @@
public void testCannotCallAutoTimeMethodsOnParentProfile() {
assertThrows(SecurityException.class,
- () -> mParentDevicePolicyManager.setAutoTime(ADMIN_RECEIVER_COMPONENT, true));
+ () -> mParentDevicePolicyManager.setAutoTimeEnabled(ADMIN_RECEIVER_COMPONENT,
+ true));
assertThrows(SecurityException.class,
- () -> mParentDevicePolicyManager.getAutoTime(ADMIN_RECEIVER_COMPONENT));
+ () -> mParentDevicePolicyManager.getAutoTimeEnabled(ADMIN_RECEIVER_COMPONENT));
}
public void testCannotCallSetDefaultSmsApplicationOnParentProfile() {
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/DeviceAndProfileOwnerTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/DeviceAndProfileOwnerTest.java
index d393b98..b23f939 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/DeviceAndProfileOwnerTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/DeviceAndProfileOwnerTest.java
@@ -1944,12 +1944,12 @@
}
@Test
- public void testSetAutoTime() throws Exception {
+ public void testSetAutoTimeEnabled() throws Exception {
if (!mHasFeature) {
return;
}
assertMetricsLogged(getDevice(), () -> {
- executeDeviceTestMethod(".DevicePolicyLoggingTest", "testSetAutoTime");
+ executeDeviceTestMethod(".DevicePolicyLoggingTest", "testSetAutoTimeEnabled");
}, new DevicePolicyEventWrapper.Builder(EventId.SET_AUTO_TIME_VALUE)
.setAdminPackageName(DEVICE_ADMIN_PKG)
.setBoolean(true)
@@ -1961,12 +1961,12 @@
}
@Test
- public void testSetAutoTimeZone() throws Exception {
+ public void testSetAutoTimeZoneEnabled() throws Exception {
if (!mHasFeature) {
return;
}
assertMetricsLogged(getDevice(), () -> {
- executeDeviceTestMethod(".TimeManagementTest", "testSetAutoTimeZone");
+ executeDeviceTestMethod(".TimeManagementTest", "testSetAutoTimeZoneEnabled");
}, new DevicePolicyEventWrapper.Builder(EventId.SET_AUTO_TIME_ZONE_VALUE)
.setAdminPackageName(DEVICE_ADMIN_PKG)
.setBoolean(true)
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedManagedProfileOwnerTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedManagedProfileOwnerTest.java
index 51a312b..7a61083 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedManagedProfileOwnerTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedManagedProfileOwnerTest.java
@@ -200,14 +200,14 @@
@Override
@Test
- public void testSetAutoTime() {
+ public void testSetAutoTimeEnabled() {
// Managed profile owner cannot set auto time unless it is called by the profile owner of
// an organization-owned managed profile.
}
@Override
@Test
- public void testSetAutoTimeZone() {
+ public void testSetAutoTimeZoneEnabled() {
// Managed profile owner cannot set auto time zone unless it is called by the profile
// owner of an organization-owned managed profile.
}
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedProfileOwnerTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedProfileOwnerTest.java
index 2da4cba..66b2630 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedProfileOwnerTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/MixedProfileOwnerTest.java
@@ -101,7 +101,7 @@
@Override
@Test
- public void testSetAutoTimeZone() {
+ public void testSetAutoTimeZoneEnabled() {
// Profile owner cannot set auto time zone unless it is called by the profile
// owner of an organization-owned managed profile or a profile owner on user 0.
}
diff --git a/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/InputMethodServiceLifecycleTest.java b/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/InputMethodServiceLifecycleTest.java
index ed4e672..644ba72 100644
--- a/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/InputMethodServiceLifecycleTest.java
+++ b/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/InputMethodServiceLifecycleTest.java
@@ -37,6 +37,7 @@
import android.platform.test.annotations.AppModeInstant;
import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
import org.junit.After;
import org.junit.Before;
@@ -50,7 +51,7 @@
* Test general lifecycle events around InputMethodService.
*/
@RunWith(DeviceJUnit4ClassRunner.class)
-public class InputMethodServiceLifecycleTest extends RebootFreeHostTestBase {
+public class InputMethodServiceLifecycleTest extends BaseHostJUnit4Test {
private static final long WAIT_TIMEOUT = TimeUnit.SECONDS.toMillis(1);
private static final long PACKAGE_OP_TIMEOUT = TimeUnit.SECONDS.toMillis(7);
diff --git a/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/MultiUserTest.java b/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/MultiUserTest.java
index 8fece56..f1e73a2 100644
--- a/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/MultiUserTest.java
+++ b/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/MultiUserTest.java
@@ -30,6 +30,7 @@
import android.platform.test.annotations.AppModeInstant;
import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
import com.android.tradefed.testtype.junit4.DeviceTestRunOptions;
import com.android.tradefed.util.CommandResult;
import com.android.tradefed.util.CommandStatus;
@@ -48,7 +49,7 @@
* Test IME APIs for multi-user environment.
*/
@RunWith(DeviceJUnit4ClassRunner.class)
-public class MultiUserTest extends RebootFreeHostTestBase {
+public class MultiUserTest extends BaseHostJUnit4Test {
private static final long USER_SWITCH_TIMEOUT = TimeUnit.SECONDS.toMillis(60);
private static final long USER_SWITCH_POLLING_INTERVAL = TimeUnit.MILLISECONDS.toMillis(100);
private static final long IME_COMMAND_TIMEOUT = TimeUnit.SECONDS.toMillis(7);
diff --git a/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/RebootFreeHostTestBase.java b/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/RebootFreeHostTestBase.java
deleted file mode 100644
index e90f1f6..0000000
--- a/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/RebootFreeHostTestBase.java
+++ /dev/null
@@ -1,113 +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 android.inputmethodservice.cts.hostside;
-
-import com.android.tradefed.device.DeviceNotAvailableException;
-import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.rules.TestName;
-
-import java.util.Objects;
-import java.util.WeakHashMap;
-
-/**
- * A utility class that enforces the device under test must never reboot during the test runs.
- *
- * <p>For instance, suppose the following test class.</p>
- * <pre>{@code
- * @RunWith(DeviceJUnit4ClassRunner.class)
- * public class MyTestClass extends RebootFreeHostTestBase {
- * @Test
- * public void test1() throws Exception {
- * // do something;
- * }
- *
- * @Test
- * public void test2() throws Exception {
- * // do something;
- * }
- *
- * @Test
- * public void test3() throws Exception {
- * // do something;
- * }
- * }
- * }</pre>
- *
- * <p>If the device (soft-)rebooted between {@code test1()} and {@code test2()}, then this base
- * class would let {@code test2()} and {@code test3()} immediately fail by throwing
- * {@link IllegalStateException} with saying that the device reboot is detected and the last
- * test method before reboot is {@code test1()}</p>
- *
- * <p>Note that reboot-free is enforced only within each subclass of {@link RebootFreeHostTestBase}.
- * Another sub-class such as {@code class MyTestClass2 extends RebootFreeHostTestBase} will not
- * immediately fail because of device restart detected while running {@code class MyTestClass}.</p>
- */
-public class RebootFreeHostTestBase extends BaseHostJUnit4Test {
- private static final String PROP_SYSTEM_SERVER_START_COUNT = "sys.system_server.start_count";
-
- private static final WeakHashMap<Class<?>, String> sExpectedSystemStartCount =
- new WeakHashMap<>();
- private static final WeakHashMap<Class<?>, String> sLastRunningTestName = new WeakHashMap<>();
-
- /**
- * A {@link TestName} object to receive the currently running test name.
- *
- * <p>Note this field needs to be {@code public} due to a restriction of JUnit4.</p>
- */
- @Rule
- public TestName mTestName = new TestName();
-
- /**
- * @return device start count as {@link String}.
- * @throws DeviceNotAvailableException
- */
- private String getSystemStartCountAsString() throws DeviceNotAvailableException {
- final String countString = getDevice().getProperty(PROP_SYSTEM_SERVER_START_COUNT);
- if (countString == null) {
- throw new IllegalStateException(
- String.format("Property %s must not be null", PROP_SYSTEM_SERVER_START_COUNT));
- }
- return countString;
- }
-
- /**
- * Ensures there was no unexpected device reboot.
- *
- * @throws IllegalStateException when an unexpected device reboot is detected.
- */
- @Before
- public void ensureNoSystemRestart() throws Exception {
- final Class<?> myClass = getClass();
- final String currentCount = getSystemStartCountAsString();
- final String expectedCount = sExpectedSystemStartCount.get(myClass);
- if (expectedCount == null) {
- // This is the first time for the given test class to run.
- // Just remember the current system start count.
- sExpectedSystemStartCount.put(myClass, currentCount);
- } else if (!Objects.equals(expectedCount, currentCount)) {
- final String lastTest = sLastRunningTestName.getOrDefault(myClass, "<unknown>");
- throw new IllegalStateException(String.format(
- "Unexpected device restart detected [%s: %s -> %s]. "
- + "lastTestBeforeRestart=%s. Check the device log!",
- PROP_SYSTEM_SERVER_START_COUNT, expectedCount, currentCount, lastTest));
- }
- sLastRunningTestName.put(myClass, mTestName.getMethodName());
- }
-}
diff --git a/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/ShellCommandFromAppTest.java b/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/ShellCommandFromAppTest.java
index 0ab53cd..6c66949 100644
--- a/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/ShellCommandFromAppTest.java
+++ b/hostsidetests/inputmethodservice/hostside/src/android/inputmethodservice/cts/hostside/ShellCommandFromAppTest.java
@@ -25,6 +25,7 @@
import android.platform.test.annotations.AppModeInstant;
import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
import com.android.tradefed.testtype.junit4.DeviceTestRunOptions;
import org.junit.After;
@@ -36,7 +37,7 @@
* Test IInputMethodManager#shellComman verifies callers.
*/
@RunWith(DeviceJUnit4ClassRunner.class)
-public class ShellCommandFromAppTest extends RebootFreeHostTestBase {
+public class ShellCommandFromAppTest extends BaseHostJUnit4Test {
/**
* {@code true} if {@link #tearDown()} needs to be fully executed.
diff --git a/tests/inputmethod/mockime/src/com/android/cts/mockime/MockIme.java b/tests/inputmethod/mockime/src/com/android/cts/mockime/MockIme.java
index 6142b9e..9a73722 100644
--- a/tests/inputmethod/mockime/src/com/android/cts/mockime/MockIme.java
+++ b/tests/inputmethod/mockime/src/com/android/cts/mockime/MockIme.java
@@ -286,6 +286,8 @@
case "getDisplayId":
return getSystemService(WindowManager.class)
.getDefaultDisplay().getDisplayId();
+ case "verifyLayoutInflaterContext":
+ return getLayoutInflater().getContext() == this;
}
}
return ImeEvent.RETURN_VALUE_UNAVAILABLE;
diff --git a/tests/inputmethod/mockime/src/com/android/cts/mockime/MockImeSession.java b/tests/inputmethod/mockime/src/com/android/cts/mockime/MockImeSession.java
index 5e653c6..a407a28 100644
--- a/tests/inputmethod/mockime/src/com/android/cts/mockime/MockImeSession.java
+++ b/tests/inputmethod/mockime/src/com/android/cts/mockime/MockImeSession.java
@@ -982,4 +982,18 @@
final Bundle params = new Bundle();
return callCommandInternal("getDisplayId", params);
}
+
+ /**
+ * Verifies {@code InputMethodService.getLayoutInflater().getContext()} is equal to
+ * {@code InputMethodService.this}.
+ *
+ * @return {@link ImeCommand} object that can be passed to
+ * {@link ImeEventStreamTestUtils#expectCommand(ImeEventStream, ImeCommand, long)} to
+ * wait until this event is handled by {@link MockIme}
+ */
+ @NonNull
+ public ImeCommand verifyLayoutInflaterContext() {
+ final Bundle params = new Bundle();
+ return callCommandInternal("verifyLayoutInflaterContext", params);
+ }
}
diff --git a/tests/inputmethod/src/android/view/inputmethod/cts/InputMethodServiceTest.java b/tests/inputmethod/src/android/view/inputmethod/cts/InputMethodServiceTest.java
index 0b20b85..1a2561a 100644
--- a/tests/inputmethod/src/android/view/inputmethod/cts/InputMethodServiceTest.java
+++ b/tests/inputmethod/src/android/view/inputmethod/cts/InputMethodServiceTest.java
@@ -116,6 +116,24 @@
});
}
+ @Test
+ public void verifyLayoutInflaterContext() throws Exception {
+ try (MockImeSession imeSession = MockImeSession.create(
+ InstrumentationRegistry.getContext(),
+ InstrumentationRegistry.getInstrumentation().getUiAutomation(),
+ new ImeSettings.Builder())) {
+ final ImeEventStream stream = imeSession.openEventStream();
+
+ createTestActivity(SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+ expectEvent(stream, event -> "onStartInputView".equals(event.getEventName()), TIMEOUT);
+
+ final ImeCommand command = imeSession.verifyLayoutInflaterContext();
+ assertTrue("InputMethodService.getLayoutInflater().getContext() must be equal to"
+ + " InputMethodService.this",
+ expectCommand(stream, command, TIMEOUT).getReturnBooleanValue());
+ }
+ }
+
private void verifyImeConsumesBackButton(int backDisposition) throws Exception {
try (MockImeSession imeSession = MockImeSession.create(
InstrumentationRegistry.getContext(),
diff --git a/tests/tests/appop/AndroidManifest.xml b/tests/tests/appop/AndroidManifest.xml
index ab36586..0c89b6e 100644
--- a/tests/tests/appop/AndroidManifest.xml
+++ b/tests/tests/appop/AndroidManifest.xml
@@ -19,11 +19,11 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.app.appops.cts"
android:targetSandboxVersion="2">
- <feature android:featureId="testFeature" android:label="@string/dummyLabel" />
- <feature android:featureId="firstFeature" android:label="@string/dummyLabel" />
- <feature android:featureId="secondFeature" android:label="@string/dummyLabel" />
- <feature android:featureId="firstProxyFeature" android:label="@string/dummyLabel" />
- <feature android:featureId="secondProxyFeature" android:label="@string/dummyLabel" />
+ <attribution android:tag="testAttribution" android:label="@string/dummyLabel" />
+ <attribution android:tag="firstAttribution" android:label="@string/dummyLabel" />
+ <attribution android:tag="secondAttribution" android:label="@string/dummyLabel" />
+ <attribution android:tag="firstProxyAttribution" android:label="@string/dummyLabel" />
+ <attribution android:tag="secondProxyAttribution" android:label="@string/dummyLabel" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
diff --git a/tests/tests/appop/AndroidTest.xml b/tests/tests/appop/AndroidTest.xml
index a911b20..386feb4 100644
--- a/tests/tests/appop/AndroidTest.xml
+++ b/tests/tests/appop/AndroidTest.xml
@@ -37,12 +37,12 @@
<option name="push-file" key="CtsAppToBlame1.apk" value="/data/local/tmp/cts/appops/CtsAppToBlame1.apk" />
<option name="push-file" key="CtsAppToBlame2.apk" value="/data/local/tmp/cts/appops/CtsAppToBlame2.apk" />
<option name="push-file" key="CtsAppToCollect.apk" value="/data/local/tmp/cts/appops/CtsAppToCollect.apk" />
- <option name="push-file" key="AppWithDuplicateFeature.apk" value="/data/local/tmp/cts/appops/AppWithDuplicateFeature.apk" />
- <option name="push-file" key="AppWithFeatureInheritingFromExisting.apk" value="/data/local/tmp/cts/appops/AppWithFeatureInheritingFromExisting.apk" />
- <option name="push-file" key="AppWithFeatureInheritingFromSameAsOther.apk" value="/data/local/tmp/cts/appops/AppWithFeatureInheritingFromSameAsOther.apk" />
- <option name="push-file" key="AppWithFeatureInheritingFromSelf.apk" value="/data/local/tmp/cts/appops/AppWithFeatureInheritingFromSelf.apk" />
- <option name="push-file" key="AppWithLongFeatureIdFeature.apk" value="/data/local/tmp/cts/appops/AppWithLongFeatureIdFeature.apk" />
- <option name="push-file" key="AppWithTooManyFeatures.apk" value="/data/local/tmp/cts/appops/AppWithTooManyFeatures.apk" />
+ <option name="push-file" key="AppWithDuplicateAttribution.apk" value="/data/local/tmp/cts/appops/AppWithDuplicateAttribution.apk" />
+ <option name="push-file" key="AppWithAttributionInheritingFromExisting.apk" value="/data/local/tmp/cts/appops/AppWithAttributionInheritingFromExisting.apk" />
+ <option name="push-file" key="AppWithAttributionInheritingFromSameAsOther.apk" value="/data/local/tmp/cts/appops/AppWithAttributionInheritingFromSameAsOther.apk" />
+ <option name="push-file" key="AppWithAttributionInheritingFromSelf.apk" value="/data/local/tmp/cts/appops/AppWithAttributionInheritingFromSelf.apk" />
+ <option name="push-file" key="AppWithLongAttributionTag.apk" value="/data/local/tmp/cts/appops/AppWithLongAttributionTag.apk" />
+ <option name="push-file" key="AppWithTooManyAttributions.apk" value="/data/local/tmp/cts/appops/AppWithTooManyAttributions.apk" />
</target_preparer>
<!-- Remove additional apps if installed -->
diff --git a/tests/tests/appop/AppThatUsesAppOps/AndroidManifest.xml b/tests/tests/appop/AppThatUsesAppOps/AndroidManifest.xml
index e3e4937..df614d8 100644
--- a/tests/tests/appop/AppThatUsesAppOps/AndroidManifest.xml
+++ b/tests/tests/appop/AppThatUsesAppOps/AndroidManifest.xml
@@ -18,7 +18,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.app.appops.cts.appthatusesappops">
- <feature android:featureId="testFeature" android:label="@string/dummyLabel" />
+ <attribution android:tag="testAttribution" android:label="@string/dummyLabel" />
<application>
<service android:name=".AppOpsUserService" android:exported="true" />
diff --git a/tests/tests/appop/AppThatUsesAppOps/res/values/strings.xml b/tests/tests/appop/AppThatUsesAppOps/res/values/strings.xml
index 2d02f14..37d548d 100644
--- a/tests/tests/appop/AppThatUsesAppOps/res/values/strings.xml
+++ b/tests/tests/appop/AppThatUsesAppOps/res/values/strings.xml
@@ -16,5 +16,5 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="dummyLabel">A feature</string>
+ <string name="dummyLabel">An attribution</string>
</resources>
diff --git a/tests/tests/appop/AppThatUsesAppOps/src/android/app/appops/cts/appthatusesappops/AppOpsUserService.kt b/tests/tests/appop/AppThatUsesAppOps/src/android/app/appops/cts/appthatusesappops/AppOpsUserService.kt
index fb87058..ba98da1 100644
--- a/tests/tests/appop/AppThatUsesAppOps/src/android/app/appops/cts/appthatusesappops/AppOpsUserService.kt
+++ b/tests/tests/appop/AppThatUsesAppOps/src/android/app/appops/cts/appthatusesappops/AppOpsUserService.kt
@@ -25,7 +25,7 @@
import android.app.SyncNotedAppOp
import android.app.appops.cts.IAppOpsUserClient
import android.app.appops.cts.IAppOpsUserService
-import android.app.appops.cts.TEST_FEATURE_ID
+import android.app.appops.cts.TEST_ATTRIBUTION_TAG
import android.app.appops.cts.eventually
import android.content.Intent
import android.os.IBinder
@@ -136,7 +136,7 @@
forwardThrowableFrom {
client.noteSyncOp()
- assertThat(noted.map { it.first.featureId to it.first.op })
+ assertThat(noted.map { it.first.attributionTag to it.first.op })
.containsExactly(null to OPSTR_COARSE_LOCATION)
assertThat(noted[0].second.map { it.methodName })
.contains("callApiThatNotesSyncOpAndCheckLog")
@@ -159,11 +159,14 @@
}
}
- override fun callApiThatNotesSyncOpWithFeatureAndCheckLog(client: IAppOpsUserClient) {
+ override fun callApiThatNotesSyncOpWithAttributionAndCheckLog(
+ client: IAppOpsUserClient
+ ) {
forwardThrowableFrom {
- client.noteSyncOpWithFeature(TEST_FEATURE_ID)
+ client.noteSyncOpWithAttribution(TEST_ATTRIBUTION_TAG)
- assertThat(noted.map { it.first.featureId }).containsExactly(TEST_FEATURE_ID)
+ assertThat(noted.map { it.first.attributionTag })
+ .containsExactly(TEST_ATTRIBUTION_TAG)
}
}
@@ -340,7 +343,7 @@
client.noteAsyncOp()
eventually {
- assertThat(asyncNoted.map { it.featureId to it.op })
+ assertThat(asyncNoted.map { it.attributionTag to it.op })
.containsExactly(null to OPSTR_COARSE_LOCATION)
}
assertThat(noted).isEmpty()
@@ -348,15 +351,15 @@
}
}
- override fun callApiThatNotesAsyncOpWithFeatureAndCheckLog(
+ override fun callApiThatNotesAsyncOpWithAttributionAndCheckLog(
client: IAppOpsUserClient
) {
forwardThrowableFrom {
- client.noteAsyncOpWithFeature(TEST_FEATURE_ID)
+ client.noteAsyncOpWithAttribution(TEST_ATTRIBUTION_TAG)
eventually {
- assertThat(asyncNoted.map { it.featureId })
- .containsExactly(TEST_FEATURE_ID)
+ assertThat(asyncNoted.map { it.attributionTag })
+ .containsExactly(TEST_ATTRIBUTION_TAG)
}
}
}
diff --git a/tests/tests/appop/AppToBlame1/AndroidManifest.xml b/tests/tests/appop/AppToBlame1/AndroidManifest.xml
index 55db16b..a8d3638 100644
--- a/tests/tests/appop/AppToBlame1/AndroidManifest.xml
+++ b/tests/tests/appop/AppToBlame1/AndroidManifest.xml
@@ -19,11 +19,11 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.app.appops.cts.apptoblame"
android:version="1">
- <feature android:featureId="feature1" android:label="@string/dummyLabel" />
- <feature android:featureId="feature2" android:label="@string/dummyLabel" />
- <feature android:featureId="feature3" android:label="@string/dummyLabel" />
- <feature android:featureId="feature4" android:label="@string/dummyLabel" />
- <feature android:featureId="feature5" android:label="@string/dummyLabel" />
+ <attribution android:tag="attribution1" android:label="@string/dummyLabel" />
+ <attribution android:tag="attribution2" android:label="@string/dummyLabel" />
+ <attribution android:tag="attribution3" android:label="@string/dummyLabel" />
+ <attribution android:tag="attribution4" android:label="@string/dummyLabel" />
+ <attribution android:tag="attribution5" android:label="@string/dummyLabel" />
<application />
diff --git a/tests/tests/appop/AppToBlame2/AndroidManifest.xml b/tests/tests/appop/AppToBlame2/AndroidManifest.xml
index 96a490c..ba13fd6 100644
--- a/tests/tests/appop/AppToBlame2/AndroidManifest.xml
+++ b/tests/tests/appop/AppToBlame2/AndroidManifest.xml
@@ -19,14 +19,14 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.app.appops.cts.apptoblame"
android:version="2">
- <feature android:featureId="feature1" android:label="@string/dummyLabel" />
- <feature android:featureId="feature6" android:label="@string/dummyLabel">
- <inherit-from android:featureId="feature2" />
- </feature>
- <feature android:featureId="feature7" android:label="@string/dummyLabel">
- <inherit-from android:featureId="feature4" />
- <inherit-from android:featureId="feature5" />
- </feature>
+ <attribution android:tag="attribution1" android:label="@string/dummyLabel" />
+ <attribution android:tag="attribution6" android:label="@string/dummyLabel">
+ <inherit-from android:tag="attribution2" />
+ </attribution>
+ <attribution android:tag="attribution7" android:label="@string/dummyLabel">
+ <inherit-from android:tag="attribution4" />
+ <inherit-from android:tag="attribution5" />
+ </attribution>
<application />
diff --git a/tests/tests/appop/AppToCollect/AndroidManifest.xml b/tests/tests/appop/AppToCollect/AndroidManifest.xml
index e67cb57..2a0d18d 100644
--- a/tests/tests/appop/AppToCollect/AndroidManifest.xml
+++ b/tests/tests/appop/AppToCollect/AndroidManifest.xml
@@ -19,7 +19,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.app.appops.cts.apptocollect"
android:version="1">
- <feature android:featureId="testFeature" android:label="@string/dummyLabel" />
+ <attribution android:tag="testAttribution" android:label="@string/dummyLabel" />
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
diff --git a/tests/tests/appop/AppWithDuplicateFeature/Android.bp b/tests/tests/appop/AppWithAttributionInheritingFromExisting/Android.bp
similarity index 92%
copy from tests/tests/appop/AppWithDuplicateFeature/Android.bp
copy to tests/tests/appop/AppWithAttributionInheritingFromExisting/Android.bp
index a27dacb..2b07c3b 100644
--- a/tests/tests/appop/AppWithDuplicateFeature/Android.bp
+++ b/tests/tests/appop/AppWithAttributionInheritingFromExisting/Android.bp
@@ -13,7 +13,7 @@
// limitations under the License.
android_test_helper_app {
- name: "AppWithDuplicateFeature",
+ name: "AppWithAttributionInheritingFromExisting",
test_suites: [
"cts",
diff --git a/tests/tests/appop/AppWithFeatureInheritingFromExisting/AndroidManifest.xml b/tests/tests/appop/AppWithAttributionInheritingFromExisting/AndroidManifest.xml
similarity index 72%
rename from tests/tests/appop/AppWithFeatureInheritingFromExisting/AndroidManifest.xml
rename to tests/tests/appop/AppWithAttributionInheritingFromExisting/AndroidManifest.xml
index eb097ef..6b1798b 100644
--- a/tests/tests/appop/AppWithFeatureInheritingFromExisting/AndroidManifest.xml
+++ b/tests/tests/appop/AppWithAttributionInheritingFromExisting/AndroidManifest.xml
@@ -17,11 +17,11 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="android.app.appops.cts.appwithfeatureinheritingfromexisting">
- <feature android:featureId="feature1" android:label="@string/dummyLabel" />
- <feature android:featureId="feature2" android:label="@string/dummyLabel">
- <inherit-from android:featureId="feature1" />
- </feature>
+ package="android.app.appops.cts.appwithattributioninheritingfromexisting">
+ <attribution android:tag="attribution" android:label="@string/dummyLabel" />
+ <attribution android:tag="attribution2" android:label="@string/dummyLabel">
+ <inherit-from android:tag="attribution" />
+ </attribution>
<application />
diff --git a/tests/tests/appop/AppWithFeatureInheritingFromExisting/res/values/strings.xml b/tests/tests/appop/AppWithAttributionInheritingFromExisting/res/values/strings.xml
similarity index 100%
rename from tests/tests/appop/AppWithFeatureInheritingFromExisting/res/values/strings.xml
rename to tests/tests/appop/AppWithAttributionInheritingFromExisting/res/values/strings.xml
diff --git a/tests/tests/appop/AppWithDuplicateFeature/Android.bp b/tests/tests/appop/AppWithAttributionInheritingFromSameAsOther/Android.bp
similarity index 92%
copy from tests/tests/appop/AppWithDuplicateFeature/Android.bp
copy to tests/tests/appop/AppWithAttributionInheritingFromSameAsOther/Android.bp
index a27dacb..7de79e5 100644
--- a/tests/tests/appop/AppWithDuplicateFeature/Android.bp
+++ b/tests/tests/appop/AppWithAttributionInheritingFromSameAsOther/Android.bp
@@ -13,7 +13,7 @@
// limitations under the License.
android_test_helper_app {
- name: "AppWithDuplicateFeature",
+ name: "AppWithAttributionInheritingFromSameAsOther",
test_suites: [
"cts",
diff --git a/tests/tests/appop/AppWithDuplicateFeature/AndroidManifest.xml b/tests/tests/appop/AppWithAttributionInheritingFromSameAsOther/AndroidManifest.xml
similarity index 67%
copy from tests/tests/appop/AppWithDuplicateFeature/AndroidManifest.xml
copy to tests/tests/appop/AppWithAttributionInheritingFromSameAsOther/AndroidManifest.xml
index b7b5297..fcf47a5 100644
--- a/tests/tests/appop/AppWithDuplicateFeature/AndroidManifest.xml
+++ b/tests/tests/appop/AppWithAttributionInheritingFromSameAsOther/AndroidManifest.xml
@@ -17,9 +17,13 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="android.app.appops.cts.appwithduplicatefeature">
- <feature android:featureId="feature1" android:label="@string/dummyLabel" />
- <feature android:featureId="feature1" android:label="@string/dummyLabel" />
+ package="android.app.appops.cts.appwithattributioninheritingfromsameasother">
+ <attribution android:tag="attribution1" android:label="@string/dummyLabel">
+ <inherit-from android:tag="attribution3" />
+ </attribution>
+ <attribution android:tag="attribution2" android:label="@string/dummyLabel">
+ <inherit-from android:tag="attribution3" />
+ </attribution>
<application />
diff --git a/tests/tests/appop/AppWithFeatureInheritingFromSameAsOther/res/values/strings.xml b/tests/tests/appop/AppWithAttributionInheritingFromSameAsOther/res/values/strings.xml
similarity index 100%
rename from tests/tests/appop/AppWithFeatureInheritingFromSameAsOther/res/values/strings.xml
rename to tests/tests/appop/AppWithAttributionInheritingFromSameAsOther/res/values/strings.xml
diff --git a/tests/tests/appop/AppWithDuplicateFeature/Android.bp b/tests/tests/appop/AppWithAttributionInheritingFromSelf/Android.bp
similarity index 93%
copy from tests/tests/appop/AppWithDuplicateFeature/Android.bp
copy to tests/tests/appop/AppWithAttributionInheritingFromSelf/Android.bp
index a27dacb..4a6e524 100644
--- a/tests/tests/appop/AppWithDuplicateFeature/Android.bp
+++ b/tests/tests/appop/AppWithAttributionInheritingFromSelf/Android.bp
@@ -13,7 +13,7 @@
// limitations under the License.
android_test_helper_app {
- name: "AppWithDuplicateFeature",
+ name: "AppWithAttributionInheritingFromSelf",
test_suites: [
"cts",
diff --git a/tests/tests/appop/AppWithDuplicateFeature/AndroidManifest.xml b/tests/tests/appop/AppWithAttributionInheritingFromSelf/AndroidManifest.xml
similarity index 77%
copy from tests/tests/appop/AppWithDuplicateFeature/AndroidManifest.xml
copy to tests/tests/appop/AppWithAttributionInheritingFromSelf/AndroidManifest.xml
index b7b5297..3cb4712 100644
--- a/tests/tests/appop/AppWithDuplicateFeature/AndroidManifest.xml
+++ b/tests/tests/appop/AppWithAttributionInheritingFromSelf/AndroidManifest.xml
@@ -17,9 +17,10 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="android.app.appops.cts.appwithduplicatefeature">
- <feature android:featureId="feature1" android:label="@string/dummyLabel" />
- <feature android:featureId="feature1" android:label="@string/dummyLabel" />
+ package="android.app.appops.cts.appwithattributioninheritingfromself">
+ <attribution android:tag="attribution1" android:label="@string/dummyLabel">
+ <inherit-from android:tag="attribution1" />
+ </attribution>
<application />
diff --git a/tests/tests/appop/AppWithFeatureInheritingFromSelf/res/values/strings.xml b/tests/tests/appop/AppWithAttributionInheritingFromSelf/res/values/strings.xml
similarity index 100%
rename from tests/tests/appop/AppWithFeatureInheritingFromSelf/res/values/strings.xml
rename to tests/tests/appop/AppWithAttributionInheritingFromSelf/res/values/strings.xml
diff --git a/tests/tests/appop/AppWithDuplicateFeature/Android.bp b/tests/tests/appop/AppWithDuplicateAttribution/Android.bp
similarity index 94%
rename from tests/tests/appop/AppWithDuplicateFeature/Android.bp
rename to tests/tests/appop/AppWithDuplicateAttribution/Android.bp
index a27dacb..a4b1272 100644
--- a/tests/tests/appop/AppWithDuplicateFeature/Android.bp
+++ b/tests/tests/appop/AppWithDuplicateAttribution/Android.bp
@@ -13,7 +13,7 @@
// limitations under the License.
android_test_helper_app {
- name: "AppWithDuplicateFeature",
+ name: "AppWithDuplicateAttribution",
test_suites: [
"cts",
diff --git a/tests/tests/appop/AppWithDuplicateFeature/AndroidManifest.xml b/tests/tests/appop/AppWithDuplicateAttribution/AndroidManifest.xml
similarity index 77%
rename from tests/tests/appop/AppWithDuplicateFeature/AndroidManifest.xml
rename to tests/tests/appop/AppWithDuplicateAttribution/AndroidManifest.xml
index b7b5297..55b0ddb 100644
--- a/tests/tests/appop/AppWithDuplicateFeature/AndroidManifest.xml
+++ b/tests/tests/appop/AppWithDuplicateAttribution/AndroidManifest.xml
@@ -17,9 +17,9 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="android.app.appops.cts.appwithduplicatefeature">
- <feature android:featureId="feature1" android:label="@string/dummyLabel" />
- <feature android:featureId="feature1" android:label="@string/dummyLabel" />
+ package="android.app.appops.cts.appwithduplicateattribution">
+ <attribution android:tag="attribution1" android:label="@string/dummyLabel" />
+ <attribution android:tag="attribution1" android:label="@string/dummyLabel" />
<application />
diff --git a/tests/tests/appop/AppWithDuplicateFeature/res/values/strings.xml b/tests/tests/appop/AppWithDuplicateAttribution/res/values/strings.xml
similarity index 100%
rename from tests/tests/appop/AppWithDuplicateFeature/res/values/strings.xml
rename to tests/tests/appop/AppWithDuplicateAttribution/res/values/strings.xml
diff --git a/tests/tests/appop/AppWithFeatureInheritingFromExisting/Android.bp b/tests/tests/appop/AppWithFeatureInheritingFromExisting/Android.bp
deleted file mode 100644
index fd498d7..0000000
--- a/tests/tests/appop/AppWithFeatureInheritingFromExisting/Android.bp
+++ /dev/null
@@ -1,23 +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.
-
-android_test_helper_app {
- name: "AppWithFeatureInheritingFromExisting",
-
- test_suites: [
- "cts",
- "vts",
- "general-tests",
- ]
-}
\ No newline at end of file
diff --git a/tests/tests/appop/AppWithFeatureInheritingFromSameAsOther/Android.bp b/tests/tests/appop/AppWithFeatureInheritingFromSameAsOther/Android.bp
deleted file mode 100644
index d358ae34..0000000
--- a/tests/tests/appop/AppWithFeatureInheritingFromSameAsOther/Android.bp
+++ /dev/null
@@ -1,23 +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.
-
-android_test_helper_app {
- name: "AppWithFeatureInheritingFromSameAsOther",
-
- test_suites: [
- "cts",
- "vts",
- "general-tests",
- ]
-}
\ No newline at end of file
diff --git a/tests/tests/appop/AppWithFeatureInheritingFromSameAsOther/AndroidManifest.xml b/tests/tests/appop/AppWithFeatureInheritingFromSameAsOther/AndroidManifest.xml
deleted file mode 100644
index 5af9edc..0000000
--- a/tests/tests/appop/AppWithFeatureInheritingFromSameAsOther/AndroidManifest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- ~ 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.
- -->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="android.app.appops.cts.appwithfeatureinheritingfromsameasother">
- <feature android:featureId="feature1" android:label="@string/dummyLabel">
- <inherit-from android:featureId="feature3" />
- </feature>
- <feature android:featureId="feature2" android:label="@string/dummyLabel">
- <inherit-from android:featureId="feature3" />
- </feature>
-
- <application />
-
-</manifest>
diff --git a/tests/tests/appop/AppWithFeatureInheritingFromSelf/Android.bp b/tests/tests/appop/AppWithFeatureInheritingFromSelf/Android.bp
deleted file mode 100644
index 4c47869..0000000
--- a/tests/tests/appop/AppWithFeatureInheritingFromSelf/Android.bp
+++ /dev/null
@@ -1,23 +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.
-
-android_test_helper_app {
- name: "AppWithFeatureInheritingFromSelf",
-
- test_suites: [
- "cts",
- "vts",
- "general-tests",
- ]
-}
\ No newline at end of file
diff --git a/tests/tests/appop/AppWithFeatureInheritingFromSelf/AndroidManifest.xml b/tests/tests/appop/AppWithFeatureInheritingFromSelf/AndroidManifest.xml
deleted file mode 100644
index ff7e198..0000000
--- a/tests/tests/appop/AppWithFeatureInheritingFromSelf/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- ~ 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.
- -->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="android.app.appops.cts.appwithfeatureinheritingfromself">
- <feature android:featureId="feature1" android:label="@string/dummyLabel">
- <inherit-from android:featureId="feature1" />
- </feature>
-
- <application />
-
-</manifest>
diff --git a/tests/tests/appop/AppWithLongFeatureId/Android.bp b/tests/tests/appop/AppWithLongAttributionTag/Android.bp
similarity index 94%
copy from tests/tests/appop/AppWithLongFeatureId/Android.bp
copy to tests/tests/appop/AppWithLongAttributionTag/Android.bp
index e0034f0..5ee3f02 100644
--- a/tests/tests/appop/AppWithLongFeatureId/Android.bp
+++ b/tests/tests/appop/AppWithLongAttributionTag/Android.bp
@@ -13,7 +13,7 @@
// limitations under the License.
android_test_helper_app {
- name: "AppWithLongFeatureIdFeature",
+ name: "AppWithLongAttributionTag",
test_suites: [
"cts",
diff --git a/tests/tests/appop/AppWithLongFeatureId/AndroidManifest.xml b/tests/tests/appop/AppWithLongAttributionTag/AndroidManifest.xml
similarity index 80%
rename from tests/tests/appop/AppWithLongFeatureId/AndroidManifest.xml
rename to tests/tests/appop/AppWithLongAttributionTag/AndroidManifest.xml
index 17d10e9..e08a32d 100644
--- a/tests/tests/appop/AppWithLongFeatureId/AndroidManifest.xml
+++ b/tests/tests/appop/AppWithLongAttributionTag/AndroidManifest.xml
@@ -17,8 +17,8 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="android.app.appops.cts.appwithlongfeatureId">
- <feature android:featureId="1xxxx_xxxx2xxxx_xxxx3xxxx_xxxx4xxxx_xxxx5xxxx_xxxxB" android:label="@string/dummyLabel" />
+ package="android.app.appops.cts.appwithlongattributiontag">
+ <attribution android:tag="1xxxx_xxxx2xxxx_xxxx3xxxx_xxxx4xxxx_xxxx5xxxx_xxxxB" android:label="@string/dummyLabel" />
<application />
diff --git a/tests/tests/appop/AppWithLongFeatureId/res/values/strings.xml b/tests/tests/appop/AppWithLongAttributionTag/res/values/strings.xml
similarity index 100%
rename from tests/tests/appop/AppWithLongFeatureId/res/values/strings.xml
rename to tests/tests/appop/AppWithLongAttributionTag/res/values/strings.xml
diff --git a/tests/tests/appop/AppWithLongFeatureId/Android.bp b/tests/tests/appop/AppWithTooManyAttributions/Android.bp
similarity index 94%
rename from tests/tests/appop/AppWithLongFeatureId/Android.bp
rename to tests/tests/appop/AppWithTooManyAttributions/Android.bp
index e0034f0..80b1bd3 100644
--- a/tests/tests/appop/AppWithLongFeatureId/Android.bp
+++ b/tests/tests/appop/AppWithTooManyAttributions/Android.bp
@@ -13,7 +13,7 @@
// limitations under the License.
android_test_helper_app {
- name: "AppWithLongFeatureIdFeature",
+ name: "AppWithTooManyAttributions",
test_suites: [
"cts",
diff --git a/tests/tests/appop/AppWithTooManyAttributions/AndroidManifest.xml b/tests/tests/appop/AppWithTooManyAttributions/AndroidManifest.xml
new file mode 100644
index 0000000..debdb8e
--- /dev/null
+++ b/tests/tests/appop/AppWithTooManyAttributions/AndroidManifest.xml
@@ -0,0 +1,1028 @@
+<?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.app.appops.cts.appwithtoomanyattributions">
+
+ <!-- 1000 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" />
+ <attribution android:tag="f3" android:label="@string/dummyLabel" />
+ <attribution android:tag="f4" android:label="@string/dummyLabel" />
+ <attribution android:tag="f5" android:label="@string/dummyLabel" />
+ <attribution android:tag="f6" android:label="@string/dummyLabel" />
+ <attribution android:tag="f7" android:label="@string/dummyLabel" />
+ <attribution android:tag="f8" android:label="@string/dummyLabel" />
+ <attribution android:tag="f9" android:label="@string/dummyLabel" />
+ <attribution android:tag="f10" android:label="@string/dummyLabel" />
+ <attribution android:tag="f11" android:label="@string/dummyLabel" />
+ <attribution android:tag="f12" android:label="@string/dummyLabel" />
+ <attribution android:tag="f13" android:label="@string/dummyLabel" />
+ <attribution android:tag="f14" android:label="@string/dummyLabel" />
+ <attribution android:tag="f15" android:label="@string/dummyLabel" />
+ <attribution android:tag="f16" android:label="@string/dummyLabel" />
+ <attribution android:tag="f17" android:label="@string/dummyLabel" />
+ <attribution android:tag="f18" android:label="@string/dummyLabel" />
+ <attribution android:tag="f19" android:label="@string/dummyLabel" />
+ <attribution android:tag="f20" android:label="@string/dummyLabel" />
+ <attribution android:tag="f21" android:label="@string/dummyLabel" />
+ <attribution android:tag="f22" android:label="@string/dummyLabel" />
+ <attribution android:tag="f23" android:label="@string/dummyLabel" />
+ <attribution android:tag="f24" android:label="@string/dummyLabel" />
+ <attribution android:tag="f25" android:label="@string/dummyLabel" />
+ <attribution android:tag="f26" android:label="@string/dummyLabel" />
+ <attribution android:tag="f27" android:label="@string/dummyLabel" />
+ <attribution android:tag="f28" android:label="@string/dummyLabel" />
+ <attribution android:tag="f29" android:label="@string/dummyLabel" />
+ <attribution android:tag="f30" android:label="@string/dummyLabel" />
+ <attribution android:tag="f31" android:label="@string/dummyLabel" />
+ <attribution android:tag="f32" android:label="@string/dummyLabel" />
+ <attribution android:tag="f33" android:label="@string/dummyLabel" />
+ <attribution android:tag="f34" android:label="@string/dummyLabel" />
+ <attribution android:tag="f35" android:label="@string/dummyLabel" />
+ <attribution android:tag="f36" android:label="@string/dummyLabel" />
+ <attribution android:tag="f37" android:label="@string/dummyLabel" />
+ <attribution android:tag="f38" android:label="@string/dummyLabel" />
+ <attribution android:tag="f39" android:label="@string/dummyLabel" />
+ <attribution android:tag="f40" android:label="@string/dummyLabel" />
+ <attribution android:tag="f41" android:label="@string/dummyLabel" />
+ <attribution android:tag="f42" android:label="@string/dummyLabel" />
+ <attribution android:tag="f43" android:label="@string/dummyLabel" />
+ <attribution android:tag="f44" android:label="@string/dummyLabel" />
+ <attribution android:tag="f45" android:label="@string/dummyLabel" />
+ <attribution android:tag="f46" android:label="@string/dummyLabel" />
+ <attribution android:tag="f47" android:label="@string/dummyLabel" />
+ <attribution android:tag="f48" android:label="@string/dummyLabel" />
+ <attribution android:tag="f49" android:label="@string/dummyLabel" />
+ <attribution android:tag="f50" android:label="@string/dummyLabel" />
+ <attribution android:tag="f51" android:label="@string/dummyLabel" />
+ <attribution android:tag="f52" android:label="@string/dummyLabel" />
+ <attribution android:tag="f53" android:label="@string/dummyLabel" />
+ <attribution android:tag="f54" android:label="@string/dummyLabel" />
+ <attribution android:tag="f55" android:label="@string/dummyLabel" />
+ <attribution android:tag="f56" android:label="@string/dummyLabel" />
+ <attribution android:tag="f57" android:label="@string/dummyLabel" />
+ <attribution android:tag="f58" android:label="@string/dummyLabel" />
+ <attribution android:tag="f59" android:label="@string/dummyLabel" />
+ <attribution android:tag="f60" android:label="@string/dummyLabel" />
+ <attribution android:tag="f61" android:label="@string/dummyLabel" />
+ <attribution android:tag="f62" android:label="@string/dummyLabel" />
+ <attribution android:tag="f63" android:label="@string/dummyLabel" />
+ <attribution android:tag="f64" android:label="@string/dummyLabel" />
+ <attribution android:tag="f65" android:label="@string/dummyLabel" />
+ <attribution android:tag="f66" android:label="@string/dummyLabel" />
+ <attribution android:tag="f67" android:label="@string/dummyLabel" />
+ <attribution android:tag="f68" android:label="@string/dummyLabel" />
+ <attribution android:tag="f69" android:label="@string/dummyLabel" />
+ <attribution android:tag="f70" android:label="@string/dummyLabel" />
+ <attribution android:tag="f71" android:label="@string/dummyLabel" />
+ <attribution android:tag="f72" android:label="@string/dummyLabel" />
+ <attribution android:tag="f73" android:label="@string/dummyLabel" />
+ <attribution android:tag="f74" android:label="@string/dummyLabel" />
+ <attribution android:tag="f75" android:label="@string/dummyLabel" />
+ <attribution android:tag="f76" android:label="@string/dummyLabel" />
+ <attribution android:tag="f77" android:label="@string/dummyLabel" />
+ <attribution android:tag="f78" android:label="@string/dummyLabel" />
+ <attribution android:tag="f79" android:label="@string/dummyLabel" />
+ <attribution android:tag="f80" android:label="@string/dummyLabel" />
+ <attribution android:tag="f81" android:label="@string/dummyLabel" />
+ <attribution android:tag="f82" android:label="@string/dummyLabel" />
+ <attribution android:tag="f83" android:label="@string/dummyLabel" />
+ <attribution android:tag="f84" android:label="@string/dummyLabel" />
+ <attribution android:tag="f85" android:label="@string/dummyLabel" />
+ <attribution android:tag="f86" android:label="@string/dummyLabel" />
+ <attribution android:tag="f87" android:label="@string/dummyLabel" />
+ <attribution android:tag="f88" android:label="@string/dummyLabel" />
+ <attribution android:tag="f89" android:label="@string/dummyLabel" />
+ <attribution android:tag="f90" android:label="@string/dummyLabel" />
+ <attribution android:tag="f91" android:label="@string/dummyLabel" />
+ <attribution android:tag="f92" android:label="@string/dummyLabel" />
+ <attribution android:tag="f93" android:label="@string/dummyLabel" />
+ <attribution android:tag="f94" android:label="@string/dummyLabel" />
+ <attribution android:tag="f95" android:label="@string/dummyLabel" />
+ <attribution android:tag="f96" android:label="@string/dummyLabel" />
+ <attribution android:tag="f97" android:label="@string/dummyLabel" />
+ <attribution android:tag="f98" android:label="@string/dummyLabel" />
+ <attribution android:tag="f99" android:label="@string/dummyLabel" />
+ <attribution android:tag="f100" android:label="@string/dummyLabel" />
+ <attribution android:tag="f101" android:label="@string/dummyLabel" />
+ <attribution android:tag="f102" android:label="@string/dummyLabel" />
+ <attribution android:tag="f103" android:label="@string/dummyLabel" />
+ <attribution android:tag="f104" android:label="@string/dummyLabel" />
+ <attribution android:tag="f105" android:label="@string/dummyLabel" />
+ <attribution android:tag="f106" android:label="@string/dummyLabel" />
+ <attribution android:tag="f107" android:label="@string/dummyLabel" />
+ <attribution android:tag="f108" android:label="@string/dummyLabel" />
+ <attribution android:tag="f109" android:label="@string/dummyLabel" />
+ <attribution android:tag="f110" android:label="@string/dummyLabel" />
+ <attribution android:tag="f111" android:label="@string/dummyLabel" />
+ <attribution android:tag="f112" android:label="@string/dummyLabel" />
+ <attribution android:tag="f113" android:label="@string/dummyLabel" />
+ <attribution android:tag="f114" android:label="@string/dummyLabel" />
+ <attribution android:tag="f115" android:label="@string/dummyLabel" />
+ <attribution android:tag="f116" android:label="@string/dummyLabel" />
+ <attribution android:tag="f117" android:label="@string/dummyLabel" />
+ <attribution android:tag="f118" android:label="@string/dummyLabel" />
+ <attribution android:tag="f119" android:label="@string/dummyLabel" />
+ <attribution android:tag="f120" android:label="@string/dummyLabel" />
+ <attribution android:tag="f121" android:label="@string/dummyLabel" />
+ <attribution android:tag="f122" android:label="@string/dummyLabel" />
+ <attribution android:tag="f123" android:label="@string/dummyLabel" />
+ <attribution android:tag="f124" android:label="@string/dummyLabel" />
+ <attribution android:tag="f125" android:label="@string/dummyLabel" />
+ <attribution android:tag="f126" android:label="@string/dummyLabel" />
+ <attribution android:tag="f127" android:label="@string/dummyLabel" />
+ <attribution android:tag="f128" android:label="@string/dummyLabel" />
+ <attribution android:tag="f129" android:label="@string/dummyLabel" />
+ <attribution android:tag="f130" android:label="@string/dummyLabel" />
+ <attribution android:tag="f131" android:label="@string/dummyLabel" />
+ <attribution android:tag="f132" android:label="@string/dummyLabel" />
+ <attribution android:tag="f133" android:label="@string/dummyLabel" />
+ <attribution android:tag="f134" android:label="@string/dummyLabel" />
+ <attribution android:tag="f135" android:label="@string/dummyLabel" />
+ <attribution android:tag="f136" android:label="@string/dummyLabel" />
+ <attribution android:tag="f137" android:label="@string/dummyLabel" />
+ <attribution android:tag="f138" android:label="@string/dummyLabel" />
+ <attribution android:tag="f139" android:label="@string/dummyLabel" />
+ <attribution android:tag="f140" android:label="@string/dummyLabel" />
+ <attribution android:tag="f141" android:label="@string/dummyLabel" />
+ <attribution android:tag="f142" android:label="@string/dummyLabel" />
+ <attribution android:tag="f143" android:label="@string/dummyLabel" />
+ <attribution android:tag="f144" android:label="@string/dummyLabel" />
+ <attribution android:tag="f145" android:label="@string/dummyLabel" />
+ <attribution android:tag="f146" android:label="@string/dummyLabel" />
+ <attribution android:tag="f147" android:label="@string/dummyLabel" />
+ <attribution android:tag="f148" android:label="@string/dummyLabel" />
+ <attribution android:tag="f149" android:label="@string/dummyLabel" />
+ <attribution android:tag="f150" android:label="@string/dummyLabel" />
+ <attribution android:tag="f151" android:label="@string/dummyLabel" />
+ <attribution android:tag="f152" android:label="@string/dummyLabel" />
+ <attribution android:tag="f153" android:label="@string/dummyLabel" />
+ <attribution android:tag="f154" android:label="@string/dummyLabel" />
+ <attribution android:tag="f155" android:label="@string/dummyLabel" />
+ <attribution android:tag="f156" android:label="@string/dummyLabel" />
+ <attribution android:tag="f157" android:label="@string/dummyLabel" />
+ <attribution android:tag="f158" android:label="@string/dummyLabel" />
+ <attribution android:tag="f159" android:label="@string/dummyLabel" />
+ <attribution android:tag="f160" android:label="@string/dummyLabel" />
+ <attribution android:tag="f161" android:label="@string/dummyLabel" />
+ <attribution android:tag="f162" android:label="@string/dummyLabel" />
+ <attribution android:tag="f163" android:label="@string/dummyLabel" />
+ <attribution android:tag="f164" android:label="@string/dummyLabel" />
+ <attribution android:tag="f165" android:label="@string/dummyLabel" />
+ <attribution android:tag="f166" android:label="@string/dummyLabel" />
+ <attribution android:tag="f167" android:label="@string/dummyLabel" />
+ <attribution android:tag="f168" android:label="@string/dummyLabel" />
+ <attribution android:tag="f169" android:label="@string/dummyLabel" />
+ <attribution android:tag="f170" android:label="@string/dummyLabel" />
+ <attribution android:tag="f171" android:label="@string/dummyLabel" />
+ <attribution android:tag="f172" android:label="@string/dummyLabel" />
+ <attribution android:tag="f173" android:label="@string/dummyLabel" />
+ <attribution android:tag="f174" android:label="@string/dummyLabel" />
+ <attribution android:tag="f175" android:label="@string/dummyLabel" />
+ <attribution android:tag="f176" android:label="@string/dummyLabel" />
+ <attribution android:tag="f177" android:label="@string/dummyLabel" />
+ <attribution android:tag="f178" android:label="@string/dummyLabel" />
+ <attribution android:tag="f179" android:label="@string/dummyLabel" />
+ <attribution android:tag="f180" android:label="@string/dummyLabel" />
+ <attribution android:tag="f181" android:label="@string/dummyLabel" />
+ <attribution android:tag="f182" android:label="@string/dummyLabel" />
+ <attribution android:tag="f183" android:label="@string/dummyLabel" />
+ <attribution android:tag="f184" android:label="@string/dummyLabel" />
+ <attribution android:tag="f185" android:label="@string/dummyLabel" />
+ <attribution android:tag="f186" android:label="@string/dummyLabel" />
+ <attribution android:tag="f187" android:label="@string/dummyLabel" />
+ <attribution android:tag="f188" android:label="@string/dummyLabel" />
+ <attribution android:tag="f189" android:label="@string/dummyLabel" />
+ <attribution android:tag="f190" android:label="@string/dummyLabel" />
+ <attribution android:tag="f191" android:label="@string/dummyLabel" />
+ <attribution android:tag="f192" android:label="@string/dummyLabel" />
+ <attribution android:tag="f193" android:label="@string/dummyLabel" />
+ <attribution android:tag="f194" android:label="@string/dummyLabel" />
+ <attribution android:tag="f195" android:label="@string/dummyLabel" />
+ <attribution android:tag="f196" android:label="@string/dummyLabel" />
+ <attribution android:tag="f197" android:label="@string/dummyLabel" />
+ <attribution android:tag="f198" android:label="@string/dummyLabel" />
+ <attribution android:tag="f199" android:label="@string/dummyLabel" />
+ <attribution android:tag="f200" android:label="@string/dummyLabel" />
+ <attribution android:tag="f201" android:label="@string/dummyLabel" />
+ <attribution android:tag="f202" android:label="@string/dummyLabel" />
+ <attribution android:tag="f203" android:label="@string/dummyLabel" />
+ <attribution android:tag="f204" android:label="@string/dummyLabel" />
+ <attribution android:tag="f205" android:label="@string/dummyLabel" />
+ <attribution android:tag="f206" android:label="@string/dummyLabel" />
+ <attribution android:tag="f207" android:label="@string/dummyLabel" />
+ <attribution android:tag="f208" android:label="@string/dummyLabel" />
+ <attribution android:tag="f209" android:label="@string/dummyLabel" />
+ <attribution android:tag="f210" android:label="@string/dummyLabel" />
+ <attribution android:tag="f211" android:label="@string/dummyLabel" />
+ <attribution android:tag="f212" android:label="@string/dummyLabel" />
+ <attribution android:tag="f213" android:label="@string/dummyLabel" />
+ <attribution android:tag="f214" android:label="@string/dummyLabel" />
+ <attribution android:tag="f215" android:label="@string/dummyLabel" />
+ <attribution android:tag="f216" android:label="@string/dummyLabel" />
+ <attribution android:tag="f217" android:label="@string/dummyLabel" />
+ <attribution android:tag="f218" android:label="@string/dummyLabel" />
+ <attribution android:tag="f219" android:label="@string/dummyLabel" />
+ <attribution android:tag="f220" android:label="@string/dummyLabel" />
+ <attribution android:tag="f221" android:label="@string/dummyLabel" />
+ <attribution android:tag="f222" android:label="@string/dummyLabel" />
+ <attribution android:tag="f223" android:label="@string/dummyLabel" />
+ <attribution android:tag="f224" android:label="@string/dummyLabel" />
+ <attribution android:tag="f225" android:label="@string/dummyLabel" />
+ <attribution android:tag="f226" android:label="@string/dummyLabel" />
+ <attribution android:tag="f227" android:label="@string/dummyLabel" />
+ <attribution android:tag="f228" android:label="@string/dummyLabel" />
+ <attribution android:tag="f229" android:label="@string/dummyLabel" />
+ <attribution android:tag="f230" android:label="@string/dummyLabel" />
+ <attribution android:tag="f231" android:label="@string/dummyLabel" />
+ <attribution android:tag="f232" android:label="@string/dummyLabel" />
+ <attribution android:tag="f233" android:label="@string/dummyLabel" />
+ <attribution android:tag="f234" android:label="@string/dummyLabel" />
+ <attribution android:tag="f235" android:label="@string/dummyLabel" />
+ <attribution android:tag="f236" android:label="@string/dummyLabel" />
+ <attribution android:tag="f237" android:label="@string/dummyLabel" />
+ <attribution android:tag="f238" android:label="@string/dummyLabel" />
+ <attribution android:tag="f239" android:label="@string/dummyLabel" />
+ <attribution android:tag="f240" android:label="@string/dummyLabel" />
+ <attribution android:tag="f241" android:label="@string/dummyLabel" />
+ <attribution android:tag="f242" android:label="@string/dummyLabel" />
+ <attribution android:tag="f243" android:label="@string/dummyLabel" />
+ <attribution android:tag="f244" android:label="@string/dummyLabel" />
+ <attribution android:tag="f245" android:label="@string/dummyLabel" />
+ <attribution android:tag="f246" android:label="@string/dummyLabel" />
+ <attribution android:tag="f247" android:label="@string/dummyLabel" />
+ <attribution android:tag="f248" android:label="@string/dummyLabel" />
+ <attribution android:tag="f249" android:label="@string/dummyLabel" />
+ <attribution android:tag="f250" android:label="@string/dummyLabel" />
+ <attribution android:tag="f251" android:label="@string/dummyLabel" />
+ <attribution android:tag="f252" android:label="@string/dummyLabel" />
+ <attribution android:tag="f253" android:label="@string/dummyLabel" />
+ <attribution android:tag="f254" android:label="@string/dummyLabel" />
+ <attribution android:tag="f255" android:label="@string/dummyLabel" />
+ <attribution android:tag="f256" android:label="@string/dummyLabel" />
+ <attribution android:tag="f257" android:label="@string/dummyLabel" />
+ <attribution android:tag="f258" android:label="@string/dummyLabel" />
+ <attribution android:tag="f259" android:label="@string/dummyLabel" />
+ <attribution android:tag="f260" android:label="@string/dummyLabel" />
+ <attribution android:tag="f261" android:label="@string/dummyLabel" />
+ <attribution android:tag="f262" android:label="@string/dummyLabel" />
+ <attribution android:tag="f263" android:label="@string/dummyLabel" />
+ <attribution android:tag="f264" android:label="@string/dummyLabel" />
+ <attribution android:tag="f265" android:label="@string/dummyLabel" />
+ <attribution android:tag="f266" android:label="@string/dummyLabel" />
+ <attribution android:tag="f267" android:label="@string/dummyLabel" />
+ <attribution android:tag="f268" android:label="@string/dummyLabel" />
+ <attribution android:tag="f269" android:label="@string/dummyLabel" />
+ <attribution android:tag="f270" android:label="@string/dummyLabel" />
+ <attribution android:tag="f271" android:label="@string/dummyLabel" />
+ <attribution android:tag="f272" android:label="@string/dummyLabel" />
+ <attribution android:tag="f273" android:label="@string/dummyLabel" />
+ <attribution android:tag="f274" android:label="@string/dummyLabel" />
+ <attribution android:tag="f275" android:label="@string/dummyLabel" />
+ <attribution android:tag="f276" android:label="@string/dummyLabel" />
+ <attribution android:tag="f277" android:label="@string/dummyLabel" />
+ <attribution android:tag="f278" android:label="@string/dummyLabel" />
+ <attribution android:tag="f279" android:label="@string/dummyLabel" />
+ <attribution android:tag="f280" android:label="@string/dummyLabel" />
+ <attribution android:tag="f281" android:label="@string/dummyLabel" />
+ <attribution android:tag="f282" android:label="@string/dummyLabel" />
+ <attribution android:tag="f283" android:label="@string/dummyLabel" />
+ <attribution android:tag="f284" android:label="@string/dummyLabel" />
+ <attribution android:tag="f285" android:label="@string/dummyLabel" />
+ <attribution android:tag="f286" android:label="@string/dummyLabel" />
+ <attribution android:tag="f287" android:label="@string/dummyLabel" />
+ <attribution android:tag="f288" android:label="@string/dummyLabel" />
+ <attribution android:tag="f289" android:label="@string/dummyLabel" />
+ <attribution android:tag="f290" android:label="@string/dummyLabel" />
+ <attribution android:tag="f291" android:label="@string/dummyLabel" />
+ <attribution android:tag="f292" android:label="@string/dummyLabel" />
+ <attribution android:tag="f293" android:label="@string/dummyLabel" />
+ <attribution android:tag="f294" android:label="@string/dummyLabel" />
+ <attribution android:tag="f295" android:label="@string/dummyLabel" />
+ <attribution android:tag="f296" android:label="@string/dummyLabel" />
+ <attribution android:tag="f297" android:label="@string/dummyLabel" />
+ <attribution android:tag="f298" android:label="@string/dummyLabel" />
+ <attribution android:tag="f299" android:label="@string/dummyLabel" />
+ <attribution android:tag="f300" android:label="@string/dummyLabel" />
+ <attribution android:tag="f301" android:label="@string/dummyLabel" />
+ <attribution android:tag="f302" android:label="@string/dummyLabel" />
+ <attribution android:tag="f303" android:label="@string/dummyLabel" />
+ <attribution android:tag="f304" android:label="@string/dummyLabel" />
+ <attribution android:tag="f305" android:label="@string/dummyLabel" />
+ <attribution android:tag="f306" android:label="@string/dummyLabel" />
+ <attribution android:tag="f307" android:label="@string/dummyLabel" />
+ <attribution android:tag="f308" android:label="@string/dummyLabel" />
+ <attribution android:tag="f309" android:label="@string/dummyLabel" />
+ <attribution android:tag="f310" android:label="@string/dummyLabel" />
+ <attribution android:tag="f311" android:label="@string/dummyLabel" />
+ <attribution android:tag="f312" android:label="@string/dummyLabel" />
+ <attribution android:tag="f313" android:label="@string/dummyLabel" />
+ <attribution android:tag="f314" android:label="@string/dummyLabel" />
+ <attribution android:tag="f315" android:label="@string/dummyLabel" />
+ <attribution android:tag="f316" android:label="@string/dummyLabel" />
+ <attribution android:tag="f317" android:label="@string/dummyLabel" />
+ <attribution android:tag="f318" android:label="@string/dummyLabel" />
+ <attribution android:tag="f319" android:label="@string/dummyLabel" />
+ <attribution android:tag="f320" android:label="@string/dummyLabel" />
+ <attribution android:tag="f321" android:label="@string/dummyLabel" />
+ <attribution android:tag="f322" android:label="@string/dummyLabel" />
+ <attribution android:tag="f323" android:label="@string/dummyLabel" />
+ <attribution android:tag="f324" android:label="@string/dummyLabel" />
+ <attribution android:tag="f325" android:label="@string/dummyLabel" />
+ <attribution android:tag="f326" android:label="@string/dummyLabel" />
+ <attribution android:tag="f327" android:label="@string/dummyLabel" />
+ <attribution android:tag="f328" android:label="@string/dummyLabel" />
+ <attribution android:tag="f329" android:label="@string/dummyLabel" />
+ <attribution android:tag="f330" android:label="@string/dummyLabel" />
+ <attribution android:tag="f331" android:label="@string/dummyLabel" />
+ <attribution android:tag="f332" android:label="@string/dummyLabel" />
+ <attribution android:tag="f333" android:label="@string/dummyLabel" />
+ <attribution android:tag="f334" android:label="@string/dummyLabel" />
+ <attribution android:tag="f335" android:label="@string/dummyLabel" />
+ <attribution android:tag="f336" android:label="@string/dummyLabel" />
+ <attribution android:tag="f337" android:label="@string/dummyLabel" />
+ <attribution android:tag="f338" android:label="@string/dummyLabel" />
+ <attribution android:tag="f339" android:label="@string/dummyLabel" />
+ <attribution android:tag="f340" android:label="@string/dummyLabel" />
+ <attribution android:tag="f341" android:label="@string/dummyLabel" />
+ <attribution android:tag="f342" android:label="@string/dummyLabel" />
+ <attribution android:tag="f343" android:label="@string/dummyLabel" />
+ <attribution android:tag="f344" android:label="@string/dummyLabel" />
+ <attribution android:tag="f345" android:label="@string/dummyLabel" />
+ <attribution android:tag="f346" android:label="@string/dummyLabel" />
+ <attribution android:tag="f347" android:label="@string/dummyLabel" />
+ <attribution android:tag="f348" android:label="@string/dummyLabel" />
+ <attribution android:tag="f349" android:label="@string/dummyLabel" />
+ <attribution android:tag="f350" android:label="@string/dummyLabel" />
+ <attribution android:tag="f351" android:label="@string/dummyLabel" />
+ <attribution android:tag="f352" android:label="@string/dummyLabel" />
+ <attribution android:tag="f353" android:label="@string/dummyLabel" />
+ <attribution android:tag="f354" android:label="@string/dummyLabel" />
+ <attribution android:tag="f355" android:label="@string/dummyLabel" />
+ <attribution android:tag="f356" android:label="@string/dummyLabel" />
+ <attribution android:tag="f357" android:label="@string/dummyLabel" />
+ <attribution android:tag="f358" android:label="@string/dummyLabel" />
+ <attribution android:tag="f359" android:label="@string/dummyLabel" />
+ <attribution android:tag="f360" android:label="@string/dummyLabel" />
+ <attribution android:tag="f361" android:label="@string/dummyLabel" />
+ <attribution android:tag="f362" android:label="@string/dummyLabel" />
+ <attribution android:tag="f363" android:label="@string/dummyLabel" />
+ <attribution android:tag="f364" android:label="@string/dummyLabel" />
+ <attribution android:tag="f365" android:label="@string/dummyLabel" />
+ <attribution android:tag="f366" android:label="@string/dummyLabel" />
+ <attribution android:tag="f367" android:label="@string/dummyLabel" />
+ <attribution android:tag="f368" android:label="@string/dummyLabel" />
+ <attribution android:tag="f369" android:label="@string/dummyLabel" />
+ <attribution android:tag="f370" android:label="@string/dummyLabel" />
+ <attribution android:tag="f371" android:label="@string/dummyLabel" />
+ <attribution android:tag="f372" android:label="@string/dummyLabel" />
+ <attribution android:tag="f373" android:label="@string/dummyLabel" />
+ <attribution android:tag="f374" android:label="@string/dummyLabel" />
+ <attribution android:tag="f375" android:label="@string/dummyLabel" />
+ <attribution android:tag="f376" android:label="@string/dummyLabel" />
+ <attribution android:tag="f377" android:label="@string/dummyLabel" />
+ <attribution android:tag="f378" android:label="@string/dummyLabel" />
+ <attribution android:tag="f379" android:label="@string/dummyLabel" />
+ <attribution android:tag="f380" android:label="@string/dummyLabel" />
+ <attribution android:tag="f381" android:label="@string/dummyLabel" />
+ <attribution android:tag="f382" android:label="@string/dummyLabel" />
+ <attribution android:tag="f383" android:label="@string/dummyLabel" />
+ <attribution android:tag="f384" android:label="@string/dummyLabel" />
+ <attribution android:tag="f385" android:label="@string/dummyLabel" />
+ <attribution android:tag="f386" android:label="@string/dummyLabel" />
+ <attribution android:tag="f387" android:label="@string/dummyLabel" />
+ <attribution android:tag="f388" android:label="@string/dummyLabel" />
+ <attribution android:tag="f389" android:label="@string/dummyLabel" />
+ <attribution android:tag="f390" android:label="@string/dummyLabel" />
+ <attribution android:tag="f391" android:label="@string/dummyLabel" />
+ <attribution android:tag="f392" android:label="@string/dummyLabel" />
+ <attribution android:tag="f393" android:label="@string/dummyLabel" />
+ <attribution android:tag="f394" android:label="@string/dummyLabel" />
+ <attribution android:tag="f395" android:label="@string/dummyLabel" />
+ <attribution android:tag="f396" android:label="@string/dummyLabel" />
+ <attribution android:tag="f397" android:label="@string/dummyLabel" />
+ <attribution android:tag="f398" android:label="@string/dummyLabel" />
+ <attribution android:tag="f399" android:label="@string/dummyLabel" />
+ <attribution android:tag="f400" android:label="@string/dummyLabel" />
+ <attribution android:tag="f401" android:label="@string/dummyLabel" />
+ <attribution android:tag="f402" android:label="@string/dummyLabel" />
+ <attribution android:tag="f403" android:label="@string/dummyLabel" />
+ <attribution android:tag="f404" android:label="@string/dummyLabel" />
+ <attribution android:tag="f405" android:label="@string/dummyLabel" />
+ <attribution android:tag="f406" android:label="@string/dummyLabel" />
+ <attribution android:tag="f407" android:label="@string/dummyLabel" />
+ <attribution android:tag="f408" android:label="@string/dummyLabel" />
+ <attribution android:tag="f409" android:label="@string/dummyLabel" />
+ <attribution android:tag="f410" android:label="@string/dummyLabel" />
+ <attribution android:tag="f411" android:label="@string/dummyLabel" />
+ <attribution android:tag="f412" android:label="@string/dummyLabel" />
+ <attribution android:tag="f413" android:label="@string/dummyLabel" />
+ <attribution android:tag="f414" android:label="@string/dummyLabel" />
+ <attribution android:tag="f415" android:label="@string/dummyLabel" />
+ <attribution android:tag="f416" android:label="@string/dummyLabel" />
+ <attribution android:tag="f417" android:label="@string/dummyLabel" />
+ <attribution android:tag="f418" android:label="@string/dummyLabel" />
+ <attribution android:tag="f419" android:label="@string/dummyLabel" />
+ <attribution android:tag="f420" android:label="@string/dummyLabel" />
+ <attribution android:tag="f421" android:label="@string/dummyLabel" />
+ <attribution android:tag="f422" android:label="@string/dummyLabel" />
+ <attribution android:tag="f423" android:label="@string/dummyLabel" />
+ <attribution android:tag="f424" android:label="@string/dummyLabel" />
+ <attribution android:tag="f425" android:label="@string/dummyLabel" />
+ <attribution android:tag="f426" android:label="@string/dummyLabel" />
+ <attribution android:tag="f427" android:label="@string/dummyLabel" />
+ <attribution android:tag="f428" android:label="@string/dummyLabel" />
+ <attribution android:tag="f429" android:label="@string/dummyLabel" />
+ <attribution android:tag="f430" android:label="@string/dummyLabel" />
+ <attribution android:tag="f431" android:label="@string/dummyLabel" />
+ <attribution android:tag="f432" android:label="@string/dummyLabel" />
+ <attribution android:tag="f433" android:label="@string/dummyLabel" />
+ <attribution android:tag="f434" android:label="@string/dummyLabel" />
+ <attribution android:tag="f435" android:label="@string/dummyLabel" />
+ <attribution android:tag="f436" android:label="@string/dummyLabel" />
+ <attribution android:tag="f437" android:label="@string/dummyLabel" />
+ <attribution android:tag="f438" android:label="@string/dummyLabel" />
+ <attribution android:tag="f439" android:label="@string/dummyLabel" />
+ <attribution android:tag="f440" android:label="@string/dummyLabel" />
+ <attribution android:tag="f441" android:label="@string/dummyLabel" />
+ <attribution android:tag="f442" android:label="@string/dummyLabel" />
+ <attribution android:tag="f443" android:label="@string/dummyLabel" />
+ <attribution android:tag="f444" android:label="@string/dummyLabel" />
+ <attribution android:tag="f445" android:label="@string/dummyLabel" />
+ <attribution android:tag="f446" android:label="@string/dummyLabel" />
+ <attribution android:tag="f447" android:label="@string/dummyLabel" />
+ <attribution android:tag="f448" android:label="@string/dummyLabel" />
+ <attribution android:tag="f449" android:label="@string/dummyLabel" />
+ <attribution android:tag="f450" android:label="@string/dummyLabel" />
+ <attribution android:tag="f451" android:label="@string/dummyLabel" />
+ <attribution android:tag="f452" android:label="@string/dummyLabel" />
+ <attribution android:tag="f453" android:label="@string/dummyLabel" />
+ <attribution android:tag="f454" android:label="@string/dummyLabel" />
+ <attribution android:tag="f455" android:label="@string/dummyLabel" />
+ <attribution android:tag="f456" android:label="@string/dummyLabel" />
+ <attribution android:tag="f457" android:label="@string/dummyLabel" />
+ <attribution android:tag="f458" android:label="@string/dummyLabel" />
+ <attribution android:tag="f459" android:label="@string/dummyLabel" />
+ <attribution android:tag="f460" android:label="@string/dummyLabel" />
+ <attribution android:tag="f461" android:label="@string/dummyLabel" />
+ <attribution android:tag="f462" android:label="@string/dummyLabel" />
+ <attribution android:tag="f463" android:label="@string/dummyLabel" />
+ <attribution android:tag="f464" android:label="@string/dummyLabel" />
+ <attribution android:tag="f465" android:label="@string/dummyLabel" />
+ <attribution android:tag="f466" android:label="@string/dummyLabel" />
+ <attribution android:tag="f467" android:label="@string/dummyLabel" />
+ <attribution android:tag="f468" android:label="@string/dummyLabel" />
+ <attribution android:tag="f469" android:label="@string/dummyLabel" />
+ <attribution android:tag="f470" android:label="@string/dummyLabel" />
+ <attribution android:tag="f471" android:label="@string/dummyLabel" />
+ <attribution android:tag="f472" android:label="@string/dummyLabel" />
+ <attribution android:tag="f473" android:label="@string/dummyLabel" />
+ <attribution android:tag="f474" android:label="@string/dummyLabel" />
+ <attribution android:tag="f475" android:label="@string/dummyLabel" />
+ <attribution android:tag="f476" android:label="@string/dummyLabel" />
+ <attribution android:tag="f477" android:label="@string/dummyLabel" />
+ <attribution android:tag="f478" android:label="@string/dummyLabel" />
+ <attribution android:tag="f479" android:label="@string/dummyLabel" />
+ <attribution android:tag="f480" android:label="@string/dummyLabel" />
+ <attribution android:tag="f481" android:label="@string/dummyLabel" />
+ <attribution android:tag="f482" android:label="@string/dummyLabel" />
+ <attribution android:tag="f483" android:label="@string/dummyLabel" />
+ <attribution android:tag="f484" android:label="@string/dummyLabel" />
+ <attribution android:tag="f485" android:label="@string/dummyLabel" />
+ <attribution android:tag="f486" android:label="@string/dummyLabel" />
+ <attribution android:tag="f487" android:label="@string/dummyLabel" />
+ <attribution android:tag="f488" android:label="@string/dummyLabel" />
+ <attribution android:tag="f489" android:label="@string/dummyLabel" />
+ <attribution android:tag="f490" android:label="@string/dummyLabel" />
+ <attribution android:tag="f491" android:label="@string/dummyLabel" />
+ <attribution android:tag="f492" android:label="@string/dummyLabel" />
+ <attribution android:tag="f493" android:label="@string/dummyLabel" />
+ <attribution android:tag="f494" android:label="@string/dummyLabel" />
+ <attribution android:tag="f495" android:label="@string/dummyLabel" />
+ <attribution android:tag="f496" android:label="@string/dummyLabel" />
+ <attribution android:tag="f497" android:label="@string/dummyLabel" />
+ <attribution android:tag="f498" android:label="@string/dummyLabel" />
+ <attribution android:tag="f499" android:label="@string/dummyLabel" />
+ <attribution android:tag="f500" android:label="@string/dummyLabel" />
+ <attribution android:tag="f501" android:label="@string/dummyLabel" />
+ <attribution android:tag="f502" android:label="@string/dummyLabel" />
+ <attribution android:tag="f503" android:label="@string/dummyLabel" />
+ <attribution android:tag="f504" android:label="@string/dummyLabel" />
+ <attribution android:tag="f505" android:label="@string/dummyLabel" />
+ <attribution android:tag="f506" android:label="@string/dummyLabel" />
+ <attribution android:tag="f507" android:label="@string/dummyLabel" />
+ <attribution android:tag="f508" android:label="@string/dummyLabel" />
+ <attribution android:tag="f509" android:label="@string/dummyLabel" />
+ <attribution android:tag="f510" android:label="@string/dummyLabel" />
+ <attribution android:tag="f511" android:label="@string/dummyLabel" />
+ <attribution android:tag="f512" android:label="@string/dummyLabel" />
+ <attribution android:tag="f513" android:label="@string/dummyLabel" />
+ <attribution android:tag="f514" android:label="@string/dummyLabel" />
+ <attribution android:tag="f515" android:label="@string/dummyLabel" />
+ <attribution android:tag="f516" android:label="@string/dummyLabel" />
+ <attribution android:tag="f517" android:label="@string/dummyLabel" />
+ <attribution android:tag="f518" android:label="@string/dummyLabel" />
+ <attribution android:tag="f519" android:label="@string/dummyLabel" />
+ <attribution android:tag="f520" android:label="@string/dummyLabel" />
+ <attribution android:tag="f521" android:label="@string/dummyLabel" />
+ <attribution android:tag="f522" android:label="@string/dummyLabel" />
+ <attribution android:tag="f523" android:label="@string/dummyLabel" />
+ <attribution android:tag="f524" android:label="@string/dummyLabel" />
+ <attribution android:tag="f525" android:label="@string/dummyLabel" />
+ <attribution android:tag="f526" android:label="@string/dummyLabel" />
+ <attribution android:tag="f527" android:label="@string/dummyLabel" />
+ <attribution android:tag="f528" android:label="@string/dummyLabel" />
+ <attribution android:tag="f529" android:label="@string/dummyLabel" />
+ <attribution android:tag="f530" android:label="@string/dummyLabel" />
+ <attribution android:tag="f531" android:label="@string/dummyLabel" />
+ <attribution android:tag="f532" android:label="@string/dummyLabel" />
+ <attribution android:tag="f533" android:label="@string/dummyLabel" />
+ <attribution android:tag="f534" android:label="@string/dummyLabel" />
+ <attribution android:tag="f535" android:label="@string/dummyLabel" />
+ <attribution android:tag="f536" android:label="@string/dummyLabel" />
+ <attribution android:tag="f537" android:label="@string/dummyLabel" />
+ <attribution android:tag="f538" android:label="@string/dummyLabel" />
+ <attribution android:tag="f539" android:label="@string/dummyLabel" />
+ <attribution android:tag="f540" android:label="@string/dummyLabel" />
+ <attribution android:tag="f541" android:label="@string/dummyLabel" />
+ <attribution android:tag="f542" android:label="@string/dummyLabel" />
+ <attribution android:tag="f543" android:label="@string/dummyLabel" />
+ <attribution android:tag="f544" android:label="@string/dummyLabel" />
+ <attribution android:tag="f545" android:label="@string/dummyLabel" />
+ <attribution android:tag="f546" android:label="@string/dummyLabel" />
+ <attribution android:tag="f547" android:label="@string/dummyLabel" />
+ <attribution android:tag="f548" android:label="@string/dummyLabel" />
+ <attribution android:tag="f549" android:label="@string/dummyLabel" />
+ <attribution android:tag="f550" android:label="@string/dummyLabel" />
+ <attribution android:tag="f551" android:label="@string/dummyLabel" />
+ <attribution android:tag="f552" android:label="@string/dummyLabel" />
+ <attribution android:tag="f553" android:label="@string/dummyLabel" />
+ <attribution android:tag="f554" android:label="@string/dummyLabel" />
+ <attribution android:tag="f555" android:label="@string/dummyLabel" />
+ <attribution android:tag="f556" android:label="@string/dummyLabel" />
+ <attribution android:tag="f557" android:label="@string/dummyLabel" />
+ <attribution android:tag="f558" android:label="@string/dummyLabel" />
+ <attribution android:tag="f559" android:label="@string/dummyLabel" />
+ <attribution android:tag="f560" android:label="@string/dummyLabel" />
+ <attribution android:tag="f561" android:label="@string/dummyLabel" />
+ <attribution android:tag="f562" android:label="@string/dummyLabel" />
+ <attribution android:tag="f563" android:label="@string/dummyLabel" />
+ <attribution android:tag="f564" android:label="@string/dummyLabel" />
+ <attribution android:tag="f565" android:label="@string/dummyLabel" />
+ <attribution android:tag="f566" android:label="@string/dummyLabel" />
+ <attribution android:tag="f567" android:label="@string/dummyLabel" />
+ <attribution android:tag="f568" android:label="@string/dummyLabel" />
+ <attribution android:tag="f569" android:label="@string/dummyLabel" />
+ <attribution android:tag="f570" android:label="@string/dummyLabel" />
+ <attribution android:tag="f571" android:label="@string/dummyLabel" />
+ <attribution android:tag="f572" android:label="@string/dummyLabel" />
+ <attribution android:tag="f573" android:label="@string/dummyLabel" />
+ <attribution android:tag="f574" android:label="@string/dummyLabel" />
+ <attribution android:tag="f575" android:label="@string/dummyLabel" />
+ <attribution android:tag="f576" android:label="@string/dummyLabel" />
+ <attribution android:tag="f577" android:label="@string/dummyLabel" />
+ <attribution android:tag="f578" android:label="@string/dummyLabel" />
+ <attribution android:tag="f579" android:label="@string/dummyLabel" />
+ <attribution android:tag="f580" android:label="@string/dummyLabel" />
+ <attribution android:tag="f581" android:label="@string/dummyLabel" />
+ <attribution android:tag="f582" android:label="@string/dummyLabel" />
+ <attribution android:tag="f583" android:label="@string/dummyLabel" />
+ <attribution android:tag="f584" android:label="@string/dummyLabel" />
+ <attribution android:tag="f585" android:label="@string/dummyLabel" />
+ <attribution android:tag="f586" android:label="@string/dummyLabel" />
+ <attribution android:tag="f587" android:label="@string/dummyLabel" />
+ <attribution android:tag="f588" android:label="@string/dummyLabel" />
+ <attribution android:tag="f589" android:label="@string/dummyLabel" />
+ <attribution android:tag="f590" android:label="@string/dummyLabel" />
+ <attribution android:tag="f591" android:label="@string/dummyLabel" />
+ <attribution android:tag="f592" android:label="@string/dummyLabel" />
+ <attribution android:tag="f593" android:label="@string/dummyLabel" />
+ <attribution android:tag="f594" android:label="@string/dummyLabel" />
+ <attribution android:tag="f595" android:label="@string/dummyLabel" />
+ <attribution android:tag="f596" android:label="@string/dummyLabel" />
+ <attribution android:tag="f597" android:label="@string/dummyLabel" />
+ <attribution android:tag="f598" android:label="@string/dummyLabel" />
+ <attribution android:tag="f599" android:label="@string/dummyLabel" />
+ <attribution android:tag="f600" android:label="@string/dummyLabel" />
+ <attribution android:tag="f601" android:label="@string/dummyLabel" />
+ <attribution android:tag="f602" android:label="@string/dummyLabel" />
+ <attribution android:tag="f603" android:label="@string/dummyLabel" />
+ <attribution android:tag="f604" android:label="@string/dummyLabel" />
+ <attribution android:tag="f605" android:label="@string/dummyLabel" />
+ <attribution android:tag="f606" android:label="@string/dummyLabel" />
+ <attribution android:tag="f607" android:label="@string/dummyLabel" />
+ <attribution android:tag="f608" android:label="@string/dummyLabel" />
+ <attribution android:tag="f609" android:label="@string/dummyLabel" />
+ <attribution android:tag="f610" android:label="@string/dummyLabel" />
+ <attribution android:tag="f611" android:label="@string/dummyLabel" />
+ <attribution android:tag="f612" android:label="@string/dummyLabel" />
+ <attribution android:tag="f613" android:label="@string/dummyLabel" />
+ <attribution android:tag="f614" android:label="@string/dummyLabel" />
+ <attribution android:tag="f615" android:label="@string/dummyLabel" />
+ <attribution android:tag="f616" android:label="@string/dummyLabel" />
+ <attribution android:tag="f617" android:label="@string/dummyLabel" />
+ <attribution android:tag="f618" android:label="@string/dummyLabel" />
+ <attribution android:tag="f619" android:label="@string/dummyLabel" />
+ <attribution android:tag="f620" android:label="@string/dummyLabel" />
+ <attribution android:tag="f621" android:label="@string/dummyLabel" />
+ <attribution android:tag="f622" android:label="@string/dummyLabel" />
+ <attribution android:tag="f623" android:label="@string/dummyLabel" />
+ <attribution android:tag="f624" android:label="@string/dummyLabel" />
+ <attribution android:tag="f625" android:label="@string/dummyLabel" />
+ <attribution android:tag="f626" android:label="@string/dummyLabel" />
+ <attribution android:tag="f627" android:label="@string/dummyLabel" />
+ <attribution android:tag="f628" android:label="@string/dummyLabel" />
+ <attribution android:tag="f629" android:label="@string/dummyLabel" />
+ <attribution android:tag="f630" android:label="@string/dummyLabel" />
+ <attribution android:tag="f631" android:label="@string/dummyLabel" />
+ <attribution android:tag="f632" android:label="@string/dummyLabel" />
+ <attribution android:tag="f633" android:label="@string/dummyLabel" />
+ <attribution android:tag="f634" android:label="@string/dummyLabel" />
+ <attribution android:tag="f635" android:label="@string/dummyLabel" />
+ <attribution android:tag="f636" android:label="@string/dummyLabel" />
+ <attribution android:tag="f637" android:label="@string/dummyLabel" />
+ <attribution android:tag="f638" android:label="@string/dummyLabel" />
+ <attribution android:tag="f639" android:label="@string/dummyLabel" />
+ <attribution android:tag="f640" android:label="@string/dummyLabel" />
+ <attribution android:tag="f641" android:label="@string/dummyLabel" />
+ <attribution android:tag="f642" android:label="@string/dummyLabel" />
+ <attribution android:tag="f643" android:label="@string/dummyLabel" />
+ <attribution android:tag="f644" android:label="@string/dummyLabel" />
+ <attribution android:tag="f645" android:label="@string/dummyLabel" />
+ <attribution android:tag="f646" android:label="@string/dummyLabel" />
+ <attribution android:tag="f647" android:label="@string/dummyLabel" />
+ <attribution android:tag="f648" android:label="@string/dummyLabel" />
+ <attribution android:tag="f649" android:label="@string/dummyLabel" />
+ <attribution android:tag="f650" android:label="@string/dummyLabel" />
+ <attribution android:tag="f651" android:label="@string/dummyLabel" />
+ <attribution android:tag="f652" android:label="@string/dummyLabel" />
+ <attribution android:tag="f653" android:label="@string/dummyLabel" />
+ <attribution android:tag="f654" android:label="@string/dummyLabel" />
+ <attribution android:tag="f655" android:label="@string/dummyLabel" />
+ <attribution android:tag="f656" android:label="@string/dummyLabel" />
+ <attribution android:tag="f657" android:label="@string/dummyLabel" />
+ <attribution android:tag="f658" android:label="@string/dummyLabel" />
+ <attribution android:tag="f659" android:label="@string/dummyLabel" />
+ <attribution android:tag="f660" android:label="@string/dummyLabel" />
+ <attribution android:tag="f661" android:label="@string/dummyLabel" />
+ <attribution android:tag="f662" android:label="@string/dummyLabel" />
+ <attribution android:tag="f663" android:label="@string/dummyLabel" />
+ <attribution android:tag="f664" android:label="@string/dummyLabel" />
+ <attribution android:tag="f665" android:label="@string/dummyLabel" />
+ <attribution android:tag="f666" android:label="@string/dummyLabel" />
+ <attribution android:tag="f667" android:label="@string/dummyLabel" />
+ <attribution android:tag="f668" android:label="@string/dummyLabel" />
+ <attribution android:tag="f669" android:label="@string/dummyLabel" />
+ <attribution android:tag="f670" android:label="@string/dummyLabel" />
+ <attribution android:tag="f671" android:label="@string/dummyLabel" />
+ <attribution android:tag="f672" android:label="@string/dummyLabel" />
+ <attribution android:tag="f673" android:label="@string/dummyLabel" />
+ <attribution android:tag="f674" android:label="@string/dummyLabel" />
+ <attribution android:tag="f675" android:label="@string/dummyLabel" />
+ <attribution android:tag="f676" android:label="@string/dummyLabel" />
+ <attribution android:tag="f677" android:label="@string/dummyLabel" />
+ <attribution android:tag="f678" android:label="@string/dummyLabel" />
+ <attribution android:tag="f679" android:label="@string/dummyLabel" />
+ <attribution android:tag="f680" android:label="@string/dummyLabel" />
+ <attribution android:tag="f681" android:label="@string/dummyLabel" />
+ <attribution android:tag="f682" android:label="@string/dummyLabel" />
+ <attribution android:tag="f683" android:label="@string/dummyLabel" />
+ <attribution android:tag="f684" android:label="@string/dummyLabel" />
+ <attribution android:tag="f685" android:label="@string/dummyLabel" />
+ <attribution android:tag="f686" android:label="@string/dummyLabel" />
+ <attribution android:tag="f687" android:label="@string/dummyLabel" />
+ <attribution android:tag="f688" android:label="@string/dummyLabel" />
+ <attribution android:tag="f689" android:label="@string/dummyLabel" />
+ <attribution android:tag="f690" android:label="@string/dummyLabel" />
+ <attribution android:tag="f691" android:label="@string/dummyLabel" />
+ <attribution android:tag="f692" android:label="@string/dummyLabel" />
+ <attribution android:tag="f693" android:label="@string/dummyLabel" />
+ <attribution android:tag="f694" android:label="@string/dummyLabel" />
+ <attribution android:tag="f695" android:label="@string/dummyLabel" />
+ <attribution android:tag="f696" android:label="@string/dummyLabel" />
+ <attribution android:tag="f697" android:label="@string/dummyLabel" />
+ <attribution android:tag="f698" android:label="@string/dummyLabel" />
+ <attribution android:tag="f699" android:label="@string/dummyLabel" />
+ <attribution android:tag="f700" android:label="@string/dummyLabel" />
+ <attribution android:tag="f701" android:label="@string/dummyLabel" />
+ <attribution android:tag="f702" android:label="@string/dummyLabel" />
+ <attribution android:tag="f703" android:label="@string/dummyLabel" />
+ <attribution android:tag="f704" android:label="@string/dummyLabel" />
+ <attribution android:tag="f705" android:label="@string/dummyLabel" />
+ <attribution android:tag="f706" android:label="@string/dummyLabel" />
+ <attribution android:tag="f707" android:label="@string/dummyLabel" />
+ <attribution android:tag="f708" android:label="@string/dummyLabel" />
+ <attribution android:tag="f709" android:label="@string/dummyLabel" />
+ <attribution android:tag="f710" android:label="@string/dummyLabel" />
+ <attribution android:tag="f711" android:label="@string/dummyLabel" />
+ <attribution android:tag="f712" android:label="@string/dummyLabel" />
+ <attribution android:tag="f713" android:label="@string/dummyLabel" />
+ <attribution android:tag="f714" android:label="@string/dummyLabel" />
+ <attribution android:tag="f715" android:label="@string/dummyLabel" />
+ <attribution android:tag="f716" android:label="@string/dummyLabel" />
+ <attribution android:tag="f717" android:label="@string/dummyLabel" />
+ <attribution android:tag="f718" android:label="@string/dummyLabel" />
+ <attribution android:tag="f719" android:label="@string/dummyLabel" />
+ <attribution android:tag="f720" android:label="@string/dummyLabel" />
+ <attribution android:tag="f721" android:label="@string/dummyLabel" />
+ <attribution android:tag="f722" android:label="@string/dummyLabel" />
+ <attribution android:tag="f723" android:label="@string/dummyLabel" />
+ <attribution android:tag="f724" android:label="@string/dummyLabel" />
+ <attribution android:tag="f725" android:label="@string/dummyLabel" />
+ <attribution android:tag="f726" android:label="@string/dummyLabel" />
+ <attribution android:tag="f727" android:label="@string/dummyLabel" />
+ <attribution android:tag="f728" android:label="@string/dummyLabel" />
+ <attribution android:tag="f729" android:label="@string/dummyLabel" />
+ <attribution android:tag="f730" android:label="@string/dummyLabel" />
+ <attribution android:tag="f731" android:label="@string/dummyLabel" />
+ <attribution android:tag="f732" android:label="@string/dummyLabel" />
+ <attribution android:tag="f733" android:label="@string/dummyLabel" />
+ <attribution android:tag="f734" android:label="@string/dummyLabel" />
+ <attribution android:tag="f735" android:label="@string/dummyLabel" />
+ <attribution android:tag="f736" android:label="@string/dummyLabel" />
+ <attribution android:tag="f737" android:label="@string/dummyLabel" />
+ <attribution android:tag="f738" android:label="@string/dummyLabel" />
+ <attribution android:tag="f739" android:label="@string/dummyLabel" />
+ <attribution android:tag="f740" android:label="@string/dummyLabel" />
+ <attribution android:tag="f741" android:label="@string/dummyLabel" />
+ <attribution android:tag="f742" android:label="@string/dummyLabel" />
+ <attribution android:tag="f743" android:label="@string/dummyLabel" />
+ <attribution android:tag="f744" android:label="@string/dummyLabel" />
+ <attribution android:tag="f745" android:label="@string/dummyLabel" />
+ <attribution android:tag="f746" android:label="@string/dummyLabel" />
+ <attribution android:tag="f747" android:label="@string/dummyLabel" />
+ <attribution android:tag="f748" android:label="@string/dummyLabel" />
+ <attribution android:tag="f749" android:label="@string/dummyLabel" />
+ <attribution android:tag="f750" android:label="@string/dummyLabel" />
+ <attribution android:tag="f751" android:label="@string/dummyLabel" />
+ <attribution android:tag="f752" android:label="@string/dummyLabel" />
+ <attribution android:tag="f753" android:label="@string/dummyLabel" />
+ <attribution android:tag="f754" android:label="@string/dummyLabel" />
+ <attribution android:tag="f755" android:label="@string/dummyLabel" />
+ <attribution android:tag="f756" android:label="@string/dummyLabel" />
+ <attribution android:tag="f757" android:label="@string/dummyLabel" />
+ <attribution android:tag="f758" android:label="@string/dummyLabel" />
+ <attribution android:tag="f759" android:label="@string/dummyLabel" />
+ <attribution android:tag="f760" android:label="@string/dummyLabel" />
+ <attribution android:tag="f761" android:label="@string/dummyLabel" />
+ <attribution android:tag="f762" android:label="@string/dummyLabel" />
+ <attribution android:tag="f763" android:label="@string/dummyLabel" />
+ <attribution android:tag="f764" android:label="@string/dummyLabel" />
+ <attribution android:tag="f765" android:label="@string/dummyLabel" />
+ <attribution android:tag="f766" android:label="@string/dummyLabel" />
+ <attribution android:tag="f767" android:label="@string/dummyLabel" />
+ <attribution android:tag="f768" android:label="@string/dummyLabel" />
+ <attribution android:tag="f769" android:label="@string/dummyLabel" />
+ <attribution android:tag="f770" android:label="@string/dummyLabel" />
+ <attribution android:tag="f771" android:label="@string/dummyLabel" />
+ <attribution android:tag="f772" android:label="@string/dummyLabel" />
+ <attribution android:tag="f773" android:label="@string/dummyLabel" />
+ <attribution android:tag="f774" android:label="@string/dummyLabel" />
+ <attribution android:tag="f775" android:label="@string/dummyLabel" />
+ <attribution android:tag="f776" android:label="@string/dummyLabel" />
+ <attribution android:tag="f777" android:label="@string/dummyLabel" />
+ <attribution android:tag="f778" android:label="@string/dummyLabel" />
+ <attribution android:tag="f779" android:label="@string/dummyLabel" />
+ <attribution android:tag="f780" android:label="@string/dummyLabel" />
+ <attribution android:tag="f781" android:label="@string/dummyLabel" />
+ <attribution android:tag="f782" android:label="@string/dummyLabel" />
+ <attribution android:tag="f783" android:label="@string/dummyLabel" />
+ <attribution android:tag="f784" android:label="@string/dummyLabel" />
+ <attribution android:tag="f785" android:label="@string/dummyLabel" />
+ <attribution android:tag="f786" android:label="@string/dummyLabel" />
+ <attribution android:tag="f787" android:label="@string/dummyLabel" />
+ <attribution android:tag="f788" android:label="@string/dummyLabel" />
+ <attribution android:tag="f789" android:label="@string/dummyLabel" />
+ <attribution android:tag="f790" android:label="@string/dummyLabel" />
+ <attribution android:tag="f791" android:label="@string/dummyLabel" />
+ <attribution android:tag="f792" android:label="@string/dummyLabel" />
+ <attribution android:tag="f793" android:label="@string/dummyLabel" />
+ <attribution android:tag="f794" android:label="@string/dummyLabel" />
+ <attribution android:tag="f795" android:label="@string/dummyLabel" />
+ <attribution android:tag="f796" android:label="@string/dummyLabel" />
+ <attribution android:tag="f797" android:label="@string/dummyLabel" />
+ <attribution android:tag="f798" android:label="@string/dummyLabel" />
+ <attribution android:tag="f799" android:label="@string/dummyLabel" />
+ <attribution android:tag="f800" android:label="@string/dummyLabel" />
+ <attribution android:tag="f801" android:label="@string/dummyLabel" />
+ <attribution android:tag="f802" android:label="@string/dummyLabel" />
+ <attribution android:tag="f803" android:label="@string/dummyLabel" />
+ <attribution android:tag="f804" android:label="@string/dummyLabel" />
+ <attribution android:tag="f805" android:label="@string/dummyLabel" />
+ <attribution android:tag="f806" android:label="@string/dummyLabel" />
+ <attribution android:tag="f807" android:label="@string/dummyLabel" />
+ <attribution android:tag="f808" android:label="@string/dummyLabel" />
+ <attribution android:tag="f809" android:label="@string/dummyLabel" />
+ <attribution android:tag="f810" android:label="@string/dummyLabel" />
+ <attribution android:tag="f811" android:label="@string/dummyLabel" />
+ <attribution android:tag="f812" android:label="@string/dummyLabel" />
+ <attribution android:tag="f813" android:label="@string/dummyLabel" />
+ <attribution android:tag="f814" android:label="@string/dummyLabel" />
+ <attribution android:tag="f815" android:label="@string/dummyLabel" />
+ <attribution android:tag="f816" android:label="@string/dummyLabel" />
+ <attribution android:tag="f817" android:label="@string/dummyLabel" />
+ <attribution android:tag="f818" android:label="@string/dummyLabel" />
+ <attribution android:tag="f819" android:label="@string/dummyLabel" />
+ <attribution android:tag="f820" android:label="@string/dummyLabel" />
+ <attribution android:tag="f821" android:label="@string/dummyLabel" />
+ <attribution android:tag="f822" android:label="@string/dummyLabel" />
+ <attribution android:tag="f823" android:label="@string/dummyLabel" />
+ <attribution android:tag="f824" android:label="@string/dummyLabel" />
+ <attribution android:tag="f825" android:label="@string/dummyLabel" />
+ <attribution android:tag="f826" android:label="@string/dummyLabel" />
+ <attribution android:tag="f827" android:label="@string/dummyLabel" />
+ <attribution android:tag="f828" android:label="@string/dummyLabel" />
+ <attribution android:tag="f829" android:label="@string/dummyLabel" />
+ <attribution android:tag="f830" android:label="@string/dummyLabel" />
+ <attribution android:tag="f831" android:label="@string/dummyLabel" />
+ <attribution android:tag="f832" android:label="@string/dummyLabel" />
+ <attribution android:tag="f833" android:label="@string/dummyLabel" />
+ <attribution android:tag="f834" android:label="@string/dummyLabel" />
+ <attribution android:tag="f835" android:label="@string/dummyLabel" />
+ <attribution android:tag="f836" android:label="@string/dummyLabel" />
+ <attribution android:tag="f837" android:label="@string/dummyLabel" />
+ <attribution android:tag="f838" android:label="@string/dummyLabel" />
+ <attribution android:tag="f839" android:label="@string/dummyLabel" />
+ <attribution android:tag="f840" android:label="@string/dummyLabel" />
+ <attribution android:tag="f841" android:label="@string/dummyLabel" />
+ <attribution android:tag="f842" android:label="@string/dummyLabel" />
+ <attribution android:tag="f843" android:label="@string/dummyLabel" />
+ <attribution android:tag="f844" android:label="@string/dummyLabel" />
+ <attribution android:tag="f845" android:label="@string/dummyLabel" />
+ <attribution android:tag="f846" android:label="@string/dummyLabel" />
+ <attribution android:tag="f847" android:label="@string/dummyLabel" />
+ <attribution android:tag="f848" android:label="@string/dummyLabel" />
+ <attribution android:tag="f849" android:label="@string/dummyLabel" />
+ <attribution android:tag="f850" android:label="@string/dummyLabel" />
+ <attribution android:tag="f851" android:label="@string/dummyLabel" />
+ <attribution android:tag="f852" android:label="@string/dummyLabel" />
+ <attribution android:tag="f853" android:label="@string/dummyLabel" />
+ <attribution android:tag="f854" android:label="@string/dummyLabel" />
+ <attribution android:tag="f855" android:label="@string/dummyLabel" />
+ <attribution android:tag="f856" android:label="@string/dummyLabel" />
+ <attribution android:tag="f857" android:label="@string/dummyLabel" />
+ <attribution android:tag="f858" android:label="@string/dummyLabel" />
+ <attribution android:tag="f859" android:label="@string/dummyLabel" />
+ <attribution android:tag="f860" android:label="@string/dummyLabel" />
+ <attribution android:tag="f861" android:label="@string/dummyLabel" />
+ <attribution android:tag="f862" android:label="@string/dummyLabel" />
+ <attribution android:tag="f863" android:label="@string/dummyLabel" />
+ <attribution android:tag="f864" android:label="@string/dummyLabel" />
+ <attribution android:tag="f865" android:label="@string/dummyLabel" />
+ <attribution android:tag="f866" android:label="@string/dummyLabel" />
+ <attribution android:tag="f867" android:label="@string/dummyLabel" />
+ <attribution android:tag="f868" android:label="@string/dummyLabel" />
+ <attribution android:tag="f869" android:label="@string/dummyLabel" />
+ <attribution android:tag="f870" android:label="@string/dummyLabel" />
+ <attribution android:tag="f871" android:label="@string/dummyLabel" />
+ <attribution android:tag="f872" android:label="@string/dummyLabel" />
+ <attribution android:tag="f873" android:label="@string/dummyLabel" />
+ <attribution android:tag="f874" android:label="@string/dummyLabel" />
+ <attribution android:tag="f875" android:label="@string/dummyLabel" />
+ <attribution android:tag="f876" android:label="@string/dummyLabel" />
+ <attribution android:tag="f877" android:label="@string/dummyLabel" />
+ <attribution android:tag="f878" android:label="@string/dummyLabel" />
+ <attribution android:tag="f879" android:label="@string/dummyLabel" />
+ <attribution android:tag="f880" android:label="@string/dummyLabel" />
+ <attribution android:tag="f881" android:label="@string/dummyLabel" />
+ <attribution android:tag="f882" android:label="@string/dummyLabel" />
+ <attribution android:tag="f883" android:label="@string/dummyLabel" />
+ <attribution android:tag="f884" android:label="@string/dummyLabel" />
+ <attribution android:tag="f885" android:label="@string/dummyLabel" />
+ <attribution android:tag="f886" android:label="@string/dummyLabel" />
+ <attribution android:tag="f887" android:label="@string/dummyLabel" />
+ <attribution android:tag="f888" android:label="@string/dummyLabel" />
+ <attribution android:tag="f889" android:label="@string/dummyLabel" />
+ <attribution android:tag="f890" android:label="@string/dummyLabel" />
+ <attribution android:tag="f891" android:label="@string/dummyLabel" />
+ <attribution android:tag="f892" android:label="@string/dummyLabel" />
+ <attribution android:tag="f893" android:label="@string/dummyLabel" />
+ <attribution android:tag="f894" android:label="@string/dummyLabel" />
+ <attribution android:tag="f895" android:label="@string/dummyLabel" />
+ <attribution android:tag="f896" android:label="@string/dummyLabel" />
+ <attribution android:tag="f897" android:label="@string/dummyLabel" />
+ <attribution android:tag="f898" android:label="@string/dummyLabel" />
+ <attribution android:tag="f899" android:label="@string/dummyLabel" />
+ <attribution android:tag="f900" android:label="@string/dummyLabel" />
+ <attribution android:tag="f901" android:label="@string/dummyLabel" />
+ <attribution android:tag="f902" android:label="@string/dummyLabel" />
+ <attribution android:tag="f903" android:label="@string/dummyLabel" />
+ <attribution android:tag="f904" android:label="@string/dummyLabel" />
+ <attribution android:tag="f905" android:label="@string/dummyLabel" />
+ <attribution android:tag="f906" android:label="@string/dummyLabel" />
+ <attribution android:tag="f907" android:label="@string/dummyLabel" />
+ <attribution android:tag="f908" android:label="@string/dummyLabel" />
+ <attribution android:tag="f909" android:label="@string/dummyLabel" />
+ <attribution android:tag="f910" android:label="@string/dummyLabel" />
+ <attribution android:tag="f911" android:label="@string/dummyLabel" />
+ <attribution android:tag="f912" android:label="@string/dummyLabel" />
+ <attribution android:tag="f913" android:label="@string/dummyLabel" />
+ <attribution android:tag="f914" android:label="@string/dummyLabel" />
+ <attribution android:tag="f915" android:label="@string/dummyLabel" />
+ <attribution android:tag="f916" android:label="@string/dummyLabel" />
+ <attribution android:tag="f917" android:label="@string/dummyLabel" />
+ <attribution android:tag="f918" android:label="@string/dummyLabel" />
+ <attribution android:tag="f919" android:label="@string/dummyLabel" />
+ <attribution android:tag="f920" android:label="@string/dummyLabel" />
+ <attribution android:tag="f921" android:label="@string/dummyLabel" />
+ <attribution android:tag="f922" android:label="@string/dummyLabel" />
+ <attribution android:tag="f923" android:label="@string/dummyLabel" />
+ <attribution android:tag="f924" android:label="@string/dummyLabel" />
+ <attribution android:tag="f925" android:label="@string/dummyLabel" />
+ <attribution android:tag="f926" android:label="@string/dummyLabel" />
+ <attribution android:tag="f927" android:label="@string/dummyLabel" />
+ <attribution android:tag="f928" android:label="@string/dummyLabel" />
+ <attribution android:tag="f929" android:label="@string/dummyLabel" />
+ <attribution android:tag="f930" android:label="@string/dummyLabel" />
+ <attribution android:tag="f931" android:label="@string/dummyLabel" />
+ <attribution android:tag="f932" android:label="@string/dummyLabel" />
+ <attribution android:tag="f933" android:label="@string/dummyLabel" />
+ <attribution android:tag="f934" android:label="@string/dummyLabel" />
+ <attribution android:tag="f935" android:label="@string/dummyLabel" />
+ <attribution android:tag="f936" android:label="@string/dummyLabel" />
+ <attribution android:tag="f937" android:label="@string/dummyLabel" />
+ <attribution android:tag="f938" android:label="@string/dummyLabel" />
+ <attribution android:tag="f939" android:label="@string/dummyLabel" />
+ <attribution android:tag="f940" android:label="@string/dummyLabel" />
+ <attribution android:tag="f941" android:label="@string/dummyLabel" />
+ <attribution android:tag="f942" android:label="@string/dummyLabel" />
+ <attribution android:tag="f943" android:label="@string/dummyLabel" />
+ <attribution android:tag="f944" android:label="@string/dummyLabel" />
+ <attribution android:tag="f945" android:label="@string/dummyLabel" />
+ <attribution android:tag="f946" android:label="@string/dummyLabel" />
+ <attribution android:tag="f947" android:label="@string/dummyLabel" />
+ <attribution android:tag="f948" android:label="@string/dummyLabel" />
+ <attribution android:tag="f949" android:label="@string/dummyLabel" />
+ <attribution android:tag="f950" android:label="@string/dummyLabel" />
+ <attribution android:tag="f951" android:label="@string/dummyLabel" />
+ <attribution android:tag="f952" android:label="@string/dummyLabel" />
+ <attribution android:tag="f953" android:label="@string/dummyLabel" />
+ <attribution android:tag="f954" android:label="@string/dummyLabel" />
+ <attribution android:tag="f955" android:label="@string/dummyLabel" />
+ <attribution android:tag="f956" android:label="@string/dummyLabel" />
+ <attribution android:tag="f957" android:label="@string/dummyLabel" />
+ <attribution android:tag="f958" android:label="@string/dummyLabel" />
+ <attribution android:tag="f959" android:label="@string/dummyLabel" />
+ <attribution android:tag="f960" android:label="@string/dummyLabel" />
+ <attribution android:tag="f961" android:label="@string/dummyLabel" />
+ <attribution android:tag="f962" android:label="@string/dummyLabel" />
+ <attribution android:tag="f963" android:label="@string/dummyLabel" />
+ <attribution android:tag="f964" android:label="@string/dummyLabel" />
+ <attribution android:tag="f965" android:label="@string/dummyLabel" />
+ <attribution android:tag="f966" android:label="@string/dummyLabel" />
+ <attribution android:tag="f967" android:label="@string/dummyLabel" />
+ <attribution android:tag="f968" android:label="@string/dummyLabel" />
+ <attribution android:tag="f969" android:label="@string/dummyLabel" />
+ <attribution android:tag="f970" android:label="@string/dummyLabel" />
+ <attribution android:tag="f971" android:label="@string/dummyLabel" />
+ <attribution android:tag="f972" android:label="@string/dummyLabel" />
+ <attribution android:tag="f973" android:label="@string/dummyLabel" />
+ <attribution android:tag="f974" android:label="@string/dummyLabel" />
+ <attribution android:tag="f975" android:label="@string/dummyLabel" />
+ <attribution android:tag="f976" android:label="@string/dummyLabel" />
+ <attribution android:tag="f977" android:label="@string/dummyLabel" />
+ <attribution android:tag="f978" android:label="@string/dummyLabel" />
+ <attribution android:tag="f979" android:label="@string/dummyLabel" />
+ <attribution android:tag="f980" android:label="@string/dummyLabel" />
+ <attribution android:tag="f981" android:label="@string/dummyLabel" />
+ <attribution android:tag="f982" android:label="@string/dummyLabel" />
+ <attribution android:tag="f983" android:label="@string/dummyLabel" />
+ <attribution android:tag="f984" android:label="@string/dummyLabel" />
+ <attribution android:tag="f985" android:label="@string/dummyLabel" />
+ <attribution android:tag="f986" android:label="@string/dummyLabel" />
+ <attribution android:tag="f987" android:label="@string/dummyLabel" />
+ <attribution android:tag="f988" android:label="@string/dummyLabel" />
+ <attribution android:tag="f989" android:label="@string/dummyLabel" />
+ <attribution android:tag="f990" android:label="@string/dummyLabel" />
+ <attribution android:tag="f991" android:label="@string/dummyLabel" />
+ <attribution android:tag="f992" android:label="@string/dummyLabel" />
+ <attribution android:tag="f993" android:label="@string/dummyLabel" />
+ <attribution android:tag="f994" android:label="@string/dummyLabel" />
+ <attribution android:tag="f995" android:label="@string/dummyLabel" />
+ <attribution android:tag="f996" android:label="@string/dummyLabel" />
+ <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="toomany" android:label="@string/dummyLabel" />
+
+ <application />
+
+</manifest>
diff --git a/tests/tests/appop/AppWithTooManyFeatures/res/values/strings.xml b/tests/tests/appop/AppWithTooManyAttributions/res/values/strings.xml
similarity index 100%
rename from tests/tests/appop/AppWithTooManyFeatures/res/values/strings.xml
rename to tests/tests/appop/AppWithTooManyAttributions/res/values/strings.xml
diff --git a/tests/tests/appop/AppWithTooManyFeatures/Android.bp b/tests/tests/appop/AppWithTooManyFeatures/Android.bp
deleted file mode 100644
index bc769d6..0000000
--- a/tests/tests/appop/AppWithTooManyFeatures/Android.bp
+++ /dev/null
@@ -1,23 +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.
-
-android_test_helper_app {
- name: "AppWithTooManyFeatures",
-
- test_suites: [
- "cts",
- "vts",
- "general-tests",
- ]
-}
\ No newline at end of file
diff --git a/tests/tests/appop/AppWithTooManyFeatures/AndroidManifest.xml b/tests/tests/appop/AppWithTooManyFeatures/AndroidManifest.xml
deleted file mode 100644
index eeecef7..0000000
--- a/tests/tests/appop/AppWithTooManyFeatures/AndroidManifest.xml
+++ /dev/null
@@ -1,1028 +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.app.appops.cts.appwithtoomanyfeatures">
-
- <!-- 1000 features are allowed -->
- <feature android:featureId="f0" android:label="@string/dummyLabel" />
- <feature android:featureId="f1" android:label="@string/dummyLabel" />
- <feature android:featureId="f2" android:label="@string/dummyLabel" />
- <feature android:featureId="f3" android:label="@string/dummyLabel" />
- <feature android:featureId="f4" android:label="@string/dummyLabel" />
- <feature android:featureId="f5" android:label="@string/dummyLabel" />
- <feature android:featureId="f6" android:label="@string/dummyLabel" />
- <feature android:featureId="f7" android:label="@string/dummyLabel" />
- <feature android:featureId="f8" android:label="@string/dummyLabel" />
- <feature android:featureId="f9" android:label="@string/dummyLabel" />
- <feature android:featureId="f10" android:label="@string/dummyLabel" />
- <feature android:featureId="f11" android:label="@string/dummyLabel" />
- <feature android:featureId="f12" android:label="@string/dummyLabel" />
- <feature android:featureId="f13" android:label="@string/dummyLabel" />
- <feature android:featureId="f14" android:label="@string/dummyLabel" />
- <feature android:featureId="f15" android:label="@string/dummyLabel" />
- <feature android:featureId="f16" android:label="@string/dummyLabel" />
- <feature android:featureId="f17" android:label="@string/dummyLabel" />
- <feature android:featureId="f18" android:label="@string/dummyLabel" />
- <feature android:featureId="f19" android:label="@string/dummyLabel" />
- <feature android:featureId="f20" android:label="@string/dummyLabel" />
- <feature android:featureId="f21" android:label="@string/dummyLabel" />
- <feature android:featureId="f22" android:label="@string/dummyLabel" />
- <feature android:featureId="f23" android:label="@string/dummyLabel" />
- <feature android:featureId="f24" android:label="@string/dummyLabel" />
- <feature android:featureId="f25" android:label="@string/dummyLabel" />
- <feature android:featureId="f26" android:label="@string/dummyLabel" />
- <feature android:featureId="f27" android:label="@string/dummyLabel" />
- <feature android:featureId="f28" android:label="@string/dummyLabel" />
- <feature android:featureId="f29" android:label="@string/dummyLabel" />
- <feature android:featureId="f30" android:label="@string/dummyLabel" />
- <feature android:featureId="f31" android:label="@string/dummyLabel" />
- <feature android:featureId="f32" android:label="@string/dummyLabel" />
- <feature android:featureId="f33" android:label="@string/dummyLabel" />
- <feature android:featureId="f34" android:label="@string/dummyLabel" />
- <feature android:featureId="f35" android:label="@string/dummyLabel" />
- <feature android:featureId="f36" android:label="@string/dummyLabel" />
- <feature android:featureId="f37" android:label="@string/dummyLabel" />
- <feature android:featureId="f38" android:label="@string/dummyLabel" />
- <feature android:featureId="f39" android:label="@string/dummyLabel" />
- <feature android:featureId="f40" android:label="@string/dummyLabel" />
- <feature android:featureId="f41" android:label="@string/dummyLabel" />
- <feature android:featureId="f42" android:label="@string/dummyLabel" />
- <feature android:featureId="f43" android:label="@string/dummyLabel" />
- <feature android:featureId="f44" android:label="@string/dummyLabel" />
- <feature android:featureId="f45" android:label="@string/dummyLabel" />
- <feature android:featureId="f46" android:label="@string/dummyLabel" />
- <feature android:featureId="f47" android:label="@string/dummyLabel" />
- <feature android:featureId="f48" android:label="@string/dummyLabel" />
- <feature android:featureId="f49" android:label="@string/dummyLabel" />
- <feature android:featureId="f50" android:label="@string/dummyLabel" />
- <feature android:featureId="f51" android:label="@string/dummyLabel" />
- <feature android:featureId="f52" android:label="@string/dummyLabel" />
- <feature android:featureId="f53" android:label="@string/dummyLabel" />
- <feature android:featureId="f54" android:label="@string/dummyLabel" />
- <feature android:featureId="f55" android:label="@string/dummyLabel" />
- <feature android:featureId="f56" android:label="@string/dummyLabel" />
- <feature android:featureId="f57" android:label="@string/dummyLabel" />
- <feature android:featureId="f58" android:label="@string/dummyLabel" />
- <feature android:featureId="f59" android:label="@string/dummyLabel" />
- <feature android:featureId="f60" android:label="@string/dummyLabel" />
- <feature android:featureId="f61" android:label="@string/dummyLabel" />
- <feature android:featureId="f62" android:label="@string/dummyLabel" />
- <feature android:featureId="f63" android:label="@string/dummyLabel" />
- <feature android:featureId="f64" android:label="@string/dummyLabel" />
- <feature android:featureId="f65" android:label="@string/dummyLabel" />
- <feature android:featureId="f66" android:label="@string/dummyLabel" />
- <feature android:featureId="f67" android:label="@string/dummyLabel" />
- <feature android:featureId="f68" android:label="@string/dummyLabel" />
- <feature android:featureId="f69" android:label="@string/dummyLabel" />
- <feature android:featureId="f70" android:label="@string/dummyLabel" />
- <feature android:featureId="f71" android:label="@string/dummyLabel" />
- <feature android:featureId="f72" android:label="@string/dummyLabel" />
- <feature android:featureId="f73" android:label="@string/dummyLabel" />
- <feature android:featureId="f74" android:label="@string/dummyLabel" />
- <feature android:featureId="f75" android:label="@string/dummyLabel" />
- <feature android:featureId="f76" android:label="@string/dummyLabel" />
- <feature android:featureId="f77" android:label="@string/dummyLabel" />
- <feature android:featureId="f78" android:label="@string/dummyLabel" />
- <feature android:featureId="f79" android:label="@string/dummyLabel" />
- <feature android:featureId="f80" android:label="@string/dummyLabel" />
- <feature android:featureId="f81" android:label="@string/dummyLabel" />
- <feature android:featureId="f82" android:label="@string/dummyLabel" />
- <feature android:featureId="f83" android:label="@string/dummyLabel" />
- <feature android:featureId="f84" android:label="@string/dummyLabel" />
- <feature android:featureId="f85" android:label="@string/dummyLabel" />
- <feature android:featureId="f86" android:label="@string/dummyLabel" />
- <feature android:featureId="f87" android:label="@string/dummyLabel" />
- <feature android:featureId="f88" android:label="@string/dummyLabel" />
- <feature android:featureId="f89" android:label="@string/dummyLabel" />
- <feature android:featureId="f90" android:label="@string/dummyLabel" />
- <feature android:featureId="f91" android:label="@string/dummyLabel" />
- <feature android:featureId="f92" android:label="@string/dummyLabel" />
- <feature android:featureId="f93" android:label="@string/dummyLabel" />
- <feature android:featureId="f94" android:label="@string/dummyLabel" />
- <feature android:featureId="f95" android:label="@string/dummyLabel" />
- <feature android:featureId="f96" android:label="@string/dummyLabel" />
- <feature android:featureId="f97" android:label="@string/dummyLabel" />
- <feature android:featureId="f98" android:label="@string/dummyLabel" />
- <feature android:featureId="f99" android:label="@string/dummyLabel" />
- <feature android:featureId="f100" android:label="@string/dummyLabel" />
- <feature android:featureId="f101" android:label="@string/dummyLabel" />
- <feature android:featureId="f102" android:label="@string/dummyLabel" />
- <feature android:featureId="f103" android:label="@string/dummyLabel" />
- <feature android:featureId="f104" android:label="@string/dummyLabel" />
- <feature android:featureId="f105" android:label="@string/dummyLabel" />
- <feature android:featureId="f106" android:label="@string/dummyLabel" />
- <feature android:featureId="f107" android:label="@string/dummyLabel" />
- <feature android:featureId="f108" android:label="@string/dummyLabel" />
- <feature android:featureId="f109" android:label="@string/dummyLabel" />
- <feature android:featureId="f110" android:label="@string/dummyLabel" />
- <feature android:featureId="f111" android:label="@string/dummyLabel" />
- <feature android:featureId="f112" android:label="@string/dummyLabel" />
- <feature android:featureId="f113" android:label="@string/dummyLabel" />
- <feature android:featureId="f114" android:label="@string/dummyLabel" />
- <feature android:featureId="f115" android:label="@string/dummyLabel" />
- <feature android:featureId="f116" android:label="@string/dummyLabel" />
- <feature android:featureId="f117" android:label="@string/dummyLabel" />
- <feature android:featureId="f118" android:label="@string/dummyLabel" />
- <feature android:featureId="f119" android:label="@string/dummyLabel" />
- <feature android:featureId="f120" android:label="@string/dummyLabel" />
- <feature android:featureId="f121" android:label="@string/dummyLabel" />
- <feature android:featureId="f122" android:label="@string/dummyLabel" />
- <feature android:featureId="f123" android:label="@string/dummyLabel" />
- <feature android:featureId="f124" android:label="@string/dummyLabel" />
- <feature android:featureId="f125" android:label="@string/dummyLabel" />
- <feature android:featureId="f126" android:label="@string/dummyLabel" />
- <feature android:featureId="f127" android:label="@string/dummyLabel" />
- <feature android:featureId="f128" android:label="@string/dummyLabel" />
- <feature android:featureId="f129" android:label="@string/dummyLabel" />
- <feature android:featureId="f130" android:label="@string/dummyLabel" />
- <feature android:featureId="f131" android:label="@string/dummyLabel" />
- <feature android:featureId="f132" android:label="@string/dummyLabel" />
- <feature android:featureId="f133" android:label="@string/dummyLabel" />
- <feature android:featureId="f134" android:label="@string/dummyLabel" />
- <feature android:featureId="f135" android:label="@string/dummyLabel" />
- <feature android:featureId="f136" android:label="@string/dummyLabel" />
- <feature android:featureId="f137" android:label="@string/dummyLabel" />
- <feature android:featureId="f138" android:label="@string/dummyLabel" />
- <feature android:featureId="f139" android:label="@string/dummyLabel" />
- <feature android:featureId="f140" android:label="@string/dummyLabel" />
- <feature android:featureId="f141" android:label="@string/dummyLabel" />
- <feature android:featureId="f142" android:label="@string/dummyLabel" />
- <feature android:featureId="f143" android:label="@string/dummyLabel" />
- <feature android:featureId="f144" android:label="@string/dummyLabel" />
- <feature android:featureId="f145" android:label="@string/dummyLabel" />
- <feature android:featureId="f146" android:label="@string/dummyLabel" />
- <feature android:featureId="f147" android:label="@string/dummyLabel" />
- <feature android:featureId="f148" android:label="@string/dummyLabel" />
- <feature android:featureId="f149" android:label="@string/dummyLabel" />
- <feature android:featureId="f150" android:label="@string/dummyLabel" />
- <feature android:featureId="f151" android:label="@string/dummyLabel" />
- <feature android:featureId="f152" android:label="@string/dummyLabel" />
- <feature android:featureId="f153" android:label="@string/dummyLabel" />
- <feature android:featureId="f154" android:label="@string/dummyLabel" />
- <feature android:featureId="f155" android:label="@string/dummyLabel" />
- <feature android:featureId="f156" android:label="@string/dummyLabel" />
- <feature android:featureId="f157" android:label="@string/dummyLabel" />
- <feature android:featureId="f158" android:label="@string/dummyLabel" />
- <feature android:featureId="f159" android:label="@string/dummyLabel" />
- <feature android:featureId="f160" android:label="@string/dummyLabel" />
- <feature android:featureId="f161" android:label="@string/dummyLabel" />
- <feature android:featureId="f162" android:label="@string/dummyLabel" />
- <feature android:featureId="f163" android:label="@string/dummyLabel" />
- <feature android:featureId="f164" android:label="@string/dummyLabel" />
- <feature android:featureId="f165" android:label="@string/dummyLabel" />
- <feature android:featureId="f166" android:label="@string/dummyLabel" />
- <feature android:featureId="f167" android:label="@string/dummyLabel" />
- <feature android:featureId="f168" android:label="@string/dummyLabel" />
- <feature android:featureId="f169" android:label="@string/dummyLabel" />
- <feature android:featureId="f170" android:label="@string/dummyLabel" />
- <feature android:featureId="f171" android:label="@string/dummyLabel" />
- <feature android:featureId="f172" android:label="@string/dummyLabel" />
- <feature android:featureId="f173" android:label="@string/dummyLabel" />
- <feature android:featureId="f174" android:label="@string/dummyLabel" />
- <feature android:featureId="f175" android:label="@string/dummyLabel" />
- <feature android:featureId="f176" android:label="@string/dummyLabel" />
- <feature android:featureId="f177" android:label="@string/dummyLabel" />
- <feature android:featureId="f178" android:label="@string/dummyLabel" />
- <feature android:featureId="f179" android:label="@string/dummyLabel" />
- <feature android:featureId="f180" android:label="@string/dummyLabel" />
- <feature android:featureId="f181" android:label="@string/dummyLabel" />
- <feature android:featureId="f182" android:label="@string/dummyLabel" />
- <feature android:featureId="f183" android:label="@string/dummyLabel" />
- <feature android:featureId="f184" android:label="@string/dummyLabel" />
- <feature android:featureId="f185" android:label="@string/dummyLabel" />
- <feature android:featureId="f186" android:label="@string/dummyLabel" />
- <feature android:featureId="f187" android:label="@string/dummyLabel" />
- <feature android:featureId="f188" android:label="@string/dummyLabel" />
- <feature android:featureId="f189" android:label="@string/dummyLabel" />
- <feature android:featureId="f190" android:label="@string/dummyLabel" />
- <feature android:featureId="f191" android:label="@string/dummyLabel" />
- <feature android:featureId="f192" android:label="@string/dummyLabel" />
- <feature android:featureId="f193" android:label="@string/dummyLabel" />
- <feature android:featureId="f194" android:label="@string/dummyLabel" />
- <feature android:featureId="f195" android:label="@string/dummyLabel" />
- <feature android:featureId="f196" android:label="@string/dummyLabel" />
- <feature android:featureId="f197" android:label="@string/dummyLabel" />
- <feature android:featureId="f198" android:label="@string/dummyLabel" />
- <feature android:featureId="f199" android:label="@string/dummyLabel" />
- <feature android:featureId="f200" android:label="@string/dummyLabel" />
- <feature android:featureId="f201" android:label="@string/dummyLabel" />
- <feature android:featureId="f202" android:label="@string/dummyLabel" />
- <feature android:featureId="f203" android:label="@string/dummyLabel" />
- <feature android:featureId="f204" android:label="@string/dummyLabel" />
- <feature android:featureId="f205" android:label="@string/dummyLabel" />
- <feature android:featureId="f206" android:label="@string/dummyLabel" />
- <feature android:featureId="f207" android:label="@string/dummyLabel" />
- <feature android:featureId="f208" android:label="@string/dummyLabel" />
- <feature android:featureId="f209" android:label="@string/dummyLabel" />
- <feature android:featureId="f210" android:label="@string/dummyLabel" />
- <feature android:featureId="f211" android:label="@string/dummyLabel" />
- <feature android:featureId="f212" android:label="@string/dummyLabel" />
- <feature android:featureId="f213" android:label="@string/dummyLabel" />
- <feature android:featureId="f214" android:label="@string/dummyLabel" />
- <feature android:featureId="f215" android:label="@string/dummyLabel" />
- <feature android:featureId="f216" android:label="@string/dummyLabel" />
- <feature android:featureId="f217" android:label="@string/dummyLabel" />
- <feature android:featureId="f218" android:label="@string/dummyLabel" />
- <feature android:featureId="f219" android:label="@string/dummyLabel" />
- <feature android:featureId="f220" android:label="@string/dummyLabel" />
- <feature android:featureId="f221" android:label="@string/dummyLabel" />
- <feature android:featureId="f222" android:label="@string/dummyLabel" />
- <feature android:featureId="f223" android:label="@string/dummyLabel" />
- <feature android:featureId="f224" android:label="@string/dummyLabel" />
- <feature android:featureId="f225" android:label="@string/dummyLabel" />
- <feature android:featureId="f226" android:label="@string/dummyLabel" />
- <feature android:featureId="f227" android:label="@string/dummyLabel" />
- <feature android:featureId="f228" android:label="@string/dummyLabel" />
- <feature android:featureId="f229" android:label="@string/dummyLabel" />
- <feature android:featureId="f230" android:label="@string/dummyLabel" />
- <feature android:featureId="f231" android:label="@string/dummyLabel" />
- <feature android:featureId="f232" android:label="@string/dummyLabel" />
- <feature android:featureId="f233" android:label="@string/dummyLabel" />
- <feature android:featureId="f234" android:label="@string/dummyLabel" />
- <feature android:featureId="f235" android:label="@string/dummyLabel" />
- <feature android:featureId="f236" android:label="@string/dummyLabel" />
- <feature android:featureId="f237" android:label="@string/dummyLabel" />
- <feature android:featureId="f238" android:label="@string/dummyLabel" />
- <feature android:featureId="f239" android:label="@string/dummyLabel" />
- <feature android:featureId="f240" android:label="@string/dummyLabel" />
- <feature android:featureId="f241" android:label="@string/dummyLabel" />
- <feature android:featureId="f242" android:label="@string/dummyLabel" />
- <feature android:featureId="f243" android:label="@string/dummyLabel" />
- <feature android:featureId="f244" android:label="@string/dummyLabel" />
- <feature android:featureId="f245" android:label="@string/dummyLabel" />
- <feature android:featureId="f246" android:label="@string/dummyLabel" />
- <feature android:featureId="f247" android:label="@string/dummyLabel" />
- <feature android:featureId="f248" android:label="@string/dummyLabel" />
- <feature android:featureId="f249" android:label="@string/dummyLabel" />
- <feature android:featureId="f250" android:label="@string/dummyLabel" />
- <feature android:featureId="f251" android:label="@string/dummyLabel" />
- <feature android:featureId="f252" android:label="@string/dummyLabel" />
- <feature android:featureId="f253" android:label="@string/dummyLabel" />
- <feature android:featureId="f254" android:label="@string/dummyLabel" />
- <feature android:featureId="f255" android:label="@string/dummyLabel" />
- <feature android:featureId="f256" android:label="@string/dummyLabel" />
- <feature android:featureId="f257" android:label="@string/dummyLabel" />
- <feature android:featureId="f258" android:label="@string/dummyLabel" />
- <feature android:featureId="f259" android:label="@string/dummyLabel" />
- <feature android:featureId="f260" android:label="@string/dummyLabel" />
- <feature android:featureId="f261" android:label="@string/dummyLabel" />
- <feature android:featureId="f262" android:label="@string/dummyLabel" />
- <feature android:featureId="f263" android:label="@string/dummyLabel" />
- <feature android:featureId="f264" android:label="@string/dummyLabel" />
- <feature android:featureId="f265" android:label="@string/dummyLabel" />
- <feature android:featureId="f266" android:label="@string/dummyLabel" />
- <feature android:featureId="f267" android:label="@string/dummyLabel" />
- <feature android:featureId="f268" android:label="@string/dummyLabel" />
- <feature android:featureId="f269" android:label="@string/dummyLabel" />
- <feature android:featureId="f270" android:label="@string/dummyLabel" />
- <feature android:featureId="f271" android:label="@string/dummyLabel" />
- <feature android:featureId="f272" android:label="@string/dummyLabel" />
- <feature android:featureId="f273" android:label="@string/dummyLabel" />
- <feature android:featureId="f274" android:label="@string/dummyLabel" />
- <feature android:featureId="f275" android:label="@string/dummyLabel" />
- <feature android:featureId="f276" android:label="@string/dummyLabel" />
- <feature android:featureId="f277" android:label="@string/dummyLabel" />
- <feature android:featureId="f278" android:label="@string/dummyLabel" />
- <feature android:featureId="f279" android:label="@string/dummyLabel" />
- <feature android:featureId="f280" android:label="@string/dummyLabel" />
- <feature android:featureId="f281" android:label="@string/dummyLabel" />
- <feature android:featureId="f282" android:label="@string/dummyLabel" />
- <feature android:featureId="f283" android:label="@string/dummyLabel" />
- <feature android:featureId="f284" android:label="@string/dummyLabel" />
- <feature android:featureId="f285" android:label="@string/dummyLabel" />
- <feature android:featureId="f286" android:label="@string/dummyLabel" />
- <feature android:featureId="f287" android:label="@string/dummyLabel" />
- <feature android:featureId="f288" android:label="@string/dummyLabel" />
- <feature android:featureId="f289" android:label="@string/dummyLabel" />
- <feature android:featureId="f290" android:label="@string/dummyLabel" />
- <feature android:featureId="f291" android:label="@string/dummyLabel" />
- <feature android:featureId="f292" android:label="@string/dummyLabel" />
- <feature android:featureId="f293" android:label="@string/dummyLabel" />
- <feature android:featureId="f294" android:label="@string/dummyLabel" />
- <feature android:featureId="f295" android:label="@string/dummyLabel" />
- <feature android:featureId="f296" android:label="@string/dummyLabel" />
- <feature android:featureId="f297" android:label="@string/dummyLabel" />
- <feature android:featureId="f298" android:label="@string/dummyLabel" />
- <feature android:featureId="f299" android:label="@string/dummyLabel" />
- <feature android:featureId="f300" android:label="@string/dummyLabel" />
- <feature android:featureId="f301" android:label="@string/dummyLabel" />
- <feature android:featureId="f302" android:label="@string/dummyLabel" />
- <feature android:featureId="f303" android:label="@string/dummyLabel" />
- <feature android:featureId="f304" android:label="@string/dummyLabel" />
- <feature android:featureId="f305" android:label="@string/dummyLabel" />
- <feature android:featureId="f306" android:label="@string/dummyLabel" />
- <feature android:featureId="f307" android:label="@string/dummyLabel" />
- <feature android:featureId="f308" android:label="@string/dummyLabel" />
- <feature android:featureId="f309" android:label="@string/dummyLabel" />
- <feature android:featureId="f310" android:label="@string/dummyLabel" />
- <feature android:featureId="f311" android:label="@string/dummyLabel" />
- <feature android:featureId="f312" android:label="@string/dummyLabel" />
- <feature android:featureId="f313" android:label="@string/dummyLabel" />
- <feature android:featureId="f314" android:label="@string/dummyLabel" />
- <feature android:featureId="f315" android:label="@string/dummyLabel" />
- <feature android:featureId="f316" android:label="@string/dummyLabel" />
- <feature android:featureId="f317" android:label="@string/dummyLabel" />
- <feature android:featureId="f318" android:label="@string/dummyLabel" />
- <feature android:featureId="f319" android:label="@string/dummyLabel" />
- <feature android:featureId="f320" android:label="@string/dummyLabel" />
- <feature android:featureId="f321" android:label="@string/dummyLabel" />
- <feature android:featureId="f322" android:label="@string/dummyLabel" />
- <feature android:featureId="f323" android:label="@string/dummyLabel" />
- <feature android:featureId="f324" android:label="@string/dummyLabel" />
- <feature android:featureId="f325" android:label="@string/dummyLabel" />
- <feature android:featureId="f326" android:label="@string/dummyLabel" />
- <feature android:featureId="f327" android:label="@string/dummyLabel" />
- <feature android:featureId="f328" android:label="@string/dummyLabel" />
- <feature android:featureId="f329" android:label="@string/dummyLabel" />
- <feature android:featureId="f330" android:label="@string/dummyLabel" />
- <feature android:featureId="f331" android:label="@string/dummyLabel" />
- <feature android:featureId="f332" android:label="@string/dummyLabel" />
- <feature android:featureId="f333" android:label="@string/dummyLabel" />
- <feature android:featureId="f334" android:label="@string/dummyLabel" />
- <feature android:featureId="f335" android:label="@string/dummyLabel" />
- <feature android:featureId="f336" android:label="@string/dummyLabel" />
- <feature android:featureId="f337" android:label="@string/dummyLabel" />
- <feature android:featureId="f338" android:label="@string/dummyLabel" />
- <feature android:featureId="f339" android:label="@string/dummyLabel" />
- <feature android:featureId="f340" android:label="@string/dummyLabel" />
- <feature android:featureId="f341" android:label="@string/dummyLabel" />
- <feature android:featureId="f342" android:label="@string/dummyLabel" />
- <feature android:featureId="f343" android:label="@string/dummyLabel" />
- <feature android:featureId="f344" android:label="@string/dummyLabel" />
- <feature android:featureId="f345" android:label="@string/dummyLabel" />
- <feature android:featureId="f346" android:label="@string/dummyLabel" />
- <feature android:featureId="f347" android:label="@string/dummyLabel" />
- <feature android:featureId="f348" android:label="@string/dummyLabel" />
- <feature android:featureId="f349" android:label="@string/dummyLabel" />
- <feature android:featureId="f350" android:label="@string/dummyLabel" />
- <feature android:featureId="f351" android:label="@string/dummyLabel" />
- <feature android:featureId="f352" android:label="@string/dummyLabel" />
- <feature android:featureId="f353" android:label="@string/dummyLabel" />
- <feature android:featureId="f354" android:label="@string/dummyLabel" />
- <feature android:featureId="f355" android:label="@string/dummyLabel" />
- <feature android:featureId="f356" android:label="@string/dummyLabel" />
- <feature android:featureId="f357" android:label="@string/dummyLabel" />
- <feature android:featureId="f358" android:label="@string/dummyLabel" />
- <feature android:featureId="f359" android:label="@string/dummyLabel" />
- <feature android:featureId="f360" android:label="@string/dummyLabel" />
- <feature android:featureId="f361" android:label="@string/dummyLabel" />
- <feature android:featureId="f362" android:label="@string/dummyLabel" />
- <feature android:featureId="f363" android:label="@string/dummyLabel" />
- <feature android:featureId="f364" android:label="@string/dummyLabel" />
- <feature android:featureId="f365" android:label="@string/dummyLabel" />
- <feature android:featureId="f366" android:label="@string/dummyLabel" />
- <feature android:featureId="f367" android:label="@string/dummyLabel" />
- <feature android:featureId="f368" android:label="@string/dummyLabel" />
- <feature android:featureId="f369" android:label="@string/dummyLabel" />
- <feature android:featureId="f370" android:label="@string/dummyLabel" />
- <feature android:featureId="f371" android:label="@string/dummyLabel" />
- <feature android:featureId="f372" android:label="@string/dummyLabel" />
- <feature android:featureId="f373" android:label="@string/dummyLabel" />
- <feature android:featureId="f374" android:label="@string/dummyLabel" />
- <feature android:featureId="f375" android:label="@string/dummyLabel" />
- <feature android:featureId="f376" android:label="@string/dummyLabel" />
- <feature android:featureId="f377" android:label="@string/dummyLabel" />
- <feature android:featureId="f378" android:label="@string/dummyLabel" />
- <feature android:featureId="f379" android:label="@string/dummyLabel" />
- <feature android:featureId="f380" android:label="@string/dummyLabel" />
- <feature android:featureId="f381" android:label="@string/dummyLabel" />
- <feature android:featureId="f382" android:label="@string/dummyLabel" />
- <feature android:featureId="f383" android:label="@string/dummyLabel" />
- <feature android:featureId="f384" android:label="@string/dummyLabel" />
- <feature android:featureId="f385" android:label="@string/dummyLabel" />
- <feature android:featureId="f386" android:label="@string/dummyLabel" />
- <feature android:featureId="f387" android:label="@string/dummyLabel" />
- <feature android:featureId="f388" android:label="@string/dummyLabel" />
- <feature android:featureId="f389" android:label="@string/dummyLabel" />
- <feature android:featureId="f390" android:label="@string/dummyLabel" />
- <feature android:featureId="f391" android:label="@string/dummyLabel" />
- <feature android:featureId="f392" android:label="@string/dummyLabel" />
- <feature android:featureId="f393" android:label="@string/dummyLabel" />
- <feature android:featureId="f394" android:label="@string/dummyLabel" />
- <feature android:featureId="f395" android:label="@string/dummyLabel" />
- <feature android:featureId="f396" android:label="@string/dummyLabel" />
- <feature android:featureId="f397" android:label="@string/dummyLabel" />
- <feature android:featureId="f398" android:label="@string/dummyLabel" />
- <feature android:featureId="f399" android:label="@string/dummyLabel" />
- <feature android:featureId="f400" android:label="@string/dummyLabel" />
- <feature android:featureId="f401" android:label="@string/dummyLabel" />
- <feature android:featureId="f402" android:label="@string/dummyLabel" />
- <feature android:featureId="f403" android:label="@string/dummyLabel" />
- <feature android:featureId="f404" android:label="@string/dummyLabel" />
- <feature android:featureId="f405" android:label="@string/dummyLabel" />
- <feature android:featureId="f406" android:label="@string/dummyLabel" />
- <feature android:featureId="f407" android:label="@string/dummyLabel" />
- <feature android:featureId="f408" android:label="@string/dummyLabel" />
- <feature android:featureId="f409" android:label="@string/dummyLabel" />
- <feature android:featureId="f410" android:label="@string/dummyLabel" />
- <feature android:featureId="f411" android:label="@string/dummyLabel" />
- <feature android:featureId="f412" android:label="@string/dummyLabel" />
- <feature android:featureId="f413" android:label="@string/dummyLabel" />
- <feature android:featureId="f414" android:label="@string/dummyLabel" />
- <feature android:featureId="f415" android:label="@string/dummyLabel" />
- <feature android:featureId="f416" android:label="@string/dummyLabel" />
- <feature android:featureId="f417" android:label="@string/dummyLabel" />
- <feature android:featureId="f418" android:label="@string/dummyLabel" />
- <feature android:featureId="f419" android:label="@string/dummyLabel" />
- <feature android:featureId="f420" android:label="@string/dummyLabel" />
- <feature android:featureId="f421" android:label="@string/dummyLabel" />
- <feature android:featureId="f422" android:label="@string/dummyLabel" />
- <feature android:featureId="f423" android:label="@string/dummyLabel" />
- <feature android:featureId="f424" android:label="@string/dummyLabel" />
- <feature android:featureId="f425" android:label="@string/dummyLabel" />
- <feature android:featureId="f426" android:label="@string/dummyLabel" />
- <feature android:featureId="f427" android:label="@string/dummyLabel" />
- <feature android:featureId="f428" android:label="@string/dummyLabel" />
- <feature android:featureId="f429" android:label="@string/dummyLabel" />
- <feature android:featureId="f430" android:label="@string/dummyLabel" />
- <feature android:featureId="f431" android:label="@string/dummyLabel" />
- <feature android:featureId="f432" android:label="@string/dummyLabel" />
- <feature android:featureId="f433" android:label="@string/dummyLabel" />
- <feature android:featureId="f434" android:label="@string/dummyLabel" />
- <feature android:featureId="f435" android:label="@string/dummyLabel" />
- <feature android:featureId="f436" android:label="@string/dummyLabel" />
- <feature android:featureId="f437" android:label="@string/dummyLabel" />
- <feature android:featureId="f438" android:label="@string/dummyLabel" />
- <feature android:featureId="f439" android:label="@string/dummyLabel" />
- <feature android:featureId="f440" android:label="@string/dummyLabel" />
- <feature android:featureId="f441" android:label="@string/dummyLabel" />
- <feature android:featureId="f442" android:label="@string/dummyLabel" />
- <feature android:featureId="f443" android:label="@string/dummyLabel" />
- <feature android:featureId="f444" android:label="@string/dummyLabel" />
- <feature android:featureId="f445" android:label="@string/dummyLabel" />
- <feature android:featureId="f446" android:label="@string/dummyLabel" />
- <feature android:featureId="f447" android:label="@string/dummyLabel" />
- <feature android:featureId="f448" android:label="@string/dummyLabel" />
- <feature android:featureId="f449" android:label="@string/dummyLabel" />
- <feature android:featureId="f450" android:label="@string/dummyLabel" />
- <feature android:featureId="f451" android:label="@string/dummyLabel" />
- <feature android:featureId="f452" android:label="@string/dummyLabel" />
- <feature android:featureId="f453" android:label="@string/dummyLabel" />
- <feature android:featureId="f454" android:label="@string/dummyLabel" />
- <feature android:featureId="f455" android:label="@string/dummyLabel" />
- <feature android:featureId="f456" android:label="@string/dummyLabel" />
- <feature android:featureId="f457" android:label="@string/dummyLabel" />
- <feature android:featureId="f458" android:label="@string/dummyLabel" />
- <feature android:featureId="f459" android:label="@string/dummyLabel" />
- <feature android:featureId="f460" android:label="@string/dummyLabel" />
- <feature android:featureId="f461" android:label="@string/dummyLabel" />
- <feature android:featureId="f462" android:label="@string/dummyLabel" />
- <feature android:featureId="f463" android:label="@string/dummyLabel" />
- <feature android:featureId="f464" android:label="@string/dummyLabel" />
- <feature android:featureId="f465" android:label="@string/dummyLabel" />
- <feature android:featureId="f466" android:label="@string/dummyLabel" />
- <feature android:featureId="f467" android:label="@string/dummyLabel" />
- <feature android:featureId="f468" android:label="@string/dummyLabel" />
- <feature android:featureId="f469" android:label="@string/dummyLabel" />
- <feature android:featureId="f470" android:label="@string/dummyLabel" />
- <feature android:featureId="f471" android:label="@string/dummyLabel" />
- <feature android:featureId="f472" android:label="@string/dummyLabel" />
- <feature android:featureId="f473" android:label="@string/dummyLabel" />
- <feature android:featureId="f474" android:label="@string/dummyLabel" />
- <feature android:featureId="f475" android:label="@string/dummyLabel" />
- <feature android:featureId="f476" android:label="@string/dummyLabel" />
- <feature android:featureId="f477" android:label="@string/dummyLabel" />
- <feature android:featureId="f478" android:label="@string/dummyLabel" />
- <feature android:featureId="f479" android:label="@string/dummyLabel" />
- <feature android:featureId="f480" android:label="@string/dummyLabel" />
- <feature android:featureId="f481" android:label="@string/dummyLabel" />
- <feature android:featureId="f482" android:label="@string/dummyLabel" />
- <feature android:featureId="f483" android:label="@string/dummyLabel" />
- <feature android:featureId="f484" android:label="@string/dummyLabel" />
- <feature android:featureId="f485" android:label="@string/dummyLabel" />
- <feature android:featureId="f486" android:label="@string/dummyLabel" />
- <feature android:featureId="f487" android:label="@string/dummyLabel" />
- <feature android:featureId="f488" android:label="@string/dummyLabel" />
- <feature android:featureId="f489" android:label="@string/dummyLabel" />
- <feature android:featureId="f490" android:label="@string/dummyLabel" />
- <feature android:featureId="f491" android:label="@string/dummyLabel" />
- <feature android:featureId="f492" android:label="@string/dummyLabel" />
- <feature android:featureId="f493" android:label="@string/dummyLabel" />
- <feature android:featureId="f494" android:label="@string/dummyLabel" />
- <feature android:featureId="f495" android:label="@string/dummyLabel" />
- <feature android:featureId="f496" android:label="@string/dummyLabel" />
- <feature android:featureId="f497" android:label="@string/dummyLabel" />
- <feature android:featureId="f498" android:label="@string/dummyLabel" />
- <feature android:featureId="f499" android:label="@string/dummyLabel" />
- <feature android:featureId="f500" android:label="@string/dummyLabel" />
- <feature android:featureId="f501" android:label="@string/dummyLabel" />
- <feature android:featureId="f502" android:label="@string/dummyLabel" />
- <feature android:featureId="f503" android:label="@string/dummyLabel" />
- <feature android:featureId="f504" android:label="@string/dummyLabel" />
- <feature android:featureId="f505" android:label="@string/dummyLabel" />
- <feature android:featureId="f506" android:label="@string/dummyLabel" />
- <feature android:featureId="f507" android:label="@string/dummyLabel" />
- <feature android:featureId="f508" android:label="@string/dummyLabel" />
- <feature android:featureId="f509" android:label="@string/dummyLabel" />
- <feature android:featureId="f510" android:label="@string/dummyLabel" />
- <feature android:featureId="f511" android:label="@string/dummyLabel" />
- <feature android:featureId="f512" android:label="@string/dummyLabel" />
- <feature android:featureId="f513" android:label="@string/dummyLabel" />
- <feature android:featureId="f514" android:label="@string/dummyLabel" />
- <feature android:featureId="f515" android:label="@string/dummyLabel" />
- <feature android:featureId="f516" android:label="@string/dummyLabel" />
- <feature android:featureId="f517" android:label="@string/dummyLabel" />
- <feature android:featureId="f518" android:label="@string/dummyLabel" />
- <feature android:featureId="f519" android:label="@string/dummyLabel" />
- <feature android:featureId="f520" android:label="@string/dummyLabel" />
- <feature android:featureId="f521" android:label="@string/dummyLabel" />
- <feature android:featureId="f522" android:label="@string/dummyLabel" />
- <feature android:featureId="f523" android:label="@string/dummyLabel" />
- <feature android:featureId="f524" android:label="@string/dummyLabel" />
- <feature android:featureId="f525" android:label="@string/dummyLabel" />
- <feature android:featureId="f526" android:label="@string/dummyLabel" />
- <feature android:featureId="f527" android:label="@string/dummyLabel" />
- <feature android:featureId="f528" android:label="@string/dummyLabel" />
- <feature android:featureId="f529" android:label="@string/dummyLabel" />
- <feature android:featureId="f530" android:label="@string/dummyLabel" />
- <feature android:featureId="f531" android:label="@string/dummyLabel" />
- <feature android:featureId="f532" android:label="@string/dummyLabel" />
- <feature android:featureId="f533" android:label="@string/dummyLabel" />
- <feature android:featureId="f534" android:label="@string/dummyLabel" />
- <feature android:featureId="f535" android:label="@string/dummyLabel" />
- <feature android:featureId="f536" android:label="@string/dummyLabel" />
- <feature android:featureId="f537" android:label="@string/dummyLabel" />
- <feature android:featureId="f538" android:label="@string/dummyLabel" />
- <feature android:featureId="f539" android:label="@string/dummyLabel" />
- <feature android:featureId="f540" android:label="@string/dummyLabel" />
- <feature android:featureId="f541" android:label="@string/dummyLabel" />
- <feature android:featureId="f542" android:label="@string/dummyLabel" />
- <feature android:featureId="f543" android:label="@string/dummyLabel" />
- <feature android:featureId="f544" android:label="@string/dummyLabel" />
- <feature android:featureId="f545" android:label="@string/dummyLabel" />
- <feature android:featureId="f546" android:label="@string/dummyLabel" />
- <feature android:featureId="f547" android:label="@string/dummyLabel" />
- <feature android:featureId="f548" android:label="@string/dummyLabel" />
- <feature android:featureId="f549" android:label="@string/dummyLabel" />
- <feature android:featureId="f550" android:label="@string/dummyLabel" />
- <feature android:featureId="f551" android:label="@string/dummyLabel" />
- <feature android:featureId="f552" android:label="@string/dummyLabel" />
- <feature android:featureId="f553" android:label="@string/dummyLabel" />
- <feature android:featureId="f554" android:label="@string/dummyLabel" />
- <feature android:featureId="f555" android:label="@string/dummyLabel" />
- <feature android:featureId="f556" android:label="@string/dummyLabel" />
- <feature android:featureId="f557" android:label="@string/dummyLabel" />
- <feature android:featureId="f558" android:label="@string/dummyLabel" />
- <feature android:featureId="f559" android:label="@string/dummyLabel" />
- <feature android:featureId="f560" android:label="@string/dummyLabel" />
- <feature android:featureId="f561" android:label="@string/dummyLabel" />
- <feature android:featureId="f562" android:label="@string/dummyLabel" />
- <feature android:featureId="f563" android:label="@string/dummyLabel" />
- <feature android:featureId="f564" android:label="@string/dummyLabel" />
- <feature android:featureId="f565" android:label="@string/dummyLabel" />
- <feature android:featureId="f566" android:label="@string/dummyLabel" />
- <feature android:featureId="f567" android:label="@string/dummyLabel" />
- <feature android:featureId="f568" android:label="@string/dummyLabel" />
- <feature android:featureId="f569" android:label="@string/dummyLabel" />
- <feature android:featureId="f570" android:label="@string/dummyLabel" />
- <feature android:featureId="f571" android:label="@string/dummyLabel" />
- <feature android:featureId="f572" android:label="@string/dummyLabel" />
- <feature android:featureId="f573" android:label="@string/dummyLabel" />
- <feature android:featureId="f574" android:label="@string/dummyLabel" />
- <feature android:featureId="f575" android:label="@string/dummyLabel" />
- <feature android:featureId="f576" android:label="@string/dummyLabel" />
- <feature android:featureId="f577" android:label="@string/dummyLabel" />
- <feature android:featureId="f578" android:label="@string/dummyLabel" />
- <feature android:featureId="f579" android:label="@string/dummyLabel" />
- <feature android:featureId="f580" android:label="@string/dummyLabel" />
- <feature android:featureId="f581" android:label="@string/dummyLabel" />
- <feature android:featureId="f582" android:label="@string/dummyLabel" />
- <feature android:featureId="f583" android:label="@string/dummyLabel" />
- <feature android:featureId="f584" android:label="@string/dummyLabel" />
- <feature android:featureId="f585" android:label="@string/dummyLabel" />
- <feature android:featureId="f586" android:label="@string/dummyLabel" />
- <feature android:featureId="f587" android:label="@string/dummyLabel" />
- <feature android:featureId="f588" android:label="@string/dummyLabel" />
- <feature android:featureId="f589" android:label="@string/dummyLabel" />
- <feature android:featureId="f590" android:label="@string/dummyLabel" />
- <feature android:featureId="f591" android:label="@string/dummyLabel" />
- <feature android:featureId="f592" android:label="@string/dummyLabel" />
- <feature android:featureId="f593" android:label="@string/dummyLabel" />
- <feature android:featureId="f594" android:label="@string/dummyLabel" />
- <feature android:featureId="f595" android:label="@string/dummyLabel" />
- <feature android:featureId="f596" android:label="@string/dummyLabel" />
- <feature android:featureId="f597" android:label="@string/dummyLabel" />
- <feature android:featureId="f598" android:label="@string/dummyLabel" />
- <feature android:featureId="f599" android:label="@string/dummyLabel" />
- <feature android:featureId="f600" android:label="@string/dummyLabel" />
- <feature android:featureId="f601" android:label="@string/dummyLabel" />
- <feature android:featureId="f602" android:label="@string/dummyLabel" />
- <feature android:featureId="f603" android:label="@string/dummyLabel" />
- <feature android:featureId="f604" android:label="@string/dummyLabel" />
- <feature android:featureId="f605" android:label="@string/dummyLabel" />
- <feature android:featureId="f606" android:label="@string/dummyLabel" />
- <feature android:featureId="f607" android:label="@string/dummyLabel" />
- <feature android:featureId="f608" android:label="@string/dummyLabel" />
- <feature android:featureId="f609" android:label="@string/dummyLabel" />
- <feature android:featureId="f610" android:label="@string/dummyLabel" />
- <feature android:featureId="f611" android:label="@string/dummyLabel" />
- <feature android:featureId="f612" android:label="@string/dummyLabel" />
- <feature android:featureId="f613" android:label="@string/dummyLabel" />
- <feature android:featureId="f614" android:label="@string/dummyLabel" />
- <feature android:featureId="f615" android:label="@string/dummyLabel" />
- <feature android:featureId="f616" android:label="@string/dummyLabel" />
- <feature android:featureId="f617" android:label="@string/dummyLabel" />
- <feature android:featureId="f618" android:label="@string/dummyLabel" />
- <feature android:featureId="f619" android:label="@string/dummyLabel" />
- <feature android:featureId="f620" android:label="@string/dummyLabel" />
- <feature android:featureId="f621" android:label="@string/dummyLabel" />
- <feature android:featureId="f622" android:label="@string/dummyLabel" />
- <feature android:featureId="f623" android:label="@string/dummyLabel" />
- <feature android:featureId="f624" android:label="@string/dummyLabel" />
- <feature android:featureId="f625" android:label="@string/dummyLabel" />
- <feature android:featureId="f626" android:label="@string/dummyLabel" />
- <feature android:featureId="f627" android:label="@string/dummyLabel" />
- <feature android:featureId="f628" android:label="@string/dummyLabel" />
- <feature android:featureId="f629" android:label="@string/dummyLabel" />
- <feature android:featureId="f630" android:label="@string/dummyLabel" />
- <feature android:featureId="f631" android:label="@string/dummyLabel" />
- <feature android:featureId="f632" android:label="@string/dummyLabel" />
- <feature android:featureId="f633" android:label="@string/dummyLabel" />
- <feature android:featureId="f634" android:label="@string/dummyLabel" />
- <feature android:featureId="f635" android:label="@string/dummyLabel" />
- <feature android:featureId="f636" android:label="@string/dummyLabel" />
- <feature android:featureId="f637" android:label="@string/dummyLabel" />
- <feature android:featureId="f638" android:label="@string/dummyLabel" />
- <feature android:featureId="f639" android:label="@string/dummyLabel" />
- <feature android:featureId="f640" android:label="@string/dummyLabel" />
- <feature android:featureId="f641" android:label="@string/dummyLabel" />
- <feature android:featureId="f642" android:label="@string/dummyLabel" />
- <feature android:featureId="f643" android:label="@string/dummyLabel" />
- <feature android:featureId="f644" android:label="@string/dummyLabel" />
- <feature android:featureId="f645" android:label="@string/dummyLabel" />
- <feature android:featureId="f646" android:label="@string/dummyLabel" />
- <feature android:featureId="f647" android:label="@string/dummyLabel" />
- <feature android:featureId="f648" android:label="@string/dummyLabel" />
- <feature android:featureId="f649" android:label="@string/dummyLabel" />
- <feature android:featureId="f650" android:label="@string/dummyLabel" />
- <feature android:featureId="f651" android:label="@string/dummyLabel" />
- <feature android:featureId="f652" android:label="@string/dummyLabel" />
- <feature android:featureId="f653" android:label="@string/dummyLabel" />
- <feature android:featureId="f654" android:label="@string/dummyLabel" />
- <feature android:featureId="f655" android:label="@string/dummyLabel" />
- <feature android:featureId="f656" android:label="@string/dummyLabel" />
- <feature android:featureId="f657" android:label="@string/dummyLabel" />
- <feature android:featureId="f658" android:label="@string/dummyLabel" />
- <feature android:featureId="f659" android:label="@string/dummyLabel" />
- <feature android:featureId="f660" android:label="@string/dummyLabel" />
- <feature android:featureId="f661" android:label="@string/dummyLabel" />
- <feature android:featureId="f662" android:label="@string/dummyLabel" />
- <feature android:featureId="f663" android:label="@string/dummyLabel" />
- <feature android:featureId="f664" android:label="@string/dummyLabel" />
- <feature android:featureId="f665" android:label="@string/dummyLabel" />
- <feature android:featureId="f666" android:label="@string/dummyLabel" />
- <feature android:featureId="f667" android:label="@string/dummyLabel" />
- <feature android:featureId="f668" android:label="@string/dummyLabel" />
- <feature android:featureId="f669" android:label="@string/dummyLabel" />
- <feature android:featureId="f670" android:label="@string/dummyLabel" />
- <feature android:featureId="f671" android:label="@string/dummyLabel" />
- <feature android:featureId="f672" android:label="@string/dummyLabel" />
- <feature android:featureId="f673" android:label="@string/dummyLabel" />
- <feature android:featureId="f674" android:label="@string/dummyLabel" />
- <feature android:featureId="f675" android:label="@string/dummyLabel" />
- <feature android:featureId="f676" android:label="@string/dummyLabel" />
- <feature android:featureId="f677" android:label="@string/dummyLabel" />
- <feature android:featureId="f678" android:label="@string/dummyLabel" />
- <feature android:featureId="f679" android:label="@string/dummyLabel" />
- <feature android:featureId="f680" android:label="@string/dummyLabel" />
- <feature android:featureId="f681" android:label="@string/dummyLabel" />
- <feature android:featureId="f682" android:label="@string/dummyLabel" />
- <feature android:featureId="f683" android:label="@string/dummyLabel" />
- <feature android:featureId="f684" android:label="@string/dummyLabel" />
- <feature android:featureId="f685" android:label="@string/dummyLabel" />
- <feature android:featureId="f686" android:label="@string/dummyLabel" />
- <feature android:featureId="f687" android:label="@string/dummyLabel" />
- <feature android:featureId="f688" android:label="@string/dummyLabel" />
- <feature android:featureId="f689" android:label="@string/dummyLabel" />
- <feature android:featureId="f690" android:label="@string/dummyLabel" />
- <feature android:featureId="f691" android:label="@string/dummyLabel" />
- <feature android:featureId="f692" android:label="@string/dummyLabel" />
- <feature android:featureId="f693" android:label="@string/dummyLabel" />
- <feature android:featureId="f694" android:label="@string/dummyLabel" />
- <feature android:featureId="f695" android:label="@string/dummyLabel" />
- <feature android:featureId="f696" android:label="@string/dummyLabel" />
- <feature android:featureId="f697" android:label="@string/dummyLabel" />
- <feature android:featureId="f698" android:label="@string/dummyLabel" />
- <feature android:featureId="f699" android:label="@string/dummyLabel" />
- <feature android:featureId="f700" android:label="@string/dummyLabel" />
- <feature android:featureId="f701" android:label="@string/dummyLabel" />
- <feature android:featureId="f702" android:label="@string/dummyLabel" />
- <feature android:featureId="f703" android:label="@string/dummyLabel" />
- <feature android:featureId="f704" android:label="@string/dummyLabel" />
- <feature android:featureId="f705" android:label="@string/dummyLabel" />
- <feature android:featureId="f706" android:label="@string/dummyLabel" />
- <feature android:featureId="f707" android:label="@string/dummyLabel" />
- <feature android:featureId="f708" android:label="@string/dummyLabel" />
- <feature android:featureId="f709" android:label="@string/dummyLabel" />
- <feature android:featureId="f710" android:label="@string/dummyLabel" />
- <feature android:featureId="f711" android:label="@string/dummyLabel" />
- <feature android:featureId="f712" android:label="@string/dummyLabel" />
- <feature android:featureId="f713" android:label="@string/dummyLabel" />
- <feature android:featureId="f714" android:label="@string/dummyLabel" />
- <feature android:featureId="f715" android:label="@string/dummyLabel" />
- <feature android:featureId="f716" android:label="@string/dummyLabel" />
- <feature android:featureId="f717" android:label="@string/dummyLabel" />
- <feature android:featureId="f718" android:label="@string/dummyLabel" />
- <feature android:featureId="f719" android:label="@string/dummyLabel" />
- <feature android:featureId="f720" android:label="@string/dummyLabel" />
- <feature android:featureId="f721" android:label="@string/dummyLabel" />
- <feature android:featureId="f722" android:label="@string/dummyLabel" />
- <feature android:featureId="f723" android:label="@string/dummyLabel" />
- <feature android:featureId="f724" android:label="@string/dummyLabel" />
- <feature android:featureId="f725" android:label="@string/dummyLabel" />
- <feature android:featureId="f726" android:label="@string/dummyLabel" />
- <feature android:featureId="f727" android:label="@string/dummyLabel" />
- <feature android:featureId="f728" android:label="@string/dummyLabel" />
- <feature android:featureId="f729" android:label="@string/dummyLabel" />
- <feature android:featureId="f730" android:label="@string/dummyLabel" />
- <feature android:featureId="f731" android:label="@string/dummyLabel" />
- <feature android:featureId="f732" android:label="@string/dummyLabel" />
- <feature android:featureId="f733" android:label="@string/dummyLabel" />
- <feature android:featureId="f734" android:label="@string/dummyLabel" />
- <feature android:featureId="f735" android:label="@string/dummyLabel" />
- <feature android:featureId="f736" android:label="@string/dummyLabel" />
- <feature android:featureId="f737" android:label="@string/dummyLabel" />
- <feature android:featureId="f738" android:label="@string/dummyLabel" />
- <feature android:featureId="f739" android:label="@string/dummyLabel" />
- <feature android:featureId="f740" android:label="@string/dummyLabel" />
- <feature android:featureId="f741" android:label="@string/dummyLabel" />
- <feature android:featureId="f742" android:label="@string/dummyLabel" />
- <feature android:featureId="f743" android:label="@string/dummyLabel" />
- <feature android:featureId="f744" android:label="@string/dummyLabel" />
- <feature android:featureId="f745" android:label="@string/dummyLabel" />
- <feature android:featureId="f746" android:label="@string/dummyLabel" />
- <feature android:featureId="f747" android:label="@string/dummyLabel" />
- <feature android:featureId="f748" android:label="@string/dummyLabel" />
- <feature android:featureId="f749" android:label="@string/dummyLabel" />
- <feature android:featureId="f750" android:label="@string/dummyLabel" />
- <feature android:featureId="f751" android:label="@string/dummyLabel" />
- <feature android:featureId="f752" android:label="@string/dummyLabel" />
- <feature android:featureId="f753" android:label="@string/dummyLabel" />
- <feature android:featureId="f754" android:label="@string/dummyLabel" />
- <feature android:featureId="f755" android:label="@string/dummyLabel" />
- <feature android:featureId="f756" android:label="@string/dummyLabel" />
- <feature android:featureId="f757" android:label="@string/dummyLabel" />
- <feature android:featureId="f758" android:label="@string/dummyLabel" />
- <feature android:featureId="f759" android:label="@string/dummyLabel" />
- <feature android:featureId="f760" android:label="@string/dummyLabel" />
- <feature android:featureId="f761" android:label="@string/dummyLabel" />
- <feature android:featureId="f762" android:label="@string/dummyLabel" />
- <feature android:featureId="f763" android:label="@string/dummyLabel" />
- <feature android:featureId="f764" android:label="@string/dummyLabel" />
- <feature android:featureId="f765" android:label="@string/dummyLabel" />
- <feature android:featureId="f766" android:label="@string/dummyLabel" />
- <feature android:featureId="f767" android:label="@string/dummyLabel" />
- <feature android:featureId="f768" android:label="@string/dummyLabel" />
- <feature android:featureId="f769" android:label="@string/dummyLabel" />
- <feature android:featureId="f770" android:label="@string/dummyLabel" />
- <feature android:featureId="f771" android:label="@string/dummyLabel" />
- <feature android:featureId="f772" android:label="@string/dummyLabel" />
- <feature android:featureId="f773" android:label="@string/dummyLabel" />
- <feature android:featureId="f774" android:label="@string/dummyLabel" />
- <feature android:featureId="f775" android:label="@string/dummyLabel" />
- <feature android:featureId="f776" android:label="@string/dummyLabel" />
- <feature android:featureId="f777" android:label="@string/dummyLabel" />
- <feature android:featureId="f778" android:label="@string/dummyLabel" />
- <feature android:featureId="f779" android:label="@string/dummyLabel" />
- <feature android:featureId="f780" android:label="@string/dummyLabel" />
- <feature android:featureId="f781" android:label="@string/dummyLabel" />
- <feature android:featureId="f782" android:label="@string/dummyLabel" />
- <feature android:featureId="f783" android:label="@string/dummyLabel" />
- <feature android:featureId="f784" android:label="@string/dummyLabel" />
- <feature android:featureId="f785" android:label="@string/dummyLabel" />
- <feature android:featureId="f786" android:label="@string/dummyLabel" />
- <feature android:featureId="f787" android:label="@string/dummyLabel" />
- <feature android:featureId="f788" android:label="@string/dummyLabel" />
- <feature android:featureId="f789" android:label="@string/dummyLabel" />
- <feature android:featureId="f790" android:label="@string/dummyLabel" />
- <feature android:featureId="f791" android:label="@string/dummyLabel" />
- <feature android:featureId="f792" android:label="@string/dummyLabel" />
- <feature android:featureId="f793" android:label="@string/dummyLabel" />
- <feature android:featureId="f794" android:label="@string/dummyLabel" />
- <feature android:featureId="f795" android:label="@string/dummyLabel" />
- <feature android:featureId="f796" android:label="@string/dummyLabel" />
- <feature android:featureId="f797" android:label="@string/dummyLabel" />
- <feature android:featureId="f798" android:label="@string/dummyLabel" />
- <feature android:featureId="f799" android:label="@string/dummyLabel" />
- <feature android:featureId="f800" android:label="@string/dummyLabel" />
- <feature android:featureId="f801" android:label="@string/dummyLabel" />
- <feature android:featureId="f802" android:label="@string/dummyLabel" />
- <feature android:featureId="f803" android:label="@string/dummyLabel" />
- <feature android:featureId="f804" android:label="@string/dummyLabel" />
- <feature android:featureId="f805" android:label="@string/dummyLabel" />
- <feature android:featureId="f806" android:label="@string/dummyLabel" />
- <feature android:featureId="f807" android:label="@string/dummyLabel" />
- <feature android:featureId="f808" android:label="@string/dummyLabel" />
- <feature android:featureId="f809" android:label="@string/dummyLabel" />
- <feature android:featureId="f810" android:label="@string/dummyLabel" />
- <feature android:featureId="f811" android:label="@string/dummyLabel" />
- <feature android:featureId="f812" android:label="@string/dummyLabel" />
- <feature android:featureId="f813" android:label="@string/dummyLabel" />
- <feature android:featureId="f814" android:label="@string/dummyLabel" />
- <feature android:featureId="f815" android:label="@string/dummyLabel" />
- <feature android:featureId="f816" android:label="@string/dummyLabel" />
- <feature android:featureId="f817" android:label="@string/dummyLabel" />
- <feature android:featureId="f818" android:label="@string/dummyLabel" />
- <feature android:featureId="f819" android:label="@string/dummyLabel" />
- <feature android:featureId="f820" android:label="@string/dummyLabel" />
- <feature android:featureId="f821" android:label="@string/dummyLabel" />
- <feature android:featureId="f822" android:label="@string/dummyLabel" />
- <feature android:featureId="f823" android:label="@string/dummyLabel" />
- <feature android:featureId="f824" android:label="@string/dummyLabel" />
- <feature android:featureId="f825" android:label="@string/dummyLabel" />
- <feature android:featureId="f826" android:label="@string/dummyLabel" />
- <feature android:featureId="f827" android:label="@string/dummyLabel" />
- <feature android:featureId="f828" android:label="@string/dummyLabel" />
- <feature android:featureId="f829" android:label="@string/dummyLabel" />
- <feature android:featureId="f830" android:label="@string/dummyLabel" />
- <feature android:featureId="f831" android:label="@string/dummyLabel" />
- <feature android:featureId="f832" android:label="@string/dummyLabel" />
- <feature android:featureId="f833" android:label="@string/dummyLabel" />
- <feature android:featureId="f834" android:label="@string/dummyLabel" />
- <feature android:featureId="f835" android:label="@string/dummyLabel" />
- <feature android:featureId="f836" android:label="@string/dummyLabel" />
- <feature android:featureId="f837" android:label="@string/dummyLabel" />
- <feature android:featureId="f838" android:label="@string/dummyLabel" />
- <feature android:featureId="f839" android:label="@string/dummyLabel" />
- <feature android:featureId="f840" android:label="@string/dummyLabel" />
- <feature android:featureId="f841" android:label="@string/dummyLabel" />
- <feature android:featureId="f842" android:label="@string/dummyLabel" />
- <feature android:featureId="f843" android:label="@string/dummyLabel" />
- <feature android:featureId="f844" android:label="@string/dummyLabel" />
- <feature android:featureId="f845" android:label="@string/dummyLabel" />
- <feature android:featureId="f846" android:label="@string/dummyLabel" />
- <feature android:featureId="f847" android:label="@string/dummyLabel" />
- <feature android:featureId="f848" android:label="@string/dummyLabel" />
- <feature android:featureId="f849" android:label="@string/dummyLabel" />
- <feature android:featureId="f850" android:label="@string/dummyLabel" />
- <feature android:featureId="f851" android:label="@string/dummyLabel" />
- <feature android:featureId="f852" android:label="@string/dummyLabel" />
- <feature android:featureId="f853" android:label="@string/dummyLabel" />
- <feature android:featureId="f854" android:label="@string/dummyLabel" />
- <feature android:featureId="f855" android:label="@string/dummyLabel" />
- <feature android:featureId="f856" android:label="@string/dummyLabel" />
- <feature android:featureId="f857" android:label="@string/dummyLabel" />
- <feature android:featureId="f858" android:label="@string/dummyLabel" />
- <feature android:featureId="f859" android:label="@string/dummyLabel" />
- <feature android:featureId="f860" android:label="@string/dummyLabel" />
- <feature android:featureId="f861" android:label="@string/dummyLabel" />
- <feature android:featureId="f862" android:label="@string/dummyLabel" />
- <feature android:featureId="f863" android:label="@string/dummyLabel" />
- <feature android:featureId="f864" android:label="@string/dummyLabel" />
- <feature android:featureId="f865" android:label="@string/dummyLabel" />
- <feature android:featureId="f866" android:label="@string/dummyLabel" />
- <feature android:featureId="f867" android:label="@string/dummyLabel" />
- <feature android:featureId="f868" android:label="@string/dummyLabel" />
- <feature android:featureId="f869" android:label="@string/dummyLabel" />
- <feature android:featureId="f870" android:label="@string/dummyLabel" />
- <feature android:featureId="f871" android:label="@string/dummyLabel" />
- <feature android:featureId="f872" android:label="@string/dummyLabel" />
- <feature android:featureId="f873" android:label="@string/dummyLabel" />
- <feature android:featureId="f874" android:label="@string/dummyLabel" />
- <feature android:featureId="f875" android:label="@string/dummyLabel" />
- <feature android:featureId="f876" android:label="@string/dummyLabel" />
- <feature android:featureId="f877" android:label="@string/dummyLabel" />
- <feature android:featureId="f878" android:label="@string/dummyLabel" />
- <feature android:featureId="f879" android:label="@string/dummyLabel" />
- <feature android:featureId="f880" android:label="@string/dummyLabel" />
- <feature android:featureId="f881" android:label="@string/dummyLabel" />
- <feature android:featureId="f882" android:label="@string/dummyLabel" />
- <feature android:featureId="f883" android:label="@string/dummyLabel" />
- <feature android:featureId="f884" android:label="@string/dummyLabel" />
- <feature android:featureId="f885" android:label="@string/dummyLabel" />
- <feature android:featureId="f886" android:label="@string/dummyLabel" />
- <feature android:featureId="f887" android:label="@string/dummyLabel" />
- <feature android:featureId="f888" android:label="@string/dummyLabel" />
- <feature android:featureId="f889" android:label="@string/dummyLabel" />
- <feature android:featureId="f890" android:label="@string/dummyLabel" />
- <feature android:featureId="f891" android:label="@string/dummyLabel" />
- <feature android:featureId="f892" android:label="@string/dummyLabel" />
- <feature android:featureId="f893" android:label="@string/dummyLabel" />
- <feature android:featureId="f894" android:label="@string/dummyLabel" />
- <feature android:featureId="f895" android:label="@string/dummyLabel" />
- <feature android:featureId="f896" android:label="@string/dummyLabel" />
- <feature android:featureId="f897" android:label="@string/dummyLabel" />
- <feature android:featureId="f898" android:label="@string/dummyLabel" />
- <feature android:featureId="f899" android:label="@string/dummyLabel" />
- <feature android:featureId="f900" android:label="@string/dummyLabel" />
- <feature android:featureId="f901" android:label="@string/dummyLabel" />
- <feature android:featureId="f902" android:label="@string/dummyLabel" />
- <feature android:featureId="f903" android:label="@string/dummyLabel" />
- <feature android:featureId="f904" android:label="@string/dummyLabel" />
- <feature android:featureId="f905" android:label="@string/dummyLabel" />
- <feature android:featureId="f906" android:label="@string/dummyLabel" />
- <feature android:featureId="f907" android:label="@string/dummyLabel" />
- <feature android:featureId="f908" android:label="@string/dummyLabel" />
- <feature android:featureId="f909" android:label="@string/dummyLabel" />
- <feature android:featureId="f910" android:label="@string/dummyLabel" />
- <feature android:featureId="f911" android:label="@string/dummyLabel" />
- <feature android:featureId="f912" android:label="@string/dummyLabel" />
- <feature android:featureId="f913" android:label="@string/dummyLabel" />
- <feature android:featureId="f914" android:label="@string/dummyLabel" />
- <feature android:featureId="f915" android:label="@string/dummyLabel" />
- <feature android:featureId="f916" android:label="@string/dummyLabel" />
- <feature android:featureId="f917" android:label="@string/dummyLabel" />
- <feature android:featureId="f918" android:label="@string/dummyLabel" />
- <feature android:featureId="f919" android:label="@string/dummyLabel" />
- <feature android:featureId="f920" android:label="@string/dummyLabel" />
- <feature android:featureId="f921" android:label="@string/dummyLabel" />
- <feature android:featureId="f922" android:label="@string/dummyLabel" />
- <feature android:featureId="f923" android:label="@string/dummyLabel" />
- <feature android:featureId="f924" android:label="@string/dummyLabel" />
- <feature android:featureId="f925" android:label="@string/dummyLabel" />
- <feature android:featureId="f926" android:label="@string/dummyLabel" />
- <feature android:featureId="f927" android:label="@string/dummyLabel" />
- <feature android:featureId="f928" android:label="@string/dummyLabel" />
- <feature android:featureId="f929" android:label="@string/dummyLabel" />
- <feature android:featureId="f930" android:label="@string/dummyLabel" />
- <feature android:featureId="f931" android:label="@string/dummyLabel" />
- <feature android:featureId="f932" android:label="@string/dummyLabel" />
- <feature android:featureId="f933" android:label="@string/dummyLabel" />
- <feature android:featureId="f934" android:label="@string/dummyLabel" />
- <feature android:featureId="f935" android:label="@string/dummyLabel" />
- <feature android:featureId="f936" android:label="@string/dummyLabel" />
- <feature android:featureId="f937" android:label="@string/dummyLabel" />
- <feature android:featureId="f938" android:label="@string/dummyLabel" />
- <feature android:featureId="f939" android:label="@string/dummyLabel" />
- <feature android:featureId="f940" android:label="@string/dummyLabel" />
- <feature android:featureId="f941" android:label="@string/dummyLabel" />
- <feature android:featureId="f942" android:label="@string/dummyLabel" />
- <feature android:featureId="f943" android:label="@string/dummyLabel" />
- <feature android:featureId="f944" android:label="@string/dummyLabel" />
- <feature android:featureId="f945" android:label="@string/dummyLabel" />
- <feature android:featureId="f946" android:label="@string/dummyLabel" />
- <feature android:featureId="f947" android:label="@string/dummyLabel" />
- <feature android:featureId="f948" android:label="@string/dummyLabel" />
- <feature android:featureId="f949" android:label="@string/dummyLabel" />
- <feature android:featureId="f950" android:label="@string/dummyLabel" />
- <feature android:featureId="f951" android:label="@string/dummyLabel" />
- <feature android:featureId="f952" android:label="@string/dummyLabel" />
- <feature android:featureId="f953" android:label="@string/dummyLabel" />
- <feature android:featureId="f954" android:label="@string/dummyLabel" />
- <feature android:featureId="f955" android:label="@string/dummyLabel" />
- <feature android:featureId="f956" android:label="@string/dummyLabel" />
- <feature android:featureId="f957" android:label="@string/dummyLabel" />
- <feature android:featureId="f958" android:label="@string/dummyLabel" />
- <feature android:featureId="f959" android:label="@string/dummyLabel" />
- <feature android:featureId="f960" android:label="@string/dummyLabel" />
- <feature android:featureId="f961" android:label="@string/dummyLabel" />
- <feature android:featureId="f962" android:label="@string/dummyLabel" />
- <feature android:featureId="f963" android:label="@string/dummyLabel" />
- <feature android:featureId="f964" android:label="@string/dummyLabel" />
- <feature android:featureId="f965" android:label="@string/dummyLabel" />
- <feature android:featureId="f966" android:label="@string/dummyLabel" />
- <feature android:featureId="f967" android:label="@string/dummyLabel" />
- <feature android:featureId="f968" android:label="@string/dummyLabel" />
- <feature android:featureId="f969" android:label="@string/dummyLabel" />
- <feature android:featureId="f970" android:label="@string/dummyLabel" />
- <feature android:featureId="f971" android:label="@string/dummyLabel" />
- <feature android:featureId="f972" android:label="@string/dummyLabel" />
- <feature android:featureId="f973" android:label="@string/dummyLabel" />
- <feature android:featureId="f974" android:label="@string/dummyLabel" />
- <feature android:featureId="f975" android:label="@string/dummyLabel" />
- <feature android:featureId="f976" android:label="@string/dummyLabel" />
- <feature android:featureId="f977" android:label="@string/dummyLabel" />
- <feature android:featureId="f978" android:label="@string/dummyLabel" />
- <feature android:featureId="f979" android:label="@string/dummyLabel" />
- <feature android:featureId="f980" android:label="@string/dummyLabel" />
- <feature android:featureId="f981" android:label="@string/dummyLabel" />
- <feature android:featureId="f982" android:label="@string/dummyLabel" />
- <feature android:featureId="f983" android:label="@string/dummyLabel" />
- <feature android:featureId="f984" android:label="@string/dummyLabel" />
- <feature android:featureId="f985" android:label="@string/dummyLabel" />
- <feature android:featureId="f986" android:label="@string/dummyLabel" />
- <feature android:featureId="f987" android:label="@string/dummyLabel" />
- <feature android:featureId="f988" android:label="@string/dummyLabel" />
- <feature android:featureId="f989" android:label="@string/dummyLabel" />
- <feature android:featureId="f990" android:label="@string/dummyLabel" />
- <feature android:featureId="f991" android:label="@string/dummyLabel" />
- <feature android:featureId="f992" android:label="@string/dummyLabel" />
- <feature android:featureId="f993" android:label="@string/dummyLabel" />
- <feature android:featureId="f994" android:label="@string/dummyLabel" />
- <feature android:featureId="f995" android:label="@string/dummyLabel" />
- <feature android:featureId="f996" android:label="@string/dummyLabel" />
- <feature android:featureId="f997" android:label="@string/dummyLabel" />
- <feature android:featureId="f998" android:label="@string/dummyLabel" />
- <feature android:featureId="f999" android:label="@string/dummyLabel" />
-
- <feature android:featureId="toomany" android:label="@string/dummyLabel" />
-
- <application />
-
-</manifest>
diff --git a/tests/tests/appop/aidl/AppOpsUserService/src/android/app/appops/cts/IAppOpsUserClient.aidl b/tests/tests/appop/aidl/AppOpsUserService/src/android/app/appops/cts/IAppOpsUserClient.aidl
index f3af855..e4125f7 100644
--- a/tests/tests/appop/aidl/AppOpsUserService/src/android/app/appops/cts/IAppOpsUserClient.aidl
+++ b/tests/tests/appop/aidl/AppOpsUserService/src/android/app/appops/cts/IAppOpsUserClient.aidl
@@ -18,7 +18,7 @@
interface IAppOpsUserClient {
void noteSyncOp();
- void noteSyncOpWithFeature(String featureId);
+ void noteSyncOpWithAttribution(String attributionTag);
void callBackIntoService();
void noteNonPermissionSyncOp();
void noteSyncOpTwice();
@@ -30,7 +30,7 @@
void noteSyncOpOtherUid();
void noteSyncOpOtherUidNative();
void noteAsyncOp();
- void noteAsyncOpWithFeature(String featureId);
+ void noteAsyncOpWithAttribution(String attributionTag);
void noteAsyncOpWithCustomMessage();
void noteAsyncOpNative();
void noteAsyncOpNativeWithCustomMessage();
diff --git a/tests/tests/appop/aidl/AppOpsUserService/src/android/app/appops/cts/IAppOpsUserService.aidl b/tests/tests/appop/aidl/AppOpsUserService/src/android/app/appops/cts/IAppOpsUserService.aidl
index a19705f..0b073fb 100644
--- a/tests/tests/appop/aidl/AppOpsUserService/src/android/app/appops/cts/IAppOpsUserService.aidl
+++ b/tests/tests/appop/aidl/AppOpsUserService/src/android/app/appops/cts/IAppOpsUserService.aidl
@@ -23,7 +23,7 @@
void disableCollectorAndCallASyncOpsWhichWillBeCollected(in IAppOpsUserClient client);
void callApiThatNotesSyncOpAndCheckLog(in IAppOpsUserClient client);
void callApiThatNotesSyncOpAndClearLog(in IAppOpsUserClient client);
- void callApiThatNotesSyncOpWithFeatureAndCheckLog(in IAppOpsUserClient client);
+ void callApiThatNotesSyncOpWithAttributionAndCheckLog(in IAppOpsUserClient client);
void callApiThatCallsBackIntoServiceAndCheckLog(in IAppOpsUserClient client);
void callApiThatNotesSyncOpFromNativeCodeAndCheckLog(in IAppOpsUserClient client);
void callApiThatNotesSyncOpFromNativeCodeAndCheckMessage(in IAppOpsUserClient client);
@@ -38,7 +38,7 @@
void callApiThatNotesSyncOpOtherUidAndCheckLog(in IAppOpsUserClient client);
void callApiThatNotesSyncOpOtherUidNativelyAndCheckLog(in IAppOpsUserClient client);
void callApiThatNotesAsyncOpAndCheckLog(in IAppOpsUserClient client);
- void callApiThatNotesAsyncOpWithFeatureAndCheckLog(in IAppOpsUserClient client);
+ void callApiThatNotesAsyncOpWithAttributionAndCheckLog(in IAppOpsUserClient client);
void callApiThatNotesAsyncOpAndCheckDefaultMessage(in IAppOpsUserClient client);
void callApiThatNotesAsyncOpAndCheckCustomMessage(in IAppOpsUserClient client);
void callApiThatNotesAsyncOpNativelyAndCheckCustomMessage(in IAppOpsUserClient client);
diff --git a/tests/tests/appop/appopsTestUtilLib/src/android/app/appops/cts/AppOpsUtils.kt b/tests/tests/appop/appopsTestUtilLib/src/android/app/appops/cts/AppOpsUtils.kt
index da8f8d2..b1588d5 100644
--- a/tests/tests/appop/appopsTestUtilLib/src/android/app/appops/cts/AppOpsUtils.kt
+++ b/tests/tests/appop/appopsTestUtilLib/src/android/app/appops/cts/AppOpsUtils.kt
@@ -29,7 +29,7 @@
private const val LOG_TAG = "AppOpsUtils"
private const val TIMEOUT_MILLIS = 10000L
-const val TEST_FEATURE_ID = "testFeature"
+const val TEST_ATTRIBUTION_TAG = "testAttribution"
/**
* Resets a package's app ops configuration to the device default. See AppOpsManager for the
diff --git a/tests/tests/appop/jni/android/app/appops/cts/AppOpsLoggingTest.cpp b/tests/tests/appop/jni/android/app/appops/cts/AppOpsLoggingTest.cpp
index 0b47701..a403163 100644
--- a/tests/tests/appop/jni/android/app/appops/cts/AppOpsLoggingTest.cpp
+++ b/tests/tests/appop/jni/android/app/appops/cts/AppOpsLoggingTest.cpp
@@ -29,17 +29,17 @@
// Note op from native code
extern "C" JNIEXPORT void JNICALL
Java_android_app_appops_cts_AppOpsLoggingTestKt_nativeNoteOp(JNIEnv* env, jobject obj,
- jint op, jint uid, jstring jCallingPackageName, jstring jFeatureId, jstring jMessage) {
+ jint op, jint uid, jstring jCallingPackageName, jstring jAttributionTag, jstring jMessage) {
AppOpsManager appOpsManager;
const char *nativeCallingPackageName = env->GetStringUTFChars(jCallingPackageName, 0);
String16 callingPackageName(nativeCallingPackageName);
- const char *nativeFeatureId;
- std::unique_ptr<String16> featureId;
- if (jFeatureId != nullptr) {
- nativeFeatureId = env->GetStringUTFChars(jFeatureId, 0);
- featureId = std::unique_ptr<String16>(new String16(nativeFeatureId));
+ const char *nativeAttributionTag;
+ std::unique_ptr<String16> attributionTag;
+ if (jAttributionTag != nullptr) {
+ nativeAttributionTag = env->GetStringUTFChars(jAttributionTag, 0);
+ attributionTag = std::unique_ptr<String16>(new String16(nativeAttributionTag));
}
const char *nativeMessage;
@@ -51,12 +51,12 @@
message = new String16();
}
- appOpsManager.noteOp(op, uid, callingPackageName, featureId, *message);
+ appOpsManager.noteOp(op, uid, callingPackageName, attributionTag, *message);
env->ReleaseStringUTFChars(jCallingPackageName, nativeCallingPackageName);
- if (jFeatureId != nullptr) {
- env->ReleaseStringUTFChars(jFeatureId, nativeFeatureId);
+ if (jAttributionTag != nullptr) {
+ env->ReleaseStringUTFChars(jAttributionTag, nativeAttributionTag);
}
if (jMessage != nullptr) {
diff --git a/tests/tests/appop/src/android/app/appops/cts/AppOpEventCollectionTest.kt b/tests/tests/appop/src/android/app/appops/cts/AppOpEventCollectionTest.kt
index 51bad70..103a4b2 100644
--- a/tests/tests/appop/src/android/app/appops/cts/AppOpEventCollectionTest.kt
+++ b/tests/tests/appop/src/android/app/appops/cts/AppOpEventCollectionTest.kt
@@ -96,36 +96,36 @@
}
@Test
- fun noteWithFeatureAndCheckOpEntries() {
+ fun noteWithAttributionAndCheckOpEntries() {
val before = System.currentTimeMillis()
- appOpsManager.noteOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID, null)
+ appOpsManager.noteOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG, null)
val after = System.currentTimeMillis()
val opEntry = getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!
- val featureOpEntry = opEntry.features[TEST_FEATURE_ID]!!
+ val attributionOpEntry = opEntry.attributedOpEntries[TEST_ATTRIBUTION_TAG]!!
- assertThat(featureOpEntry.getLastAccessForegroundTime(OP_FLAG_SELF)).isIn(before..after)
+ assertThat(attributionOpEntry.getLastAccessForegroundTime(OP_FLAG_SELF)).isIn(before..after)
// Access should should also show up in the combined state for all op-flags
- assertThat(featureOpEntry.getLastAccessForegroundTime(OP_FLAGS_ALL)).isIn(before..after)
+ assertThat(attributionOpEntry.getLastAccessForegroundTime(OP_FLAGS_ALL)).isIn(before..after)
assertThat(opEntry.getLastAccessTime(OP_FLAGS_ALL)).isIn(before..after)
// Foreground access should should also show up in the combined state for fg and bg
- assertThat(featureOpEntry.getLastAccessTime(OP_FLAG_SELF)).isIn(before..after)
+ assertThat(attributionOpEntry.getLastAccessTime(OP_FLAG_SELF)).isIn(before..after)
assertThat(opEntry.getLastAccessTime(OP_FLAG_SELF)).isIn(before..after)
// The access was in foreground, hence there is no background access
- assertThat(featureOpEntry.getLastBackgroundDuration(OP_FLAG_SELF)).isLessThan(before)
+ assertThat(attributionOpEntry.getLastBackgroundDuration(OP_FLAG_SELF)).isLessThan(before)
assertThat(opEntry.getLastBackgroundDuration(OP_FLAG_SELF)).isLessThan(before)
- // The access was for a feature, hence there is no access for the default feature
- if (null in opEntry.features) {
- assertThat(opEntry.features[null]!!.getLastAccessForegroundTime(OP_FLAG_SELF))
- .isLessThan(before)
+ // The access was for a attribution, hence there is no access for the default attribution
+ if (null in opEntry.attributedOpEntries) {
+ assertThat(opEntry.attributedOpEntries[null]!!
+ .getLastAccessForegroundTime(OP_FLAG_SELF)).isLessThan(before)
}
// The access does not show up for other op-flags
- assertThat(featureOpEntry.getLastAccessForegroundTime(
+ assertThat(attributionOpEntry.getLastAccessForegroundTime(
OP_FLAGS_ALL and OP_FLAG_SELF.inv())).isLessThan(before)
assertThat(opEntry.getLastAccessForegroundTime(
OP_FLAGS_ALL and OP_FLAG_SELF.inv())).isLessThan(before)
@@ -149,40 +149,40 @@
val after = System.currentTimeMillis()
val opEntry = getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!
- val featureOpEntry = opEntry.features[null]!!
+ val attributionOpEntry = opEntry.attributedOpEntries[null]!!
- assertThat(featureOpEntry.getLastAccessTime(OP_FLAG_TRUSTED_PROXY))
+ assertThat(attributionOpEntry.getLastAccessTime(OP_FLAG_TRUSTED_PROXY))
.isIn(before..afterTrusted)
- assertThat(featureOpEntry.getLastAccessTime(OP_FLAG_SELF)).isIn(afterTrusted..after)
+ assertThat(attributionOpEntry.getLastAccessTime(OP_FLAG_SELF)).isIn(afterTrusted..after)
assertThat(opEntry.getLastAccessTime(OP_FLAG_TRUSTED_PROXY)).isIn(before..afterTrusted)
assertThat(opEntry.getLastAccessTime(OP_FLAG_SELF)).isIn(afterTrusted..after)
// When asked for any flags, the second access overrides the first
- assertThat(featureOpEntry.getLastAccessTime(OP_FLAGS_ALL)).isIn(afterTrusted..after)
+ assertThat(attributionOpEntry.getLastAccessTime(OP_FLAGS_ALL)).isIn(afterTrusted..after)
assertThat(opEntry.getLastAccessTime(OP_FLAGS_ALL)).isIn(afterTrusted..after)
}
@Test
- fun noteForTwoFeaturesCheckOpEntries() {
+ fun noteForTwoAttributionsCheckOpEntries() {
val before = System.currentTimeMillis()
- appOpsManager.noteOp(OPSTR_WIFI_SCAN, myUid, myPackage, "firstFeature", null)
+ appOpsManager.noteOp(OPSTR_WIFI_SCAN, myUid, myPackage, "firstAttribution", null)
val afterFirst = System.currentTimeMillis()
// Make sure timestamps are distinct
sleep(1)
// self note
- appOpsManager.noteOp(OPSTR_WIFI_SCAN, myUid, myPackage, "secondFeature", null)
+ appOpsManager.noteOp(OPSTR_WIFI_SCAN, myUid, myPackage, "secondAttribution", null)
val after = System.currentTimeMillis()
val opEntry = getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!
- val firstFeatureOpEntry = opEntry.features["firstFeature"]!!
- val secondFeatureOpEntry = opEntry.features["secondFeature"]!!
+ val firstAttributionOpEntry = opEntry.attributedOpEntries["firstAttribution"]!!
+ val secondAttributionOpEntry = opEntry.attributedOpEntries["secondAttribution"]!!
- assertThat(firstFeatureOpEntry.getLastAccessTime(OP_FLAG_SELF)).isIn(before..afterFirst)
- assertThat(secondFeatureOpEntry.getLastAccessTime(OP_FLAG_SELF)).isIn(afterFirst..after)
+ assertThat(firstAttributionOpEntry.getLastAccessTime(OP_FLAG_SELF)).isIn(before..afterFirst)
+ assertThat(secondAttributionOpEntry.getLastAccessTime(OP_FLAG_SELF)).isIn(afterFirst..after)
- // When asked for any feature, the second access overrides the first
+ // When asked for any attribution, the second access overrides the first
assertThat(opEntry.getLastAccessTime(OP_FLAG_SELF)).isIn(afterFirst..after)
}
@@ -198,7 +198,7 @@
// Using the shell identity causes a trusted proxy note
runWithShellPermissionIdentity {
- context.createFeatureContext("firstProxyFeature")
+ context.createAttributionContext("firstProxyAttribution")
.getSystemService(AppOpsManager::class.java)
.noteProxyOp(OPSTR_WIFI_SCAN, otherPkg, otherUid, null, null)
}
@@ -207,35 +207,37 @@
sleep(1)
// untrusted proxy note
- context.createFeatureContext("secondProxyFeature")
+ context.createAttributionContext("secondProxyAttribution")
.getSystemService(AppOpsManager::class.java)
.noteProxyOp(OPSTR_WIFI_SCAN, otherPkg, otherUid, null, null)
val opEntry = getOpEntry(otherUid, otherPkg, OPSTR_WIFI_SCAN)!!
- val featureOpEntry = opEntry.features[null]!!
+ val attributionOpEntry = opEntry.attributedOpEntries[null]!!
- assertThat(featureOpEntry.getLastProxyInfo(OP_FLAG_TRUSTED_PROXIED)?.packageName)
+ assertThat(attributionOpEntry.getLastProxyInfo(OP_FLAG_TRUSTED_PROXIED)?.packageName)
.isEqualTo(myPackage)
assertThat(opEntry.getLastProxyInfo(OP_FLAG_TRUSTED_PROXIED)?.packageName)
.isEqualTo(myPackage)
- assertThat(featureOpEntry.getLastProxyInfo(OP_FLAG_TRUSTED_PROXIED)?.uid).isEqualTo(myUid)
+ assertThat(attributionOpEntry.getLastProxyInfo(OP_FLAG_TRUSTED_PROXIED)?.uid)
+ .isEqualTo(myUid)
assertThat(opEntry.getLastProxyInfo(OP_FLAG_TRUSTED_PROXIED)?.uid).isEqualTo(myUid)
- assertThat(featureOpEntry.getLastProxyInfo(OP_FLAG_UNTRUSTED_PROXIED)?.packageName)
+ assertThat(attributionOpEntry.getLastProxyInfo(OP_FLAG_UNTRUSTED_PROXIED)?.packageName)
.isEqualTo(myPackage)
assertThat(opEntry.getLastProxyInfo(OP_FLAG_UNTRUSTED_PROXIED)?.packageName)
.isEqualTo(myPackage)
- assertThat(featureOpEntry.getLastProxyInfo(OP_FLAG_UNTRUSTED_PROXIED)?.uid).isEqualTo(myUid)
+ assertThat(attributionOpEntry.getLastProxyInfo(OP_FLAG_UNTRUSTED_PROXIED)?.uid)
+ .isEqualTo(myUid)
assertThat(opEntry.getLastProxyInfo(OP_FLAG_UNTRUSTED_PROXIED)?.uid).isEqualTo(myUid)
- assertThat(featureOpEntry.getLastProxyInfo(OP_FLAG_TRUSTED_PROXIED)?.featureId)
- .isEqualTo("firstProxyFeature")
- assertThat(featureOpEntry.getLastProxyInfo(OP_FLAG_UNTRUSTED_PROXIED)?.featureId)
- .isEqualTo("secondProxyFeature")
+ assertThat(attributionOpEntry.getLastProxyInfo(OP_FLAG_TRUSTED_PROXIED)?.attributionTag)
+ .isEqualTo("firstProxyAttribution")
+ assertThat(attributionOpEntry.getLastProxyInfo(OP_FLAG_UNTRUSTED_PROXIED)?.attributionTag)
+ .isEqualTo("secondProxyAttribution")
- // If asked for all op-flags the second feature overrides the first
- assertThat(featureOpEntry.getLastProxyInfo(OP_FLAGS_ALL)?.featureId)
- .isEqualTo("secondProxyFeature")
+ // If asked for all op-flags the second attribution overrides the first
+ assertThat(attributionOpEntry.getLastProxyInfo(OP_FLAGS_ALL)?.attributionTag)
+ .isEqualTo("secondProxyAttribution")
}
@Test
@@ -243,140 +245,141 @@
appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, null, null)
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
- assertThat(features[null]!!.isRunning).isTrue()
- features[TEST_FEATURE_ID]?.let { assertThat(it.isRunning).isFalse() }
+ assertThat(attributedOpEntries[null]!!.isRunning).isTrue()
+ attributedOpEntries[TEST_ATTRIBUTION_TAG]?.let { assertThat(it.isRunning).isFalse() }
assertThat(isRunning).isTrue()
}
- appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID, null)
+ appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG, null)
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
- assertThat(features[null]!!.isRunning).isTrue()
- assertThat(features[TEST_FEATURE_ID]!!.isRunning).isTrue()
+ assertThat(attributedOpEntries[null]!!.isRunning).isTrue()
+ assertThat(attributedOpEntries[TEST_ATTRIBUTION_TAG]!!.isRunning).isTrue()
assertThat(isRunning).isTrue()
}
- appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID, null)
+ appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG, null)
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
- assertThat(features[null]!!.isRunning).isTrue()
- assertThat(features[TEST_FEATURE_ID]!!.isRunning).isTrue()
+ assertThat(attributedOpEntries[null]!!.isRunning).isTrue()
+ assertThat(attributedOpEntries[TEST_ATTRIBUTION_TAG]!!.isRunning).isTrue()
assertThat(isRunning).isTrue()
}
- appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID)
+ appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG)
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
- assertThat(features[null]!!.isRunning).isTrue()
- assertThat(features[TEST_FEATURE_ID]!!.isRunning).isTrue()
+ assertThat(attributedOpEntries[null]!!.isRunning).isTrue()
+ assertThat(attributedOpEntries[TEST_ATTRIBUTION_TAG]!!.isRunning).isTrue()
assertThat(isRunning).isTrue()
}
- appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID)
+ appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG)
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
- assertThat(features[null]!!.isRunning).isTrue()
- assertThat(features[TEST_FEATURE_ID]!!.isRunning).isFalse()
+ assertThat(attributedOpEntries[null]!!.isRunning).isTrue()
+ assertThat(attributedOpEntries[TEST_ATTRIBUTION_TAG]!!.isRunning).isFalse()
assertThat(isRunning).isTrue()
}
appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, null)
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
- assertThat(features[null]!!.isRunning).isFalse()
- assertThat(features[TEST_FEATURE_ID]!!.isRunning).isFalse()
+ assertThat(attributedOpEntries[null]!!.isRunning).isFalse()
+ assertThat(attributedOpEntries[TEST_ATTRIBUTION_TAG]!!.isRunning).isFalse()
assertThat(isRunning).isFalse()
}
}
@Test
fun startStopMultipleOpsAndVerifyLastAccess() {
- val beforeNullFeatureStart = System.currentTimeMillis()
+ val beforeNullAttributionStart = System.currentTimeMillis()
appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, null, null)
- val afterNullFeatureStart = System.currentTimeMillis()
+ val afterNullAttributionStart = System.currentTimeMillis()
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
- assertThat(features[null]!!.getLastAccessTime(OP_FLAGS_ALL))
- .isIn(beforeNullFeatureStart..afterNullFeatureStart)
- features[TEST_FEATURE_ID]?.let {
- assertThat(it.getLastAccessTime(OP_FLAGS_ALL)).isAtMost(beforeNullFeatureStart)
+ assertThat(attributedOpEntries[null]!!.getLastAccessTime(OP_FLAGS_ALL))
+ .isIn(beforeNullAttributionStart..afterNullAttributionStart)
+ attributedOpEntries[TEST_ATTRIBUTION_TAG]?.let {
+ assertThat(it.getLastAccessTime(OP_FLAGS_ALL)).isAtMost(beforeNullAttributionStart)
}
assertThat(getLastAccessTime(OP_FLAGS_ALL))
- .isIn(beforeNullFeatureStart..afterNullFeatureStart)
+ .isIn(beforeNullAttributionStart..afterNullAttributionStart)
}
- val beforeFirstFeatureStart = System.currentTimeMillis()
- appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID, null)
- val afterFirstFeatureStart = System.currentTimeMillis()
+ val beforeFirstAttributionStart = System.currentTimeMillis()
+ appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG, null)
+ val afterFirstAttributionStart = System.currentTimeMillis()
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
- assertThat(features[null]!!.getLastAccessTime(OP_FLAGS_ALL))
- .isIn(beforeNullFeatureStart..afterNullFeatureStart)
- assertThat(features[TEST_FEATURE_ID]!!.getLastAccessTime(OP_FLAGS_ALL))
- .isIn(beforeFirstFeatureStart..afterFirstFeatureStart)
+ assertThat(attributedOpEntries[null]!!.getLastAccessTime(OP_FLAGS_ALL))
+ .isIn(beforeNullAttributionStart..afterNullAttributionStart)
+ assertThat(attributedOpEntries[TEST_ATTRIBUTION_TAG]!!.getLastAccessTime(OP_FLAGS_ALL))
+ .isIn(beforeFirstAttributionStart..afterFirstAttributionStart)
assertThat(getLastAccessTime(OP_FLAGS_ALL))
- .isIn(beforeFirstFeatureStart..afterFirstFeatureStart)
+ .isIn(beforeFirstAttributionStart..afterFirstAttributionStart)
}
- appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID, null)
+ appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG, null)
// Nested startOps do _not_ count as another access
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
- assertThat(features[null]!!.getLastAccessTime(OP_FLAGS_ALL))
- .isIn(beforeNullFeatureStart..afterNullFeatureStart)
- assertThat(features[TEST_FEATURE_ID]!!.getLastAccessTime(OP_FLAGS_ALL))
- .isIn(beforeFirstFeatureStart..afterFirstFeatureStart)
+ assertThat(attributedOpEntries[null]!!.getLastAccessTime(OP_FLAGS_ALL))
+ .isIn(beforeNullAttributionStart..afterNullAttributionStart)
+ assertThat(attributedOpEntries[TEST_ATTRIBUTION_TAG]!!.getLastAccessTime(OP_FLAGS_ALL))
+ .isIn(beforeFirstAttributionStart..afterFirstAttributionStart)
assertThat(getLastAccessTime(OP_FLAGS_ALL))
- .isIn(beforeFirstFeatureStart..afterFirstFeatureStart)
+ .isIn(beforeFirstAttributionStart..afterFirstAttributionStart)
}
- appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID)
- appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID)
+ appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG)
+ appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG)
appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, null)
}
@Test
fun startStopMultipleOpsAndVerifyDuration() {
- val beforeNullFeatureStart = SystemClock.elapsedRealtime()
+ val beforeNullAttributionStart = SystemClock.elapsedRealtime()
appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, null, null)
- val afterNullFeatureStart = SystemClock.elapsedRealtime()
+ val afterNullAttributionStart = SystemClock.elapsedRealtime()
run {
val beforeGetOp = SystemClock.elapsedRealtime()
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
val afterGetOp = SystemClock.elapsedRealtime()
- assertThat(features[null]!!.getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeGetOp - afterNullFeatureStart
- ..afterGetOp - beforeNullFeatureStart)
+ assertThat(attributedOpEntries[null]!!.getLastDuration(OP_FLAGS_ALL))
+ .isIn(beforeGetOp - afterNullAttributionStart
+ ..afterGetOp - beforeNullAttributionStart)
assertThat(getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeGetOp - afterNullFeatureStart
- ..afterGetOp - beforeNullFeatureStart)
+ .isIn(beforeGetOp - afterNullAttributionStart
+ ..afterGetOp - beforeNullAttributionStart)
}
}
- val beforeFeatureStart = SystemClock.elapsedRealtime()
- appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID, null)
- val afterFeatureStart = SystemClock.elapsedRealtime()
+ val beforeAttributionStart = SystemClock.elapsedRealtime()
+ appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG, null)
+ val afterAttributionStart = SystemClock.elapsedRealtime()
run {
val beforeGetOp = SystemClock.elapsedRealtime()
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
val afterGetOp = SystemClock.elapsedRealtime()
- assertThat(features[null]!!.getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeGetOp - afterNullFeatureStart
- ..afterGetOp - beforeNullFeatureStart)
- assertThat(features[TEST_FEATURE_ID]!!.getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeGetOp - afterFeatureStart..afterGetOp - beforeFeatureStart)
+ assertThat(attributedOpEntries[null]!!.getLastDuration(OP_FLAGS_ALL))
+ .isIn(beforeGetOp - afterNullAttributionStart
+ ..afterGetOp - beforeNullAttributionStart)
+ assertThat(attributedOpEntries[TEST_ATTRIBUTION_TAG]!!
+ .getLastDuration(OP_FLAGS_ALL)).isIn(beforeGetOp -
+ afterAttributionStart..afterGetOp - beforeAttributionStart)
- // The last duration is the duration of the last started feature
- assertThat(getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeGetOp - afterFeatureStart..afterGetOp - beforeFeatureStart)
+ // The last duration is the duration of the last started attribution
+ assertThat(getLastDuration(OP_FLAGS_ALL)).isIn(beforeGetOp -
+ afterAttributionStart..afterGetOp - beforeAttributionStart)
}
}
- appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID, null)
+ appOpsManager.startOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG, null)
// Nested startOps do _not_ start another duration counting, hence the nested
// startOp and finishOp calls have no affect
@@ -385,68 +388,72 @@
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
val afterGetOp = SystemClock.elapsedRealtime()
- assertThat(features[null]!!.getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeGetOp - afterNullFeatureStart
- ..afterGetOp - beforeNullFeatureStart)
- assertThat(features[TEST_FEATURE_ID]!!.getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeGetOp - afterFeatureStart..afterGetOp - beforeFeatureStart)
+ assertThat(attributedOpEntries[null]!!.getLastDuration(OP_FLAGS_ALL))
+ .isIn(beforeGetOp - afterNullAttributionStart
+ ..afterGetOp - beforeNullAttributionStart)
+ assertThat(attributedOpEntries[TEST_ATTRIBUTION_TAG]!!
+ .getLastDuration(OP_FLAGS_ALL)).isIn(beforeGetOp -
+ afterAttributionStart..afterGetOp - beforeAttributionStart)
assertThat(getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeGetOp - afterFeatureStart..afterGetOp - beforeFeatureStart)
+ .isIn(beforeGetOp -
+ afterAttributionStart..afterGetOp - beforeAttributionStart)
}
}
- appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID)
+ appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG)
run {
val beforeGetOp = SystemClock.elapsedRealtime()
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
val afterGetOp = SystemClock.elapsedRealtime()
- assertThat(features[null]!!.getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeGetOp - afterNullFeatureStart
- ..afterGetOp - beforeNullFeatureStart)
- assertThat(features[TEST_FEATURE_ID]!!.getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeGetOp - afterFeatureStart..afterGetOp - beforeFeatureStart)
- assertThat(getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeGetOp - afterFeatureStart..afterGetOp - beforeFeatureStart)
+ assertThat(attributedOpEntries[null]!!.getLastDuration(OP_FLAGS_ALL))
+ .isIn(beforeGetOp - afterNullAttributionStart
+ ..afterGetOp - beforeNullAttributionStart)
+ assertThat(attributedOpEntries[TEST_ATTRIBUTION_TAG]!!
+ .getLastDuration(OP_FLAGS_ALL)).isIn(beforeGetOp -
+ afterAttributionStart..afterGetOp - beforeAttributionStart)
+ assertThat(getLastDuration(OP_FLAGS_ALL)).isIn(beforeGetOp -
+ afterAttributionStart..afterGetOp - beforeAttributionStart)
}
}
- val beforeFeatureStop = SystemClock.elapsedRealtime()
- appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_FEATURE_ID)
- val afterFeatureStop = SystemClock.elapsedRealtime()
+ val beforeAttributionStop = SystemClock.elapsedRealtime()
+ appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, TEST_ATTRIBUTION_TAG)
+ val afterAttributionStop = SystemClock.elapsedRealtime()
run {
val beforeGetOp = SystemClock.elapsedRealtime()
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
val afterGetOp = SystemClock.elapsedRealtime()
- assertThat(features[null]!!.getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeGetOp - afterNullFeatureStart
- ..afterGetOp - beforeNullFeatureStart)
- assertThat(features[TEST_FEATURE_ID]!!.getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeFeatureStop - afterFeatureStart
- ..afterFeatureStop - beforeFeatureStart)
+ assertThat(attributedOpEntries[null]!!.getLastDuration(OP_FLAGS_ALL))
+ .isIn(beforeGetOp - afterNullAttributionStart
+ ..afterGetOp - beforeNullAttributionStart)
+ assertThat(attributedOpEntries[TEST_ATTRIBUTION_TAG]!!
+ .getLastDuration(OP_FLAGS_ALL)).isIn(
+ beforeAttributionStop - afterAttributionStart
+ ..afterAttributionStop - beforeAttributionStart)
assertThat(getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeFeatureStop - afterFeatureStart
- ..afterFeatureStop - beforeFeatureStart)
+ .isIn(beforeAttributionStop - afterAttributionStart
+ ..afterAttributionStop - beforeAttributionStart)
}
}
- val beforeNullFeatureStop = SystemClock.elapsedRealtime()
+ val beforeNullAttributionStop = SystemClock.elapsedRealtime()
appOpsManager.finishOp(OPSTR_WIFI_SCAN, myUid, myPackage, null)
- val afterNullFeatureStop = SystemClock.elapsedRealtime()
+ val afterNullAttributionStop = SystemClock.elapsedRealtime()
with(getOpEntry(myUid, myPackage, OPSTR_WIFI_SCAN)!!) {
- assertThat(features[null]!!.getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeNullFeatureStop - afterNullFeatureStart
- ..afterNullFeatureStop - beforeNullFeatureStart)
- assertThat(features[TEST_FEATURE_ID]!!.getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeFeatureStop - afterFeatureStart
- ..afterFeatureStop - beforeFeatureStart)
+ assertThat(attributedOpEntries[null]!!.getLastDuration(OP_FLAGS_ALL))
+ .isIn(beforeNullAttributionStop - afterNullAttributionStart
+ ..afterNullAttributionStop - beforeNullAttributionStart)
+ assertThat(attributedOpEntries[TEST_ATTRIBUTION_TAG]!!.getLastDuration(OP_FLAGS_ALL))
+ .isIn(beforeAttributionStop - afterAttributionStart
+ ..afterAttributionStop - beforeAttributionStart)
assertThat(getLastDuration(OP_FLAGS_ALL))
- .isIn(beforeFeatureStop - afterFeatureStart
- ..afterFeatureStop - beforeFeatureStart)
+ .isIn(beforeAttributionStop - afterAttributionStart
+ ..afterAttributionStop - beforeAttributionStart)
}
}
}
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 2b92c7f..e8db5e2 100644
--- a/tests/tests/appop/src/android/app/appops/cts/AppOpsLoggingTest.kt
+++ b/tests/tests/appop/src/android/app/appops/cts/AppOpsLoggingTest.kt
@@ -78,7 +78,7 @@
op: Int,
uid: Int,
packageName: String,
- featureId: String? = null,
+ attributionTag: String? = null,
message: String? = null
)
@@ -168,15 +168,16 @@
assertThat(noted).isEmpty()
assertThat(asyncNoted).isEmpty()
- assertThat(selfNoted.map { it.first.featureId to it.first.op })
+ assertThat(selfNoted.map { it.first.attributionTag to it.first.op })
.containsExactly(null to OPSTR_COARSE_LOCATION)
}
@Test
- fun selfNoteAndCheckFeature() {
- appOpsManager.noteOpNoThrow(OPSTR_COARSE_LOCATION, myUid, myPackage, TEST_FEATURE_ID, null)
+ fun selfNoteAndCheckAttribution() {
+ appOpsManager.noteOpNoThrow(OPSTR_COARSE_LOCATION, myUid, myPackage, TEST_ATTRIBUTION_TAG,
+ null)
- assertThat(selfNoted.map { it.first.featureId }).containsExactly(TEST_FEATURE_ID)
+ assertThat(selfNoted.map { it.first.attributionTag }).containsExactly(TEST_ATTRIBUTION_TAG)
}
@Test
@@ -188,7 +189,7 @@
// All native notes will be reported as async notes
eventually {
- assertThat(asyncNoted[0].featureId).isEqualTo(null)
+ assertThat(asyncNoted[0].attributionTag).isEqualTo(null)
// There is always a message.
assertThat(asyncNoted[0].message).isNotEqualTo(null)
assertThat(asyncNoted[0].op).isEqualTo(OPSTR_COARSE_LOCATION)
@@ -197,13 +198,13 @@
}
@Test
- fun nativeSelfNoteWithFeatureAndMsgAndCheckLog() {
+ fun nativeSelfNoteWithAttributionAndMsgAndCheckLog() {
nativeNoteOp(strOpToOp(OPSTR_COARSE_LOCATION), myUid, myPackage,
- featureId = TEST_FEATURE_ID, message = "testMsg")
+ attributionTag = TEST_ATTRIBUTION_TAG, message = "testMsg")
// All native notes will be reported as async notes
eventually {
- assertThat(asyncNoted[0].featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(asyncNoted[0].attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(asyncNoted[0].message).isEqualTo("testMsg")
}
}
@@ -232,9 +233,9 @@
}
@Test
- fun noteSyncWithFeatureOpAndCheckLog() {
+ fun noteSyncWithAttributionOpAndCheckLog() {
rethrowThrowableFrom {
- testService.callApiThatNotesSyncOpWithFeatureAndCheckLog(AppOpsUserClient(context))
+ testService.callApiThatNotesSyncOpWithAttributionAndCheckLog(AppOpsUserClient(context))
}
}
@@ -341,9 +342,9 @@
}
@Test
- fun noteAsyncOpWithFeatureAndCheckLog() {
+ fun noteAsyncOpWithAttributionAndCheckLog() {
rethrowThrowableFrom {
- testService.callApiThatNotesAsyncOpWithFeatureAndCheckLog(AppOpsUserClient(context))
+ testService.callApiThatNotesAsyncOpWithAttributionAndCheckLog(AppOpsUserClient(context))
}
}
@@ -381,13 +382,13 @@
*/
@Test
fun getWifiScanResults() {
- val wifiManager = context.createFeatureContext(TEST_FEATURE_ID)
+ val wifiManager = context.createAttributionContext(TEST_ATTRIBUTION_TAG)
.getSystemService(WifiManager::class.java)
val results = wifiManager.scanResults
assertThat(noted[0].first.op).isEqualTo(OPSTR_FINE_LOCATION)
- assertThat(noted[0].first.featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(noted[0].first.attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(noted[0].second.map { it.methodName }).contains("getWifiScanResults")
}
@@ -399,13 +400,13 @@
assumeTrue("Device does not support bluetooth",
context.packageManager.hasSystemFeature(FEATURE_BLUETOOTH))
- val btManager = context.createFeatureContext(TEST_FEATURE_ID)
+ val btManager = context.createAttributionContext(TEST_ATTRIBUTION_TAG)
.getSystemService(BluetoothManager::class.java)
btManager.adapter.startDiscovery()
try {
assertThat(noted[0].first.op).isEqualTo(OPSTR_FINE_LOCATION)
- assertThat(noted[0].first.featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(noted[0].first.attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(noted[0].second.map { it.methodName }).contains("getBTScanResults")
} finally {
btManager.adapter.cancelDiscovery()
@@ -417,7 +418,7 @@
*/
@Test
fun getLastKnownLocation() {
- val locationManager = context.createFeatureContext(TEST_FEATURE_ID)
+ val locationManager = context.createAttributionContext(TEST_ATTRIBUTION_TAG)
.getSystemService(LocationManager::class.java)
assumeTrue("Device does not have a network provider",
@@ -428,7 +429,7 @@
assertThat(noted.map { it.first.op }).containsAnyOf(OPSTR_COARSE_LOCATION,
OPSTR_FINE_LOCATION)
- assertThat(noted[0].first.featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(noted[0].first.attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(noted[0].second.map { it.methodName }).contains("getLastKnownLocation")
}
@@ -437,7 +438,7 @@
*/
@Test
fun getAsyncLocation() {
- val locationManager = context.createFeatureContext(TEST_FEATURE_ID)
+ val locationManager = context.createAttributionContext(TEST_ATTRIBUTION_TAG)
.getSystemService(LocationManager::class.java)
assumeTrue("Device does not have a network provider",
@@ -467,7 +468,7 @@
eventually {
assertThat(asyncNoted.map { it.op }).containsAnyOf(OPSTR_COARSE_LOCATION,
OPSTR_FINE_LOCATION)
- assertThat(asyncNoted[0].featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(asyncNoted[0].attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(asyncNoted[0].message).contains(locationListener::class.java.name)
assertThat(asyncNoted[0].message).contains(
@@ -484,7 +485,7 @@
val gotProximityAlert = CompletableFuture<Unit>()
- val locationManager = context.createFeatureContext(TEST_FEATURE_ID)
+ val locationManager = context.createAttributionContext(TEST_ATTRIBUTION_TAG)
.getSystemService(LocationManager::class.java)!!
val proximityAlertReceiver = object : BroadcastReceiver() {
@@ -511,7 +512,7 @@
eventually {
assertThat(asyncNoted.map { it.op }).contains(OPSTR_FINE_LOCATION)
- assertThat(asyncNoted[0].featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(asyncNoted[0].attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(asyncNoted[0].message).contains(
proximityAlertReceiverPendingIntent::class.java.name)
@@ -532,11 +533,11 @@
*/
@Test
fun readFromContactsProvider() {
- context.createFeatureContext(TEST_FEATURE_ID).contentResolver
+ context.createAttributionContext(TEST_ATTRIBUTION_TAG).contentResolver
.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null)
assertThat(noted.map { it.first.op }).containsExactly(OPSTR_READ_CONTACTS)
- assertThat(noted[0].first.featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(noted[0].first.attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(noted[0].second.map { it.methodName }).contains("readFromContactsProvider")
}
@@ -545,11 +546,11 @@
*/
@Test
fun writeToContactsProvider() {
- context.createFeatureContext(TEST_FEATURE_ID).contentResolver
+ context.createAttributionContext(TEST_ATTRIBUTION_TAG).contentResolver
.insert(ContactsContract.RawContacts.CONTENT_URI, ContentValues())
assertThat(noted.map { it.first.op }).containsExactly(OPSTR_WRITE_CONTACTS)
- assertThat(noted[0].first.featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(noted[0].first.attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(noted[0].second.map { it.methodName }).contains("writeToContactsProvider")
}
@@ -560,13 +561,13 @@
fun getCellInfo() {
assumeTrue(context.packageManager.hasSystemFeature(FEATURE_TELEPHONY))
- val telephonyManager = context.createFeatureContext(TEST_FEATURE_ID)
+ val telephonyManager = context.createAttributionContext(TEST_ATTRIBUTION_TAG)
.getSystemService(TelephonyManager::class.java)
telephonyManager.allCellInfo
assertThat(noted[0].first.op).isEqualTo(OPSTR_FINE_LOCATION)
- assertThat(noted[0].first.featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(noted[0].first.attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(noted[0].second.map { it.methodName }).contains("getCellInfo")
}
@@ -591,7 +592,7 @@
eventually {
assertThat(asyncNoted[0].op).isEqualTo(OPSTR_CAMERA)
- assertThat(asyncNoted[0].featureId).isEqualTo(context.featureId)
+ assertThat(asyncNoted[0].attributionTag).isEqualTo(context.attributionTag)
assertThat(asyncNoted[0].message).contains(cameraManager.cameraIdList[0])
}
}
@@ -600,17 +601,17 @@
* Realistic end-to-end test for opening camera
*/
@Test
- fun openCameraWithFeature() {
- openCamera(context.createFeatureContext(TEST_FEATURE_ID))
+ fun openCameraWithAttribution() {
+ openCamera(context.createAttributionContext(TEST_ATTRIBUTION_TAG))
}
/**
- * Realistic end-to-end test for opening camera. This uses the default (==null) feature. This
- * is interesting as null feature handling is more complex in native code.
+ * Realistic end-to-end test for opening camera. This uses the default (==null) attribution.
+ * This is interesting as null attribution handling is more complex in native code.
*/
@Test
- fun openCameraWithDefaultFeature() {
- openCamera(context.createFeatureContext(null))
+ fun openCameraWithDefaultAttribution() {
+ openCamera(context.createAttributionContext(null))
}
/**
@@ -620,13 +621,13 @@
fun getMultiSimSupport() {
assumeTrue(context.packageManager.hasSystemFeature(FEATURE_TELEPHONY))
- val telephonyManager = context.createFeatureContext(TEST_FEATURE_ID)
+ val telephonyManager = context.createAttributionContext(TEST_ATTRIBUTION_TAG)
.getSystemService(TelephonyManager::class.java)
telephonyManager.isMultiSimSupported
assertThat(noted[0].first.op).isEqualTo(OPSTR_READ_PHONE_STATE)
- assertThat(noted[0].first.featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(noted[0].first.attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(noted[0].second.map { it.methodName }).contains("getMultiSimSupport")
}
@@ -635,13 +636,13 @@
*/
@Test
fun getWallpaper() {
- val wallpaperManager = context.createFeatureContext(TEST_FEATURE_ID)
+ val wallpaperManager = context.createAttributionContext(TEST_ATTRIBUTION_TAG)
.getSystemService(WallpaperManager::class.java)
wallpaperManager.getWallpaperFile(FLAG_SYSTEM)
assertThat(noted[0].first.op).isEqualTo(OPSTR_READ_EXTERNAL_STORAGE)
- assertThat(noted[0].first.featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(noted[0].first.attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(noted[0].second.map { it.methodName }).contains("getWallpaper")
}
@@ -650,13 +651,13 @@
*/
@Test
fun isInCall() {
- val telecomManager = context.createFeatureContext(TEST_FEATURE_ID)
+ val telecomManager = context.createAttributionContext(TEST_ATTRIBUTION_TAG)
.getSystemService(TelecomManager::class.java)
telecomManager.isInCall()
assertThat(noted[0].first.op).isEqualTo(OPSTR_READ_PHONE_STATE)
- assertThat(noted[0].first.featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(noted[0].first.attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(noted[0].second.map { it.methodName }).contains("isInCall")
}
@@ -665,13 +666,13 @@
*/
@Test
fun startActivity() {
- context.createFeatureContext(TEST_FEATURE_ID).startActivity(
+ context.createAttributionContext(TEST_ATTRIBUTION_TAG).startActivity(
Intent().setComponent(ComponentName(TEST_SERVICE_PKG,
TEST_SERVICE_PKG + ".AutoClosingActivity"))
.setFlags(FLAG_ACTIVITY_NEW_TASK))
assertThat(noted[0].first.op).isEqualTo(OPSTR_FINE_LOCATION)
- assertThat(noted[0].first.featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(noted[0].first.attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(noted[0].second.map { it.methodName }).contains("startActivity")
}
@@ -706,10 +707,10 @@
}
}
- override fun noteSyncOpWithFeature(featureId: String) {
+ override fun noteSyncOpWithAttribution(attributionTag: String) {
runWithShellPermissionIdentity {
appOpsManager.noteOpNoThrow(OPSTR_COARSE_LOCATION, getCallingUid(),
- TEST_SERVICE_PKG, featureId, null)
+ TEST_SERVICE_PKG, attributionTag, null)
}
}
@@ -789,13 +790,13 @@
}
}
- override fun noteAsyncOpWithFeature(featureId: String) {
+ override fun noteAsyncOpWithAttribution(attributionTag: String) {
val callingUid = getCallingUid()
handler.post {
runWithShellPermissionIdentity {
appOpsManager.noteOpNoThrow(OPSTR_COARSE_LOCATION, callingUid, TEST_SERVICE_PKG,
- featureId, null)
+ attributionTag, null)
}
}
}
diff --git a/tests/tests/appop/src/android/app/appops/cts/AppOpsTest.kt b/tests/tests/appop/src/android/app/appops/cts/AppOpsTest.kt
index f9f8d47..3b4dda1 100644
--- a/tests/tests/appop/src/android/app/appops/cts/AppOpsTest.kt
+++ b/tests/tests/appop/src/android/app/appops/cts/AppOpsTest.kt
@@ -228,7 +228,7 @@
}
@Test
- fun overlappingActiveFeatureOps() {
+ fun overlappingActiveAttributionOps() {
runWithShellPermissionIdentity {
val gotActive = CompletableFuture<Unit>()
val gotInActive = CompletableFuture<Unit>()
@@ -249,17 +249,17 @@
mAppOps.startWatchingActive(arrayOf(OPSTR_WRITE_CALENDAR), Executor { it.run() },
activeWatcher)
try {
- mAppOps.startOp(OPSTR_WRITE_CALENDAR, mMyUid, mOpPackageName, "feature1", null)
+ mAppOps.startOp(OPSTR_WRITE_CALENDAR, mMyUid, mOpPackageName, "attribution1", null)
assertTrue(mAppOps.isOpActive(OPSTR_WRITE_CALENDAR, mMyUid, mOpPackageName))
gotActive.get(TIMEOUT_MS, TimeUnit.MILLISECONDS)
mAppOps.startOp(OPSTR_WRITE_CALENDAR, Process.myUid(), mOpPackageName,
- "feature2", null)
+ "attribution2", null)
assertTrue(mAppOps.isOpActive(OPSTR_WRITE_CALENDAR, mMyUid, mOpPackageName))
assertFalse(gotInActive.isDone)
mAppOps.finishOp(OPSTR_WRITE_CALENDAR, Process.myUid(), mOpPackageName,
- "feature1")
+ "attribution1")
// Allow some time for premature "watchingActive" callbacks to arrive
Thread.sleep(500)
@@ -268,7 +268,7 @@
assertFalse(gotInActive.isDone)
mAppOps.finishOp(OPSTR_WRITE_CALENDAR, Process.myUid(), mOpPackageName,
- "feature2")
+ "attribution2")
assertFalse(mAppOps.isOpActive(OPSTR_WRITE_CALENDAR, mMyUid, mOpPackageName))
gotInActive.get(TIMEOUT_MS, TimeUnit.MILLISECONDS)
} finally {
diff --git a/tests/tests/appop/src/android/app/appops/cts/AttributionTest.kt b/tests/tests/appop/src/android/app/appops/cts/AttributionTest.kt
new file mode 100644
index 0000000..0bdf312
--- /dev/null
+++ b/tests/tests/appop/src/android/app/appops/cts/AttributionTest.kt
@@ -0,0 +1,138 @@
+/*
+ * 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.app.appops.cts
+
+import android.app.AppOpsManager
+import android.app.AppOpsManager.OPSTR_WIFI_SCAN
+import android.app.AppOpsManager.OP_FLAGS_ALL
+import android.platform.test.annotations.AppModeFull
+import androidx.test.platform.app.InstrumentationRegistry
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import java.lang.AssertionError
+import java.lang.Thread.sleep
+
+private const val APK_PATH = "/data/local/tmp/cts/appops/"
+
+private const val APP_PKG = "android.app.appops.cts.apptoblame"
+
+private const val ATTRIBUTION_1 = "attribution1"
+private const val ATTRIBUTION_2 = "attribution2"
+private const val ATTRIBUTION_3 = "attribution3"
+private const val ATTRIBUTION_4 = "attribution4"
+private const val ATTRIBUTION_5 = "attribution5"
+private const val ATTRIBUTION_6 = "attribution6"
+private const val ATTRIBUTION_7 = "attribution7"
+
+@AppModeFull(reason = "Test relies on seeing other apps. Instant apps can't see other apps")
+class AttributionTest {
+ private val instrumentation = InstrumentationRegistry.getInstrumentation()
+ private val context = instrumentation.targetContext
+ private val appOpsManager = context.getSystemService(AppOpsManager::class.java)
+ private val appUid by lazy { context.packageManager.getPackageUid(APP_PKG, 0) }
+
+ private fun installApk(apk: String) {
+ val result = runCommand("pm install -r --force-queryable $APK_PATH$apk")
+ assertThat(result.trim()).isEqualTo("Success")
+ }
+
+ @Before
+ fun resetTestApp() {
+ runCommand("pm uninstall $APP_PKG")
+ installApk("CtsAppToBlame1.apk")
+ }
+
+ private fun noteForAttribution(attribution: String) {
+ // Make sure note times as distinct
+ sleep(1)
+
+ runWithShellPermissionIdentity {
+ appOpsManager.noteOpNoThrow(OPSTR_WIFI_SCAN, appUid, APP_PKG, attribution, null)
+ }
+ }
+
+ @Test
+ fun inheritNotedAppOpsOnUpgrade() {
+ noteForAttribution(ATTRIBUTION_1)
+ noteForAttribution(ATTRIBUTION_2)
+ noteForAttribution(ATTRIBUTION_3)
+ noteForAttribution(ATTRIBUTION_4)
+ noteForAttribution(ATTRIBUTION_5)
+
+ val beforeUpdate = getOpEntry(appUid, APP_PKG, OPSTR_WIFI_SCAN)!!
+ installApk("CtsAppToBlame2.apk")
+
+ eventually {
+ val afterUpdate = getOpEntry(appUid, APP_PKG, OPSTR_WIFI_SCAN)!!
+
+ // Attribution 1 is unchanged
+ assertThat(afterUpdate.attributedOpEntries[ATTRIBUTION_1]!!
+ .getLastAccessTime(OP_FLAGS_ALL))
+ .isEqualTo(beforeUpdate.attributedOpEntries[ATTRIBUTION_1]!!
+ .getLastAccessTime(OP_FLAGS_ALL))
+
+ // Attribution 3 disappeared (i.e. was added into "null" attribution)
+ assertThat(afterUpdate.attributedOpEntries[null]!!.getLastAccessTime(OP_FLAGS_ALL))
+ .isEqualTo(beforeUpdate.attributedOpEntries[ATTRIBUTION_3]!!
+ .getLastAccessTime(OP_FLAGS_ALL))
+
+ // Attribution 6 inherits from attribution 2
+ assertThat(afterUpdate.attributedOpEntries[ATTRIBUTION_6]!!
+ .getLastAccessTime(OP_FLAGS_ALL))
+ .isEqualTo(beforeUpdate.attributedOpEntries[ATTRIBUTION_2]!!
+ .getLastAccessTime(OP_FLAGS_ALL))
+
+ // Attribution 7 inherits from attribution 4 and 5. 5 was noted after 4, hence 4 is
+ // removed
+ assertThat(afterUpdate.attributedOpEntries[ATTRIBUTION_7]!!
+ .getLastAccessTime(OP_FLAGS_ALL))
+ .isEqualTo(beforeUpdate.attributedOpEntries[ATTRIBUTION_5]!!
+ .getLastAccessTime(OP_FLAGS_ALL))
+ }
+ }
+
+ @Test(expected = AssertionError::class)
+ fun cannotInheritFromSelf() {
+ installApk("AppWithAttributionInheritingFromSelf.apk")
+ }
+
+ @Test(expected = AssertionError::class)
+ fun noDuplicateAttributions() {
+ installApk("AppWithDuplicateAttribution.apk")
+ }
+
+ @Test(expected = AssertionError::class)
+ fun cannotInheritFromExisting() {
+ installApk("AppWithAttributionInheritingFromExisting.apk")
+ }
+
+ @Test(expected = AssertionError::class)
+ fun cannotInheritFromSameAsOther() {
+ installApk("AppWithAttributionInheritingFromSameAsOther.apk")
+ }
+
+ @Test(expected = AssertionError::class)
+ fun cannotUseVeryLongAttributionTags() {
+ installApk("AppWithLongAttributionTag.apk")
+ }
+
+ @Test(expected = AssertionError::class)
+ fun cannotUseTooManyAttributions() {
+ installApk("AppWithTooManyAttributions.apk")
+ }
+}
\ No newline at end of file
diff --git a/tests/tests/appop/src/android/app/appops/cts/FeatureTest.kt b/tests/tests/appop/src/android/app/appops/cts/FeatureTest.kt
deleted file mode 100644
index d199055..0000000
--- a/tests/tests/appop/src/android/app/appops/cts/FeatureTest.kt
+++ /dev/null
@@ -1,130 +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.app.appops.cts
-
-import android.app.AppOpsManager
-import android.app.AppOpsManager.OPSTR_WIFI_SCAN
-import android.app.AppOpsManager.OP_FLAGS_ALL
-import android.platform.test.annotations.AppModeFull
-import androidx.test.platform.app.InstrumentationRegistry
-import com.google.common.truth.Truth.assertThat
-import org.junit.Before
-import org.junit.Test
-import java.lang.AssertionError
-import java.lang.Thread.sleep
-
-private const val APK_PATH = "/data/local/tmp/cts/appops/"
-
-private const val APP_PKG = "android.app.appops.cts.apptoblame"
-
-private const val FEATURE_1 = "feature1"
-private const val FEATURE_2 = "feature2"
-private const val FEATURE_3 = "feature3"
-private const val FEATURE_4 = "feature4"
-private const val FEATURE_5 = "feature5"
-private const val FEATURE_6 = "feature6"
-private const val FEATURE_7 = "feature7"
-
-@AppModeFull(reason = "Test relies on seeing other apps. Instant apps can't see other apps")
-class FeatureTest {
- private val instrumentation = InstrumentationRegistry.getInstrumentation()
- private val context = instrumentation.targetContext
- private val appOpsManager = context.getSystemService(AppOpsManager::class.java)
- private val appUid by lazy { context.packageManager.getPackageUid(APP_PKG, 0) }
-
- private fun installApk(apk: String) {
- val result = runCommand("pm install -r --force-queryable $APK_PATH$apk")
- assertThat(result.trim()).isEqualTo("Success")
- }
-
- @Before
- fun resetTestApp() {
- runCommand("pm uninstall $APP_PKG")
- installApk("CtsAppToBlame1.apk")
- }
-
- private fun noteForFeature(feature: String) {
- // Make sure note times as distinct
- sleep(1)
-
- runWithShellPermissionIdentity {
- appOpsManager.noteOpNoThrow(OPSTR_WIFI_SCAN, appUid, APP_PKG, feature, null)
- }
- }
-
- @Test
- fun inheritNotedAppOpsOnUpgrade() {
- noteForFeature(FEATURE_1)
- noteForFeature(FEATURE_2)
- noteForFeature(FEATURE_3)
- noteForFeature(FEATURE_4)
- noteForFeature(FEATURE_5)
-
- val beforeUpdate = getOpEntry(appUid, APP_PKG, OPSTR_WIFI_SCAN)!!
- installApk("CtsAppToBlame2.apk")
-
- eventually {
- val afterUpdate = getOpEntry(appUid, APP_PKG, OPSTR_WIFI_SCAN)!!
-
- // Feature 1 is unchanged
- assertThat(afterUpdate.features[FEATURE_1]!!.getLastAccessTime(OP_FLAGS_ALL))
- .isEqualTo(beforeUpdate.features[FEATURE_1]!!.getLastAccessTime(OP_FLAGS_ALL))
-
- // Feature 3 disappeared (i.e. was added into "null" feature)
- assertThat(afterUpdate.features[null]!!.getLastAccessTime(OP_FLAGS_ALL))
- .isEqualTo(beforeUpdate.features[FEATURE_3]!!.getLastAccessTime(OP_FLAGS_ALL))
-
- // Feature 6 inherits from feature 2
- assertThat(afterUpdate.features[FEATURE_6]!!.getLastAccessTime(OP_FLAGS_ALL))
- .isEqualTo(beforeUpdate.features[FEATURE_2]!!.getLastAccessTime(OP_FLAGS_ALL))
-
- // Feature 7 inherits from feature 4 and 5. 5 was noted after 4, hence 4 is removed
- assertThat(afterUpdate.features[FEATURE_7]!!.getLastAccessTime(OP_FLAGS_ALL))
- .isEqualTo(beforeUpdate.features[FEATURE_5]!!.getLastAccessTime(OP_FLAGS_ALL))
- }
- }
-
- @Test(expected = AssertionError::class)
- fun cannotInheritFromSelf() {
- installApk("AppWithFeatureInheritingFromSelf.apk")
- }
-
- @Test(expected = AssertionError::class)
- fun noDuplicateFeatures() {
- installApk("AppWithDuplicateFeature.apk")
- }
-
- @Test(expected = AssertionError::class)
- fun cannotInheritFromExisting() {
- installApk("AppWithFeatureInheritingFromExisting.apk")
- }
-
- @Test(expected = AssertionError::class)
- fun cannotInheritFromSameAsOther() {
- installApk("AppWithFeatureInheritingFromSameAsOther.apk")
- }
-
- @Test(expected = AssertionError::class)
- fun cannotUseVeryLongFeatureIDs() {
- installApk("AppWithLongFeatureIdFeature.apk")
- }
-
- @Test(expected = AssertionError::class)
- fun cannotUseTooManyFeatures() {
- installApk("AppWithTooManyFeatures.apk")
- }
-}
\ No newline at end of file
diff --git a/tests/tests/appop/src/android/app/appops/cts/HistoricalAppopsTest.kt b/tests/tests/appop/src/android/app/appops/cts/HistoricalAppopsTest.kt
index 28ebc26..eaef444 100644
--- a/tests/tests/appop/src/android/app/appops/cts/HistoricalAppopsTest.kt
+++ b/tests/tests/appop/src/android/app/appops/cts/HistoricalAppopsTest.kt
@@ -201,7 +201,7 @@
}
@Test
- fun testGetHistoricalAggregationOverFeatures() {
+ fun testGetHistoricalAggregationOverAttributions() {
// Configure historical registry behavior.
appOpsManager.setHistoryParameters(
AppOpsManager.HISTORICAL_MODE_ENABLED_ACTIVE,
@@ -212,17 +212,19 @@
UidStateForceActivity.waitForResumed()
- appOpsManager.noteOp(OPSTR_REQUEST_DELETE_PACKAGES, uid, packageName, "firstFeature", null)
- appOpsManager.noteOp(OPSTR_REQUEST_DELETE_PACKAGES, uid, packageName, "secondFeature", null)
+ appOpsManager.noteOp(OPSTR_REQUEST_DELETE_PACKAGES, uid, packageName, "firstAttribution",
+ null)
+ appOpsManager.noteOp(OPSTR_REQUEST_DELETE_PACKAGES, uid, packageName, "secondAttribution",
+ null)
val memOps = getHistoricalOps(appOpsManager, uid = uid)!!
assertThat(memOps.getUidOpsAt(0).getPackageOpsAt(0).getOp(OPSTR_REQUEST_DELETE_PACKAGES)!!
.getForegroundAccessCount(OP_FLAGS_ALL)).isEqualTo(2)
- assertThat(memOps.getUidOpsAt(0).getPackageOpsAt(0).getFeatureOps("firstFeature")!!
+ assertThat(memOps.getUidOpsAt(0).getPackageOpsAt(0).getAttributedOps("firstAttribution")!!
.getOp(OPSTR_REQUEST_DELETE_PACKAGES)!!.getForegroundAccessCount(OP_FLAGS_ALL))
.isEqualTo(1)
- assertThat(memOps.getUidOpsAt(0).getPackageOpsAt(0).getFeatureOps("secondFeature")!!
+ assertThat(memOps.getUidOpsAt(0).getPackageOpsAt(0).getAttributedOps("secondAttribution")!!
.getOp(OPSTR_REQUEST_DELETE_PACKAGES)!!.getForegroundAccessCount(OP_FLAGS_ALL))
.isEqualTo(1)
diff --git a/tests/tests/appop/src/android/app/appops/cts/RuntimeMessageCollectionTest.kt b/tests/tests/appop/src/android/app/appops/cts/RuntimeMessageCollectionTest.kt
index e6730c1..d5e8748 100644
--- a/tests/tests/appop/src/android/app/appops/cts/RuntimeMessageCollectionTest.kt
+++ b/tests/tests/appop/src/android/app/appops/cts/RuntimeMessageCollectionTest.kt
@@ -58,7 +58,7 @@
val start = System.currentTimeMillis()
runWithShellPermissionIdentity {
appOpsManager.noteOp(AppOpsManager.OPSTR_READ_CONTACTS, appUid, APP_PKG,
- TEST_FEATURE_ID, MESSAGE)
+ TEST_ATTRIBUTION_TAG, MESSAGE)
}
while (System.currentTimeMillis() - start < TIMEOUT_MILLIS) {
sleep(200)
@@ -68,7 +68,7 @@
if (message != null && message.packageName.equals(APP_PKG)) {
assertThat(message.op).isEqualTo(AppOpsManager.OPSTR_READ_CONTACTS)
assertThat(message.uid).isEqualTo(appUid)
- assertThat(message.featureId).isEqualTo(TEST_FEATURE_ID)
+ assertThat(message.attributionTag).isEqualTo(TEST_ATTRIBUTION_TAG)
assertThat(message.message).isEqualTo(MESSAGE)
assertThat(message.samplingStrategy)
.isEqualTo(RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__RARELY_USED)
diff --git a/tests/tests/content/src/android/content/cts/ContextTest.java b/tests/tests/content/src/android/content/cts/ContextTest.java
index 5a41584..f6f7cf5 100644
--- a/tests/tests/content/src/android/content/cts/ContextTest.java
+++ b/tests/tests/content/src/android/content/cts/ContextTest.java
@@ -1414,6 +1414,64 @@
}.run();
}
+ /** The receiver should get the broadcast if it has all the permissions. */
+ public void testSendBroadcastWithMultiplePermissions_receiverHasAllPermissions()
+ throws Exception {
+ final ResultReceiver receiver = new ResultReceiver();
+
+ registerBroadcastReceiver(receiver, new IntentFilter(ResultReceiver.MOCK_ACTION));
+
+ mContext.sendBroadcastWithMultiplePermissions(
+ new Intent(ResultReceiver.MOCK_ACTION),
+ new String[] { // this test APK has both these permissions
+ android.Manifest.permission.ACCESS_WIFI_STATE,
+ android.Manifest.permission.ACCESS_NETWORK_STATE,
+ });
+
+ new PollingCheck(BROADCAST_TIMEOUT) {
+ @Override
+ protected boolean check() {
+ return receiver.hasReceivedBroadCast();
+ }
+ }.run();
+ }
+
+ /** The receiver should not get the broadcast if it does not have all the permissions. */
+ public void testSendBroadcastWithMultiplePermissions_receiverHasSomePermissions()
+ throws Exception {
+ final ResultReceiver receiver = new ResultReceiver();
+
+ registerBroadcastReceiver(receiver, new IntentFilter(ResultReceiver.MOCK_ACTION));
+
+ mContext.sendBroadcastWithMultiplePermissions(
+ new Intent(ResultReceiver.MOCK_ACTION),
+ new String[] { // this test APK only has ACCESS_WIFI_STATE
+ android.Manifest.permission.ACCESS_WIFI_STATE,
+ android.Manifest.permission.NETWORK_STACK,
+ });
+
+ Thread.sleep(BROADCAST_TIMEOUT);
+ assertFalse(receiver.hasReceivedBroadCast());
+ }
+
+ /** The receiver should not get the broadcast if it has none of the permissions. */
+ public void testSendBroadcastWithMultiplePermissions_receiverHasNoPermissions()
+ throws Exception {
+ final ResultReceiver receiver = new ResultReceiver();
+
+ registerBroadcastReceiver(receiver, new IntentFilter(ResultReceiver.MOCK_ACTION));
+
+ mContext.sendBroadcastWithMultiplePermissions(
+ new Intent(ResultReceiver.MOCK_ACTION),
+ new String[] { // this test APK has neither of these permissions
+ android.Manifest.permission.NETWORK_SETTINGS,
+ android.Manifest.permission.NETWORK_STACK,
+ });
+
+ Thread.sleep(BROADCAST_TIMEOUT);
+ assertFalse(receiver.hasReceivedBroadCast());
+ }
+
public void testEnforceCallingOrSelfUriPermission() {
try {
Uri uri = Uri.parse("content://ctstest");
diff --git a/tests/tests/keystore/src/android/keystore/cts/KeyAttestationTest.java b/tests/tests/keystore/src/android/keystore/cts/KeyAttestationTest.java
index 46592ca..5cb08a1 100644
--- a/tests/tests/keystore/src/android/keystore/cts/KeyAttestationTest.java
+++ b/tests/tests/keystore/src/android/keystore/cts/KeyAttestationTest.java
@@ -53,6 +53,7 @@
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
import static org.hamcrest.Matchers.hasItems;
+import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Build;
import android.os.SystemProperties;
@@ -164,6 +165,10 @@
KM_PURPOSE_SIGN, KM_PURPOSE_VERIFY, KM_PURPOSE_SIGN | KM_PURPOSE_VERIFY
};
+ // Skip the test if there is no secure lock screen
+ if (!hasSecureLockScreen()) {
+ return;
+ }
for (int curveIndex = 0; curveIndex < curves.length; ++curveIndex) {
for (int challengeIndex = 0; challengeIndex < challenges.length; ++challengeIndex) {
for (int purposeIndex = 0; purposeIndex < purposes.length; ++purposeIndex) {
@@ -326,6 +331,10 @@
},
};
+ // Skip the test if there is no secure lock screen
+ if (!hasSecureLockScreen()) {
+ return;
+ }
for (int keySize : keySizes) {
for (byte[] challenge : challenges) {
for (int purpose : purposes) {
@@ -1145,4 +1154,15 @@
}
}
}
+ /*
+ * Device that don't report android.software.device_admin doesn't have secure lock screen
+ * because device with secure lock screen MUST report android.software.device_admin .
+ *
+ * https://source.android.com/compatibility/7.0/android-7.0-cdd.html#3_9_device_administration
+ *
+ */
+ private boolean hasSecureLockScreen() {
+ PackageManager pm = getContext().getPackageManager();
+ return pm.hasSystemFeature(PackageManager.FEATURE_DEVICE_ADMIN);
+ }
}
diff --git a/tests/tests/net/ipsec/OWNERS b/tests/tests/net/ipsec/OWNERS
new file mode 100644
index 0000000..26407ff
--- /dev/null
+++ b/tests/tests/net/ipsec/OWNERS
@@ -0,0 +1,3 @@
+lorenzo@google.com
+nharold@google.com
+satk@google.com
diff --git a/tests/tests/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/tests/net/src/android/net/wifi/cts/WifiManagerTest.java
index f4c20e3..870cf72 100644
--- a/tests/tests/net/src/android/net/wifi/cts/WifiManagerTest.java
+++ b/tests/tests/net/src/android/net/wifi/cts/WifiManagerTest.java
@@ -66,6 +66,7 @@
import com.android.compatibility.common.util.PollingCheck;
import com.android.compatibility.common.util.ShellIdentityUtils;
import com.android.compatibility.common.util.SystemUtil;
+import com.android.compatibility.common.util.ThrowingRunnable;
import java.io.BufferedReader;
import java.io.IOException;
@@ -76,6 +77,7 @@
import java.util.List;
import java.util.Locale;
import java.util.Objects;
+import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@@ -1067,6 +1069,23 @@
}
}
+ private void runWithScanningEnabled(ThrowingRunnable r) throws Exception {
+ boolean wasScanEnabledForTest = false;
+ if (!mWifiManager.isScanAlwaysAvailable()) {
+ ShellIdentityUtils.invokeWithShellPermissions(
+ () -> mWifiManager.setScanAlwaysAvailable(true));
+ wasScanEnabledForTest = true;
+ }
+ try {
+ r.run();
+ } finally {
+ if (wasScanEnabledForTest) {
+ ShellIdentityUtils.invokeWithShellPermissions(
+ () -> mWifiManager.setScanAlwaysAvailable(false));
+ }
+ }
+ }
+
/**
* Verify that Wi-Fi scanning is not turned off when the screen turns off while wifi is disabled
* but location is on.
@@ -1085,17 +1104,16 @@
fail("Please enable location for this test - since Marshmallow WiFi scan results are"
+ " empty when location is disabled!");
}
- if(!mWifiManager.isScanAlwaysAvailable()) {
- fail("Please enable Wi-Fi scanning for this test!");
- }
- setWifiEnabled(false);
- turnScreenOn();
- assertWifiScanningIsOn();
- // Toggle screen and verify Wi-Fi scanning is still on.
- turnScreenOff();
- assertWifiScanningIsOn();
- turnScreenOn();
- assertWifiScanningIsOn();
+ runWithScanningEnabled(() -> {
+ setWifiEnabled(false);
+ turnScreenOn();
+ assertWifiScanningIsOn();
+ // Toggle screen and verify Wi-Fi scanning is still on.
+ turnScreenOff();
+ assertWifiScanningIsOn();
+ turnScreenOn();
+ assertWifiScanningIsOn();
+ });
}
/**
@@ -1115,17 +1133,16 @@
fail("Please enable location for this test - since Marshmallow WiFi scan results are"
+ " empty when location is disabled!");
}
- if(!mWifiManager.isScanAlwaysAvailable()) {
- fail("Please enable Wi-Fi scanning for this test!");
- }
- setWifiEnabled(true);
- turnScreenOn();
- assertWifiScanningIsOn();
- // Toggle screen and verify Wi-Fi scanning is still on.
- turnScreenOff();
- assertWifiScanningIsOn();
- turnScreenOn();
- assertWifiScanningIsOn();
+ runWithScanningEnabled(() -> {
+ setWifiEnabled(true);
+ turnScreenOn();
+ assertWifiScanningIsOn();
+ // Toggle screen and verify Wi-Fi scanning is still on.
+ turnScreenOff();
+ assertWifiScanningIsOn();
+ turnScreenOn();
+ assertWifiScanningIsOn();
+ });
}
/**
diff --git a/tests/tests/net/src/android/net/wifi/p2p/cts/WifiP2pDeviceTest.java b/tests/tests/net/src/android/net/wifi/p2p/cts/WifiP2pDeviceTest.java
new file mode 100644
index 0000000..1510d7c
--- /dev/null
+++ b/tests/tests/net/src/android/net/wifi/p2p/cts/WifiP2pDeviceTest.java
@@ -0,0 +1,38 @@
+/*
+ * 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.net.wifi.p2p.cts;
+
+import android.net.InetAddresses;
+import android.net.wifi.p2p.WifiP2pDevice;
+import android.test.AndroidTestCase;
+
+public class WifiP2pDeviceTest extends AndroidTestCase {
+
+ public void testDefaultWpsMethodSupportCheck() {
+ WifiP2pDevice dev = new WifiP2pDevice();
+
+ assertFalse(dev.wpsPbcSupported());
+ assertFalse(dev.wpsDisplaySupported());
+ assertFalse(dev.wpsKeypadSupported());
+ }
+
+ public void testDefaultDeviceCapabilityCheck() {
+ WifiP2pDevice dev = new WifiP2pDevice();
+
+ assertFalse(dev.isServiceDiscoveryCapable());
+ }
+}
diff --git a/tests/tests/net/src/android/net/wifi/p2p/cts/WifiP2pServiceRequestTest.java b/tests/tests/net/src/android/net/wifi/p2p/cts/WifiP2pServiceRequestTest.java
new file mode 100644
index 0000000..b363b1e
--- /dev/null
+++ b/tests/tests/net/src/android/net/wifi/p2p/cts/WifiP2pServiceRequestTest.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.net.wifi.p2p.cts;
+
+import android.net.wifi.p2p.nsd.WifiP2pServiceInfo;
+import android.net.wifi.p2p.nsd.WifiP2pServiceRequest;
+import android.net.wifi.p2p.nsd.WifiP2pUpnpServiceRequest;
+import android.test.AndroidTestCase;
+import android.util.Log;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.stream.Collectors;
+
+public class WifiP2pServiceRequestTest extends AndroidTestCase {
+
+ private final int TEST_UPNP_VERSION = 0x10;
+ private final String TEST_UPNP_QUERY = "ssdp:all";
+
+ private String bin2HexStr(byte[] data) {
+ StringBuffer sb = new StringBuffer();
+ for (byte b: data) {
+ sb.append(String.format(Locale.US, "%02x", b & 0xff));
+ }
+ return sb.toString();
+ }
+
+ public void testValidRawRequest() throws IllegalArgumentException {
+ StringBuffer sb = new StringBuffer();
+ sb.append(String.format(Locale.US, "%02x", TEST_UPNP_VERSION));
+ sb.append(bin2HexStr(TEST_UPNP_QUERY.getBytes()));
+
+ WifiP2pServiceRequest rawRequest =
+ WifiP2pServiceRequest.newInstance(
+ WifiP2pServiceInfo.SERVICE_TYPE_UPNP,
+ sb.toString());
+
+ WifiP2pUpnpServiceRequest upnpRequest =
+ WifiP2pUpnpServiceRequest.newInstance(
+ TEST_UPNP_QUERY);
+
+ assertEquals(rawRequest, upnpRequest);
+ }
+
+ public void testInvalidRawRequest() {
+ StringBuffer sb = new StringBuffer();
+ sb.append(String.format(Locale.US, "%02x", TEST_UPNP_VERSION));
+ sb.append(bin2HexStr(TEST_UPNP_QUERY.getBytes()));
+ sb.append("x");
+
+ try {
+ WifiP2pServiceRequest request =
+ WifiP2pServiceRequest.newInstance(
+ WifiP2pServiceInfo.SERVICE_TYPE_UPNP, sb.toString());
+ fail("Expected IllegalArgumentException");
+ } catch (IllegalArgumentException ex) {
+ return;
+ }
+ }
+}
diff --git a/tests/tests/security/src/android/security/cts/ActivityManagerTest.java b/tests/tests/security/src/android/security/cts/ActivityManagerTest.java
index 5a035dd..47730e1 100644
--- a/tests/tests/security/src/android/security/cts/ActivityManagerTest.java
+++ b/tests/tests/security/src/android/security/cts/ActivityManagerTest.java
@@ -15,11 +15,15 @@
*/
package android.security.cts;
+import android.app.ActivityManager;
import android.os.IBinder;
import android.platform.test.annotations.SecurityTest;
+import android.util.Log;
import junit.framework.TestCase;
+import java.lang.reflect.InvocationTargetException;
+
@SecurityTest
public class ActivityManagerTest extends TestCase {
@@ -44,4 +48,32 @@
// Patched devices should throw this exception
}
}
+
+ // b/144285917
+ @SecurityTest(minPatchLevel = "2020-05")
+ public void testActivityManager_attachNullApplication() {
+ SecurityException securityException = null;
+ Exception unexpectedException = null;
+ try {
+ final Object iam = ActivityManager.class.getDeclaredMethod("getService").invoke(null);
+ Class.forName("android.app.IActivityManager").getDeclaredMethod("attachApplication",
+ Class.forName("android.app.IApplicationThread"), long.class)
+ .invoke(iam, null /* thread */, 0 /* startSeq */);
+ } catch (SecurityException e) {
+ securityException = e;
+ } catch (InvocationTargetException e) {
+ if (e.getCause() instanceof SecurityException) {
+ securityException = (SecurityException) e.getCause();
+ } else {
+ unexpectedException = e;
+ }
+ } catch (Exception e) {
+ unexpectedException = e;
+ }
+ if (unexpectedException != null) {
+ Log.w("ActivityManagerTest", "Unexpected exception", unexpectedException);
+ }
+
+ assertNotNull("Expect SecurityException by attaching null application", securityException);
+ }
}
diff --git a/tests/tests/view/src/android/view/cts/PixelCopyTest.java b/tests/tests/view/src/android/view/cts/PixelCopyTest.java
index 51288cf..85c4094 100644
--- a/tests/tests/view/src/android/view/cts/PixelCopyTest.java
+++ b/tests/tests/view/src/android/view/cts/PixelCopyTest.java
@@ -796,12 +796,12 @@
assertBitmapNotColor("Left edge", bitmap, edgeColor, 2, bitmap.getHeight() / 2);
assertBitmapColor("Bottom edge", bitmap, edgeColor,
- bitmap.getWidth() / 2, bitmap.getHeight() - 1);
+ bitmap.getWidth() / 2, bitmap.getHeight() - 2);
assertBitmapNotColor("Bottom edge", bitmap, edgeColor,
bitmap.getWidth() / 2, bitmap.getHeight() - 3);
assertBitmapColor("Right edge", bitmap, edgeColor,
- bitmap.getWidth() - 1, bitmap.getHeight() / 2);
+ bitmap.getWidth() - 2, bitmap.getHeight() / 2);
assertBitmapNotColor("Right edge", bitmap, edgeColor,
bitmap.getWidth() - 3, bitmap.getHeight() / 2);
}