161847f8eSopenharmony_ci/*
261847f8eSopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
361847f8eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"),
461847f8eSopenharmony_ci * you may not use this file except in compliance with the License.
561847f8eSopenharmony_ci * You may obtain a copy of the License at
661847f8eSopenharmony_ci *
761847f8eSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
861847f8eSopenharmony_ci *
961847f8eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1061847f8eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1161847f8eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1261847f8eSopenharmony_ci * See the License for the specific language governing permissions and
1361847f8eSopenharmony_ci * limitations under the License.
1461847f8eSopenharmony_ci */
1561847f8eSopenharmony_ci
1661847f8eSopenharmony_ci/**
1761847f8eSopenharmony_ci * @file
1861847f8eSopenharmony_ci * @kit AbilityKit
1961847f8eSopenharmony_ci */
2061847f8eSopenharmony_ci
2161847f8eSopenharmony_ciimport UIAbilityContext from './application/UIAbilityContext';
2261847f8eSopenharmony_ciimport Want from './@ohos.app.ability.Want';
2361847f8eSopenharmony_ci
2461847f8eSopenharmony_ci/**
2561847f8eSopenharmony_ci * This module provides the capability of app recovery.
2661847f8eSopenharmony_ci * You can use this capability to save state and restart the application
2761847f8eSopenharmony_ci * which let end user continue their workflow when app error occurs.
2861847f8eSopenharmony_ci * This api support restart the app when js crash or app freeze occurs currently.
2961847f8eSopenharmony_ci *
3061847f8eSopenharmony_ci * @namespace appRecovery
3161847f8eSopenharmony_ci * @syscap SystemCapability.Ability.AbilityRuntime.Core
3261847f8eSopenharmony_ci * @since 9
3361847f8eSopenharmony_ci */
3461847f8eSopenharmony_ci/**
3561847f8eSopenharmony_ci * This module provides the capability of app recovery.
3661847f8eSopenharmony_ci * You can use this capability to save state and restart the application
3761847f8eSopenharmony_ci * which let end user continue their workflow when app error occurs.
3861847f8eSopenharmony_ci * This api support restart the app when js crash or app freeze occurs currently.
3961847f8eSopenharmony_ci *
4061847f8eSopenharmony_ci * @namespace appRecovery
4161847f8eSopenharmony_ci * @syscap SystemCapability.Ability.AbilityRuntime.Core
4261847f8eSopenharmony_ci * @atomicservice
4361847f8eSopenharmony_ci * @since 11
4461847f8eSopenharmony_ci */
4561847f8eSopenharmony_cideclare namespace appRecovery {
4661847f8eSopenharmony_ci  /**
4761847f8eSopenharmony_ci   * The flag that determines when to restart you app.
4861847f8eSopenharmony_ci   *
4961847f8eSopenharmony_ci   * @enum { number }
5061847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
5161847f8eSopenharmony_ci   * @since 9
5261847f8eSopenharmony_ci   */
5361847f8eSopenharmony_ci  /**
5461847f8eSopenharmony_ci   * The flag that determines when to restart you app.
5561847f8eSopenharmony_ci   *
5661847f8eSopenharmony_ci   * @enum { number }
5761847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
5861847f8eSopenharmony_ci   * @atomicservice
5961847f8eSopenharmony_ci   * @since 11
6061847f8eSopenharmony_ci   */
6161847f8eSopenharmony_ci  enum RestartFlag {
6261847f8eSopenharmony_ci    /**
6361847f8eSopenharmony_ci     * No restart restrictions.
6461847f8eSopenharmony_ci     *
6561847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
6661847f8eSopenharmony_ci     * @since 9
6761847f8eSopenharmony_ci     */
6861847f8eSopenharmony_ci    /**
6961847f8eSopenharmony_ci     * No restart restrictions.
7061847f8eSopenharmony_ci     *
7161847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
7261847f8eSopenharmony_ci     * @atomicservice
7361847f8eSopenharmony_ci     * @since 11
7461847f8eSopenharmony_ci     */
7561847f8eSopenharmony_ci    ALWAYS_RESTART = 0,
7661847f8eSopenharmony_ci
7761847f8eSopenharmony_ci    /**
7861847f8eSopenharmony_ci     * Restart if current app process encounter uncaught js/ts/ets exception.
7961847f8eSopenharmony_ci     *
8061847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
8161847f8eSopenharmony_ci     * @since 9
8261847f8eSopenharmony_ci     */
8361847f8eSopenharmony_ci    /**
8461847f8eSopenharmony_ci     * Restart if current app process encounter uncaught js/ts/ets exception.
8561847f8eSopenharmony_ci     *
8661847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
8761847f8eSopenharmony_ci     * @atomicservice
8861847f8eSopenharmony_ci     * @since 11
8961847f8eSopenharmony_ci     */
9061847f8eSopenharmony_ci    RESTART_WHEN_JS_CRASH = 0x0001,
9161847f8eSopenharmony_ci
9261847f8eSopenharmony_ci    /**
9361847f8eSopenharmony_ci     * Restart if the main thread of current app process block more than 6 seconds.
9461847f8eSopenharmony_ci     *
9561847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
9661847f8eSopenharmony_ci     * @since 9
9761847f8eSopenharmony_ci     */
9861847f8eSopenharmony_ci    /**
9961847f8eSopenharmony_ci     * Restart if the main thread of current app process block more than 6 seconds.
10061847f8eSopenharmony_ci     *
10161847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
10261847f8eSopenharmony_ci     * @atomicservice
10361847f8eSopenharmony_ci     * @since 11
10461847f8eSopenharmony_ci     */
10561847f8eSopenharmony_ci    RESTART_WHEN_APP_FREEZE = 0x0002,
10661847f8eSopenharmony_ci
10761847f8eSopenharmony_ci    /**
10861847f8eSopenharmony_ci     * Do not restart in any scenario.
10961847f8eSopenharmony_ci     *
11061847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
11161847f8eSopenharmony_ci     * @since 9
11261847f8eSopenharmony_ci     */
11361847f8eSopenharmony_ci    /**
11461847f8eSopenharmony_ci     * Do not restart in any scenario.
11561847f8eSopenharmony_ci     *
11661847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
11761847f8eSopenharmony_ci     * @atomicservice
11861847f8eSopenharmony_ci     * @since 11
11961847f8eSopenharmony_ci     */
12061847f8eSopenharmony_ci    NO_RESTART = 0xFFFF
12161847f8eSopenharmony_ci  }
12261847f8eSopenharmony_ci
12361847f8eSopenharmony_ci  /**
12461847f8eSopenharmony_ci   * The flag that determines when to save ability state.
12561847f8eSopenharmony_ci   * When start saving ability state, the { ohos.app.ability.UiAbility.onSaveState } will be called and
12661847f8eSopenharmony_ci   * the page stack of current ability will be saved automatically.
12761847f8eSopenharmony_ci   *
12861847f8eSopenharmony_ci   * @enum { number }
12961847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
13061847f8eSopenharmony_ci   * @since 9
13161847f8eSopenharmony_ci   */
13261847f8eSopenharmony_ci  /**
13361847f8eSopenharmony_ci   * The flag that determines when to save ability state.
13461847f8eSopenharmony_ci   * When start saving ability state, the { ohos.app.ability.UiAbility.onSaveState } will be called and
13561847f8eSopenharmony_ci   * the page stack of current ability will be saved automatically.
13661847f8eSopenharmony_ci   *
13761847f8eSopenharmony_ci   * @enum { number }
13861847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
13961847f8eSopenharmony_ci   * @atomicservice
14061847f8eSopenharmony_ci   * @since 11
14161847f8eSopenharmony_ci   */
14261847f8eSopenharmony_ci  enum SaveOccasionFlag {
14361847f8eSopenharmony_ci    /**
14461847f8eSopenharmony_ci     * Saving ability state when an error occurs.
14561847f8eSopenharmony_ci     * The error in current situation has the same semantic with { errorManager } defines
14661847f8eSopenharmony_ci     * which means the state that the application cannot continue to work but allows developer to handle.
14761847f8eSopenharmony_ci     *
14861847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
14961847f8eSopenharmony_ci     * @since 9
15061847f8eSopenharmony_ci     */
15161847f8eSopenharmony_ci    /**
15261847f8eSopenharmony_ci     * Saving ability state when an error occurs.
15361847f8eSopenharmony_ci     * The error in current situation has the same semantic with { errorManager } defines
15461847f8eSopenharmony_ci     * which means the state that the application cannot continue to work but allows developer to handle.
15561847f8eSopenharmony_ci     *
15661847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
15761847f8eSopenharmony_ci     * @atomicservice
15861847f8eSopenharmony_ci     * @since 11
15961847f8eSopenharmony_ci     */
16061847f8eSopenharmony_ci    SAVE_WHEN_ERROR = 0x0001,
16161847f8eSopenharmony_ci
16261847f8eSopenharmony_ci    /**
16361847f8eSopenharmony_ci     * Saving ability state when ability is in background.
16461847f8eSopenharmony_ci     *
16561847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
16661847f8eSopenharmony_ci     * @since 9
16761847f8eSopenharmony_ci     */
16861847f8eSopenharmony_ci    /**
16961847f8eSopenharmony_ci     * Saving ability state when ability is in background.
17061847f8eSopenharmony_ci     *
17161847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
17261847f8eSopenharmony_ci     * @atomicservice
17361847f8eSopenharmony_ci     * @since 11
17461847f8eSopenharmony_ci     */
17561847f8eSopenharmony_ci    SAVE_WHEN_BACKGROUND = 0x0002
17661847f8eSopenharmony_ci  }
17761847f8eSopenharmony_ci
17861847f8eSopenharmony_ci  /**
17961847f8eSopenharmony_ci   * The flag that determines how to save the ability state.
18061847f8eSopenharmony_ci   *
18161847f8eSopenharmony_ci   * @enum { number }
18261847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
18361847f8eSopenharmony_ci   * @since 9
18461847f8eSopenharmony_ci   */
18561847f8eSopenharmony_ci  /**
18661847f8eSopenharmony_ci   * The flag that determines how to save the ability state.
18761847f8eSopenharmony_ci   *
18861847f8eSopenharmony_ci   * @enum { number }
18961847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
19061847f8eSopenharmony_ci   * @atomicservice
19161847f8eSopenharmony_ci   * @since 11
19261847f8eSopenharmony_ci   */
19361847f8eSopenharmony_ci  enum SaveModeFlag {
19461847f8eSopenharmony_ci    /**
19561847f8eSopenharmony_ci     * Save state to file immediately.
19661847f8eSopenharmony_ci     *
19761847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
19861847f8eSopenharmony_ci     * @since 9
19961847f8eSopenharmony_ci     */
20061847f8eSopenharmony_ci    /**
20161847f8eSopenharmony_ci     * Save state to file immediately.
20261847f8eSopenharmony_ci     *
20361847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
20461847f8eSopenharmony_ci     * @atomicservice
20561847f8eSopenharmony_ci     * @since 11
20661847f8eSopenharmony_ci     */
20761847f8eSopenharmony_ci    SAVE_WITH_FILE = 0x0001,
20861847f8eSopenharmony_ci
20961847f8eSopenharmony_ci    /**
21061847f8eSopenharmony_ci     * Keep state in memory and flush to file when error occurs or { restartApp } is invoked.
21161847f8eSopenharmony_ci     *
21261847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
21361847f8eSopenharmony_ci     * @since 9
21461847f8eSopenharmony_ci     */
21561847f8eSopenharmony_ci    /**
21661847f8eSopenharmony_ci     * Keep state in memory and flush to file when error occurs or { restartApp } is invoked.
21761847f8eSopenharmony_ci     *
21861847f8eSopenharmony_ci     * @syscap SystemCapability.Ability.AbilityRuntime.Core
21961847f8eSopenharmony_ci     * @atomicservice
22061847f8eSopenharmony_ci     * @since 11
22161847f8eSopenharmony_ci     */
22261847f8eSopenharmony_ci    SAVE_WITH_SHARED_MEMORY = 0x0002
22361847f8eSopenharmony_ci  }
22461847f8eSopenharmony_ci
22561847f8eSopenharmony_ci  /**
22661847f8eSopenharmony_ci   * Enable appRecovery function.
22761847f8eSopenharmony_ci   *
22861847f8eSopenharmony_ci   * @param { RestartFlag } [restart] - The flag that determines the restart cases of your app, default value is { ALWAYS_RESTART }.
22961847f8eSopenharmony_ci   * @param { SaveOccasionFlag } [saveOccasion] - The flag that determines when to save ability state, default value is { SAVE_WHEN_ERROR }.
23061847f8eSopenharmony_ci   * @param { SaveModeFlag } [saveMode] - The flag that determines how to save the ability state, default value is { SAVE_WITH_FILE }.
23161847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
23261847f8eSopenharmony_ci   * @StageModelOnly
23361847f8eSopenharmony_ci   * @since 9
23461847f8eSopenharmony_ci   */
23561847f8eSopenharmony_ci  /**
23661847f8eSopenharmony_ci   * Enable appRecovery function.
23761847f8eSopenharmony_ci   *
23861847f8eSopenharmony_ci   * @param { RestartFlag } [restart] - The flag that determines the restart cases of your app, default value is { ALWAYS_RESTART }.
23961847f8eSopenharmony_ci   * @param { SaveOccasionFlag } [saveOccasion] - The flag that determines when to save ability state, default value is { SAVE_WHEN_ERROR }.
24061847f8eSopenharmony_ci   * @param { SaveModeFlag } [saveMode] - The flag that determines how to save the ability state, default value is { SAVE_WITH_FILE }.
24161847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
24261847f8eSopenharmony_ci   * @StageModelOnly
24361847f8eSopenharmony_ci   * @atomicservice
24461847f8eSopenharmony_ci   * @since 11
24561847f8eSopenharmony_ci   */
24661847f8eSopenharmony_ci  function enableAppRecovery(restart?: RestartFlag, saveOccasion?: SaveOccasionFlag, saveMode?: SaveModeFlag): void;
24761847f8eSopenharmony_ci
24861847f8eSopenharmony_ci  /**
24961847f8eSopenharmony_ci   * Restart current process and launch the first ability(the entry ability in most cases) of current process.
25061847f8eSopenharmony_ci   * The previous saved state will be filled in the { want.wantParams } of { UIAbility.onCreate } interface.
25161847f8eSopenharmony_ci   * and the { param } of { UIAbility.onCreate } will be set to APP_RECOVERY.
25261847f8eSopenharmony_ci   *
25361847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
25461847f8eSopenharmony_ci   * @StageModelOnly
25561847f8eSopenharmony_ci   * @since 9
25661847f8eSopenharmony_ci   */
25761847f8eSopenharmony_ci  /**
25861847f8eSopenharmony_ci   * Restart current process and launch the first ability(the entry ability in most cases) of current process.
25961847f8eSopenharmony_ci   * The previous saved state will be filled in the { want.wantParams } of { UIAbility.onCreate } interface.
26061847f8eSopenharmony_ci   * and the { param } of { UIAbility.onCreate } will be set to APP_RECOVERY.
26161847f8eSopenharmony_ci   *
26261847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
26361847f8eSopenharmony_ci   * @StageModelOnly
26461847f8eSopenharmony_ci   * @atomicservice
26561847f8eSopenharmony_ci   * @since 11
26661847f8eSopenharmony_ci   */
26761847f8eSopenharmony_ci  function restartApp(): void;
26861847f8eSopenharmony_ci
26961847f8eSopenharmony_ci  /**
27061847f8eSopenharmony_ci   * Set the want that will be used when app restart initiated by appRecovery.
27161847f8eSopenharmony_ci   *
27261847f8eSopenharmony_ci   * @param { Want } want - that defines the ability you want to start
27361847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
27461847f8eSopenharmony_ci   * @StageModelOnly
27561847f8eSopenharmony_ci   * @since 10
27661847f8eSopenharmony_ci   */
27761847f8eSopenharmony_ci  /**
27861847f8eSopenharmony_ci   * Set the want that will be used when app restart initiated by appRecovery.
27961847f8eSopenharmony_ci   *
28061847f8eSopenharmony_ci   * @param { Want } want - that defines the ability you want to start
28161847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
28261847f8eSopenharmony_ci   * @StageModelOnly
28361847f8eSopenharmony_ci   * @atomicservice
28461847f8eSopenharmony_ci   * @since 11
28561847f8eSopenharmony_ci   */
28661847f8eSopenharmony_ci  function setRestartWant(want: Want): void;
28761847f8eSopenharmony_ci
28861847f8eSopenharmony_ci  /**
28961847f8eSopenharmony_ci   * Actively save application state.
29061847f8eSopenharmony_ci   * The ability framework will call { UIAbility.onSaveState } of first launched ability and
29161847f8eSopenharmony_ci   * persist state as { saveOccasion } flag from { enableAppRecovery } interface.
29261847f8eSopenharmony_ci   *
29361847f8eSopenharmony_ci   * @returns { boolean } true if save data successfully, otherwise false.
29461847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
29561847f8eSopenharmony_ci   * @StageModelOnly
29661847f8eSopenharmony_ci   * @since 9
29761847f8eSopenharmony_ci   */
29861847f8eSopenharmony_ci  /**
29961847f8eSopenharmony_ci   * Actively save application state.
30061847f8eSopenharmony_ci   * The ability framework will call { UIAbility.onSaveState } of first launched ability and
30161847f8eSopenharmony_ci   * persist state as { saveOccasion } flag from { enableAppRecovery } interface.
30261847f8eSopenharmony_ci   *
30361847f8eSopenharmony_ci   * @returns { boolean } true if save data successfully, otherwise false.
30461847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
30561847f8eSopenharmony_ci   * @StageModelOnly
30661847f8eSopenharmony_ci   * @atomicservice
30761847f8eSopenharmony_ci   * @since 11
30861847f8eSopenharmony_ci   */
30961847f8eSopenharmony_ci  function saveAppState(): boolean;
31061847f8eSopenharmony_ci  /**
31161847f8eSopenharmony_ci   * Save the ability state according to the context.
31261847f8eSopenharmony_ci   *
31361847f8eSopenharmony_ci   * @param { UIAbilityContext } [context] - context indicates the ability context you want to save state.
31461847f8eSopenharmony_ci   * If context is not specified, the onSaveState will be invoked on all the recoverable abilities in current process.
31561847f8eSopenharmony_ci   * @returns { boolean } true if save data successfully, otherwise false.
31661847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
31761847f8eSopenharmony_ci   * @StageModelOnly
31861847f8eSopenharmony_ci   * @since 10
31961847f8eSopenharmony_ci   */
32061847f8eSopenharmony_ci  /**
32161847f8eSopenharmony_ci   * Save the ability state according to the context.
32261847f8eSopenharmony_ci   *
32361847f8eSopenharmony_ci   * @param { UIAbilityContext } [context] - context indicates the ability context you want to save state.
32461847f8eSopenharmony_ci   * If context is not specified, the onSaveState will be invoked on all the recoverable abilities in current process.
32561847f8eSopenharmony_ci   * @returns { boolean } true if save data successfully, otherwise false.
32661847f8eSopenharmony_ci   * @syscap SystemCapability.Ability.AbilityRuntime.Core
32761847f8eSopenharmony_ci   * @StageModelOnly
32861847f8eSopenharmony_ci   * @atomicservice
32961847f8eSopenharmony_ci   * @since 11
33061847f8eSopenharmony_ci   */
33161847f8eSopenharmony_ci  function saveAppState(context?: UIAbilityContext): boolean;
33261847f8eSopenharmony_ci}
33361847f8eSopenharmony_ci
33461847f8eSopenharmony_ciexport default appRecovery;
335