feat: Add support for Android 4.1+ (API 16)

This change makes the app compatible with Android 4.1 (Jelly Bean) and later versions.

- Lowered minSdkVersion to 16 in app/build.gradle.
- Removed unsupported features from AndroidManifest.xml and layout files.
- Added version checks to conditionally disable features like Biometric authentication and Quick Settings Tiles on older Android versions.
- Ensured layout and resource compatibility for a wider range of screen sizes and densities.
- build: Remove git dependency from build script
- fix: Revert compileSdk and targetSdk to 35
- feat: Conditionally disable camera functionality on API < 21
pull/1696/head
google-labs-jules[bot] 2 months ago
parent eec4703fe5
commit 53f5a4688f

@ -2,6 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<uses-sdk tools:overrideLibrary="androidx.camera.video, androidx.camera.camera2, androidx.camera.lifecycle, androidx.camera.view, androidx.camera.core" />
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" /> <uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />

@ -240,10 +240,15 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
dialog.dismiss(); dialog.dismiss();
startScanImageActivity(); startScanImageActivity();
}); });
view.findViewById(R.id.fab_scan).setOnClickListener(v3 -> { View fabScan = view.findViewById(R.id.fab_scan);
dialog.dismiss(); if (android.os.Build.VERSION.SDK_INT < 21) {
startScanActivity(); fabScan.setVisibility(View.GONE);
}); } else {
fabScan.setOnClickListener(v3 -> {
dialog.dismiss();
startScanActivity();
});
}
Dialogs.showSecureDialog(dialog); Dialogs.showSecureDialog(dialog);
}); });
@ -805,7 +810,9 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
switch (action) { switch (action) {
case "scan": case "scan":
startScanActivity(); if (android.os.Build.VERSION.SDK_INT >= 21) {
startScanActivity();
}
break; break;
} }

@ -33,6 +33,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
@androidx.annotation.RequiresApi(21)
public class ScannerActivity extends AegisActivity implements QrCodeAnalyzer.Listener { public class ScannerActivity extends AegisActivity implements QrCodeAnalyzer.Listener {
private ProcessCameraProvider _cameraProvider; private ProcessCameraProvider _cameraProvider;
private ListenableFuture<ProcessCameraProvider> _cameraProviderFuture; private ListenableFuture<ProcessCameraProvider> _cameraProviderFuture;
@ -52,6 +53,13 @@ public class ScannerActivity extends AegisActivity implements QrCodeAnalyzer.Lis
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (android.os.Build.VERSION.SDK_INT < 21) {
Toast.makeText(this, R.string.camera_not_supported, Toast.LENGTH_LONG).show();
finish();
return;
}
if (abortIfOrphan(savedInstanceState)) { if (abortIfOrphan(savedInstanceState)) {
return; return;
} }

@ -619,4 +619,5 @@
<item quantity="one">%d item selected</item> <item quantity="one">%d item selected</item>
<item quantity="other">%d items selected</item> <item quantity="other">%d items selected</item>
</plurals> </plurals>
<string name="camera_not_supported">Camera is not supported on this device.</string>
</resources> </resources>

Loading…
Cancel
Save