import { type ConfigPlugin, AndroidConfig } from 'expo/config-plugins'; import type { LegacyLocationPolicy, NativeLoggingLevel } from './expoPluginSchema'; type InnerManifest = AndroidConfig.Manifest.AndroidManifest['manifest']; type ManifestPermission = InnerManifest['permission']; type ExtraTools = { 'tools:targetApi'?: string; }; export type ManifestUsesPermissionWithExtraTools = { $: AndroidConfig.Manifest.ManifestUsesPermission['$'] & ExtraTools; }; type ManifestApplication = NonNullable[number]; type ManifestService = NonNullable[number]; export type ManifestServiceWithExtraTools = Omit & { $: ManifestService['$'] & ExtraTools; }; type ManifestApplicationWithExtraTools = Omit & { service?: ManifestServiceWithExtraTools[]; }; export declare const EXPO_RUNTIME_CONFIGURATION_METADATA: Readonly<{ marker: "com.sfourdrinier.unifiedblemanager.expo.configuration-marker"; legacyLocationPolicy: "com.sfourdrinier.unifiedblemanager.expo.legacy-location-policy"; neverForLocation: "com.sfourdrinier.unifiedblemanager.expo.never-for-location"; requiredHardware: "com.sfourdrinier.unifiedblemanager.expo.required-hardware"; }>; export declare const EXPO_RUNTIME_CONFIGURATION_MARKER = "unified-ble-expo-v1"; export type AndroidManifestWithExtraTools = { manifest: Omit & { application?: ManifestApplicationWithExtraTools[]; permission?: ManifestPermission; 'uses-permission'?: ManifestUsesPermissionWithExtraTools[]; 'uses-permission-sdk-23'?: ManifestUsesPermissionWithExtraTools[]; 'uses-feature'?: InnerManifest['uses-feature']; }; }; export declare const withBLEAndroidManifest: ConfigPlugin<{ requiredHardware: boolean; neverForLocation: boolean; legacyLocation: LegacyLocationPolicy; nativeLogging?: NativeLoggingLevel; }>; export interface ExpoAndroidManifestOptions { readonly requiredHardware: boolean; readonly neverForLocation: boolean; readonly legacyLocation: LegacyLocationPolicy; readonly nativeLogging?: NativeLoggingLevel; } /** Applies the complete managed Android projection with stable ordering and removal. */ export declare function reconcileExpoAndroidManifest(androidManifest: AndroidManifestWithExtraTools, options: ExpoAndroidManifestOptions): AndroidManifestWithExtraTools; /** * Keeps one canonical declaration for each permission whose Android platform * semantics changed at API 31. Expo's generic permission helper can append * an unbounded legacy declaration, so this reconciles both new and existing * manifests instead of relying on append-only behavior. */ export declare function reconcileBluetoothPermissions(androidManifest: AndroidManifestWithExtraTools): AndroidManifestWithExtraTools; /** * Add location permissions * - 'android.permission.ACCESS_COARSE_LOCATION' for Android SDK 28 (Android 9) and lower * - 'android.permission.ACCESS_FINE_LOCATION' for Android SDK 29 (Android 10) and higher. * From Android SDK 31 (Android 12) it might not be required if BLE is not used for location. */ export declare function addLocationPermissionToManifest(androidManifest: AndroidManifestWithExtraTools, neverForLocationSinceSdk31: boolean): AndroidManifestWithExtraTools; /** * Add 'android.permission.BLUETOOTH_SCAN'. * Required since Android SDK 31 (Android 12). */ export declare function addScanPermissionToManifest(androidManifest: AndroidManifestWithExtraTools, neverForLocation: boolean): AndroidManifestWithExtraTools; export declare function addBLEHardwareFeatureToManifest(androidManifest: AndroidConfig.Manifest.AndroidManifest): AndroidConfig.Manifest.AndroidManifest; export {};