import type { AndroidDriver, AndroidDriverOpts } from '../driver';
import type { AppInfoMap, AppState, IsAppInstalledOptions, TerminateAppOpts } from './types';
import type { UninstallOptions, InstallOptions } from 'appium-adb';
export declare const APP_STATE: {
    readonly NOT_INSTALLED: 0;
    readonly NOT_RUNNING: 1;
    readonly RUNNING_IN_BACKGROUND: 3;
    readonly RUNNING_IN_FOREGROUND: 4;
};
/**
 * Checks whether the specified application is installed on the device.
 *
 * @param appId The application package identifier to check.
 * @param opts Optional parameters for the installation check.
 * @returns `true` if the application is installed, `false` otherwise.
 */
export declare function isAppInstalled(this: AndroidDriver, appId: string, opts?: IsAppInstalledOptions): Promise<boolean>;
/**
 * Checks whether the specified application is installed on the device.
 *
 * @param appId Application package identifier
 * @param user The user ID for which the package is installed.
 * The `current` user id is used by default.
 * @returns `true` if the application is installed, `false` otherwise.
 */
export declare function mobileIsAppInstalled(this: AndroidDriver, appId: string, user?: string | number): Promise<boolean>;
/**
 * Lists all installed packages on the Android device, optionally filtered by user.
 * Lower than API Level 26 would raise an exception.
 * API Level 26 and 27 will return empty versionCode.
 *
 * @param user - Optional user ID or user index to filter packages for a specific user
 * @returns A promise that resolves to an object keyed by package name, where each value contains package details.
 * @throws {Error} If there is an error while retrieving the package list
 *
 */
export declare function mobileListApps(this: AndroidDriver, user?: string | number): Promise<AppInfoMap>;
/**
 * Queries the current state of the specified application.
 *
 * The possible states are:
 * - `APP_STATE.NOT_INSTALLED` (0): The application is not installed
 * - `APP_STATE.NOT_RUNNING` (1): The application is installed but not running
 * - `APP_STATE.RUNNING_IN_BACKGROUND` (3): The application is running in the background
 * - `APP_STATE.RUNNING_IN_FOREGROUND` (4): The application is running in the foreground
 *
 * @param appId Application package identifier
 * @returns The current state of the application as a numeric value.
 */
export declare function queryAppState(this: AndroidDriver, appId: string): Promise<AppState>;
/**
 * Activates the specified application, bringing it to the foreground.
 *
 * This is equivalent to launching the application if it's not already running,
 * or bringing it to the foreground if it's running in the background.
 *
 * @param appId Application package identifier
 */
export declare function activateApp(this: AndroidDriver, appId: string): Promise<void>;
/**
 * Removes (uninstalls) the specified application from the device.
 *
 * @param appId The application package identifier to remove.
 * @param opts Optional uninstall options. See {@link UninstallOptions} for available options.
 * @returns `true` if the application was successfully uninstalled, `false` otherwise.
 */
export declare function removeApp(this: AndroidDriver, appId: string, opts?: Omit<UninstallOptions, 'appId'>): Promise<boolean>;
/**
 * @param appId Application package identifier
 * @param timeout The count of milliseconds to wait until the
 * app is uninstalled.
 * @param keepData Set to true in order to keep the
 * application data and cache folders after uninstall.
 * @param skipInstallCheck Whether to check if the app is installed prior to
 * uninstalling it. By default this is checked.
 */
export declare function mobileRemoveApp(this: AndroidDriver, appId: string, timeout?: number, keepData?: boolean, skipInstallCheck?: boolean): Promise<boolean>;
/**
 * Terminates the specified application.
 *
 * This method forcefully stops the application and waits for it to be terminated.
 * It checks that all process IDs belonging to the application have been stopped.
 *
 * @param appId The application package identifier to terminate.
 * @param options Optional termination options. See {@link TerminateAppOpts} for available options.
 * @returns `true` if the application was successfully terminated, `false` if it was not running.
 * @throws {Error} If the application is still running after the timeout period.
 */
export declare function terminateApp(this: AndroidDriver, appId: string, options?: TerminateAppOpts): Promise<boolean>;
/**
 * Terminates the specified application.
 *
 * This method forcefully stops the application and waits for it to be terminated.
 * It checks that all process IDs belonging to the application have been stopped.
 *
 * @param appId Application package identifier
 * @param timeout The count of milliseconds to wait until the app is terminated.
 * 500ms by default.
 * @returns `true` if the application was successfully terminated, `false` if it was not running.
 * @throws {Error} If the application is still running after the timeout period.
 */
export declare function mobileTerminateApp(this: AndroidDriver, appId: string, timeout?: number | string): Promise<boolean>;
/**
 * Installs the specified application on the device.
 *
 * The application file will be configured and validated before installation.
 * Supported file formats are: `.apk`, `.apks`.
 *
 * @param appPath The path to the application file to install.
 * Can be a local file path or a URL.
 * @param opts Optional installation options. See {@link InstallOptions} for available options.
 */
export declare function installApp(this: AndroidDriver, appPath: string, opts: Omit<InstallOptions, 'appId'>): Promise<void>;
/**
 * @param appPath
 * @param checkVersion
 * @param timeout The count of milliseconds to wait until the app is installed.
 * 20000ms by default.
 * @param allowTestPackages Set to true in order to allow test packages installation.
 * `false` by default.
 * @param useSdcard Set to true to install the app on sdcard instead of the device memory.
 * `false` by default.
 * @param grantPermissions Set to true in order to grant all the
 * permissions requested in the application's manifest automatically after the installation is completed
 * under Android 6+. `false` by default.
 * @param replace Set it to false if you don't want the application to be upgraded/reinstalled
 * if it is already present on the device. `true` by default.
 * @param noIncremental Forcefully disables incremental installs if set to `true`.
 * Read https://developer.android.com/preview/features#incremental for more details.
 * `false` by default.
 */
export declare function mobileInstallApp(this: AndroidDriver, appPath: string, checkVersion?: boolean, timeout?: number, allowTestPackages?: boolean, useSdcard?: boolean, grantPermissions?: boolean, replace?: boolean, noIncremental?: boolean): Promise<void>;
/**
 * Clears the application data and cache for the specified application.
 *
 * This is equivalent to running `adb shell pm clear <appId>`.
 * All user data, cache, and settings for the application will be removed.
 *
 * @param appId Application package identifier
 */
export declare function mobileClearApp(this: AndroidDriver, appId: string): Promise<void>;
/**
 * Retrieves the name of the currently focused activity.
 *
 * @returns The fully qualified name of the current activity (e.g., 'com.example.app.MainActivity').
 */
export declare function getCurrentActivity(this: AndroidDriver): Promise<string>;
/**
 * Retrieves the package name of the currently focused application.
 *
 * @returns The package identifier of the current application (e.g., 'com.example.app').
 */
export declare function getCurrentPackage(this: AndroidDriver): Promise<string>;
/**
 * Puts the application in the background for the specified duration.
 *
 * If a negative value is provided, the app will be sent to background and not restored.
 * Otherwise, the app will be restored to the foreground after the specified duration.
 *
 * @param seconds The number of seconds to keep the app in the background.
 * A negative value means to not restore the app after putting it to background.
 * @returns `true` if the app was successfully restored, or the result of `startApp` if restoration was attempted.
 */
export declare function background(this: AndroidDriver, seconds: number): Promise<string | true>;
/**
 * Puts the app to background and waits the given number of seconds then restores the app
 * if necessary. The call is blocking.
 *
 * @param seconds The amount of seconds to wait between putting the app to background and restoring it.
 * Any negative value means to not restore the app after putting it to background.
 */
export declare function mobileBackgroundApp(this: AndroidDriver, seconds?: number): Promise<void>;
/**
 * Resets the Application Under Test (AUT).
 *
 * The reset behavior depends on the driver options:
 * - If `fastReset` is enabled: Stops the app and clears its data
 * - If `fullReset` is enabled: Uninstalls and reinstalls the app
 * - If neither is enabled: Only stops the app
 *
 * @param opts Optional driver options. If not provided, uses the current session options.
 * @throws {Error} If `appPackage` is not specified or if the app cannot be reset.
 */
export declare function resetAUT(this: AndroidDriver, opts?: AndroidDriverOpts | null): Promise<void>;
/**
 * Installs the Application Under Test (AUT) on the device.
 *
 * If `fullReset` is enabled, this will perform a full reset (uninstall and reinstall).
 * Otherwise, it will install or upgrade the app if needed. If `fastReset` is enabled
 * and the app was already installed, it will perform a fast reset after installation.
 *
 * @param opts Optional driver options. If not provided, uses the current session options.
 * @throws {Error} If `app` or `appPackage` options are not specified.
 */
export declare function installAUT(this: AndroidDriver, opts?: AndroidDriverOpts | null): Promise<void>;
/**
 * Installs multiple additional APK files on the device.
 *
 * All APKs are installed asynchronously in parallel. This is useful for installing
 * dependencies or additional applications required for testing.
 *
 * @param otherApps An array of paths to APK files to install.
 * Each path can be a local file path or a URL.
 * @param opts Optional driver options. If not provided, uses the current session options.
 */
export declare function installOtherApks(this: AndroidDriver, otherApps: string[], opts?: AndroidDriverOpts | null): Promise<void>;
/**
 * Uninstalls the specified packages from the device.
 *
 * If `appPackages` contains `'*'`, all third-party packages will be uninstalled
 * (excluding packages in `filterPackages`).
 *
 * @param appPackages An array of package names to uninstall, or `['*']` to uninstall all third-party packages.
 * @param filterPackages An array of package names to exclude from uninstallation.
 * Only used when `appPackages` contains `'*'`.
 */
export declare function uninstallOtherPackages(this: AndroidDriver, appPackages: string[], filterPackages?: string[]): Promise<void>;
/**
 * Retrieves a list of all third-party packages installed on the device.
 *
 * Third-party packages are those that are not part of the system installation.
 * This is equivalent to running `adb shell pm list packages -3`.
 *
 * @param filterPackages An array of package names to exclude from the results.
 * @returns An array of third-party package names, excluding those in `filterPackages`.
 * Returns an empty array if the command fails.
 */
export declare function getThirdPartyPackages(this: AndroidDriver, filterPackages?: string[]): Promise<string[]>;
//# sourceMappingURL=app-management.d.ts.map