All checks were successful
APK-BUILD/pipeline/head This commit looks good
- Downloads (https on allowed hosts, data: and blob: URLs) are saved to the Downloads folder, with a toast when they finish - Image upload fields offer the camera; photos are kept in Pictures/Joykoo - In-page camera (getUserMedia) is granted to allowed hosts only - Camera and storage (Android 9 and below) permissions are requested at first launch and again on demand Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
80 lines
3.6 KiB
XML
80 lines
3.6 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
|
|
<uses-permission android:name="android.permission.INTERNET" />
|
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
|
<!-- Camera for photo uploads and in-page camera (getUserMedia). -->
|
|
<uses-permission android:name="android.permission.CAMERA" />
|
|
<!-- Saving downloads/photos to shared storage; not needed from Android 10 (MediaStore). -->
|
|
<uses-permission
|
|
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
|
android:maxSdkVersion="28" />
|
|
|
|
<uses-feature android:name="android.hardware.camera" android:required="false" />
|
|
|
|
<application
|
|
android:allowBackup="true"
|
|
android:icon="@mipmap/ic_launcher"
|
|
android:roundIcon="@mipmap/ic_launcher"
|
|
android:label="@string/app_name"
|
|
android:supportsRtl="true"
|
|
android:theme="@style/Theme.JoykooScanner"
|
|
android:networkSecurityConfig="@xml/network_security_config"
|
|
android:usesCleartextTraffic="false">
|
|
|
|
<!--
|
|
windowSoftInputMode="stateAlwaysHidden" is a first layer of defense:
|
|
it tells the system not to show the IME when the activity starts or
|
|
resumes. However, WebView can still explicitly request the IME when
|
|
an HTML input is focused, so this alone is NOT sufficient.
|
|
The real suppression happens in NoSoftKeyboardWebView which overrides
|
|
onCreateInputConnection() to return null, preventing the IME from
|
|
ever being invoked while still allowing hardware key events to flow
|
|
through the standard View key-event dispatch.
|
|
-->
|
|
<activity
|
|
android:name=".MainActivity"
|
|
android:configChanges="orientation|screenSize|keyboardHidden|keyboard|screenLayout|smallestScreenSize"
|
|
android:exported="true"
|
|
android:launchMode="singleTask"
|
|
android:screenOrientation="portrait"
|
|
android:windowSoftInputMode="stateAlwaysHidden|adjustNothing">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
<category android:name="android.intent.category.LAUNCHER" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<!-- Home-screen entry, enabled only while kiosk mode is on (KioskController)
|
|
so the app returns after a reboot instead of the normal launcher. -->
|
|
<activity-alias
|
|
android:name=".KioskHome"
|
|
android:enabled="false"
|
|
android:exported="true"
|
|
android:targetActivity=".MainActivity">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
<category android:name="android.intent.category.HOME" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
</intent-filter>
|
|
</activity-alias>
|
|
|
|
<!-- Device owner component for full Lock Task kiosk mode:
|
|
adb shell dpm set-device-owner mx.joykoo.scanner/.KioskAdminReceiver -->
|
|
<receiver
|
|
android:name=".KioskAdminReceiver"
|
|
android:exported="true"
|
|
android:permission="android.permission.BIND_DEVICE_ADMIN">
|
|
<meta-data
|
|
android:name="android.app.device_admin"
|
|
android:resource="@xml/device_admin" />
|
|
<intent-filter>
|
|
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
|
|
</intent-filter>
|
|
</receiver>
|
|
|
|
</application>
|
|
|
|
</manifest>
|