app/src/main/AndroidManifest.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">
<!-- TODO: Verify if this actually need -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- TODO: Remove after BackupHelper no longer use -->
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:replace="android:maxSdkVersion"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission
android:name="android.permission.SYSTEM_ALERT_WINDOW"
android:maxSdkVersion="25" />
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
<uses-permission
android:name="android.permission.WRITE_SECURE_SETTINGS"
tools:ignore="ProtectedPermissions" />
<uses-permission
android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
<!-- TODO: We have requestLegacyExternalStorage for now until we migrate to SAF -->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:requestLegacyExternalStorage="true"
android:preserveLegacyExternalStorage="true"
tools:ignore="AllowBackup,GoogleAppIndexingWarning,UnusedAttribute">
<service
android:name=".modules.toggle.services.QSPrivateDNSTileService"
android:icon="@drawable/ic_dns"
android:label="Private DNS"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
android:enabled="false"
android:exported="true">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
<service
android:name=".modules.toggle.services.QSForce90HzTileService"
android:icon="@drawable/ic_force_90hz"
android:label="Force 90Hz Display"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
android:enabled="false"
android:exported="true">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
<activity
android:exported="false"
android:name=".modules.toggle.ToggleActivity"
android:label="System Toggles">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE_PREFERENCES" />
</intent-filter>
</activity>
<activity
android:exported="true"
android:name=".SplashActivity"
android:theme="@style/AppTheme.Launcher">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/static_shortcuts" />
</activity>
<meta-data
android:name="android.allow_multiple_resumed_activities"
android:value="true" />
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
<activity
android:name=".MainMenuActivity"
android:theme="@style/AppTheme.NoAppBar" />
<activity
android:name=".modules.StringToHexBin"
android:exported="false"
android:label="@string/bin_hex_title_full" />
<activity
android:name=".GeneralSettingsActivity"
android:label="@string/title_activity_general_settings" />
<activity
android:name=".UtilitySettingsActivity"
android:label="Utility Specific Settings" />
<activity
android:name=".modules.htcserialidentification.HtcSerialIdentificationActivity"
android:exported="false"
android:label="HTC S/N Identification" />
<activity
android:name=".redirectapp.fanfictionReader.FanfictionReaderRedirectApp"
android:exported="false"
android:theme="@style/AppTheme.Invisible" />
<activity
android:name=".modules.CameraDisablerActivity"
android:exported="false"
android:label="Disable Camera" />
<receiver
android:exported="false"
android:name=".modules.CameraDisablerActivity$DeviceAdminReceiver"
android:description="@string/camera_disable_desc"
android:label="@string/camera_disable_device_admin_label"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/camera_device_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
<activity
android:name=".modules.listapplications.ListApplicationsActivity"
android:exported="false"
android:label="Application List"
android:theme="@style/AppTheme.NoAppBar" />
<activity
android:name=".modules.ordcountdown.ORDActivity"
android:exported="false"
android:label="ORD Countdown" />
<activity
android:name=".modules.ordcountdown.ORDSettingsActivity"
android:label="@string/ord_settings_label" />
<activity
android:exported="true"
android:name=".modules.ordcountdown.widgetProviders.ORDWidgetConfigurationActivity"
android:label="Configure ORD Event Countdown Widget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>
</activity>
<service
android:name=".modules.ordcountdown.widgetProviders.EventCountdownWidgetProvider$UpdateWidgetService"
android:exported="false"
android:label="Update ORD Widgets"
tools:ignore="InnerclassSeparator" />
<receiver
android:exported="false"
android:name=".modules.ordcountdown.widgetProviders.EventCountdownWidgetProvider"
android:label="ORD Event Countdown"
tools:ignore="InnerclassSeparator">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/eventcountdown_widget_provider_info" />
</receiver>
<activity
android:name=".modules.BmiCalculatorActivity"
android:exported="false"
android:label="BMI Calculator" />
<activity
android:name=".modules.ipptcalculator.IpptCalculatorActivity"
android:exported="false"
android:label="IPPT Calculator" />
<activity
android:name=".modules.ipptcalculator.IpptScoringActivity"
android:label="IPPT Scoreboard" />
<activity
android:name=".modules.listapplications.ListApplicationsDetailActivity"
android:label="App Information" />
<activity
android:name=".features.biometric_auth.AuthenticationActivity"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".modules.systeminformation.InitActivity"
android:exported="false" />
<activity
android:name=".modules.systeminformation.ParentFragmentActivity"
android:label="System Information"
android:theme="@style/LegacyLightThemeNoAppBar" />
<service
android:exported="false"
android:name=".modules.navbarcustomization.NavBarService"
android:label="Customize Navigation Bar"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:process=":NavBarCustomizer">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>
<activity
android:name=".modules.navbarcustomization.NavbarConfigurationActivity"
android:exported="false"
android:label="Navigation Bar Customizer" />
<activity
android:name=".games.tictactoe.TicTacToeActivity"
android:exported="false"
android:label="Tic Tac Toe" />
<activity
android:name=".features.utility_management.ManageUtilityActivity"
android:label="Utilities Management" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/app_restore_provider_paths" />
</provider>
<activity
android:name=".modules.listapplications.ListApplicationsApiGraphActivity"
android:label="Graph by API Level" />
<activity
android:name=".modules.safetynet.SafetyNetActivity"
android:exported="false"
android:label="SafetyNet Validator" />
<activity
android:name=".modules.unicodekeyboard.UnicodeActivity"
android:exported="false"
android:label="Unicode Emoticons"
android:theme="@style/AppTheme.NoAppBar" />
<activity
android:name=".games.chromiumtrex.ChromiumTRexActivity"
android:exported="false"
android:label="Chrome T-Rex Game" />
<activity
android:name=".LaunchTileSettingsActivity"
android:exported="false" />
<activity
android:name=".modules.connectivityquiethours.ConnectivityQuietHoursActivity"
android:exported="false"
android:label="Connectivity Quiet Hours Configuration" />
<receiver
android:name=".modules.connectivityquiethours.receivers.BluetoothToggleReceiver"
android:enabled="true" />
<receiver
android:name=".modules.connectivityquiethours.receivers.WifiToggleReceiver"
android:enabled="true" />
<receiver android:name=".modules.connectivityquiethours.receivers.DeleteNotificationIntent" android:exported="false">
<intent-filter>
<action android:name="subitem_cancelled" />
<action android:name="summary_cancelled" />
</intent-filter>
</receiver>
<receiver
android:exported="false"
android:name=".modules.connectivityquiethours.receivers.BootRescheduleToggleReceiver"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<activity android:name=".CreateShortcuts" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".modules.vehiclemileagetracker.VehicleMileageMainActivity"
android:label="Vehicle Mileage Tracker" />
<activity
android:name=".modules.vehiclemileagetracker.AddNewVehicleActivity"
android:label="Add a new Vehicle" />
<activity
android:name=".modules.vehiclemileagetracker.AddNewMileageRecordActivity"
android:label="Add a new Mileage Record" />
<activity
android:name=".modules.vehiclemileagetracker.ViewVehicleActivity"
android:label="View All Vehicles" />
<activity
android:name=".modules.vehiclemileagetracker.VehicleMileageStatisticsActivity"
android:label="Mileage Statistics"
android:theme="@style/AppTheme.NoAppBar" />
<meta-data
android:name="com.google.firebase.ml.vision.DEPENDENCIES"
android:value="barcode" />
<activity
android:name=".modules.barcodetools.BarcodeParentActivity"
android:exported="false"
android:label="Barcode Tools"
android:theme="@style/AppTheme.NoAppBar" />
<activity
android:name=".modules.barcodetools.BarcodeCaptureActivity"
android:label="Scan Barcode" />
<activity
android:name=".modules.lyricfinder.LyricFinderActivity"
android:exported="false"
android:label="Now Playing Lyrics" />
<service
android:name=".modules.lyricfinder.LyricNotificationListener"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
android:process=":LyricNotifListener">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
<activity
android:name=".modules.vehiclemileagetracker.GenerateMileageRecordActivity"
android:label="Generate Mileage Report" />
<activity
android:name=".modules.sgpsi.PsiActivity"
android:exported="false"
android:label="SG Weather (PSI Only)" />
<activity
android:name=".modules.sgpsi.PsiGraphActivity"
android:label="SG PSI Graphs"
android:theme="@style/AppTheme.NoAppBar" />
<!--
The API key for Google Maps-based APIs is defined as a string resource.
(See the file "res/values/google_maps_api.xml").
Note that the API key is linked to the encryption key used to sign the APK.
You need a different API key for each encryption key, including the release key that is used to
sign the APK for publishing.
You can define the keys for the debug and release targets in src/debug/ and src/release/.
-->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" /> <!-- Used to fix the error of no launchMode override -->
<activity
android:name="com.google.firebase.auth.internal.FederatedSignInActivity"
android:excludeFromRecents="true"
android:exported="true"
android:launchMode="singleTask"
android:permission="com.google.firebase.auth.api.gms.permission.LAUNCH_FEDERATED_SIGN_IN"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
tools:replace="android:launchMode" />
<activity
android:exported="true"
android:name=".modules.cepasreader.CEPASActivity"
android:configChanges="keyboardHidden|orientation"
android:label="CEPAS Reader"
android:screenOrientation="sensorPortrait"
tools:ignore="AppLinkUrlError,LockedOrientationActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/${applicationId}.card" />
</intent-filter>
</activity>
<activity
android:name=".modules.whoislookup.WhoisLookupActivity"
android:label="Domain Whois Query" />
<activity
android:exported="true"
android:name=".modules.apkmirrordownloader.APKMirrorActivity"
android:configChanges="orientation|screenSize"
android:hardwareAccelerated="true"
android:label="APKMirror Downloader"
android:supportsPictureInPicture="false"
android:theme="@style/ApkMirrorSplashTheme">
<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="www.apkmirror.com" />
</intent-filter>
</activity>
<activity android:name=".modules.vehiclemileagetracker.VehicleMileageTrackerInitActivity" />
<activity
android:name=".FirebaseLoginActivity"
android:label="@string/label_firebase_sign_in" />
<activity
android:name=".modules.gpacalculator.MainViewActivity"
android:label="@string/title_activity_gpa_calculator_main"
android:theme="@style/AppTheme.NoAppBar" />
<activity
android:name=".modules.gpacalculator.InitActivity"
android:label="@string/title_activity_gpa_calculator_main" />
<activity
android:name=".modules.gpacalculator.ScoringActivity"
android:label="View Scoring Tiers" />
<activity
android:name=".modules.gpacalculator.AddInstitutionActivity"
android:label="Add an Institution" />
<activity
android:name=".modules.gpacalculator.AddSemesterActivity"
android:label="Add a Semester" />
<activity
android:name=".modules.gpacalculator.AddModuleActivity"
android:label="Add a Module" />
<activity
android:name=".modules.cameraviewer.CameraActivity"
android:label="Camera Viewer" />
<activity
android:name=".modules.barcodetools.BarcodeHistoryActivity"
android:label="View Barcode History"
android:theme="@style/AppTheme.NoAppBar" />
</application>
</manifest>