JoykooSmartApp/app/src/main/AndroidManifest.xml
caspar d1b8c34fe1
All checks were successful
APK-BUILD/pipeline/head This commit looks good
Save downloads and camera photos to the device, prompt for permissions
- 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>
2026-10-12 13:51:51 -04:00

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>