nandi/frqpublic Fork 0
83cf1c7a821ac4d04b5989115263b0921fcd63af
Commits
Clone
git clone https://git.rickub.com/nandi/frq.git
git clone ssh://git@rickub.com/nandi/frq.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Sign in and choose a picture on the phone 7b6e915 · on 83cf1c7a821ac4d04b5989115263b0921fcd63af · nandi · 19d ago
AndroidManifest.xml · 80 lines · 3.8 KBXML Blame HistoryRaw
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="uk.nandi.frq">
    <uses-permission android:name="android.permission.INTERNET" />
    <!--
      Reading the pictures the picker offers. Both, because the permission that
      covers them was split at API 33: before that a single storage read, after
      it one per medium. Neither is granted by being asked for here — they are
      runtime permissions, and this activity has no Java to raise the dialog
      with, so they are granted from Settings (or `adb shell pm grant`) until
      something asks. Without them the picker sees directory names and no
      files, which is what it says.
    -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="32" />
    <uses-feature android:glEsVersion="0x00030000" android:required="true" />

    <!--
      Not the Fullscreen theme below: under it the window owns the whole
      display, content_rect is the whole display too, and there is nothing for
      vidya to inset by — the status bar clock sits on top of the app and the
      compose bar sits under the keyboard.
    -->
    <!--
      debuggable: `adb run-as` reads the app's own data directory under it,
      which is how a session file or a cache is looked at on the device. It
      costs nothing at runtime and this APK is signed with the debug key
      anyway; drop it for anything that ships.
    -->
    <application
        android:allowBackup="false"
        android:debuggable="true"
        android:label="frq"
        android:theme="@android:style/Theme.Material.NoActionBar">
        <!--
          adjustResize: without it the activity's content_rect never shrinks for
          the soft keyboard, so vidya has no IME inset to reserve and the compose
          bar sits under the keys.
        -->
        <!--
          singleTask: the sign-in deep link below has to bring the *running*
          app forward, with its loopback handoff already in hand, rather than
          start a second copy of it beside the first.
        -->
        <activity
            android:name=".FrqActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:launchMode="singleTask"
            android:windowSoftInputMode="adjustResize"
            android:exported="true"
            android:screenOrientation="portrait">
            <!--
              The activity's library is libvidya.so, not the Jolt one: whoever
              holds android-activity's glue owns the event loop, and winit
              cannot build one without the AndroidApp handle that glue receives.
              It dlopens libjoltapp.so in turn. See ffi/src/android.rs.
            -->
            <meta-data
                android:name="android.app.lib_name"
                android:value="vidya" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!--
              Coming back from the browser. The handoff itself travels over
              loopback and is already captured by the time this arrives; the
              link carries nothing, and exists only to put the app back in
              front of the browser that covered it.
            -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="frq" android:host="auth" />
            </intent-filter>
        </activity>
    </application>
</manifest>