Patent Description:
Document "<NPL>) describes how Android phones will often contain apps that you aren't able to uninstall. Even if they aren't being used, these apps may still run in the background eating up system resources and/or spamming with notifications. Android apps can be disabled. Once disabled, these apps won't appear in the primary app list. These apps can also be get those apps back by re-enabling them. There are apps running that perform that perform important functions, so care should be taken when disabling apps randomly.

Document "<NPL>) comprises two screenshots. On the left, the screenshot depicts a pop-up message that recites "YouTube has stopped" and "Close app". On the right, the other screenshot depicts a list of applications that are disabled.

In general, techniques of this disclosure may enable a computing device to maintain operational stability, even if in response to user input, the computing device disables an application that provides, or is at least tightly coupled to, one or more "essential" system functions or services. In other words, the techniques may enable essential functions and services of an application to remain operational, even if the application itself has been marked as disabled and therefore is hidden and not discoverable by the end user.

As one example, an application manager component (e.g., part of an operating system) of a computing device may maintain a record of each application that is installed on the computing device. The record may include information (e.g., a flag) indicating whether each application is "passive-enabled" or not. Being passive-enabled means that an application provides hidden or essential functionality, or access to hidden or essential services, that are relied on by or possibly integrated within the operating system of the computing device.

An application may execute in two of three operational states including: <NUM>) an enabled state in which the application is fully functional and discoverable by an end user, and either <NUM>) a disabled state in which the application is completely inoperable and undiscoverable by an end user, or <NUM>) a passive state in which the application is only partially enabled to perform the essential or hidden functions of the application, while also being undiscoverable by an end user.

Each application, whether passive-enabled or not, may start out being in an "enabled" operational state, for instance in response to a system initialization or reinitialization. However, when an enabled application is requested to be disabled (e.g., based on user input), the application manager component may change the operational state of the application from enabled to either "disabled" or "passive". If the application record indicates that the application is not "passive-enabled" and therefore does not provide any hidden or essential functionality or access to hidden or essential services, the application management component may disable the application entirely. However, if the application is "passive-enabled", the application manager component may instead of disabling the application outright, configure the application to operate in a passive state in which the hidden or essential functions and services remain enabled and accessible by the operating system, but not accessible by any other applications executing at the computing device. Said differently, while operating in a passive state, all non-essential functions or services of an application may be disabled, the application may no longer be discoverable by an end user or other applications executing at the computing device, yet all essential functions or services provided by the application (i.e., those services or functions that are necessary to maintain operational continuity of the operating system of computing device) may remain enabled.

In this way, the techniques may enable more user control over which applications are installed and relied on by a computing device, without disrupting operational continuity and possibly stability of the system, even if an application that provides hidden functionality to the computing device, is disabled. That is, the described techniques may enable any application installed at a computing device to appear hidden or "disabled" without causing other disruptions to the computing device due to various features or services provided by the application from being accessed by the operating system of the computing device. A computing device that operates according to the described techniques may be more customizable and better tailored for its intended operational use. Even if applications provide some essential functionality, a user can still remove those applications, without disrupting the operating system that relies on their essential functionality.

In one example, a method is described that includes receiving, by a computing device, via a user interface of the computing device, user input to disable an application; determining, by the computing device, whether the application is passive-enabled; responsive to determining that the application is a passive-enabled, causing, by the computing device, the application to operate in a passive state, wherein while the application operates in the passive state, one or more essential functions or services provided by the application that are required by an operating system of the computing device are enabled and any remaining functions or services provided by the application are disabled; and after causing the application to operate in the passive state: outputting, by the computing device, via the user interface of the computing device, an indication that the application has been disabled in response to the user input to disable the application; and performing, by the computing device, one or more operations that rely on the one or more essential functions or services provided by the application.

In another example, a computing device is described that includes a storage device and at least one processor. The at least one processor is configured to receive, via a user interface of a computing device, user input to disable an application; determine whether the application is passive-enabled; responsive to determining that the application is a passive-enabled, cause the application to operate in a passive state, wherein while the application operates in the passive state, one or more essential functions or services provided by the application that are required by an operating system of the computing device are enabled and any remaining functions or services provided by the application are disabled; and after causing the application to operate in the passive state: output, via the user interface of the computing device, an indication that the application has been disabled in response to the user input to disable the application; and perform one or more operations that rely on the one or more essential functions or services provided by the application.

In another example, a computer-readable storage medium is described having instructions that, when executed, cause at least one processor of a computing device to: receive, via a user interface of a computing device, user input to disable an application; determine whether the application is passive-enabled; responsive to determining that the application is a passive-enabled, cause the application to operate in a passive state, wherein while the application operates in the passive state, one or more essential functions or services provided by the application that are required by an operating system of the computing device are enabled and any remaining functions or services provided by the application are disabled; and after causing the application to operate in the passive state: output, via the user interface of the computing device, an indication that the application has been disabled in response to the user input to disable the application; and perform one or more operations that rely on the one or more essential functions or services provided by the application.

In yet another example, a system is described including means for receiving user input to disable an application; means for determining whether the application is passive-enabled; responsive to determining that the application is a passive-enabled, means for causing the application to operate in a passive state, wherein while the application operates in the passive state, one or more essential functions or services provided by the application that are required by an operating system of the computing device are enabled and any remaining functions or services provided by the application are disabled; and after causing the application to operate in the passive state: means for outputting an indication that the application has been disabled in response to the user input to disable the application; and means for performing one or more operations that rely on the one or more essential functions or services provided by the application.

<FIG> is a conceptual diagram illustrating an example system configured to disable an application executing at the computing device, without disrupting at least some of the functions or services that the application provides to the computing device, in accordance with one or more aspects of the present disclosure. System <NUM> includes computing system <NUM> in communication, via network <NUM>, with computing device <NUM>. Although operations attributed to system <NUM> are described primarily as being performed by a single computing device <NUM> and/or a single computing system <NUM>, in some examples, the operations of system <NUM> may be performed by additional or fewer computing devices and computing systems than what is shown in <FIG>. For example, some of the operations attributed to computing system <NUM> may be performed by computing device <NUM>, or vice versa.

Network <NUM> represents any public or private communications network, for instance, cellular, Wi-Fi, and/or other types of networks, for transmitting data between computing systems, servers, and computing devices. Network <NUM> may include one or more network hubs, network switches, network routers, or any other network equipment, that are operatively inter-coupled thereby providing for the exchange of information between computing system <NUM> and computing device <NUM>. Computing system <NUM> and computing device <NUM> may transmit and receive data across network <NUM> using any suitable communication techniques.

Computing system <NUM> and computing device <NUM> may each be operatively coupled to network <NUM> using respective network links. The links coupling computing system <NUM> and computing device <NUM> to network <NUM> may be Ethernet, ATM or other types of network connections, and such connections may be wireless and/or wired connections.

Computing system <NUM> includes remote service module <NUM>. Computing device <NUM> includes application manager module <NUM>, application modules 122A and 122B (collectively "application modules <NUM>"), and user interface component ("UIC") <NUM> which is configured to output user interface <NUM>.

Computing system <NUM> represents any combination of one or more computers, mainframes, servers (including so-called "blades"), cloud computing systems, or other types of remote computing systems capable of exchanging information via network <NUM> as part of a remote computing service. For example, computing system <NUM> may provide access to an application provider service (e.g., application store, application data base, application repository, or other collection of applications) from which a client device, such as computing device <NUM>, can download an application executable that the client device may then execute locally on-device. As another example, computing system <NUM> may provide access to an update service managed by an application developer or operating system developer that rolls-out patches, updates, fixes, and the like to applications or an operating system executed by client devices, such as computing device <NUM>.

Computing device <NUM> represents any suitable computing device or computing system capable of exchanging information via network <NUM> to access the remote computing service provided by computing system <NUM>. For example, computing device <NUM> may be a mobile device from which a user provides inputs to interact with a user interface associated with computing system <NUM>, e.g., to cause computing device <NUM> to download application executables or updates from computing system <NUM> for local installation on computing device <NUM>. Examples of computing device <NUM> include mobile phones, tablet computers, laptop computers, desktop computers, servers, mainframes, blades, wearable devices (e.g., computerized watches etc.), home automation devices, assistant devices, gaming consoles and systems, media players, e-book readers, television platforms, automobile navigation or infotainment systems, or any other type of mobile, non-mobile, wearable, and non-wearable computing devices configured to execute applications obtained from a remote computing service, such as that provided by computing system <NUM>.

UIC <NUM> of computing device <NUM> may function as an input and/or output device for computing device <NUM>. UIC <NUM> may be implemented using various technologies. For instance, UIC <NUM> may function as an input device using presence-sensitive input screens, microphone technologies, infrared sensor technologies, or other input device technology for use in receiving user input. UIC <NUM> may function as output device configured to present output to a user using any one or more display devices, speaker technologies, haptic feedback technologies, or other output device technology for use in outputting information to a user.

Modules <NUM>, <NUM>, and <NUM> may perform operations described herein using software, hardware, firmware, or a mixture of hardware, software, and firmware residing in and/or executing at computing device <NUM> and computing system <NUM>. Computing device <NUM> and computing system <NUM>, may execute, respectively, modules <NUM> and <NUM>, and module <NUM> with multiple respective processors or multiple respective devices, as respective virtual machines executing on underlying hardware, as one or more respective services of an operating system or computing platform, and/or as one or more respective executable programs at an application layer of a respective computing platform.

Remote service module <NUM> of computing system <NUM> controls operations of computing system <NUM> for implementing a remote computing service. In some examples, remote service module <NUM> may output a user interface from which a user of a client device, such as computing device <NUM>, can provide inputs to interact with the remote service. For example, in the context of an application provider service or an update service, remote service module <NUM> may obtain, via a user interface, user inputs to select applications for download onto computing device <NUM> or to select updates, patches, or fixes for installation at computing device <NUM>. An application provider service and an update service are just two example services that may be provided by remote service module <NUM>. Other examples of services that may be provided by remote service module <NUM> include a gaming service, a business or productivity software service, a communications service, or other cloud-based computing service.

Application manager module <NUM> of computing device <NUM> manages the applications installed on computing device <NUM>, including performing operations to enable, disable, install, or uninstall applications. Application manager module <NUM> may be a subroutine or part of an operating system, operating platform, or other application or executable installed on computing device <NUM>. Application manager module <NUM> may receive, from remote service module <NUM> and via network <NUM>, in addition to application related files (e.g., libraries, executables, source files, and the like), updates, application recommendations, and other information, an indication of whether any applications of computing device <NUM> are passive-enabled or not.

Application manager module <NUM> may cause UIC <NUM> to display user interface <NUM>. User interface <NUM> represents a user interface for providing user controls application manager module <NUM>. Specifically, user interface <NUM> enables a user to indicate to application manager module <NUM> whether applications that are installed onto computing device <NUM> should be enabled or disabled. For example, a user may provide user input <NUM> to deselect application module 122B which may cause application manager module <NUM> to transition application module 122B out of operating in an enabled state and therefore appear to the user to be "disabled". However, as will become clear from the rest of the description of <FIG>, whether application manager module <NUM> causes application module 122B to truly be disabled, or instead to be executing in a passive state, depends on whether application module 122B is passive-enabled or not.

Each of application modules <NUM> represents an independent, machine-readable, executable or package configured to operate at an application layer of computing device <NUM>. Computing device <NUM> may execute instructions associated with each of application modules <NUM>, to perform a function or provide a service. Application manager module <NUM> manages application modules <NUM>, for example, by controlling whether each operates in an enabled or either a passive or disabled state.

Although examples of application modules <NUM> are too numerous to list in their entirety, application modules <NUM> may include, to provide a few examples of categories of different applications, business or productivity applications, developer tools, educational applications, entertainment applications, financial applications, game applications, graphic or design applications, health and fitness applications, lifestyle or assistant applications, medical applications, music applications, news applications, photography, video, and other multimedia applications, reference applications, social networking applications, sports applications, travel applications, utility applications, weather applications, communication applications, calendar applications, or any other category or type of application.

Each of application modules <NUM> may be loaded or installed onto computing device <NUM> during manufacturing of computing device <NUM> or prior to delivery of computing device <NUM> to an end user. As one example, an original equipment manufacturer (OEM) of computing device <NUM> may load application modules <NUM> onto computing device <NUM> during final assembly. As another example, a business partner to the OEM, such as a telecommunications service provider (e.g., a mobile network provider) may load application modules <NUM> onto computing device <NUM> as a condition to computing device <NUM> communicating on their respective communications network.

Each of application modules <NUM> may be associated with respective "feature strings" used by remote services, such as the remote service provided by remote service module <NUM>, to determine capabilities of computing device <NUM>. The feature strings associated with application modules <NUM> may be hardcoded into an operating system of computing device <NUM> and shared with remote service module <NUM> when computing device <NUM> first connects to network <NUM>, e.g., during initialization or reinitialization. The feature strings may indicate to remote service module <NUM>, which applications are installed on computing device <NUM> and of the applications installed on computing device <NUM>, what are each of the application's respective capabilities (e.g., passive-enabled, not passive-enabled, etc.).

Each of application modules <NUM> may execute in two of three operational states including: <NUM>) an enabled state in which the application is fully functional and discoverable by an end user, and either <NUM>) a disabled state in which the application is completely inoperable and undiscoverable by an end user, or <NUM>) a passive state in which the application is only partially enabled to perform the essential or hidden functions of the application, while also being undiscoverable by an end user. Some of application modules <NUM> may be passive-enabled and therefore configured to operate in either the enabled state or the passive state and some of application modules <NUM> may not be passive-enabled and therefore configured to operate in either the enabled state or the disabled state. For ease of description, application module 122B is an example of a passive-enabled application and application module 122A is an example of an application that is not passive-enabled.

By being passive enabled, application module 122B may continue to perform various functions relied on by an operating system of computing device <NUM> even though application module 122B is disabled and not accessible to a user or other applications executing at computing device <NUM>. In other words, an operating system or operating platform of computing device <NUM> may continue to rely on at least some aspect of application module 122B to perform one or more hidden operating system functions even when access to application module 122B, by any other entity (e.g., a user, a different application, etc.), is restricted.

As one example, application module 122B may be a passive-enabled search application that, in addition to performing user-visible search functions and handling search operations for various other applications executing at computing device <NUM>, performs other functions on behalf of an operating system of computing device <NUM>. For example, application module 122B may provide an interface from which application manager module <NUM> can communicate with remote service modules <NUM>. The interface associated with application module 122B may not otherwise be available to other applications that execute outside of application module 122B.

Application module 122A may be a different search application, that is not passive-enabled, and is configured to perform search related functions that are visible to the user and/or other applications executing at computing device <NUM>. A user of computing device <NUM> may prefer to only use application module 122A to perform search related operations and therefore choose to disable application module 122B (e.g., to make room for the installation of application modules 122A or other applications). However, application module 122A may not be capable of performing any of other functions performed by application module 122B that are relied on by the operating system of computing device <NUM>. Therefore, disabling application module 122B outright may cause computing device <NUM> to be inoperable.

However, because application module 122B is passive-enabled, a user can provide input to computing device <NUM> to "disable" application module 122B (e.g., to make room for application module 122A) without disabling the hidden functions performed by application module 122B that area relied on by the operating system of computing device <NUM>. From a user's point of view, application manager module <NUM> may indicate (e.g., via user interface <NUM>) that application module 122B is disabled. However, from the operating system's point of view, application module 122B appears enabled and continues to perform essential functions or services that are relied on by the operating system.

Application manager module <NUM> is configured to exchange information with remote service module <NUM> to manage passive-enabled and non-passive enabled applications that are installed or about to be installed at computing device <NUM>. For example, application manager module <NUM> may send, to remote service module <NUM>, one or more feature strings that have been hardcoded into an operating system executing at computing device <NUM>. Application manager module <NUM> may receive, from remote service module <NUM> and via network <NUM>, in addition to application related files (e.g., libraries, executables, source files, and the like), updates, application recommendations, and other information, an indication of whether any applications of computing device <NUM> are passive-enabled. Application manager module <NUM> may maintain a record of each application that is installed on computing device <NUM>. The record may include information (e.g., a flag) indicating whether each application module <NUM> is passive-enabled or not passive-enabled.

In order to improve or tailor the service provided to a client device, such as computing device <NUM>, remote service module <NUM> may query each client device for information about the client device's respective capabilities, including, as one example, information about the applications executing at each client device. Remote service module <NUM> may determine the respective capabilities of a client device by analyzing feature strings received from the client device.

For example, during an initialization or reinitialization of computing device <NUM>, application manager modules <NUM> may communicate with remote service module <NUM> to configure computing device <NUM> to work with the service provided by remote service module <NUM>. During initialization or reinitialization, remote service module <NUM> may receive from application manager modules <NUM> one or more feature strings associated with the different applications executing at computing device <NUM>. Based on the feature strings, remote service module <NUM> may provide application manager module <NUM> with feedback about the various applications executing at computing device <NUM>. For example, the feedback may indicate to application manager modules <NUM> how to properly manage the applications executing at computing device <NUM>.

As one example, when computing device <NUM> boots up for a first-time during initialization, or following a system reset during reinitialization, application manager module <NUM> may access remote service module <NUM>. During this initial access, remote service module <NUM> may receive respective feature strings associated with each of application modules <NUM> and output information indicating whether any of application modules <NUM> executing at computing device <NUM> is passive-enabled or not. For example, a feature string associated with application module 122A may indicate application module 122A is not passive-enabled, and remote service modules <NUM> may output a message or other signal that causes application manager module <NUM> maintain application module 122A in either an enabled state or a disabled state. Whereas, a feature string associated with application module 122B may indicate application module 122B is passive-enabled, and application manager modules <NUM> may therefore maintain application module 122B in either an enabled state or a passive state.

In addition to providing feedback to computing device <NUM> based on the feature strings received from computing device <NUM>, remote service module <NUM> may modify the service provided to computing device <NUM>, based on information contained in the feature strings. For example, remote service module <NUM> may adjust or tailor the types of service provided to computing device <NUM>, based on the capabilities associated with application modules <NUM> that remote service module <NUM> infers from the feature strings. As one example, remote service modules <NUM> may provide a first level of service when a feature string associated with application module 122B indicates application module 122B is a first version from a developer, and remote service module <NUM> may provide a second, different level of service when the feature string associated with application module 122B indicates application module 122B is a second, updated version from the developer.

In this way, the techniques may enable more user control over which applications are installed and relied on by a computing device, without disrupting operational continuity and possibly stability of the system, even if an application that provides hidden functionality to the computing device, is disabled. That is, the described techniques may enable any application installed at a computing device to appear hidden or "disabled" without causing other disruptions to the computing device due to various features or services provided by the application from being accessed by the operating system of the computing device. A computing device that operates according to the described techniques may be more customizable and better tailored for its intended operational use. Even if applications provide some essential functionality, a user can still remove those applications, without disrupting the operating system that relies on their essential functionality. As such, the described techniques further promote operational stability of the operating system, while providing user control over what applications are enabled or not.

<FIG> is a block diagram illustrating an example computing device configured to disable an application, without disrupting essential functions or services that the application provides to the computing device, in accordance with one or more aspects of the present disclosure. Computing device <NUM> of <FIG> is an example of computing device <NUM> of <FIG> and is described in the context of computing device <NUM>. Computing device <NUM> may include some or all of the capabilities of computing device <NUM>. <FIG> illustrates only one particular example of computing device <NUM>, and many other examples of computing device <NUM> may be used in other instances and may include a subset of the components included in example computing device <NUM> or may include additional components not shown in <FIG>.

As shown in the example of <FIG>, computing device <NUM> includes user interface component (UIC) <NUM>, one or more processors <NUM>, one or more input components <NUM>, one or more communication units <NUM>, one or more output components <NUM>, and one or more storage components <NUM>. UIC <NUM> includes display component <NUM> and presence-sensitive input component <NUM>.

Storage components <NUM> of computing device <NUM> also includes operating system module <NUM>, application manager module <NUM>, and application modules 222A through 222N (collectively "application modules <NUM>"). Additionally, storage components <NUM> includes application management data store <NUM>, which may be referred to simply as "data store <NUM>".

Communication channels <NUM> may interconnect each of the components <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, and <NUM> for inter-component communications (physically, communicatively, and/or operatively). In some examples, communication channels <NUM> may include a system bus, a network connection, an inter-process communication data structure, or any other method for communicating data.

One or more input components <NUM> of computing device <NUM> may receive input. Examples of input are sensor, tactile, audio, and video input. Input components <NUM> of computing device <NUM>, in one example, includes a presence-sensitive display, touch-sensitive screen, sensor, mouse, keyboard, voice responsive system, video camera, microphone or any other type of device for detecting input from a human or machine. In some examples, input components <NUM> include one or more location sensors (GPS components, Wi-Fi components, cellular components), one or more temperature sensors, one or more movement sensors (e.g., accelerometers, gyros), one or more pressure sensors (e.g., barometer), one or more ambient light sensors, and one or more other sensors (e.g., microphone, camera, infrared proximity sensor, hygrometer, and the like).

One or more output components <NUM> of computing device <NUM> may generate output. Examples of output are tactile, audio, and video output. Output components <NUM> of computing device <NUM>, in one example, includes a presence-sensitive display, sound card, video graphics adapter card, speaker, cathode ray tube (CRT) monitor, liquid crystal display (LCD), or any other type of device for generating output to a human or machine.

One or more communication units <NUM> of computing device <NUM> may communicate with external devices via one or more wired and/or wireless networks by transmitting and/or receiving network signals on the one or more networks. Examples of communication unit <NUM> include a network interface card (e.g. such as an Ethernet card), an optical transceiver, a radio frequency transceiver, a GPS receiver, or any other type of device that can send and/or receive information. Other examples of communication units <NUM> may include short wave radios, cellular data radios, wireless network radios, as well as universal serial bus (USB) controllers.

UIC <NUM> of computing device <NUM> is an example of UIC <NUM> of computing device <NUM>. For example, UIC <NUM> may display a graphical user interface, such as user interface <NUM>, from which a user of computing device <NUM> may provide input to, or review output from, computing device <NUM>.

UIC <NUM> includes display component <NUM> and presence-sensitive input component <NUM>. Display component <NUM> may be a screen at which information is displayed by UIC <NUM> and presence-sensitive input component <NUM> may detect an object at and/or near display component <NUM>. As one example range, presence-sensitive input component <NUM> may detect an object, such as a finger or stylus that is within two inches or less of display component <NUM>. Presence-sensitive input component <NUM> may determine a location (e.g., an [x,y] coordinate) of display component <NUM> at which the object was detected. In another example range, presence-sensitive input component <NUM> may detect an object six inches or less from display component <NUM> and other ranges are also possible. Presence-sensitive input component <NUM> may determine the location of display component <NUM> selected by a user's finger using capacitive, inductive, and/or optical recognition techniques. In some examples, presence-sensitive input component <NUM> also provides output to a user using tactile, audio, or video stimuli as described with respect to display component <NUM>.

While illustrated as an internal component of computing device <NUM>, UIC <NUM> may also represent and external component that shares a data path with computing device <NUM> for transmitting and/or receiving input and output. For instance, in one example, UIC <NUM> represents a built-in component of computing device <NUM> located within and physically connected to the external packaging of computing device <NUM> (e.g., a screen on a mobile phone). In another example, UIC <NUM> represents an external component of computing device <NUM> located outside and physically separated from the packaging of computing device <NUM> (e.g., a monitor, a projector, etc. that shares a wired and/or wireless data path with a tablet computer).

One or more processors <NUM> may implement functionality and/or execute instructions within computing device <NUM>. For example, processors <NUM> on computing device <NUM> may receive and execute instructions stored by storage components <NUM> that execute the functionality of modules <NUM>, <NUM>, and <NUM>. The instructions executed by processors <NUM> may cause computing device <NUM> to store information within storage components <NUM> during program execution, for example, at data store <NUM>. Examples of processors <NUM> include application processors, display controllers, sensor hubs, and any other hardware configure to function as a processing unit. Modules <NUM>, <NUM>, and <NUM> may be operable by processors <NUM> to perform various actions or functions of computing device <NUM>.

One or more storage components <NUM> within computing device <NUM> may store information for processing during operation of computing device <NUM> (e.g., computing device <NUM> may store data accessed by modules <NUM>, <NUM>, and <NUM> during execution at computing device <NUM>). In some examples, storage component <NUM> is a temporary memory and in other examples, storage component <NUM> is a computer-readable storage medium.

As a memory, a primary purpose of storage component <NUM> may not be configured for long-term storage but rather, may be configured for short-term storage of information as volatile memory and therefore not retain stored contents if computing device <NUM> is powered off. Examples of volatile memories include random access memories (RAM), dynamic random access memories (DRAM), static random access memories (SRAM), and other forms of volatile memories known in the art. Storage components <NUM>, in some examples, also include one or more computer-readable storage media. Storage components <NUM> may be configured to store larger amounts of information than volatile memory.

Storage components <NUM> may be configured for long-term storage of information as non-volatile memory space and retain information after power on/off cycles. Examples of non-volatile memories include magnetic hard discs, optical discs, floppy discs, flash memories, or forms of electrically programmable memories (EPROM) or electrically erasable and programmable (EEPROM) memories. Storage components <NUM> may store program instructions and/or information (e.g., data) associated with modules <NUM>, <NUM>, and <NUM>, as well as data store <NUM>.

Operating system module <NUM> manages resources associated with computing device <NUM> to enable hardware, software, and firmware components to perform various functions or actions. Operating system module <NUM> may also be referred to as an operating platform. Operating system module <NUM> may perform various system functions, including managing a file system, performing virtual and/or physical memory allocations, allowing customizations of settings, and other functions. Operating system module <NUM> may include application manager module <NUM> and in some cases, may rely on passive-enabled applications, even when the passive-enabled applications are enabled, to perform hidden functions.

Application modules 222A through 222N (collectively "application modules <NUM>") are a collection of passive-enabled and not, passive-enabled applications executing at computing device <NUM>. Application module 222A may be a passive-enabled application, similar to application module 122B and application module 222N may be not be passive-enabled, similar to application module 122A.

Application manager module <NUM> is an example of application manager module <NUM> of <FIG> and manages the applications installed on computing device <NUM>, including performing operations to enable, disable, install, or uninstall applications. Application manager module <NUM> may be a subroutine or otherwise called on by operating system module <NUM>, to perform application management functions on behalf of operating system module <NUM>.

One management function performed by application manager module <NUM> may include interacting with a remote computing service to configure computing device <NUM> to properly access the remote computing service or properly manage application modules <NUM>. As one example, application manager module <NUM> may manage one or more feature strings associated with operating system module <NUM> and share the feature strings with a remote computing service so that the remote computing service properly handles subsequent interactions with computing device <NUM>. For instance, application manager module <NUM> may send, to remote service module <NUM> of computing system <NUM>, a feature string associated with operating system module <NUM>. In response to sending the feature string, application manager module <NUM> may receive, from remote service module <NUM>, an indication of which, if any, of application modules <NUM> is passive-enabled or not, as indicated by the feature string. Besides receiving an indication of which application modules <NUM> is passive-enabled, application manager module <NUM> may receive other application related information, such as application related files, updates, application recommendations, and other information.

Application manager module <NUM> may maintain a record indicating which application modules <NUM> is passive-enabled. For example, application manager module <NUM> may maintain a list or other suitable data structure indicative of which application modules <NUM> is passive-enabled, at application management data store <NUM>. Application management data store <NUM> may be searchable and in response to a query about a particular one of application modules <NUM>, return information about the particular application, including a flag or other indication as to whether that application module <NUM> is passive-enabled or a current state associated with that application module <NUM>. That way, during future interactions with application modules <NUM>, application manager module <NUM> may query application management data store <NUM> to determine which state any of application modules <NUM> is operating in (e.g., enabled, disabled, or passive) or whether any of application modules <NUM> is passive-enabled, and interact with that application modules <NUM> accordingly.

Application manager module <NUM> may be in charge of transitioning application modules <NUM> in to, and out of, executing in an enabled, or either a passive or disabled state. When any of application modules <NUM> is operating in a passive state, application manager module <NUM> prevents any other of application modules <NUM> from interacting with that application module <NUM> but still allows operating system module <NUM> to utilize any essential system services, as if that application module <NUM> were still enabled.

For example, in response to receiving information from operating system module <NUM> to disable application module 222A, (e.g., based on user inputs at user interface <NUM> or other similar user interface) application manager module <NUM> may cause application module 222A to operate in a passive-state. Application manager module <NUM> may output a broadcast to application module 222A in response to a user input to disable application module 222A. The broadcast, once received by application module 222A, causes application module 222A to transition from operating in an enabled state to operating in the passive state.

After transitioning to the passive state, application module 222A may provide feedback or other acknowledgment to application manager module <NUM> responding to application manager module <NUM> that indeed application module 222A is operating in the passive state. Application manager module <NUM> may record a current state associated with application module 222A at application management data store <NUM> to indicate that application module 222A is operating in the passive-state.

Once operating in a passive-state, application manager module <NUM> or an application module <NUM> itself, may prevent any other application modules <NUM> from accessing functions or services provided by that application module <NUM>. At the same time, once operating in the passive-state, application manager module <NUM> or the application module <NUM> itself, may enable operating system module <NUM> to access any essential functions or services provided by that application module <NUM>. For example, application module 222A may be a search related application that execute searches on a user's behalf or behalf of other application modules <NUM>. When enabled, any of application modules <NUM>, in addition to operating system module <NUM>, may call on application module 222A to execute a search function. However, when executing in the passive state, the search function may only be accessible by operating system module <NUM> and the other application modules <NUM> may have to rely on a different application modules <NUM> or function of operating system module <NUM>, to perform similar search functions.

In some examples, to a user (e.g., via a device settings menu such as user interface <NUM>), any application that operates in a disabled or passive state, may appear to a user to be uninstalled or otherwise removed from computing device <NUM>. In other words, in continuing the above example, even though application module 222A may continue to perform various functions on behalf of operating system module <NUM>, the executable and associate files related to application modules 222A may not be visible from a file system user interface or device settings menu. In some examples, if a user accesses an online application store or other repository (e.g., managed by remote service module <NUM>), a menu associated with the online application store may indicate that application module 222A is uninstalled and not executing on computing device <NUM>.

Then, if the user selects application module 222A for installation, application manager module <NUM> may refrain from downloading, from the remote application repository, an executable package associated with application module <NUM>. And instead, in response to receiving the user input to download and install application module 222A, application manager module <NUM> may output a broadcast that enables application module <NUM>. Upon receipt of the broadcast, application module 222A may transition from operating in the passive state to operating in the enabled state and appear to the user to have recently been downloaded and installed onto computing device <NUM>.

<FIG> are flowcharts illustrating example operations of an example computing system configured to disable an application, without disrupting essential functions or services that the application provides to the computing device, in accordance with one or more aspects of the present disclosure. The processes of <FIG> may be performed by one or more processors of a computing device, such as computing devices <NUM> and <NUM>. The steps of the processes of <FIG> may in some examples, be repeated, omitted, and/or performed in a different order than what is shown in <FIG>. For purposes of illustration, <FIG> are described below within the context of computing device <NUM> of <FIG>.

In view of <FIG>, and in operation, computing device <NUM> may receive, via a user interface of computing device <NUM>, user input to disable an application (<NUM>). For example, a user may interact with an application store or market place or settings menu of computing device <NUM>, via a user interface displayed by UIC <NUM>. Via the user interface, the user may gesture at UIC <NUM> to select a particular application that the user wants to be disabled or uninstalled. For example, the user may select application module 222A to be disabled.

In response to the user input, computing device <NUM> may determine whether the application is passive-enabled (<NUM>). For example, application manager module <NUM> may receive information from UIC <NUM> or operating system <NUM> indicating the user command to disable application module 222A. Application manager module <NUM> may perform a look-up of an identifier associated with application module 222A at data store <NUM> to determine whether application module 222A is passive-enabled or not.

Responsive to determining that the application is passive-enabled (<NUM>, YES branch), computing device <NUM> may cause the application to operate in a passive state (<NUM>). For example, application manager module <NUM> to output information that signals application module 222A to transition from operating in an enabled state to operating in a passive-state. Application module 222A may transition to operating in the passive state and send a message to application manager module <NUM> confirming the transition to passive state.

Computing device <NUM> may output an indication that the application has been disabled (<NUM>). While operating in the passive-state, application module 222A may appear to all other application modules <NUM> to be disabled whereas to operating system module <NUM>, application module 222A may still appear to be enabled. Furthermore, application manager module <NUM> may cause a user interface associated with computing device <NUM> to indicate that application module 222A is disabled. While operating in the passive state, one or more essential functions or services provided by application module 222A may remain enabled and any remaining functions or services provided by application module 222A are disabled. For example, the enabled functions or services may give operating system module <NUM> access to a feature or function of application module 222A whereas the remaining functions, by being disabled, may prevent other application modules <NUM> from accessing any feature or function of application module 222A, including the feature or function available to operating system module <NUM>.

Computing device <NUM> may perform one or more operations that rely on the one or more essential functions or services provided by the application (<NUM>). For example, operating system module <NUM> may rely on user information (e.g., a registration, a certificate, a user identifier, a device identifier, and the like) maintained by application module 222A to interact with a remote computing service, such as remote service module <NUM>. For instance, the user information may enable operating system module <NUM> to continue to interact with remote service module <NUM> whereas other application modules <NUM> may be prevented from interacting with remote service module <NUM> as their access to application module 222A is restricted.

Turning to <FIG>, in operation, after causing the application to operate in the passive state, computing device <NUM> may receive user input to enable the application (<NUM>). For example, via the same user face that allowed the user to disable application module 222A, the user may provide further input at UIC <NUM> to enable application modules 222A.

Computing device <NUM> may cause the application to operate in an enabled state (<NUM>). For example, application manager module <NUM> may receive information about the user input to enable application module 222A and in response output a broadcast that is received by application module 222A (<NUM>). In response to the broadcast, application manager module <NUM> may receive a confirmation from application module 222A that the transition to the enabled state is complete. Application manager module <NUM> may update a record stored at data store <NUM> to indicate a current state of application module 222A as being enabled.

Computing device <NUM> may perform operations that rely on any of the functions or services provided by the application (<NUM>). For example, while application module 222A operates in the enabled state, each of the one or more essential functions or services provided by application module 222A, and any remaining functions or services provided by application module 222A, are enabled and accessible to operating system module <NUM> and any other application modules <NUM>.

Turning now to <FIG>, responsive to determining that the application is passive-enabled (<NUM>, NO branch), computing device <NUM> may cause the application to operate in a disabled state (<NUM>). For example, application manager module <NUM> may output information, such as a broadcast or other operating system to application communication message, that causes application module 222N to transition from operating in an enabled state to operating in a disabled state. Application module 222N may transition to operating in the disabled state and send a message back to application manager module <NUM> confirming the transition to disabled state. When operating in the disabled state, all functions or services provided by application module 222N are disabled, meaning that none of the other application modules <NUM> and operating system module <NUM> may not access any function or service provided by application module 222N.

Computing device <NUM> may output an indication that application module 222N has been disabled in response to the user input to disable the application (<NUM>). For example, in response to receiving a confirmation from application module 222N that the transition to the disabled state is complete, application manager module <NUM> may update the record stored at data store <NUM> to indicate a current state of application module 222N as being disabled.

Computing device <NUM> may refrain from performing one or more operations that rely on the functions or services provided by the application (<NUM>). In other words, the functions or services provided by application module 222N may be completely disabled and unavailable to any other application modules <NUM> or operating system module <NUM> when application modules 222N operates in the disabled state.

Computing device <NUM> may perform operations <NUM>-<NUM> to enable application modules 222N, as described above in reference to <FIG>.

If implemented in software, the functions may be stored on or transmitted over, as one or more instructions or code, a computer-readable medium and executed by a hardware-based processing unit. In this manner, computer-readable media generally may correspond to (<NUM>) tangible computer-readable storage media, which is non-transitory or (<NUM>) a communication medium such as a signal or carrier wave.

In addition, in some aspects, the functionality described herein may be provided within dedicated hardware and/or software modules.

Rather, as described above, various units may be combined in a hardware unit or provided by a collection of interoperable hardware units, including one or more processors as described above, in conjunction with suitable software and/or firmware.

Claim 1:
A computer-implemented method, comprising:
receiving (<NUM>), by a computing device (<NUM>, <NUM>), via a user interface (<NUM>, <NUM>) of the computing device (<NUM>, <NUM>), user input (<NUM>) to disable an application (122A, 122B, <NUM>);
determining (<NUM>), by the computing device (<NUM>, <NUM>), whether the application (122A, 122B, <NUM>) is passive-enabled, wherein:
an application which is passive-enabled is configured to operate in either an enabled state or a passive state; and
an application which is not passive-enabled is configured to operate in either an enabled state or a disabled state;
responsive to determining that the application (122A, 122B, <NUM>) is passive-enabled, causing (<NUM>), by the computing device (<NUM>, <NUM>), the application (122A, 122B. <NUM>) to operate in the passive state, wherein while the application (122A, 122B, <NUM>) operates in the passive state, one or more essential functions or services provided by the application (122A, 122B, <NUM>) that are required by an operating system (<NUM>) of the computing device (<NUM>, <NUM>) are enabled and any remaining functions or services provided by the application (122A, 122B, <NUM>) are disabled; and
after causing (<NUM>) the application (122A, 122B, <NUM>) to operate in the passive state:
outputting (<NUM>), by the computing device (<NUM>, <NUM>), via the user interface (<NUM>, <NUM>) of the computing device (<NUM>, <NUM>), an indication that the application (122A, 122B, <NUM>) has been disabled in response to the user input (<NUM>) to disable the application (122A, 122B, <NUM>); and
performing (<NUM>), by the computing device (<NUM>, <NUM>), one or more operations that rely on the one or more essential functions or services provided by the application (122A, 122B, <NUM>).