Files
Password-Manager/AndroidManifest.template.xml
T
r-zakarya 7ee2feba1b fix(android): the window shrinks for the keyboard, so forms can scroll
Measured, after two fixes placed by reasoning changed nothing:

  focus: inner 719 visual 719 | box client 659 scroll 659 | body=on-detail

Keyboard up, and both heights unchanged: the page has no way to learn the
keyboard exists - visualViewport reports nothing here either. And the box
shows 659 for 659 of content, so there is no overflow and nothing can
scroll. The keyboard simply covers the bottom of a page that believes it
still has the whole screen.

So the remedy was never in the page. windowSoftInputMode="adjustResize"
makes the window itself shrink; the scroll box then gets real overflow and
the engine can bring the focused field into view on its own.

The reserve added below the scroll area stays: it costs nothing when the
window does resize (the measure is then zero), and it is the honest place
for the value should a device ever report it.
2026-08-21 15:32:19 +01:00

111 lines
5.7 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="%package%"
android:versionCode="%versionCode%"
android:versionName="%versionName%"
android:installLocation="%installLocation%">
<uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
<%uses-permission%>
<!-- Absente de la liste par defaut de Delphi, et sans elle BiometricPrompt
leve java.lang.SecurityException a la premiere invite - pas au
demarrage, donc le defaut ne se voit qu'en essayant d'ouvrir le coffre.
USE_FINGERPRINT couvre les versions anterieures a Android 9, ou
BiometricPrompt n'existe pas encore. -->
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
<queries>
<%queries-child-elements%>
</queries>
<!-- networkSecurityConfig REMPLACE usesCleartextTraffic="true", qui
autorisait le clair vers n'importe quel hote pour la seule raison que
l'essai local via "adb reverse" parle HTTP. La configuration ne
l'autorise plus que vers la boucle locale, nommement : le jeton ne
peut plus sortir qu'en TLS, et une URL http:// vers un vrai hote
echoue bruyamment au lieu de le laisser passer en clair.
Voir android-client/android-res/xml/network_security_config.xml. -->
<!-- allowBackup=false : le repertoire prive contient vault.bin, c'est-a-dire
le coffre entier. Il est chiffre par une cle qui ne quitte pas la puce,
donc ce qui sortirait serait inexploitable - mais il sortirait, et une
sauvegarde cloud n'a rien a faire dans le chemin d'un gestionnaire de
mots de passe. fullBackupContent et dataExtractionRules ne sont pas
necessaires une fois la sauvegarde refusee en bloc. -->
<application
android:allowBackup="false"
android:networkSecurityConfig="@xml/network_security_config"
android:persistent="%persistent%"
android:restoreAnyVersion="%restoreAnyVersion%"
android:label="%label%"
android:debuggable="%debuggable%"
android:largeHeap="%largeHeap%"
android:icon="%icon%"
android:theme="%theme%"
android:hardwareAccelerated="%hardwareAccelerated%"
android:resizeableActivity="true"
android:requestLegacyExternalStorage="true">
<%provider%>
<%application-meta-data%>
<%uses-libraries%>
<!-- Trigger Google Play services to install the backported photo picker module. -->
<service
android:name="com.google.android.gms.metadata.ModuleDependencies"
android:enabled="false"
android:exported="false"
tools:ignore="MissingClass">
<intent-filter>
<action android:name="com.google.android.gms.metadata.MODULE_DEPENDENCIES" />
</intent-filter>
<meta-data android:name="photopicker_activity:0:required" android:value="" />
</service>
<%services%>
<!-- Our activity is a subclass of the built-in NativeActivity framework class.
This will take care of integrating with our NDK code. -->
<!-- windowSoftInputMode : LA FENETRE SE RETRECIT QUAND LE CLAVIER MONTE.
Sans cela il RECOUVRE la page - le cadre garde sa hauteur, le
contenu ne deborde de rien, et le bas du formulaire devient
inatteignable : le champ mot de passe ne se voyait qu'en repliant
le clavier. Mesure a l'appui, clavier leve : innerHeight et
visualViewport.height restaient tous deux a 719, et la boite
defilante montrait 659 pour 659 de contenu. La page n'avait aucun
moyen d'apprendre que le clavier existait ; c'est la fenetre qui
devait le dire. -->
<activity
android:name="com.embarcadero.firemonkey.FMXNativeActivity"
android:exported="true"
android:label="%activityLabel%"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|uiMode"
android:windowSoftInputMode="adjustResize"
android:launchMode="singleTask">
<!-- Tell NativeActivity the name of our .so -->
<meta-data android:name="android.app.lib_name" android:value="%libNameValue%" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- FMX n'affiche pas BiometricPrompt depuis notre NativeActivity : il
lance SA PROPRE activite, qui heberge le fragment androidx. Elle
vit dans fmx.dex.jar, mais Android exige qu'elle soit declaree ici
- sinon android.content.ActivityNotFoundException a la premiere
invite, et nulle part avant.
Theme translucide du framework : cette activite ne dessine rien
d'elle-meme, elle ne fait qu'heberger le dialogue systeme. Sans
cela elle recouvrirait l'ecran d'une surface opaque le temps de
l'authentification. On prend un theme @android: et non AppCompat,
absent des ressources generees. -->
<activity
android:name="com.embarcadero.firemonkey.biometricauth.BiometricFragmentActivity"
android:exported="false"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<%activity%>
<%receivers%>
</application>
</manifest>
<!-- END_INCLUDE(manifest) -->