spiegel-keyman/android/KMAPro/kMAPro/src/main/AndroidManifest.xml

338 lines
14 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.tavultesoft.kmapro">
<!-- Keyman Engine removes INTERNET permission, so add it back -->
<uses-permission android:name="android.permission.INTERNET" tools:node="replace" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- Ideally we would declare this permission so we can get other installed keyboard names.
But would involve a long review process with the Play Store:
https://support.google.com/googleplay/android-developer/answer/9214102#
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> -->
<application
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme"
android:supportsRtl="true">
<receiver android:name=".NetworkStateReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<!-- see the events from this app in sentry.keyman.com dashboard -->
<meta-data
android:name="io.sentry.dsn" android:value="https://2f067e5571a74974b9e210ca76ca9607@o1005580.ingest.sentry.io/5983520" />
<!-- how to enable Sentry's debug mode-->
<meta-data
android:name="io.sentry.debug" android:value="true" />
<!-- Have application handle initializing Sentry -->
<meta-data
android:name="io.sentry.auto-init" android:value="false" />
<service
android:name="com.keyman.android.SystemKeyboard"
android:exported="true"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:permission="android.permission.BIND_INPUT_METHOD">
<intent-filter>
<action android:name="android.view.InputMethod" />
</intent-filter>
<meta-data
android:name="android.view.im"
android:resource="@xml/method" />
</service>
<service
android:name="com.keyman.android.DownloadIntentService"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:exported="true" />
<activity
android:name=".SplashScreenActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/AppTheme.BrandedLaunch">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:exported="true"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:label="@string/app_name"
android:launchMode="singleTask">
<!-- See http://stackoverflow.com/questions/1733195/android-intent-filter-for-a-particular-file-extension/2062112#2062112 -->
<!--
Capture content by MIME type, which is how Gmail broadcasts
attachment open requests. pathPattern and file extensions
are ignored, so the MIME type *MUST* be explicit, otherwise
we will match absolutely every file opened.
-->
<intent-filter android:priority="50">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<!-- needed for properly formatted email messages -->
<data
android:mimeType="application/vnd.keyman"
android:scheme="content" />
<!-- needed for mangled email messages -->
<data
android:mimeType="application/keyman"
android:scheme="content" />
<!-- needed for mangled email messages -->
<data
android:mimeType="application/octet-stream"
android:scheme="content" />
</intent-filter>
<!--
Capture file open requests (pathPattern is honoured) where no
MIME type is provided in the Intent. An Intent with a null
MIME type will never be matched by a filter with a set MIME
type, so we need a second intent-filter if we wish to also
match files with this extension and a non-null MIME type
(even if it is non-null but zero length).
-->
<intent-filter android:priority="50">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="file" />
<data android:host="*" />
<!--
Work around Android's ugly primitive PatternMatcher
implementation that can't cope with finding a . early in
the path unless it's explicitly matched.
-->
<data android:pathPattern=".*\\.kmp" />
<data android:pathPattern=".*\\..*\\.kmp" />
<data android:pathPattern=".*\\..*\\..*\\.kmp" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.kmp" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.kmp" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.kmp" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.kmp" />
</intent-filter>
<!--
Capture file open requests (pathPattern is honoured) where a
(possibly blank) MIME type is provided in the Intent. This
filter may only be necessary for supporting ES File Explorer,
which has the probably buggy behaviour of using an Intent
with a MIME type that is set but zero-length. It's
impossible to match such a type except by using a global
wildcard.
-->
<intent-filter android:priority="50">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="file" />
<data android:host="*" />
<data android:mimeType="*/*" />
<!--
Work around Android's ugly primitive PatternMatcher
implementation that can't cope with finding a . early in
the path unless it's explicitly matched.
-->
<data android:pathPattern=".*\\.kmp" />
<data android:pathPattern=".*\\..*\\.kmp" />
<data android:pathPattern=".*\\..*\\..*\\.kmp" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.kmp" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.kmp" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.kmp" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.kmp" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- http:// and https:// protocols -->
<data
android:host="*"
android:pathPattern=".*\\.kmp"
android:scheme="http" />
<data
android:host="*"
android:pathPattern=".*\\.kmp"
android:scheme="https" />
</intent-filter>
<intent-filter>
<!-- keyman:download// deep linking to https://keyman.com/keyboards/ -->
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="*"
android:scheme="keyman"
android:sspPrefix="download" />
</intent-filter>
<intent-filter android:priority="50" android:autoVerify="true" >
<!-- KMPBrowserActivity converts cloud keyboard package links from http(s)://{HOST}/keyboards/install into /go/package/download
Use {HOST} as defined in KMPLink.java
Also note, Manifest will OR all the scheme/host/pathPrefix combinations -->
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="keyman-staging.com"
android:scheme="http"
android:pathPrefix="/go/package/download" />
<data
android:host="keyman.com"
android:scheme="https"
android:pathPrefix="/go/package/download" />
</intent-filter>
<intent-filter android:priority="50">
<!-- KMAPro should also be able to handle /keyboards/install links and convert to /go/package/download -->
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="keyman-staging.com"
android:scheme="http"
android:pathPrefix="/keyboards/install" />
<data
android:host="keyman.com"
android:scheme="https"
android:pathPrefix="/keyboards/install" />
</intent-filter>
</activity>
<activity
android:name=".InfoActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:label="@string/app_name"/>
<activity
android:name=".BookmarksActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:label="@string/app_name"/>
<activity
android:name=".PackageActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:label="@string/app_name"/>
<activity
android:name=".GetStartedActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:label="@string/app_name"
android:launchMode="singleTask"
android:theme="@style/AppTheme.Light.Dialog"/>
<activity
android:name=".KeymanSettingsActivity"
android:label="@string/keyman_settings"
android:parentActivityName=".MainActivity"
android:launchMode="singleTask"
android:theme="@style/AppTheme.Base" />
<activity
android:name=".KeymanSettingsInstallActivity"
android:label="@string/app_name"
android:parentActivityName=".KeymanSettingsActivity"
android:launchMode="singleTask"
android:theme="@style/AppTheme.Base" />
<activity
android:name=".KeymanSettingsLocalizeActivity"
android:label="@string/app_name"
android:parentActivityName=".KeymanSettingsActivity"
android:launchMode="singleTask"
android:theme="@style/AppTheme.Base" />
<activity
android:name=".LanguagesSettingsActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:label="@string/app_name"
android:theme="@style/AppTheme.Base" />
<activity
android:name=".LanguageSettingsActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:label="@string/app_name"
android:parentActivityName=".LanguagesSettingsActivity"
android:theme="@style/AppTheme.Base" />
<activity
android:name=".KeyboardSettingsActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:label="@string/app_name"
android:theme="@style/AppTheme.Light.Dialog" />
<activity
android:name=".SelectPackageActivity"
android:label="@string/app_name"
android:parentActivityName=".KeymanSettingsInstallActivity"
android:launchMode="singleTask"
android:theme="@style/AppTheme.Base" />
<activity
android:name=".SelectLanguageActivity"
android:label="@string/app_name"
android:parentActivityName=".SelectPackageActivity"
android:launchMode="singleTask"
android:theme="@style/AppTheme.Base" />
<activity
android:name=".AdjustKeyboardHeightActivity"
android:configChanges="orientation"
android:label="@string/app_name"
android:theme="@style/AppTheme.Base" />
<!-- Put other WebViewActivities in a separate process so the Keyboard WebView doesn't lag.
Ref https://stackoverflow.com/questions/40650643/timed-out-waiting-on-iinputcontextcallback-with-custom-keyboard-on-android -->
<activity
android:name=".WebBrowserActivity"
android:process=":WebBrowserActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:label="@string/app_name"/>
<activity
android:name=".KMPBrowserActivity"
android:process=":KMPBrowserActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:label="@string/app_name"/>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application>
</manifest>