From bc14897a39534176a87a183260806fd37dab5b29 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Mon, 21 Apr 2025 11:28:31 -0400 Subject: [PATCH 1/2] raise minimum API level to 33 (Android 13) Android 13 is the oldest release with security support and also the oldest release supported by our App Store. --- app/build.gradle.kts | 2 +- .../attestation/auditor/AttestationProtocol.java | 14 ++++---------- .../app/attestation/auditor/RemoteVerifyJob.java | 4 +--- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index dc850663..09a1299c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -47,7 +47,7 @@ android { defaultConfig { applicationId = "app.attestation.auditor" - minSdk = 31 + minSdk = 33 targetSdk = 35 versionCode = 89 versionName = versionCode.toString() diff --git a/app/src/main/java/app/attestation/auditor/AttestationProtocol.java b/app/src/main/java/app/attestation/auditor/AttestationProtocol.java index e64a4126..5e20ec5b 100644 --- a/app/src/main/java/app/attestation/auditor/AttestationProtocol.java +++ b/app/src/main/java/app/attestation/auditor/AttestationProtocol.java @@ -8,6 +8,7 @@ import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.content.pm.PackageManager.ApplicationInfoFlags; import android.os.Build; import android.os.UserManager; import android.provider.Settings; @@ -1295,15 +1296,6 @@ static Certificate[] getCertificateChain(final KeyStore keyStore, final String a return result; } - @SuppressWarnings("deprecation") - static ApplicationInfo getApplicationInfo(final PackageManager pm, final String packageName, - final int flags) throws PackageManager.NameNotFoundException { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { - return pm.getApplicationInfo(packageName, flags); - } - return pm.getApplicationInfo(packageName, PackageManager.ApplicationInfoFlags.of(flags)); - } - static AttestationResult generateSerialized(final Context context, final byte[] challengeMessage, String index, final String statePrefix) throws GeneralSecurityException, IOException { if (challengeMessage.length < CHALLENGE_MESSAGE_LENGTH) { @@ -1406,7 +1398,9 @@ static AttestationResult generateSerialized(final Context context, final byte[] if (activeAdmins != null) { for (final ComponentName name : activeAdmins) { try { - final ApplicationInfo info = getApplicationInfo(pm, name.getPackageName(), 0); + final String packageName = name.getPackageName(); + final ApplicationInfo info = + pm.getApplicationInfo(packageName, ApplicationInfoFlags.of(0)); if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { deviceAdminNonSystem = true; } diff --git a/app/src/main/java/app/attestation/auditor/RemoteVerifyJob.java b/app/src/main/java/app/attestation/auditor/RemoteVerifyJob.java index 5bc38ad3..abb88554 100644 --- a/app/src/main/java/app/attestation/auditor/RemoteVerifyJob.java +++ b/app/src/main/java/app/attestation/auditor/RemoteVerifyJob.java @@ -120,9 +120,7 @@ static void schedule(final Context context, int interval) { .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) .setEstimatedNetworkBytes(ESTIMATED_DOWNLOAD_BYTES, ESTIMATED_UPLOAD_BYTES); builder.setExpedited(true); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - builder.setPriority(JobInfo.PRIORITY_MAX); - } + builder.setPriority(JobInfo.PRIORITY_MAX); if (scheduler.schedule(builder.build()) == JobScheduler.RESULT_FAILURE) { throw new RuntimeException("job schedule failed"); } From e62eae9320041e0e77c9e4e4ec6b9dfe738d3dee Mon Sep 17 00:00:00 2001 From: Pratyush Date: Tue, 22 Apr 2025 20:58:31 +0530 Subject: [PATCH 2/2] increase brightness while showing the QR-Code --- .../auditor/AttestationActivity.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/app/attestation/auditor/AttestationActivity.java b/app/src/main/java/app/attestation/auditor/AttestationActivity.java index fc350df1..83167ab2 100644 --- a/app/src/main/java/app/attestation/auditor/AttestationActivity.java +++ b/app/src/main/java/app/attestation/auditor/AttestationActivity.java @@ -21,6 +21,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; +import android.view.WindowManager; import android.widget.LinearLayout; import androidx.activity.EdgeToEdge; @@ -331,18 +332,36 @@ public boolean onPreDraw() { } else { binding.content.imageview.setImageBitmap(createQrCode(data)); } + setMaxBrightness(); return true; } }); } + private void setMaxBrightness() { + setBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL); + } + + private void resetToOriginalBrightness() { + setBrightness(WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE); + } + + private void setBrightness(float value) { + WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); + layoutParams.screenBrightness = value; + getWindow().setAttributes(layoutParams); + } + private void runAuditor() { if (auditorChallenge == null) { auditorChallenge = AttestationProtocol.getChallengeMessage(this); } binding.content.textview.setText(R.string.qr_code_scan_hint_auditor); chooseBestLayout(auditorChallenge); - binding.content.imageview.setOnClickListener(view -> startQrScanner()); + binding.content.imageview.setOnClickListener(view -> { + startQrScanner(); + resetToOriginalBrightness(); + }); } private void handleAttestation(final byte[] serialized) {