diff options
-rw-r--r-- | core/tests/coretests/Android.bp | 1 | ||||
-rw-r--r-- | core/tests/coretests/src/android/os/VintfObjectTest.java | 39 | ||||
-rw-r--r-- | nfc/java/android/nfc/NfcActivityManager.java | 16 | ||||
-rw-r--r-- | nfc/java/android/nfc/NfcAdapter.java | 5 | ||||
-rw-r--r-- | ravenwood/OWNERS | 4 | ||||
-rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/NonRequiredPackageDeleteObserver.java | 27 | ||||
-rw-r--r-- | services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java | 83 | ||||
-rw-r--r-- | tests/FlickerTests/Rotation/Android.bp | 4 | ||||
-rw-r--r-- | tools/hoststubgen/OWNERS | 4 |
9 files changed, 100 insertions, 83 deletions
diff --git a/core/tests/coretests/Android.bp b/core/tests/coretests/Android.bp index 99909a1d3c7b..5a051adb140b 100644 --- a/core/tests/coretests/Android.bp +++ b/core/tests/coretests/Android.bp @@ -103,6 +103,7 @@ android_test { sdk_version: "core_platform", test_suites: [ "device-tests", + "device-platinum-tests", "automotive-tests", ], diff --git a/core/tests/coretests/src/android/os/VintfObjectTest.java b/core/tests/coretests/src/android/os/VintfObjectTest.java index f34b8fd358d9..f81b31d0bd5a 100644 --- a/core/tests/coretests/src/android/os/VintfObjectTest.java +++ b/core/tests/coretests/src/android/os/VintfObjectTest.java @@ -16,16 +16,25 @@ package android.os; -import static org.junit.Assert.assertTrue; +import static com.google.common.truth.Truth.assertThat; + +import static java.util.stream.Collectors.toList; import android.platform.test.annotations.IgnoreUnderRavenwood; import android.platform.test.ravenwood.RavenwoodRule; +import android.util.Pair; import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.xml.sax.InputSource; + +import java.io.StringReader; +import java.util.stream.Stream; + +import javax.xml.parsers.DocumentBuilderFactory; @RunWith(AndroidJUnit4.class) @IgnoreUnderRavenwood(blockedBy = VintfObject.class) @@ -39,12 +48,26 @@ public class VintfObjectTest { @Test public void testReport() { String[] xmls = VintfObject.report(); - assertTrue(xmls.length > 0); - // From /system/manifest.xml - assertTrue(String.join("", xmls).contains( - "<manifest version=\"1.0\" type=\"framework\">")); - // From /system/compatibility-matrix.xml - assertTrue(String.join("", xmls).contains( - "<compatibility-matrix version=\"1.0\" type=\"framework\"")); + + assertThat(Stream.of(xmls).map(xml -> rootAndType(xml)).collect(toList())) + .containsExactly( + Pair.create("manifest", "framework"), + Pair.create("compatibility-matrix", "framework"), + Pair.create("manifest", "device"), + Pair.create("compatibility-matrix", "device") + ); + } + + private static Pair<String, String> rootAndType(String content) { + try { + var factory = DocumentBuilderFactory.newInstance(); + var builder = factory.newDocumentBuilder(); + var inputSource = new InputSource(new StringReader(content)); + var document = builder.parse(inputSource); + var root = document.getDocumentElement(); + return Pair.create(root.getTagName(), root.getAttribute("type")); + } catch (Exception e) { + throw new RuntimeException(e); + } } } diff --git a/nfc/java/android/nfc/NfcActivityManager.java b/nfc/java/android/nfc/NfcActivityManager.java index f03fc0af86b3..0e40db612708 100644 --- a/nfc/java/android/nfc/NfcActivityManager.java +++ b/nfc/java/android/nfc/NfcActivityManager.java @@ -195,16 +195,25 @@ public final class NfcActivityManager extends IAppCallback.Stub Bundle extras) { boolean isResumed; Binder token; + int pollTech, listenTech; synchronized (NfcActivityManager.this) { NfcActivityState state = getActivityState(activity); state.readerCallback = callback; state.readerModeFlags = flags; state.readerModeExtras = extras; + pollTech = state.mPollTech; + listenTech = state.mListenTech; token = state.token; isResumed = state.resumed; } if (isResumed) { - setReaderMode(token, flags, extras); + if (listenTech != NfcAdapter.FLAG_USE_ALL_TECH + || pollTech != NfcAdapter.FLAG_USE_ALL_TECH) { + throw new IllegalStateException( + "Cannot be used when alternative DiscoveryTechnology is set"); + } else { + setReaderMode(token, flags, extras); + } } } @@ -385,15 +394,12 @@ public final class NfcActivityManager extends IAppCallback.Stub boolean readerModeFlagsSet; synchronized (NfcActivityManager.this) { NfcActivityState state = getActivityState(activity); - readerModeFlagsSet = state.readerModeFlags != 0; state.mListenTech = NfcAdapter.FLAG_USE_ALL_TECH; state.mPollTech = NfcAdapter.FLAG_USE_ALL_TECH; token = state.token; isResumed = state.resumed; } - if (readerModeFlagsSet) { - disableReaderMode(activity); - } else if (isResumed) { + if (isResumed) { changeDiscoveryTech(token, NfcAdapter.FLAG_USE_ALL_TECH, NfcAdapter.FLAG_USE_ALL_TECH); } diff --git a/nfc/java/android/nfc/NfcAdapter.java b/nfc/java/android/nfc/NfcAdapter.java index 7e0a1111b574..e1c18843313d 100644 --- a/nfc/java/android/nfc/NfcAdapter.java +++ b/nfc/java/android/nfc/NfcAdapter.java @@ -1846,10 +1846,7 @@ public final class NfcAdapter { throw new UnsupportedOperationException(); } } - mNfcActivityManager.enableReaderMode(activity, null, pollTechnology, null); - return; - } - if (pollTechnology == FLAG_READER_DISABLE) { + } else if (pollTechnology == FLAG_READER_DISABLE) { synchronized (sLock) { if (!sHasCeFeature) { throw new UnsupportedOperationException(); diff --git a/ravenwood/OWNERS b/ravenwood/OWNERS index 41fd68e6c2d9..a90328c2e8c6 100644 --- a/ravenwood/OWNERS +++ b/ravenwood/OWNERS @@ -2,4 +2,6 @@ set noparent jsharkey@google.com omakoto@google.com -jaggies@google.com + +per-file ravenwood-annotation-allowed-classes.txt = dplotnikov@google.com +per-file texts/ravenwood-annotation-allowed-classes.txt = dplotnikov@google.com diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/NonRequiredPackageDeleteObserver.java b/services/devicepolicy/java/com/android/server/devicepolicy/NonRequiredPackageDeleteObserver.java index 0e448cdb244c..a1bf0401d001 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/NonRequiredPackageDeleteObserver.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/NonRequiredPackageDeleteObserver.java @@ -25,7 +25,6 @@ import android.util.Slog; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; /** * Awaits the deletion of all the non-required apps. @@ -33,38 +32,38 @@ import java.util.concurrent.atomic.AtomicInteger; final class NonRequiredPackageDeleteObserver extends IPackageDeleteObserver.Stub { private static final int PACKAGE_DELETE_TIMEOUT_SEC = 30; - private final AtomicInteger mPackageCount = new AtomicInteger(/* initialValue= */ 0); private final CountDownLatch mLatch; - private boolean mSuccess; + private boolean mFailed = false; NonRequiredPackageDeleteObserver(int packageCount) { this.mLatch = new CountDownLatch(packageCount); - this.mPackageCount.set(packageCount); } @Override public void packageDeleted(String packageName, int returnCode) { if (returnCode != PackageManager.DELETE_SUCCEEDED) { Slog.e(LOG_TAG, "Failed to delete package: " + packageName); - mLatch.notifyAll(); - return; - } - int currentPackageCount = mPackageCount.decrementAndGet(); - if (currentPackageCount == 0) { - mSuccess = true; - Slog.i(LOG_TAG, "All non-required system apps with launcher icon, " - + "and all disallowed apps have been uninstalled."); + mFailed = true; } mLatch.countDown(); } public boolean awaitPackagesDeletion() { try { - mLatch.await(PACKAGE_DELETE_TIMEOUT_SEC, TimeUnit.SECONDS); + if (mLatch.await(PACKAGE_DELETE_TIMEOUT_SEC, TimeUnit.SECONDS)) { + if (!mFailed) { + Slog.i(LOG_TAG, "All non-required system apps with launcher icon, " + + "and all disallowed apps have been uninstalled."); + } + return !mFailed; + } else { + Slog.i(LOG_TAG, "Waiting time elapsed before all package deletion finished"); + return false; + } } catch (InterruptedException e) { Log.w(LOG_TAG, "Interrupted while waiting for package deletion", e); Thread.currentThread().interrupt(); + return false; } - return mSuccess; } } diff --git a/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java b/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java index 54d101a3c1cf..488fe57cf6f8 100644 --- a/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java +++ b/services/profcollect/src/com/android/server/profcollect/ProfcollectForwardingService.java @@ -63,6 +63,9 @@ public final class ProfcollectForwardingService extends SystemService { "com.android.server.profcollect.UPLOAD_PROFILES"; private static final long BG_PROCESS_INTERVAL = TimeUnit.HOURS.toMillis(4); // every 4 hours. + private int mUsageSetting; + private boolean mUploadEnabled; + private IProfCollectd mIProfcollect; private static ProfcollectForwardingService sSelfService; private final Handler mHandler = new ProfcollectdHandler(IoThread.getHandler().getLooper()); @@ -78,7 +81,7 @@ public final class ProfcollectForwardingService extends SystemService { public void onReceive(Context context, Intent intent) { if (INTENT_UPLOAD_PROFILES.equals(intent.getAction())) { Log.d(LOG_TAG, "Received broadcast to pack and upload reports"); - packAndUploadReport(); + createAndUploadReport(sSelfService); } } }; @@ -91,6 +94,17 @@ public final class ProfcollectForwardingService extends SystemService { } sSelfService = this; + // Get "Usage & diagnostics" checkbox status. 1 is for enabled, 0 is for disabled. + try { + mUsageSetting = Settings.Global.getInt(context.getContentResolver(), "multi_cb"); + } catch (SettingNotFoundException e) { + Log.e(LOG_TAG, "Usage setting not found: " + e.getMessage()); + mUsageSetting = -1; + } + + mUploadEnabled = + context.getResources().getBoolean(R.bool.config_profcollectReportUploaderEnabled); + final IntentFilter filter = new IntentFilter(); filter.addAction(INTENT_UPLOAD_PROFILES); context.registerReceiver(mBroadcastReceiver, filter, Context.RECEIVER_NOT_EXPORTED); @@ -221,7 +235,6 @@ public final class ProfcollectForwardingService extends SystemService { */ public static void schedule(Context context) { JobScheduler js = context.getSystemService(JobScheduler.class); - js.schedule(new JobInfo.Builder(JOB_IDLE_PROCESS, JOB_SERVICE_NAME) .setRequiresDeviceIdle(true) .setRequiresCharging(true) @@ -235,19 +248,7 @@ public final class ProfcollectForwardingService extends SystemService { if (DEBUG) { Log.d(LOG_TAG, "Starting background process job"); } - - BackgroundThread.get().getThreadHandler().post( - () -> { - try { - if (sSelfService.mIProfcollect == null) { - return; - } - sSelfService.mIProfcollect.process(); - } catch (RemoteException e) { - Log.e(LOG_TAG, "Failed to process profiles in background: " - + e.getMessage()); - } - }); + createAndUploadReport(sSelfService); jobFinished(params, false); return true; } @@ -357,7 +358,7 @@ public final class ProfcollectForwardingService extends SystemService { } if (status == UpdateEngine.UpdateStatusConstants.UPDATED_NEED_REBOOT) { - packAndUploadReport(); + createAndUploadReport(sSelfService); } } @@ -368,41 +369,27 @@ public final class ProfcollectForwardingService extends SystemService { }); } - private void packAndUploadReport() { - if (mIProfcollect == null) { + private static void createAndUploadReport(ProfcollectForwardingService pfs) { + String reportName; + try { + reportName = pfs.mIProfcollect.report(pfs.mUsageSetting) + ".zip"; + } catch (RemoteException e) { + Log.e(LOG_TAG, "Failed to create report: " + e.getMessage()); + return; + } + if (!pfs.mUploadEnabled) { + Log.i(LOG_TAG, "Upload is not enabled."); return; } - - Context context = getContext(); BackgroundThread.get().getThreadHandler().post(() -> { - try { - int usageSetting = -1; - try { - // Get "Usage & diagnostics" checkbox status. 1 is for enabled, 0 is for - // disabled. - usageSetting = Settings.Global.getInt(context.getContentResolver(), "multi_cb"); - } catch (SettingNotFoundException e) { - Log.i(LOG_TAG, "Usage setting not found: " + e.getMessage()); - } - - // Prepare profile report - String reportName = mIProfcollect.report(usageSetting) + ".zip"; - - if (!context.getResources().getBoolean( - R.bool.config_profcollectReportUploaderEnabled)) { - Log.i(LOG_TAG, "Upload is not enabled."); - return; - } - - // Upload the report - Intent intent = new Intent() - .setPackage("com.android.shell") - .setAction("com.android.shell.action.PROFCOLLECT_UPLOAD") - .putExtra("filename", reportName); - context.sendBroadcast(intent); - } catch (RemoteException e) { - Log.e(LOG_TAG, "Failed to upload report: " + e.getMessage()); - } + Intent intent = new Intent() + .setPackage("com.android.shell") + .setAction("com.android.shell.action.PROFCOLLECT_UPLOAD") + .putExtra("filename", reportName); + pfs.getContext().sendBroadcast(intent); }); + if (DEBUG) { + Log.d(LOG_TAG, "Sent report for upload."); + } } } diff --git a/tests/FlickerTests/Rotation/Android.bp b/tests/FlickerTests/Rotation/Android.bp index 233a27691e21..6a0d9efa91e8 100644 --- a/tests/FlickerTests/Rotation/Android.bp +++ b/tests/FlickerTests/Rotation/Android.bp @@ -28,6 +28,10 @@ android_test { defaults: ["FlickerTestsDefault"], manifest: "AndroidManifest.xml", test_config_template: "AndroidTestTemplate.xml", + test_suites: [ + "device-tests", + "device-platinum-tests", + ], srcs: ["src/**/*"], static_libs: ["FlickerTestsBase"], data: ["trace_config/*"], diff --git a/tools/hoststubgen/OWNERS b/tools/hoststubgen/OWNERS index a8c5321307d1..3d8888d83cf4 100644 --- a/tools/hoststubgen/OWNERS +++ b/tools/hoststubgen/OWNERS @@ -1,3 +1 @@ -omakoto@google.com -jsharkey@google.com -jaggies@google.com +file:platform/frameworks/base:/ravenwood/OWNERS |