A bulk update produced one standalone notification per app for both successes and failures, flooding the shade. Bundle these terminal notifications into two groups, each with a collapsible summary that lists the apps via InboxStyle: - "N apps installed" on the (LOW, silent) installed channel, expiring on its own since it's informational. - "N apps failed" on the (HIGH) alerts channel, persisting until handled and carrying a Retry action per app. Summaries are rebuilt from the live posted notifications rather than tracked state, so they stay correct across retries, dismissals and process restarts, and are only posted on Android N+ where the system actually renders groups. Retry re-queues the download via a new DownloadRetryReceiver; the worker resumes from verified files on disk, so retrying an install failure re-installs without re-downloading.
228 lines
9.1 KiB
XML
228 lines
9.1 KiB
XML
<?xml version="1.0" encoding="utf-8"?><!--
|
|
~ Aurora Store
|
|
~ Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
|
|
~ Copyright (C) 2022, The Calyx Institute
|
|
~ Copyright (C) 2023, grrfe <grrfe@420blaze.it>
|
|
~
|
|
~ Aurora Store is free software: you can redistribute it and/or modify
|
|
~ it under the terms of the GNU General Public License as published by
|
|
~ the Free Software Foundation, either version 2 of the License, or
|
|
~ (at your option) any later version.
|
|
~
|
|
~ Aurora Store is distributed in the hope that it will be useful,
|
|
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
~ GNU General Public License for more details.
|
|
~
|
|
~ You should have received a copy of the GNU General Public License
|
|
~ along with Aurora Store. If not, see <http://www.gnu.org/licenses/>.
|
|
~
|
|
-->
|
|
|
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
xmlns:tools="http://schemas.android.com/tools">
|
|
|
|
<uses-sdk tools:overrideLibrary="rikka.shizuku.api, rikka.shizuku.provider, rikka.shizuku.shared, rikka.shizuku.aidl" />
|
|
|
|
<uses-permission android:name="android.permission.INTERNET" />
|
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
|
|
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
|
|
|
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
|
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
|
|
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
|
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
|
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
|
|
|
|
<uses-permission android:name="android.permission.ENFORCE_UPDATE_OWNERSHIP" />
|
|
<uses-permission android:name="android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION" />
|
|
|
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
|
|
|
<uses-permission
|
|
android:name="android.permission.USE_CREDENTIALS"
|
|
android:maxSdkVersion="22" />
|
|
|
|
<uses-feature
|
|
android:name="android.software.leanback"
|
|
android:required="false" />
|
|
|
|
<uses-feature
|
|
android:name="android.hardware.touchscreen"
|
|
android:required="false" />
|
|
|
|
<uses-feature
|
|
android:name="android.hardware.gamepad"
|
|
android:required="false" />
|
|
|
|
<uses-feature
|
|
android:name="android.software.device_admin"
|
|
android:required="false" />
|
|
|
|
<application
|
|
android:name=".AuroraApp"
|
|
android:allowBackup="true"
|
|
android:banner="@drawable/ic_tv_banner"
|
|
android:dataExtractionRules="@xml/backup_rules"
|
|
android:enableOnBackInvokedCallback="true"
|
|
android:fullBackupContent="@xml/backup_rules_legacy"
|
|
android:hardwareAccelerated="true"
|
|
android:icon="@mipmap/ic_launcher"
|
|
android:label="@string/app_name"
|
|
android:preserveLegacyExternalStorage="true"
|
|
android:requestLegacyExternalStorage="true"
|
|
android:roundIcon="@mipmap/ic_launcher_round"
|
|
android:supportsRtl="true"
|
|
android:theme="@style/AppTheme"
|
|
tools:targetApi="tiramisu">
|
|
|
|
<activity
|
|
android:name=".ComposeActivity"
|
|
android:exported="true"
|
|
android:windowSoftInputMode="adjustResize">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
|
|
<category android:name="android.intent.category.APP_MARKET" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
|
|
<category android:name="android.intent.category.LAUNCHER" />
|
|
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.SEND" />
|
|
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:mimeType="text/plain" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.SHOW_APP_INFO" />
|
|
</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" />
|
|
|
|
<data android:scheme="market" />
|
|
</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" />
|
|
|
|
<data android:scheme="http" />
|
|
<data android:scheme="https" />
|
|
<data android:host="market.android.com" />
|
|
<data android:host="play.google.com" />
|
|
<data android:host="play.google.com" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<!-- Notification Action (Download Complete) -->
|
|
<activity
|
|
android:name=".data.activity.InstallActivity"
|
|
android:exported="false"
|
|
android:theme="@style/AppTheme.Translucent" />
|
|
|
|
<activity
|
|
android:name=".data.activity.MicroGInstallerActivity"
|
|
android:excludeFromRecents="true"
|
|
android:exported="false"
|
|
android:launchMode="singleTop"
|
|
android:theme="@style/AppTheme.Translucent" />
|
|
|
|
<!-- DownloadWorker -->
|
|
<service
|
|
android:name="androidx.work.impl.foreground.SystemForegroundService"
|
|
android:foregroundServiceType="dataSync"
|
|
tools:node="merge" />
|
|
|
|
<!-- Third-party installers -->
|
|
<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/paths" />
|
|
</provider>
|
|
|
|
<!-- Shizuku (Installer) -->
|
|
<provider
|
|
android:name="rikka.shizuku.ShizukuProvider"
|
|
android:authorities="${applicationId}.shizuku"
|
|
android:enabled="true"
|
|
android:exported="true"
|
|
android:multiprocess="false"
|
|
android:permission="android.permission.INTERACT_ACROSS_USERS_FULL"
|
|
tools:ignore="MissingClass" />
|
|
|
|
<!-- Hilt (WorkManager) -->
|
|
<provider
|
|
android:name="androidx.startup.InitializationProvider"
|
|
android:authorities="${applicationId}.androidx-startup"
|
|
android:exported="false"
|
|
tools:node="merge">
|
|
<!-- Lifecycle (isForeground method in CommonUtils) -->
|
|
<meta-data
|
|
android:name="androidx.work.WorkManagerInitializer"
|
|
android:value="androidx.startup"
|
|
tools:node="remove" />
|
|
</provider>
|
|
|
|
<!-- Installation Status Receiver (Session Installer) -->
|
|
<receiver
|
|
android:name=".data.receiver.InstallerStatusReceiver"
|
|
android:exported="false" />
|
|
|
|
<!-- Cancel Download Receiver-->
|
|
<receiver
|
|
android:name=".data.receiver.DownloadCancelReceiver"
|
|
android:exported="false" />
|
|
|
|
<!-- Retry Download Receiver-->
|
|
<receiver
|
|
android:name=".data.receiver.DownloadRetryReceiver"
|
|
android:exported="false" />
|
|
|
|
<!-- SessionInstaller (as device owner) -->
|
|
<receiver
|
|
android:name=".data.receiver.DeviceOwnerReceiver"
|
|
android:exported="true"
|
|
android:permission="android.permission.BIND_DEVICE_ADMIN">
|
|
<meta-data
|
|
android:name="android.app.device_admin"
|
|
android:resource="@xml/device_owner_receiver" />
|
|
<intent-filter>
|
|
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
|
|
</intent-filter>
|
|
</receiver>
|
|
|
|
<!-- MigrationReceiver (for running migrations) -->
|
|
<receiver
|
|
android:name=".data.receiver.MigrationReceiver"
|
|
android:exported="false">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
|
</intent-filter>
|
|
</receiver>
|
|
|
|
<!-- Android15+ package unarchive feature -->
|
|
<receiver
|
|
android:name=".data.receiver.UnarchivePackageReceiver"
|
|
android:exported="false">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.UNARCHIVE_PACKAGE" />
|
|
</intent-filter>
|
|
</receiver>
|
|
</application>
|
|
</manifest>
|