Locating files using persistent and generic file identifiers

By using long -lasting and universal file identification and content URI, the difficulty of positioning and accessing or moving files is solved, and the performance and user experience of computing devices are improved.

CN119357492APending Publication Date: 2025-01-24MICROSOFT TECHNOLOGY LICENSING LLC
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
CN202411369825.0
Authority / Receiving Office
CN · China
Patent Type
Applications(China)
Current Assignee / Owner
Priority Date
2018-03-12
Filing Date
2019-03-02
Publication Date
2025-01-24

AI Technical Summary

Technical Problem

The prior art has difficulties in locate and accessing previously used files, especially after the files are renamed or moved, resulting in the user spending a lot of computing resources for searching and browsing.

Method used

Using persistent and universal file identifiers, files can be accurately located even if they are renamed or moved by generating content Uniform Resource Identifiers (URIs). The URI includes a file protocol URI and a query string. The query string contains object ID attributes, volume ID attributes, known folder attributes, etc., and is used to locate files.

Benefits of technology

Reducing the need for users to search and browse when locating files reduces reliance on processor cycles and memory, improves computing device performance, and reduces user frustration.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN119357492A_ABST
    Figure CN119357492A_ABST
Patent Text Reader

Abstract

Embodiments of the present disclosure relate to locating files using persistent and generic file identifiers. Files may be located using persistent and generic file identifiers. The content URI includes a file protocol URI that specifies to the file path. A file protocol URI includes a query string specifying attributes of a file usable to locate the file, such as an object ID attribute specifying a GUID of the file and a volume ID attribute specifying a GUID of a storage volume storing the file. Even if the file has been moved, renamed, or accessed on a different computing device, the content URI may be utilized to locate the file using the file protocol URI and its associated query string. Operations may then be performed using the file, such as resuming previously performed activities using the file.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] Divisional Application Instructions

[0002] This application is a divisional application of the Chinese invention patent application with the international application date of March 2, 2019, which entered the Chinese national phase on September 11, 2020, with national application number 201980018894.8 and named “Locating files using persistent and universal file identifiers”. Technical Field

[0003] Embodiments of the present disclosure are directed to using persistent and universal file identifiers to locate files. Background Art

[0004] Modern computing devices enable users to perform a seemingly wide variety of activities. As a result, users of such computing devices typically engage in many different types of activities every day, such as performing productivity activities such as creating documents in word processing applications, engaging in creative activities such as editing photos, and enjoying entertainment activities such as watching streaming movies.

[0005] Because computing users engage in a large number of activities, it is difficult for users to resume those activities at a later time, especially when those activities were performed a long time in the past. Therefore, users often perform searches to locate files related to previously performed activities in order to resume those activities. For example, a user may search for a word processing file that they previously edited in order to resume editing the file. However, searching for files related to previously performed activities in this manner can utilize a large amount of computing resources, such as processor cycles and memory.

[0006] To address the above problems, some computing devices provide mechanisms for allowing users to quickly access previously used files. For example, some computing devices provide a recently used file list that identifies some files recently accessed by the user. When a file identified in the recently used file list is selected, an application associated with the file is executed and the file is opened. Some mechanisms for accessing previously used files, such as the recently used file list, include entries corresponding to files accessed on multiple devices associated with the same user.

[0007] However, in many scenarios, the mechanism for accessing recently used files does not work. For example, the location of a file identified in a recently used file list may not be identifiable if the file has been renamed or moved since the last time it was accessed. This problem may be exacerbated in scenarios where the recently used file list identifies files that have been accessed on multiple user devices. For example, if a user selects a file in a recently used file list that was accessed on another computing device of their computing device, the file may not be located if it is stored in a different location on each device. This may occur, for example, if the file is synchronized between devices but is stored in a different location on each device, or if the file is located on removable media that is assigned a different drive letter on each device.

[0008] Because the mechanisms for accessing previously used files do not work in many scenarios, users often resort to searching for previously used files to resume previous activities. This may include, for example, performing a text search for previously used files, or browsing files using a graphical user interface ("GUI"). In either case, and as described above, searching or browsing for files related to previous activities in this manner may utilize a large amount of computing resources, such as processor cycles and memory. This may also be very frustrating for computer users.

[0009] In a related scenario, a user may receive a traditional hyperlink from another user. However, the file referenced by the hyperlink may be renamed or moved after the creation of the hyperlink. As a result, the hyperlink will not be usable to access the referenced file. This may also frustrate users and cause them to search for the referenced file in the manner described above, thereby unnecessarily utilizing computing resources such as processors, memory, and network bandwidth.

[0010] It is with respect to these and other technical challenges that the present disclosure is presented. Summary of the invention

[0011] This article describes a technique for locating files using persistent and universal file identifiers. Through implementation of the techniques disclosed herein, users can quickly locate files even if the files have been moved or renamed. This mechanism can reduce or eliminate the need for users to search or browse for files in scenarios such as those described above, and therefore can improve the performance of computing devices implementing the disclosed techniques by reducing the use of computing resources such as processor cycles and memory. Other technical benefits not specifically mentioned herein can also be achieved through implementation of the disclosed subject matter.

[0012] To achieve the technical benefits briefly mentioned above, a computing device is provided that is configured to generate a content uniform resource identifier ("URI"). The content URI includes data that can be used to locate a file even if the file has been renamed or moved. In particular, the content URI includes a file protocol URI that specifies a path to a file on a computing system. The content URI may alternatively specify a URI provided by a synchronization service that identifies the file at the synchronization service. The content URI also includes a query string that includes parameters that can be used to locate the file if the file has been moved or renamed.

[0013] In one embodiment, the query string for the file protocol URI includes an object identifier ("ID") attribute that specifies a globally unique identifier ("GUID") or other type of unique identifier for the file referenced by the file protocol URI. The GUID may be assigned and maintained, for example, by an operating system. Other types of identifiers that uniquely identify a file may be used in other embodiments.

[0014] In some embodiments, the query string of the content URI also includes a "known folder" attribute. The known folder attribute indicates whether the file referenced by the file protocol URI is stored in a known folder. A known folder represents a symbolic link to a well-known location, which can be located in different locations throughout the operating system installation. For example, when installing the MICROSOFT WINDOWS operating system, known folders may include the Desktop, Documents, Downloads, and Pictures folders. Other operating systems may use other known folders.

[0015] The query string of the file protocol URI may also specify a volume ID attribute that specifies a GUID or other type of unique identifier of the storage volume that stores the file referenced by the file protocol URI. The GUID defined by the volume ID attribute may also be allocated and maintained by the operating system. It should be understood that the parameters of the above query string are merely exemplary, and in other embodiments, the query string of the content URI may include other parameters that may be used to locate the file. For example, but not limited to, the parameters may include one or more other attributes of the file, one or more attributes associated with the file by the file system, or auxiliary metadata of the file obtained from another source.

[0016] The content URI disclosed herein can be transmitted between computers and is similar to a hyperlink for locating and accessing files. However, as described above, the disclosed content URI and associated computing system provide additional functionality that is not possible with traditional hyperlinks, namely, being able to locate files even if the files have been moved or renamed.

[0017] In one particular embodiment, for example, a content URI can be used to locate and access a file at a computing device (which may be referred to herein as a "second computing device"), even if the file has been moved or renamed, which was utilized during an activity that was previously performed on another user computing device (which will be referred to herein as a "first computing device"). To enable this functionality, in some embodiments, an activity data structure is created that can be used to resume a previously performed file-based activity. The activity data structure includes a content URI and an activation URI such as those described above.

[0018] The activation URI identifies an application used to perform an activity on a file (e.g., a word processing application used to edit a file), and can be used to activate an application associated with the file to resume the activity. As described above, the content URI includes a file protocol URI that specifies a path to a file on a computing system, and a query string that includes parameters that can be used to locate the file even if the file has been moved or renamed. The content URI can be included in the activation URI as a query string parameter.

[0019] In this embodiment, an application, an activity monitor, an operating system component, or another component creates an activity data structure for an activity while or before or after performing the activity (e.g., editing a file in a word processing application). For example, but not limitation, in one embodiment, an application programming interface ("API") is provided for creating a content URI for a file. The API may, for example, receive a request to create a content URI from an application for performing the activity. The request may specify a path to a file on a storage volume on which the file is located.

[0020] In response to receiving such a request, the API locates an attribute associated with the file that can be used to locate the file if the file is renamed or moved. For example, the API can locate an object ID attribute of the file, which includes a GUID or other type of unique identifier for the file. The API can also locate a volume ID attribute that specifies a GUID or other type of unique identifier for the storage volume on which the file is stored. In some embodiments, the API can also determine whether the file is stored in a known folder. In other embodiments, the API can locate other attributes that can be used to locate the file.

[0021] In a scenario where a file is stored in a location synchronized by a file synchronization service (e.g., ONEDRIVE or DROPBOX synchronization service), the API can provide the local file path to the synchronization service. In response, the synchronization service can locate its internal path to the file, such as a fully qualified HTTP URI to the file on the synchronization service, and provide the path to the API. The synchronization service can also provide a unique identifier for the file. The API then stores the internal path and ID used by the synchronization service in the content URI. As will be described in more detail below, the path and ID of the file used by the synchronization service can later be used to obtain the local path of the file on the computing device from the synchronization service.

[0022] Once the API obtains at least some of the above-mentioned properties, the API can create a content URI for the file. As described above, the content URI includes a file protocol URI or a synchronization service path to the file. Also as described above, the file protocol URI includes a query string, which may include an object ID attribute, a volume ID attribute, or a known folder attribute. In other embodiments, the query string may include alternative or additional properties for the file, which may be used to locate the file even if the file has been renamed or moved. It should be understood that although in some embodiments an API is used to create a content URI, in other embodiments, other components such as an application may also create a content URI.

[0023] Once the content URI is created, the API can return the content URI in response to a request received at the API. For example, the API can return the content URI to an application for performing the activity. As will be discussed in detail below, the content URI can then be used to locate the file at the computing device (e.g., if the file has been moved or renamed). In some embodiments, the activity utilizing the file can then be resumed.

[0024] In some embodiments, once the activity data structure has been created, portions of the activity data structure are subsequently exposed to the user through a UI. For example, a UI may be presented that includes UI controls generated from the activity data structure, such as thumbnail images and / or text, that correspond to activities that the user previously engaged in. The UI controls may, for example, identify applications and files used in the activities. UI controls for activities performed by the user on each computing device may also be presented by synchronizing the activity data structure that describes the user's activities between the devices.

[0025] Selection of one of the UI controls (e.g., a thumbnail) by the user in the UI will resume the previous activity using the associated activity data structure. For example, a word processing application may be executed and provided with the file edited during the activity. As another example, a web browser application may be executed and a web page previously visited by the user may be loaded. In other embodiments, other types of UIs for resuming previously executed activities may be utilized.

[0026] In some embodiments, in order to identify the file associated with the activity, the operating system provides an API. In these embodiments, an application or another component can provide a request to the API to request the location of the file associated with the previous activity. The request can include the content URI of the file.

[0027] When the API receives such a request, it can use the content URI to locate the file, even if the file has been renamed, moved, or synchronized to a computing device other than the device on which the activity is executed. For example, the API can use the file protocol URI contained in the content URI to determine whether the file is accessible at its original path (i.e., the path specified by the file protocol URI). This can be used, for example, to locate a file on a computing device that is in the same location as when the content URI was created. In this way, a file protocol URI can be used to locate a file without referring to the properties listed in the query string of the file protocol URI.

[0028] The API may also use a GUID or other type of unique identifier stored in the volumeID attribute of the content URI to determine whether a file is located on a storage volume that was initially accessible on a first computing device but was later accessed on a second computing device. For example, a removable storage device may store a file that was accessed on one computing device and then accessed on another computing device. However, the removable storage device may be assigned a different drive letter on the second computing device, so the path to the file will change. To locate the file in this scenario, the API determines whether a storage volume is available that has a GUID that matches the GUID in the content URI, and if so, searches the storage volume for the file. The API may also utilize the knownfolder attribute of the content URI to determine whether the file is stored in a known folder on the first computing device, and if so, determine whether the file is also stored in the same known folder on the second computing device.

[0029] The API can also locate files that have been synchronized between computing devices (e.g., using a synchronization service such as ONEDRIVE or DROPBOX) but are located on different paths on each computing device. To provide this functionality, the API determines whether the content URI indicates that the file is stored in a location that is synchronized between devices by a synchronization service. For example, the API can determine whether the content URI includes the URI of the file at the synchronization service or other data indicating that the file is stored by the synchronization service. If the file is stored in a synchronized location, the API can provide the synchronization service with the path and ID used by the synchronization service to identify the file in the content URI, and in return, receive data identifying the local file path of the file.

[0030] If the API successfully locates the file, the API can provide data identifying the location of the file in response to the original request. The file can then be accessed at the identified location. For example, an application identified in the activation URI can be activated (e.g., executed if not already executed), and the application can access the file at the location determined by the API. If the API does not locate the file, operations can be performed to alleviate the inability to locate the file and resume the activity, such as, for example, providing a UI to the user prompting the user to manually locate the file, or prompting the user to install a client for the synchronization service (e.g., in the case where the file is stored in the synchronization location but the synchronization client has not yet been installed on the second computing device).

[0031] As briefly discussed above, implementation of the techniques disclosed herein can reduce utilization of processor cycles, memory, and potentially other types of computing resources. Other technical benefits not specifically identified herein can also be realized through implementation of the disclosed techniques. These technical benefits can also benefit users of computing devices implementing the disclosed techniques by reducing the frustration that users sometimes experience when trying to locate files.

[0032] It should be understood that the above technical solutions can be implemented as computer-controlled devices, computer-implemented methods, computing devices or products such as computer-readable media. These and various other features will become apparent by reading the following detailed description and viewing the related drawings.

[0033] This disclosure is provided to introduce a brief description of some aspects of the disclosed technology in a simplified form, some aspects of which will be further described in the detailed description below. This disclosure is neither intended to identify the key features or essential features of the claimed subject matter, nor is it intended that this disclosure be used to limit the scope of the claimed technical solutions. In addition, the claimed technical solutions are not limited to implementations that solve any or all of the shortcomings pointed out in any part of this disclosure. BRIEF DESCRIPTION OF THE DRAWINGS

[0034] Figure 1A is a computer system architecture diagram illustrating aspects of a system for locating files using persistent and universal file identifiers, according to one embodiment;

[0035] Figure 1B is a diagram showing an embodiment according to the present disclosure Figure 1A A flowchart of a routine for various aspects of the operation of a computing device for locating a file using persistent and universal file identifiers is shown;

[0036] Figure 2 is a data structure diagram showing a schematic configuration of an activity data structure and a content URI according to an embodiment disclosed herein;

[0037] Figure 3A is a diagram showing an embodiment according to the present disclosure Figure 1A A software architecture diagram of aspects of operations of a computing device shown in for creating an active data structure including a content URI for a file stored in an asynchronous location;

[0038] Figure 3B is a diagram showing an embodiment according to the present disclosure Figure 1A A software architecture diagram of aspects of operations of a computing device shown in for creating an active data structure including a content URI for a file stored in a synchronization location;

[0039] Figure 3C is a diagram showing an embodiment according to the present disclosure Figure 1A A software architecture diagram of various aspects of the operation of a computing device for identifying a local path of a file stored in a synchronization location as shown in;

[0040] Figure 3D is a diagram showing an embodiment according to the present disclosure Figure 1A A software architecture diagram of aspects of operations of a computing device shown in for creating an activity data structure including a content URI for an application using an activity monitor;

[0041] Figure 4A and Figure 4B is a flowchart showing a routine according to one embodiment disclosed herein, which illustrates Figure 1A Aspects of the operation of a computing device as shown in for determining a location of a file at a computing device using a file protocol URI contained in a content URI;

[0042] Figure 5 is a computer architecture diagram showing a schematic computer hardware and software architecture for a computing device, such as Figure 1AThe computing device shown in , which can implement various aspects of the technology proposed in this article;

[0043] Figure 6 is a network diagram illustrating a distributed computing environment in which aspects of the technology presented herein can be implemented; and

[0044] Figure 7 is a computer architecture diagram illustrating a computing device architecture for a computing device such as Figure 1A A computing device is shown that illustrates aspects of the techniques presented herein that can be implemented. DETAILED DESCRIPTION

[0045] The following specific embodiments are directed to techniques for locating files using persistent and universal file identifiers. As briefly discussed above, implementation of the techniques disclosed herein can reduce the utilization of processor cycles, memory, and other computing resources by reducing or eliminating the need for users to search or browse files. Other technical benefits not specifically identified herein can also be achieved by implementing the disclosed techniques.

[0046] Although the technical solutions described herein are presented in the general context of program modules executed in conjunction with the execution of operating systems and applications on computer systems, those skilled in the art will recognize that other implementations may be performed in conjunction with other types of program modules. Typically, program modules include routines, programs, components, data structures, and other types of structures that perform specific tasks or implement specific abstract data types. In addition, those skilled in the art will appreciate that the technical solutions described herein may be practiced with other computer system configurations, including handheld devices, multiprocessor systems, microprocessor-based or programmable consumer electronics, computing or processing systems embedded in devices (such as wearable devices, automobiles, home automation, etc.), minicomputers, mainframe computers, and the like.

[0047] In the following detailed description, reference is made to the accompanying drawings which form a part hereof and which show by way of illustration specific configurations or examples. Referring now to the drawings, in which like reference numerals represent like elements throughout the several figures, aspects of various techniques for locating files using persistent and universal file identifiers will be described.

[0048] Before discussing the figures, it is noted that various components in the configurations described below may collect and utilize data describing user activities occurring on a computing device. In these embodiments, the user is explicitly informed of the type of data that will be collected. The user may also be asked to explicitly consent to the collection of such data after the data collection is disclosed and before the actual data collection occurs. Furthermore, in these embodiments, no personally identifiable information is collected from the user.

[0049] Figure 1A is a computer system architecture diagram illustrating aspects of a system for locating files using persistent and universal file identifiers according to one embodiment. As described above, persistent and universal file identifiers can be used to locate files used in previously performed computing activities in order to, for example, resume the activity on a different computing device. In this regard, it should be understood that although the embodiments disclosed herein are used to illustrate the use of content URIs to resume previously performed activities, the disclosure presented herein is not limited to this embodiment. On the contrary, the content URIs disclosed herein can be used to locate files in virtually any situation, not just when the files are to be used to resume the activity. Therefore, the embodiments described below with reference to the accompanying drawings are merely exemplary and should not be construed as limiting the claims to any particular embodiment.

[0050] like Figure 1A As shown, user 102 can execute application 106 using first computing device 104A. Application 106 can be a word processing application, a spreadsheet application, a presentation application, a web browser application, or other types of applications. Application 106 can be used to view, create, modify, or perform other operations on file 108. The use of application 106 to view, create, modify, or perform other operations on file 108 is referred to herein as "file-based activity", or simply "activity".

[0051] like Figure 1A As shown, the file 108 may be stored in a storage volume 110A local to the computing device 104A (e.g., a storage volume on a hard drive or solid state drive). The file 108 may also be stored on a removable storage device 112 (e.g., a universal serial bus ("USB") key) attached to the computing device 104A. The file 108 may also be synchronized with and stored at a file synchronization ("sync") service 114, such as a DROPBOX or ONEDRIVE file synchronization service.

[0052] File synchronization service 114 may synchronize files 108 between computing device 104A and one or more other computing devices associated with user 102, such as computing device 104B. Files 108 may also be stored in other locations accessible to computing device 104A, such as a network share, or in other locations accessible via the Internet or another network 120.

[0053] As briefly discussed above and discussed in more detail below, in various embodiments, a user 102 may perform a file-based activity at a first computing device 104A and later resume the activity on another computing device 104B. Using the disclosed techniques, a file 108 required to resume the activity may be located on the second computing device 104B even if the file is not in the same location on the second computing device 104B as it was on the first computing device 104A when the activity was performed. As also briefly discussed above, this mechanism may reduce or eliminate the need for the user 102 to search for or browse for previously used files 108 in the second computing device 104B, and thus may improve the performance of the computing device 104B implementing the disclosed techniques by reducing the use of computing resources such as processor cycles and memory. As also discussed above, the disclosed techniques may be used to locate a file even if the file is not used to perform an activity on another computing device associated with the user.

[0054] To achieve the technical benefits briefly mentioned above and possible other benefits, the computing device 104A on which the file-based activity is executed is configured to generate an activity data structure 116 for use in resuming the previously executed file-based activity. Figure 2 , various aspects of the configuration of the activity data structure 116 in one embodiment will be described.

[0055] like Figure 2 As shown, the activity data structure 116 includes at least an activation URI 202 and a content URI 204. The activation URI 202 identifies an application 106 (e.g., a word processing application used to edit a file) used to perform an activity on a file 108. For example, the activation URI 202 can identify a protocol associated with the application. The activation URI 202 can be used to activate (e.g., execute if not already executed) an application 106 associated with the file 108 to resume a previously executed activity.

[0056] As described above, content URI 204 includes data that can be used to locate file 108 even if file 108 has been renamed, moved, or accessed on a computing device 104B other than computing device 104A on which the activity is being executed. Specifically, in some embodiments, content URI 204 includes a file protocol URI 206A that specifies a path to file 108. File protocol URI 206A complies with RFCs relating to file protocol URIs and can be utilized independently of a query string as described below.

[0057] As described above, attributes 206B-206C may be represented as a query string for file protocol URI 206A. In this manner, content URI 204 may be formatted as a valid protocol URI that is compatible with RFC 3986 and other RFCs related to URIs. In this manner, applications or other components that are not configured to utilize query strings described below may still utilize file protocol URI 206A to locate a referenced file. In some embodiments, activation URI 202 may include content URI 204 as a query string parameter.

[0058] The query string of the file protocol URI 206A includes one or more parameters that can be used to perform a second lookup to locate the file 108. For example, but not limitation, the query string may include an object ID attribute 206B that specifies a GUID or another type of unique identifier corresponding to the file 108. The object ID attribute 206B may include a file ID or another type of data that uniquely identifies or references the file 108. The query string may also include a volume ID attribute 206C that specifies a GUID or another type of unique identifier for the storage volume 110A storing the file 108 at the first computing device 104A.

[0059] In some embodiments, the content URI 204 may also include a "known folder" attribute 206D that indicates whether the file 108 is stored in a known folder. As briefly discussed above, a known folder represents a symbolic link to a well-known location that may be located in different locations throughout an operating system installation. For example, in an installation of a MICROSOFT WINDOWS operating system, known folders may include the Desktop, Documents, Downloads, and Pictures folders. Other operating systems may utilize other known folders. In other embodiments, the query string may also include other attributes 206E or different attributes.

[0060] Example content URIs 204 are listed in Table 1 below.

[0061] file: / / / c: / users / user1 / documents / abc123.txt? volumeid={guid}? knownfolder={guid}? objectid={guid}

[0062] Table 1 – Example content URIs

[0063] The query string of the file protocol URI 206A may include other attributes 206 that may be used to locate the file 108. For example, but not limitation, the attributes 206 may include one or more other attributes of the file 108, one or more attributes associated with the file 108 by the file system, or auxiliary metadata of the file 108 obtained from another source.

[0064] Reference again Figure 1A , Application 106, Activity Monitor ( Figure 1A Not shown, but the following Figure 3D ), operating system components such as APIs ( Figure 1A Not shown but described below Figures 3A-3D Detailed Description) or another component typically creates an activity data structure 116 for an activity when or around the time the user 102 performs the activity. The application 106 that creates the activity data structure 116 also creates an activation URI 202. To create the content URI 204, in some embodiments disclosed herein, the application 106 utilizes the services of an operating system-provided API.

[0065] For example, but not limitation, the application 106 may submit a request to the API to create a content URI 204. The request may include data, such as a file protocol URI, that specifies a path to a file 108 on a storage volume 110A accessible to the first computing device 104A. In response to receiving such a request, the API locates an object ID attribute 206B for the file 108, which includes a GUID or other type of identifier corresponding to the file 108.

[0066] The API may also locate a volume ID attribute 206C that specifies a GUID or other type of identifier for the storage volume 110A on which the file 108 is stored. In some embodiments, the API may also determine whether the file 108 is stored in a known folder, and if so, create a known folder attribute 206D that identifies the known folder in which the file 108 is stored. The values ​​of these attributes are maintained by the operating system in some embodiments and obtained by performing an attribute lookup based on the file protocol URI 206A. Other attributes 206E may also be maintained for the file 108 and utilized in the manner described herein.

[0067] Once the API has located the object ID attribute 206B, the volume ID attribute 206C, the known folder attribute 206B, or other attributes 206E, the API can create a content URI 204 for the file 108. As described above, the content URI 204 includes the file protocol URI 206A and a query string including the object ID attribute 206B, the volume ID attribute 206C, and the known folder attribute 206D, which identifies the known folder if the file 108 is stored in the known folder. In other embodiments, the query string may include other attributes 206E. Figure 3A Provide additional details about the process.

[0068] In a scenario where the file 108 is stored at a location on the first computing device 104A that is synchronized by a file synchronization service 114 (e.g., ONEDRIVE or DROPBOX), the API may provide the local path of the file 108 to the synchronization service 114. In response, the file synchronization service 114 may locate its internal path to the file and an identifier for the file 108 and provide this information to the API. The API then stores the path to the file 108 and the unique ID of the file 108 in the content URI 204. As will be described in more detail below, this information may later be used to obtain the local path of the file 108 on the second computing device 104B from the file synchronization service 114. Additional details about this process are described below with respect to Figure 3B supply.

[0069] Once the content URI 204 has been created, the API may return the content URI 204 to the application 106 in response to a request received at the API. As will be discussed in detail below, the content URI 204 may be later used to locate the file 108 at the computing device 104A or the second computing device 104B.

[0070] In some embodiments, once activity data structure 116 has been created, portions of activity data structure 116 are subsequently exposed to user 102 through a UI (not shown in FIG. 1 ). For example, a UI may be presented that includes UI controls generated from activity data structure 116, such as thumbnail images and / or text, that correspond to activities that user 102 previously engaged in.

[0071] The UI controls may, for example, identify the applications 106 and files 108 used during the activity. User 102 selecting one of the UI controls (e.g., a thumbnail image) in the UI will resume the previous activity using the associated activity data structure 116. For example, a word processing application 106 may be executed and provided with the files 108 that were edited during the activity. In other embodiments, other types of UIs for resuming previously executed activities may be utilized.

[0072] It is also possible to present UI controls corresponding to the activities performed on each user computing device by synchronizing the activity data structure 116 describing the user activities between devices 104A and 104B, such as Figure 1A In the example shown, computing devices 104A and 104B. To provide this functionality, in some embodiments, computing devices 104A and 104B may execute an active data synchronization module ( Figure 1A ). The active data synchronization module retrieves the active data structure 116 from the computing device 104A and transmits the active data structure 116 to the active data structure synchronization service 118 via a network 120 such as the Internet.

[0073] The activity data synchronization service 118 receives the activity data structure 116 from the computing device 104A and stores the activity data structure 116 in an appropriate data store. The activity data synchronization service 118 also receives the activity data structure 116 from other computing devices associated with the same user 102, such as Figure 1A The computing device 104B shown in FIG. 1 receives and stores the activity data structure 116 .

[0074] The activity data synchronization service 118 then synchronizes the activity data structure 116 between all computing devices 104 associated with the user 102. The computing devices 104A and 104B can then provide a UI for resuming an activity based on the contents of the activity data structure 116 in the manner described above. Using such a UI and the mechanism described below for locating files 108, the user 102 can resume a previously executed activity on any of their computing devices 104. As described above, the activity data structure 116 and the content URI 204 can be transferred to other computing systems in other ways in other embodiments. Generally, they can be transferred in the same manner as hyperlinks are currently shared between computing devices.

[0075] As described above, when user 102 attempts to resume an activity performed on another computing device 104A on one computing device 104B or otherwise access a file 108 referenced by content URI 204, file 108 may not be stored in the same location as on computing device 104A. This may occur for a variety of reasons. For example, if file 108 is located on a storage volume 110A that was initially accessible at a first computing device 104A but later inaccessible on a storage volume 110B at a second computing device 104B. For example, removable storage device 112 may store file 108 that is accessed on one computing device 104A and then accessed on another computing device 1104B. However, removable storage device 112 may be assigned a different drive letter on second computing device 104B, and therefore, the path of file 108 will be changed.

[0076] The location of the file 108 may also change on the computing device 104B because the location of the file 108 on the computing device 104B is different from the synchronized location of the file 108 on the computing device 104A. The location of the file 108 may also be different between the computing devices 104A and 104B for other reasons not specifically identified herein. The technology disclosed herein provides a mechanism for locating the file 108 at a computing device such as the second computing device 104B. In this way, the file 108 may be used to perform operations, such as resuming activities using the file on another computing device 104B.

[0077] To locate file 108, in some embodiments, the operating system executing on computing device 110B provides an API ( Figure 1A In these embodiments, the application 106 or another component may provide a request to the API for the location of the file 108. The request may include the content URI 204 described above for the file 108.

[0078] When the API receives a request for the location of the file 108, it can utilize the content URI 204 to locate the file 108, even if the file 108 has been renamed or moved. For example, the API can utilize the file protocol URI 206A included in the content URI 204 to determine whether the file 108 is accessible at its original path (i.e., the path specified by the file protocol URI 206A) on the second computing device 104B. This can be used to locate the file 108 at the location specified by the file protocol URI 206A, for example. As described above, any computing system can utilize the file protocol URI 206A to locate the file 108, even applications that are not configured to utilize the parameters set forth in the query string of the file protocol URI 206A.

[0079] The API may also use the GUID stored in the volume ID attribute 206C of the content URI 204 to determine whether the file 108 is located on a storage volume 110 that was initially accessible at the first computing device 104A but was later accessed at the second computing device 104B. As described above, this may occur when a different drive letter is assigned to the removable storage device 112 on the second computing device 104B. To locate the file in this scenario, the API determines whether the storage volume 110 has a GUID that matches the GUID in the volume ID attribute 206C of the content URI 204, and if so, searches for the file 108 in the storage volume 110. The API may also utilize the known folder attribute 206D of the content URI 204 to determine whether the file 108 is stored in a known folder on the first computing device 104A, and if so, determine whether the file 108 is also stored in the same known folder on the second computing device 104B. The API may also utilize other attributes 206E stored in the query string of the file protocol URI 206A.

[0080] The API may also locate a file 108 that has been synchronized between computing devices 104A and 104B (e.g., using a synchronization service such as ONEDRIVE or DROPBOX), but is located at a different path on each computing device 104. To provide this functionality, the API determines whether the file 108 is stored in a location that the file synchronization service 114 synchronizes between devices 104. If the file 108 is stored in a synchronized location, the API may provide the path to the file 108 utilized by the file synchronization service 114 to the file synchronization service 114, and in return, receive data identifying the local path of the file 108 on the second computing device 104B. Figure 3C Provide additional details about the process.

[0081] If the API successfully locates the file 108, the API may respond to the original request, e.g., by providing data identifying a local path of the file 108 at the second computing device 104B. The file 108 may then be accessed at the identified location. For example, the application 106 identified in the activation URI 202 may be activated (e.g., executed if not already executed on the computing device 104B), and the application 106 may access the file 108 at the location determined by the API.

[0082] If the API does not locate file 108, computing device 104B may perform operations that mitigate its inability to resume activity, such as, for example, providing a UI to user 102 to prompt user 102 to manually locate the file, or prompting the user to install a client of file synchronization service 114 (e.g., if file 108 is stored in a synchronization location but a synchronization client is not installed on computing device 104B). Figure 1B-4B Provide additional details about these processes.

[0083] Figure 1B is a flowchart illustrating a routine 150 according to an embodiment disclosed herein, which shows Figure 1A The operations of the computing device 104 shown in FIG. 1 for locating files using persistent and universal file identifiers. Figure 1B In the illustrated embodiment, the identified location of the file 108 is determined and used to resume the previously executed activity. However, it should be understood that the same mechanism can be utilized to locate the file 108 for use in other ways in other implementations.

[0084] It should be understood that this article is about Figure 1B The logical operations described in the drawings and other figures may be implemented as (1) a sequence of computer-implemented actions or program modules running on a computing device and / or (2) as interconnected machine logic circuits or circuit modules within a computing device. The specific implementation of the technology disclosed herein is a matter of choice depending on the performance and other requirements of the computing device. Therefore, the logical operations described herein are variously referred to as states, operations, structural devices, actions, or modules. These states, operations, structural devices, actions, and modules may be implemented with software, firmware, dedicated digital logic, and any combination thereof. It should also be understood that more or fewer operations than those shown in the drawings and described herein may be performed. These operations may also be performed in an order different from the order described herein.

[0085] The routine 150 begins at operation 152, where the application 106 requests a content URI 204 for the file 108. As described above, in some embodiments, the application 106 can request the content URI 204 from an API provided by the operating system. In other embodiments, the application 106 itself can create the content URI 204. In other embodiments, a component other than the API or the application 106 can create the content URI 204.

[0086] From operation 152, routine 150 proceeds to operation 154, where the API or other component creates the requested content URI 204. Figure 3A and 3B Additional details are described regarding one mechanism for creating the content URI 204. From operation 154, the routine 150 proceeds to operation 156.

[0087] At operation 156, the application 106 creates an activity data structure 116 that includes the content URI 204. The application 106 then provides the activity data structure 116 to the activity data structure synchronization service 118. The activity data structure synchronization service 118 then synchronizes the activity data structure 116 with other computing devices associated with the user 102, such as the computing device 104B. The routine 150 then proceeds from operation 156 to operation 158.

[0088] At operation 158, computing device 104 may present a UI through which user 102 may make a request to resume a previously executed activity. For example, user 102 may request to resume an activity originally executed on computing device 104A on computing device 104B. If user 102 requests to resume a previously executed activity, routine 150 proceeds from operation 160 to operation 162.

[0089] At operation 162, the API or another component uses the content URI 204 in the activity data structure 116 to determine the location of the file 108, such as, for example, on the computing device 104B. Figure 4A and 4B Details are provided regarding operations for locating the file 108 using the content URI 206A. The routine 150 then proceeds from operation 162 to operation 164.

[0090] At operation 164, the application 106 identified in the activation URI 202 is activated (eg, executed if not already executed). The file 108 located using the content URI 204 is then provided to the application at operation 166. The routine 150 then proceeds from operation 166 to operation 168, where it ends.

[0091] Figure 3A is a diagram showing an embodiment according to the present disclosure Figure 1A 1 is a software architecture diagram of various aspects of the operation of the computing device 104 for creating an active data structure 116 for a file 108 stored in an unsynchronized location 308 (ie, a location that is not synchronized by the file synchronization service 114).

[0092] like Figure 3AAs shown in FIG. 1 and briefly described above, in some embodiments disclosed herein, the application 106 utilizes the services of an API 304 provided by the operating system to generate a content URI 204. In particular, the application 106 may submit a request 302 to the API 304 to create a content URI 204. The request may include a file protocol URI 206A that specifies a path 332 to a file 108 on a storage volume 110A that is accessible at the first computing device 104A.

[0093] In response to receiving such a request 302, the API 304 locates attributes that can be used to locate the file 108 so as to be included in the query string of the file protocol URI 206A. For example, the API 304 can locate the object ID attribute 206B of the file 108, which includes a GUID or other type of unique identifier corresponding to the file 108. The API 304 also locates the volume ID attribute 206C, which specifies the GUID or another type of unique identifier of the storage volume 110A on which the file 108 is stored. In some embodiments, the API 304 can determine whether the file 108 is stored in a known folder, and if so, create a known folder attribute 206D that identifies the known folder in which the file 108 is stored. The values ​​of these attributes are maintained by the operating system in some embodiments and obtained by performing an attribute lookup based on the file protocol URI 206A. In some embodiments, other attributes 206E of the file 108 that can be used to locate the file 108 can be obtained in a similar manner.

[0094] Once the API 304 has located the object ID attribute 206B, the volume ID attribute 206C, the known folder attribute 206D, and any other attributes 206E, the API 304 may create a content URI 204 for the file 108. As described above, the content URI 204 includes a file protocol URI 206A that includes a query string that specifies one or more of the object ID attribute 206B, the volume ID attribute 206C, the known folder attribute 206D, or the other attributes 206E.

[0095] Once the content URI 204 has been created, the API 304 can then return the content URI 204 to the application 106 in response to the request 302. The application 106 can then create the user activity data structure 116 using the content URI 204. In some embodiments, the content URI 204 can be utilized independently of the user activity data structure 116. As will be discussed in detail below, the content URI 204 can be later used to locate the file 108 at the computing device 104A or at another computing device such as the second computing device 104B to resume the activity utilizing the file 108 or for other purposes.

[0096] Figure 3B is a diagram showing an embodiment according to the present disclosure Figure 1A 304 for creating an activity data structure 116 for a file 108 stored in a sync location 310. In this scenario, the API 304 can provide a local file path 332 to a client 314 of the sync service 114. For example, but not limitation, the API 304 can provide the file path 332 to the sync client 314 executing on the computing device on which the activity is resumed.

[0097] In response to the request 302, the sync client 314 locates an internal path 318 of the file 108 used by the file sync service 114. In some embodiments, the path 318 is a fully qualified HTTP URL assigned to the file 108 by the sync service 114. The sync client 314 may also identify a unique ID, such as a GUID, assigned to the file 108 by the sync service 114. Other types of identifiers may be utilized in other embodiments. In some embodiments, the sync client 314 communicates with the file sync service 114 to obtain the path 318 and the file ID 334 in some embodiments.

[0098] In response to receiving the path 318 and the ID 332, the API 304 stores the path 318 and the ID 332 in the content URI 204. The API 314 then returns the content URI 204 to the application 106 in response to the request 302. As will be described below with respect to Figure 3C As described in more detail, the path 318 and the file ID 334 may be later used to obtain the local path of the file 108 on the second computing device 104B from the file synchronization service 114 .

[0099] Figure 3C is a diagram showing an embodiment according to the present disclosure Figure 1A104 for identifying the location of a file 108, which is stored in a location 310 that is synchronized between computing devices 104 via a file synchronization service 114. To provide this functionality, an application provides a request 320 to the API 304 for the location of the file 108, which includes the above-mentioned Figure 3B The path 318 and file ID 334 for the file 108 are retrieved from the file synchronization service 114 in the described manner.

[0100] In response to receiving the request 320, the API 304 determines whether the file 108 is stored in the sync location 310 based on the path 318 and the ID 334. If the file 108 is stored in the sync location, the API 304 can provide the path 318 and the ID 334 to the file sync client 314 or the file sync service 114, and in return, receive data identifying the local path 332 of the file 108 on the second computing device 104B. The API 304 can then return the local file path 322 to the application 106 in response to the request 320.

[0101] Figure 3D is a diagram showing an embodiment according to the present disclosure Figure 1A FIG. 1 is a software architecture diagram of various aspects of the operation of the computing device 104 for creating an activity data structure 116 including a content URI 204 on behalf of the application 106 using the activity monitor 330. Figures 3A-3C In the described embodiment, the application 106 is configured to generate the activity data structure 116. However, in Figure 3D In the illustrated embodiment, the application 106 itself does not provide support for creating the user activity data structure 116. Instead, another component referred to herein as the activity monitor 330 creates the user activity data structure 116 on behalf of the application 106.

[0102] To provide this functionality, the activity monitor 330 can monitor operations (e.g., file system requests) performed by the applications 106 to identify files 108 utilized by the applications 106. In response, the activity monitor 330 can request the content URI 204 from the API 304 in the manner described above. The activity monitor 330 can then use the content URI 204 to create a user activity data structure 116 on behalf of the applications 106. In this way, activity can be recovered even for those applications 106 that are not specifically configured to generate a user activity data structure 116.

[0103] Figure 4A and Figure 4B is a flowchart illustrating a routine 400 according to one embodiment disclosed herein. Figure 1A1 and 2 . The routine 400 includes aspects of the operation of the computing device 104 for determining the location of the file 108 at the computing device 104 using the file protocol URI 206A included in the content URI 204. The routine 400 begins at operation 402, in which a request for the path of the file 108 is received. For example, in the above-described embodiment, the API 304 receives the file location request 320. If the request includes the content URI 204, the content URI 204 is included in the file protocol URI 206A, then the routine 400 proceeds from operation 404 to operation 406.

[0104] At operation 406, the API 304 attempts to locate the file 108 at the location specified by the file protocol URI 206A in the content URI 204. If the file 108 is located at the path specified by the file protocol URI 206A, the routine 400 proceeds from operation 408 to operation 424, where the file 108 or data identifying the location of the file 108 may be returned to the application 106. If the file 108 is not defined at the location specified by the file protocol URI 206A, the routine 400 proceeds from operation 408 to operation 410.

[0105] At operation 410, the API 304 determines whether the file 108 is stored in the sync location 310 based on the current path of the file 108. If the file 108 is stored in the sync location 310, the routine 400 proceeds from operation 410 to operation 434. If the file 108 is not in the sync location 310, the routine 400 proceeds from operation 410 to operation 412.

[0106] In operation 412, the API 304 may request the operating system to search for the file 108 using the object ID attribute 206B specified in the query string of the file protocol URI 206A. The routine 400 then proceeds from operation 412 to operation 414, where the API 304 determines whether the operating system is able to locate the file 108. If the operating system is able to locate the file 108, the routine 400 proceeds to operation 424, where the file 108 or data identifying the location of the file 108 may be returned to the application 106. If the operating system cannot locate the file 108, the routine 400 proceeds from operation 414 to operation 416.

[0107] At operation 416, the API 304 determines whether a storage volume 110 having a volume ID identical to the volume ID attribute 206C specified in the query string of the file protocol URI 206A is accessible to the computing device 104B. If such a volume is attached to the computing device 104B, the routine 400 proceeds to operation 420, where the API 304 or the operating system may search for the file 108 in the volume using the object ID attribute 206B of the file 108. If the operating system is able to locate the file 108, the routine 400 proceeds to operation 424, where the file 108 or data identifying the location of the file 108 may be returned to the application 106. If the file 108 is not located on a volume, or if no such volume is attached to the computing device 104B, the routine 400 proceeds from operation 422 to operation 426 ( Figure 4B ).

[0108] At operation 426, the API 304 determines whether the file 108 is stored in a known folder on the computing device 104A based on the known folder attribute 206D in the query string of the file protocol URI 206A. If the file 108 is stored in a known folder, the routine 400 proceeds to operation 428, where the computing device 104B searches for the file 108 in the same known folder using the object ID attribute 206B of the file 108. If the file is located, the routine 400 proceeds from operation 430 to operation 424, where the file 108 or data identifying the location of the file 108 can be returned to the application 106. If a known folder is not specified in the content URI 204, or if a known folder is specified but is not located in a known folder on the computing device 104B, the routine 400 proceeds to operation 432.

[0109] At operation 432, an error may be provided to the calling application 106. Additionally, various types of mitigation operations may be performed, such as, for example, providing a UI indicating that the file 108 cannot be located or providing a UI that allows a user to search for the file 108. The routine 400 then ends at operation 442.

[0110] If, in operation 410, the API 304 determines that the file is stored in the sync location 310, the routine 400 proceeds from operation 410 to operation 434 ( Figure 4B ). At operation 434, the API 304 determines whether the sync client 314 is installed on the computing device 104B. If not, the routine 400 may proceed from operation 430 to operation 432, where mitigation operations may be performed, such as, for example, providing a UI to the user prompting the user to install the sync client 314.

[0111] If the sync client 314 is installed, the routine 400 proceeds from operation 434 to operation 436. At operation 432, the API 304 provides the sync service path and ID of the file 108 to the sync client 314. The sync client 314 then uses the sync service path and ID to determine the local path of the file 108 on the computing device 104B. At operation 438, the sync client 314 returns the local path of the file 108 to the API 304.

[0112] From operation 438, the routine 400 proceeds to operation 440, where the API 304 determines whether the file 108 is located on the path specified by the synchronization client 314. If so, the routine 400 proceeds from operation 440 to operation 424, where the file 108 or data identifying the location of the file 108 can be returned to the calling application 106. If not, the routine 400 proceeds from operation 440 to operation 432, where mitigation operations, such as those described above, can be performed. In other embodiments, other auxiliary lookups of the file 108 using other attributes 206E included in the query string of the file protocol URI 206A can be performed.

[0113] Figure 5 is a computer architecture diagram illustrating the architecture of a computer 500 capable of executing the software components described herein. Figure 5 The architecture shown is that for a server computer, mobile phone, e-reader, smart phone, desktop computer, netbook computer, tablet computer, laptop computer, or another type of computing device suitable for executing the software components described herein.

[0114] In this regard, it should be understood that Figure 5 The computer 500 shown may be used to implement a computing device capable of executing any software component presented herein. Figure 5 The described computing architecture can be used to implement Figure 1A The computing device 104 shown and described above is capable of executing an operating system, applications 106, OS API 304, sync client 314, activity monitor 330, and / or any other software components described above.

[0115] Figure 5The illustrated computer 500 includes a central processing unit 502 ("CPU"); a system memory 504 including a random access memory 506 ("RAM") and a read-only memory ("ROM") 508; and a system bus 510 that couples the memory 504 to the CPU 502. A basic input / output system ("BIOS" or "firmware") containing the basic routines that help transfer information between elements in the computer 500, such as during startup, is stored in the ROM 508. The computer 500 also includes a mass storage device 512 for storing an operating system and one or more programs, including, but not limited to, the applications 106. The mass storage device 512 may also be configured to store other types of programs and data, such as active data structures 116 and files 108.

[0116] The mass storage device 512 is connected to the CPU 502 through a mass storage controller (not shown) connected to the bus 510. The mass storage device 512 and its associated computer-readable media provide non-volatile storage for the computer 500. Although the description of computer-readable media contained herein refers to a mass storage device, such as a hard disk, a CD-ROM drive, a DVD-ROM drive, or a USB memory key, it should be understood by those skilled in the art that the computer-readable media can be any available computer storage media or communication media that can be accessed by the computer 500.

[0117] Communication media includes computer readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism, and includes any delivery medium. The term "modulated data signal" refers to a signal that has one or more of its characteristics changed or set in a manner that encodes the information in the signal. By way of example and not limitation, communication media include wired media such as a wired network or a direct wired connection, and wireless media such as acoustic, radio frequency, infrared and other wireless media. Any combination of the above should also be included within the scope of computer readable media.

[0118] By way of example and not limitation, computer storage media may include volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules or other data. For example, computer storage media include, but are not limited to, RAM, ROM, EPROM, EEPROM, flash memory or other solid-state storage technology, CD-ROM, digital versatile disk ("DVD"), HD-DVD, BLU-RAY or other optical storage devices, cassettes, magnetic tape, magnetic disk storage devices or other magnetic storage devices, or any other medium that can be used to store the desired information and can be accessed by the computer 500. In the claims, the phrase "computer storage medium" and its variations do not by themselves include waves or signals or communication media.

[0119] According to various configurations, the computer 500 can operate in a networked environment using logical connections to remote computers through a network such as network 518. The computer 500 can be connected to the network 518 via a network interface unit 520 connected to the bus 510. It should be understood that the network interface unit 520 can also be used to connect to other types of networks and remote computer systems. The computer 500 can also include an input / output controller 516 for receiving and processing input from many other devices, including a keyboard, a mouse, a touch input, or an electronic stylus ( Figure 5 Similarly, the input / output controller 516 may provide output to a display screen or other type of output device (not shown in FIG. Figure 5 (not shown in the figure).

[0120] It should be understood that when loaded into the CPU 502 and executed, the software components described herein, such as the operating system, applications 106, OS API 304, synchronization client 314, and activity monitor 330, can transform the CPU 502 and the entire computer 500 from a general-purpose computing device to a special-purpose computing device customized to facilitate the functions presented herein. The CPU 502 can be composed of any number of transistors or other discrete circuit elements, which can assume any number of states individually or collectively. More specifically, in response to the executable instructions contained in the software modules disclosed herein, the CPU 502 can operate as a finite state machine. These computer executable instructions can transform the CPU 502 by specifying how the CPU 502 transitions between states, thereby transforming the transistors or other discrete hardware elements that constitute the CPU 502.

[0121] Encoding the software modules proposed herein can also transform the physical structure of the computer-readable medium proposed herein. In different implementations of this specification, the specific transformation of the physical structure depends on various factors. Examples of such factors include, but are not limited to, the technology used to implement the computer-readable medium, whether the computer-readable medium is characterized by a primary storage device or an auxiliary storage device, etc. For example, if the computer-readable medium is implemented as a semiconductor-based memory, the software disclosed herein can be encoded on the computer-readable medium by transforming the physical state of the semiconductor memory. For example, the software can transform the state of transistors, capacitors, or other discrete circuit elements that constitute the semiconductor memory. The software can also transform the physical state of these components to store data thereon.

[0122] As another example, magnetic or optical technology can be used to implement the computer-readable medium disclosed herein. In such an implementation, when software is encoded therein, the software proposed herein can transform the physical state of magnetic or optical media. These transformations can include changing the magnetic characteristics of a specific location in a given magnetic medium. These transformations can also include changing the physical characteristics or characteristics of a specific location in a given optical medium to change the optical characteristics of those locations. Without departing from the scope and spirit of this specification, other transformations of physical media are possible, and the aforementioned examples are provided only to facilitate this discussion.

[0123] In view of the above, it should be understood that many types of physical transformations occur in the computer 500 in order to store and execute the software components presented herein. It should also be appreciated that Figure 5 The architecture of the computer 500 shown in the figure or a similar architecture can be used to implement other types of computing devices, including handheld computers, embedded computer systems, mobile devices such as smart phones and tablet computers, and other types of computing devices known to those skilled in the art. It is also contemplated that the computer 500 may not include Figure 5 All components shown can be included in Figure 5 Other components not explicitly shown in the drawings or may be used in conjunction with Figure 5 The architecture shown is a completely different architecture.

[0124] Figure 6 602 in which the software components described herein may be executed. Figure 6 The distributed computing environment 602 shown can be used to execute program code, such as an operating system, application 106, OS API 304, synchronization client 314 and activity monitor 330, which can provide the above-mentioned Figures 1A-4B The functionality described in this document, and / or any other software components described herein.

[0125] According to various implementations, the distributed computing environment 602 operates on, communicates with, or operates as part of a network 608. One or more client devices 606A-606N (hereinafter collectively or generally referred to as "device 606") can communicate with each other via the network 608 and / or other connections ( Figure 6 ) communicates with the distributed computing environment 602.

[0126] In the configuration shown, the devices 606 include: a computing device 606A, such as a laptop, desktop computer, or other computing device; a "tablet" or tablet computing device ("tablet computing device") 606B; a mobile computing device 606C, such as a mobile phone, smart phone, or other mobile computing device; a server computer 606D; and / or other devices 606N. It should be understood that any number of devices 606 can communicate with the distributed computing environment 602. Figure 5 and Figure 7 Two example computing architectures are shown and described for device 606. It should be understood that the exemplary device 606 and computing architectures illustrated and described herein are exemplary and should not be construed as limiting in any way.

[0127] In the configuration shown, the distributed computing environment 602 includes an application server 604, a data storage device 610, and one or more network interfaces 612. According to various implementations, the functionality of the application server 604 can be provided by one or more server computers that are executed as part of the network 608 or in communication with the network 608. The application server 604 can host various services, such as virtual machines, portals, and / or other resources. In the configuration shown, the application server 604 hosts one or more virtual machines 614 for hosting applications, such as program components for implementing an operating system, application 106, OS API 304, synchronization client 314, activity monitor 330, or other functions. It should be understood that this configuration is exemplary and should not be interpreted as limiting in any way. The application server 604 can also host or provide access to one or more web portals, link pages, websites, and / or other information ("web portals") 616.

[0128] According to various implementations, the application server 604 also includes one or more mailbox services 618 and one or more messaging services 620. The mailbox service 618 may include an electronic mail ("email") service. The mailbox service 618 may also include various personal information management ("PIM") services, including but not limited to calendar services, contact management services, collaboration services, and / or other services. The messaging service 620 may include but is not limited to an instant messaging ("IM") service, a chat service, a forum service, and / or other communication services.

[0129] The application server 604 may also include one or more social networking services 622. The social networking services 622 may provide various types of social networking services, including but not limited to services for sharing or publishing status updates, instant messages, links, photos, videos and / or other information, services for commenting or showing interest in articles, products, blogs or other resources, and / or other services. In some configurations, the social networking services 622 are provided by or include FACEBOOK social networking services, LINKEDIN professional networking services, FOURSQUARE geographic networking services, etc. In other configurations, the social networking services 622 are provided by other services, sites and / or providers (which may be referred to as "social networking providers"). For example, some websites allow users to communicate with each other via email, chat services and / or other means during various activities and / or contexts, such as reading published articles, commenting on goods or services, publishing, collaborating, playing games, etc. Other services are also possible and can be considered.

[0130] The social networking services 622 may include comment, blog, and / or microblogging services. Examples of such services include, but are not limited to, the YELP comment service, the KUDZU review service, the OFFICETALK enterprise microblogging service, the TWITTER messaging service, and / or other services. It should be understood that the above list of services is not exhaustive, and for the sake of brevity, many additional and / or alternative social networking services 622 are not mentioned herein. As such, the above configuration is illustrative and should not be construed as limiting in any way.

[0131] Likewise Figure 6 As shown, application server 604 may also host other services, applications, portals, and / or other resources ("other services") 624. These services may include, but are not limited to, streaming video services such as NETFLIX streaming video services and productivity services such as GMAIL email services from GOOGLE INC. Thus, it will be appreciated that the activities performed by users of distributed computing environment 602 may include various mailboxes, messaging, social networking, group conversations, productivity, entertainment, and other types of activities. The use of these services, as well as other services, may be detected and may be used to customize the operation of a computing device using the techniques disclosed herein.

[0132] As described above, the distributed computing environment 602 may include a data store 610. According to various implementations, the functionality of the data store 610 is provided by one or more databases running on or in communication with the network 608. The functionality of the data store 610 may also be provided by one or more server computers configured to host data for the distributed computing environment 602. The data store 610 may include, host, or provide one or more real or virtual data stores 626A-626N (hereinafter collectively and / or generally referred to as "data stores 626"). The data store 626 is configured to host data used or created by the application server 604 and / or other data.

[0133] Distributed computing environment 602 may communicate with or be accessible by network interface 612. Network interface 612 may include various types of network hardware and software for supporting communications between two or more computing devices, including but not limited to device 606 and application server 604. It should be appreciated that network interface 612 may also be used to connect to other types of networks and / or computer systems.

[0134] It should be understood that the distributed computing environment 602 described herein can utilize any number of virtual computing resources and / or other distributed computing functions to implement any aspect of the software elements described herein, which can be configured to perform any aspect of the software components disclosed herein. It should also be understood that the device 606 can also include real or virtual machines, including but not limited to server computers, network servers, personal computers, mobile computing devices, smart phones and / or other devices. In this way, various implementations of the technology disclosed herein can implement any device configured to access the distributed computing environment 602 to utilize the functions described herein.

[0135] Now go to Figure 7 , an illustrative computing device architecture 700 will be described for a computing device such as computing device 104 that is capable of executing the various software components described herein. The computing device architecture 700 may be applied to computing devices that facilitate mobile computing due in part to form factor, wireless connectivity, and / or battery-powered operation. In some configurations, the computing device includes, but is not limited to, a mobile phone, a tablet device, a tablet device, a portable video game device, and the like.

[0136] The computing device architecture 700 is also applicable to Figure 6606 as shown. In addition, various aspects of computing device architecture 700 are applicable to conventional desktop computers, portable computers (e.g., laptop computers, notebook computers, ultraportable computers, and netbooks), server computers, and other computer devices, such as those described herein. For example, the single-touch and multi-touch aspects disclosed herein below can be applied to desktop computers, portable computers, convertible or tablet computer devices that utilize a touch screen or some other touch-enabled device, such as a touch-enabled track pad or a touch-enabled mouse. Computing device architecture 700 can also be used to implement computing device 104 and / or other types of computing devices for implementing or using the functionality described herein.

[0137] Figure 7 The computing device architecture 700 shown includes a processor 702, a memory component 704, a network connection component 707, a sensor component 708, an input / output component 710, and a power component 712. In the configuration shown, the processor 702 is in communication with the memory component 704, the network connection component 706, the sensor component 708, the input / output (I / O) component 710, and the power component 712. Figure 7 Connections are not shown between the individual components shown, but these components can be electrically connected to facilitate interaction and perform device functions. In some configurations, the components are arranged to communicate via one or more buses (not shown).

[0138] The processor 702 includes one or more CPU cores configured to process data, execute computer executable instructions of one or more applications, and communicate with other components of the computing device architecture 700 to facilitate the execution of various functions described herein. The processor 702 can be used to execute various aspects of the software components presented herein, particularly those aspects that utilize, at least in part, support for touch input.

[0139] In some configurations, the processor 702 includes a graphics processing unit ("GPU") configured to accelerate operations performed by the CPU, including, but not limited to, operations performed by executing general scientific and engineering computing applications and graphics-intensive computing applications such as high-resolution video (e.g., 720P, 1080P, 4K and higher), video games, 3D modeling applications, etc. In some configurations, the processor 702 is configured to communicate with a discrete GPU (not shown). In any case, the CPU and GPU can be configured according to a co-processing CPU / GPU computing model, in which the sequential portion of the application is executed on the CPU and the computationally intensive portion is accelerated by the GPU.

[0140] In some configurations, the processor 702 is or is included in a system on a chip ("SoC") together with one or more other components described below. For example, the SoC may include the processor 702, a GPU, one or more network connection components 706, and one or more sensor components 708. In some configurations, the processor 702 is manufactured in part using package-on-package ("PoP") integrated circuit packaging technology. In addition, the processor 702 may be a single-core or multi-core processor.

[0141] The processor 702 may be created in accordance with the ARM architecture licensed from ARM HOLDINGS of Cambridge, England. Alternatively, the processor 702 may be created in accordance with the x86 architecture, such as available from INTEL CORPORATION of Mountain View, California, or the like. In some configurations, the processor 702 is a SNAPDRAGON SoC available from QUALCOMM of San Diego, California, a TEGRA SoC available from NVIDIA of Santa Clara, California, a HUMMINGBIRD SoC available from SAMSUNG of Seoul, South Korea, an Open Multimedia Application Platform ("OMAP") SoC available from TEXASINSTRUMENTS of Dallas, Texas, a customized version of any of the above SoCs, or a proprietary SoC.

[0142] The memory component 704 includes RAM 714, ROM 716, integrated storage memory ("integrated storage") 718, and removable storage memory ("removable storage") 720. In some configurations, RAM 714 or a portion thereof, ROM 716 or a portion thereof, and / or some combination of RAM 714 and ROM 716 are integrated into the processor 702. In certain configurations, ROM 716 is configured to store firmware, an operating system or a portion thereof (e.g., an operating system kernel), and / or a boot loader to load the operating system kernel from the integrated storage device 718 or the removable storage device 720.

[0143] The integrated storage device 718 may include a solid-state memory, a hard disk, or a combination of a solid-state memory and a hard disk. The integrated storage device 718 may be soldered or otherwise connected to a logic board to which the processor 702 and other components described herein may also be connected. In this way, the integrated storage device 718 is integrated into the computing device. The integrated storage device 718 may be configured to store an operating system or portions thereof, application programs, data, and other software components described herein.

[0144] The removable storage device 720 may include a solid-state memory, a hard disk, or a combination of solid-state memory and a hard disk. In some configurations, the removable storage device 720 is provided in place of the integrated storage device 718. In other configurations, the removable storage device 720 is provided as an additional optional storage device. In some configurations, the removable storage device 720 is logically combined with the integrated storage device 718 so that the total available storage device is available and displayed to the user as the total combined capacity of the integrated storage device 718 and the removable storage device 720.

[0145] The removable storage device 720 is configured to be inserted into a removable storage memory slot (not shown) or other mechanism through which the removable storage device 720 is inserted and secured to facilitate a connection through which the removable storage device 720 can communicate with other components of the computing device, such as the processor 702. The removable storage device 720 can be embodied in various memory card formats, including but not limited to PC card, COMPACTFLASH card, memory stick, secure digital ("SD"), miniSD, microSD, universal integrated circuit card ("UICC") (such as subscriber identity module ("SIM") or universal SIM ("USIM")), proprietary formats, etc.

[0146] It is understood that one or more of the memory components 704 can store an operating system. According to various configurations, the operating system includes, but is not limited to, the WINDOWS operating system of MICROSOFT CORPORATION, the IOS operating system of APPLE INC of Cupertino, California, and the ANDROID operating system of GOOGLE INC of Mountain View, California. Other operating systems may also be used.

[0147] The network connection component 706 includes a wireless wide area network component ("WWAN component") 722, a wireless local area network component ("WLAN component") 724, and a wireless personal area network component ("WPAN component") 726. The network connection component 706 facilitates communication to and from a network 728, which can be a WWAN, a WLAN, or a WPAN. Although a single network 728 is shown, the network connection component 706 can facilitate simultaneous communication with multiple networks. For example, the network connection component 706 can facilitate simultaneous communication with multiple networks via one or more of a WWAN, a WLAN, or a WPAN.

[0148] The network 728 may be a WWAN, such as a mobile telecommunication network that utilizes one or more mobile telecommunication technologies to provide voice and / or data services to computing devices utilizing the computing device architecture 700 via the WWAN component 722. The mobile telecommunication technologies may include, but are not limited to, Global System for Mobile Communications (“GSM”), Code Division Multiple Access (“CDMA”) ONE, CDMA2000, Universal Mobile Telecommunications System (“UMTS”), Long Term Evolution (“LTE”), and Worldwide Interoperability for Microwave Access (“WiMAX”).

[0149] In addition, the network 728 can utilize various channel access methods (which may or may not be used by the above standards), including but not limited to time division multiple access ("TDMA"), frequency division multiple access ("FDMA"), CDMA, wideband CDMA ("W-CDMA"), orthogonal frequency division multiplexing ("OFDM"), space division multiple access ("SDMA"), etc. Data communications can be provided using the following: General Packet Radio Service ("GPRS"), Enhanced Data Rates for Global Evolution ("EDGE"), High Speed ​​Packet Access ("HSPA") protocol family including High Speed ​​Downlink Packet Access ("HSDPA"), Enhanced Uplink ("EUL") or otherwise known as High Speed ​​Uplink Packet Access ("HSUPA"), Evolved HSPA ("HSPA+"), LTE, and various other current and future wireless data access standards. The network 728 can be configured to provide voice and / or data communications using any combination of the above technologies. The network 728 can be configured or adapted to provide voice and / or data communications according to future generation technologies.

[0150] In some configurations, the WWAN component 722 is configured to provide dual multi-mode connections to a network 728. For example, the WWAN component 722 can be configured to provide a connection to a network 728 that provides services via GSM and UMTS technologies, or via some other technology combination. Alternatively, multiple WWAN components 722 can be used to perform such functions, and / or provide additional functionality to support other incompatible technologies (i.e., that cannot be supported by a single WWAN component). The WWAN component 722 can facilitate similar connections to multiple networks (e.g., a UMTS network and an LTE network).

[0151] The network 728 may be a WLAN operating in accordance with one or more Institute of Electrical and Electronics Engineers ("IEEE") 104.11 standards, such as IEEE 104.11a, 104.11b, 104.11g, 104.11n, and / or future 104.11 standards (collectively referred to herein as WI-FI). Draft 104.11 standards are also contemplated. In some configurations, the WLAN is implemented using one or more wireless WI-FI access points. In some configurations, one or more wireless WI-FI access points are another computing device with a connection to a WWAN that acts as a WI-FI hotspot. The WLAN component 724 is configured to connect to the network 728 via a WI-FI access point. Such a connection may be protected via various encryption techniques, including, but not limited to, WI-FI Protected Access ("WPA"), WPA2, Wired Equivalent Privacy ("WEP"), and the like.

[0152] The network 728 may be a WPAN operating in accordance with the Infrared Data Association ("IrDA"), Bluetooth, wireless Universal Serial Bus ("USB"), Z-Wave, ZIGBEE, or some other short-range wireless technology. In some configurations, the WPAN component 726 is configured to facilitate communication with other devices such as peripherals, computers, or other computing devices via the WPAN.

[0153] Sensor assembly 708 includes a magnetometer 730, an ambient light sensor 732, a proximity sensor 734, an accelerometer 736, a gyroscope 738, and a global positioning system sensor (“GPS sensor”) 740. It is contemplated that other sensors such as, but not limited to, a temperature sensor or a shock detection sensor may also be incorporated into computing device architecture 700.

[0154] The magnetometer 730 is configured to measure the strength and direction of a magnetic field. In some configurations, the magnetometer 730 provides measurements to a compass application stored in one of the memory components 704 to provide accurate directions to a user in a reference system that includes the cardinal directions, north, south, east, and west. Similar measurements may be provided to a navigation application that includes a compass component. Other uses of the measurements obtained by the magnetometer 730 are contemplated.

[0155] The ambient light sensor 732 is configured to measure ambient light. In some configurations, the ambient light sensor 732 provides measurements to an application stored in a memory component 704 to automatically adjust the brightness of the display (as described below) to compensate for low light and high light environments. Other uses of the measurements obtained by the ambient light sensor 732 are contemplated.

[0156] The proximity sensor 734 is configured to detect the presence of an object or thing near the computing device without direct contact. In some configurations, the proximity sensor 734 detects the presence of a user's body (e.g., the user's face) and provides this information to an application stored in one of the memory components 704 that utilizes the proximity information to enable or disable certain features of the computing device. For example, a phone application can automatically disable the touch screen (as described below) in response to receiving proximity information so that the user's face does not inadvertently end a call during a call or enable / disable other features within the phone application. Other uses of the proximity detected by the proximity sensor 734 can be expected.

[0157] The accelerometer 736 is configured to measure acceleration. In some configurations, the output from the accelerometer 736 is used by an application as an input mechanism to control certain functions of the application. In some configurations, the output from the accelerometer 736 is provided to an application for use in switching between landscape and portrait modes, calculating coordinate acceleration, or detecting falls. Other uses of the accelerometer 736 are contemplated.

[0158] Gyroscope 738 is configured to measure and maintain orientation. In some configurations, the output from gyroscope 738 is used by an application as an input mechanism to control certain functions of the application. For example, gyroscope 738 can be used to accurately identify motion within a 3D environment of a video game application or some other application. In some configurations, an application utilizes the output from gyroscope 738 and accelerometer 736 to enhance user input operations. Other uses of gyroscope 738 can be expected.

[0159] The GPS sensor 740 is configured to receive signals from GPS satellites for calculating a position. The position calculated by the GPS sensor 740 can be used by any application that needs or benefits from position information. For example, the position calculated by the GPS sensor 740 can be used with a navigation application to provide directions from the position to a destination or from the destination to the position. In addition, the GPS sensor 740 can be used to provide location information to external location-based services such as E911 services. The GPS sensor 740 can utilize one or more network connection components 706 to obtain location information generated via WI-FI, WIMAX and / or cellular triangulation technology to assist the GPS sensor 740 in obtaining positioning. The GPS sensor 740 can also be used in an assisted GPS ("A-GPS") system.

[0160] The I / O component 710 includes a display 742, a touch screen 744, a data I / O interface component ("data I / O") 746, an audio I / O interface component ("audio I / O") 748, a video I / O interface component ("video I / O") 750, and a camera 752. In some configurations, the display 742 and the touch screen 744 are combined. In some configurations, two or more of the data I / O component 746, the audio I / O component 748, and the video I / O component 750 are combined. The I / O component 710 may include a discrete processor configured to support the various interfaces described below, or may include processing functionality built into the processor 702.

[0161] The display 742 is an output device configured to present information in a visual form. In particular, the display 742 can present graphical user interface ("GUI") elements, text, images, video, notifications, virtual buttons, virtual keyboards, messaging data, Internet content, device status, time, date, calendar data, preferences, map information, location information, and any other information that can be presented in a visual form. In some configurations, the display 742 is a liquid crystal display ("LCD") using any active or passive matrix technology and any backlight technology (if used). In some configurations, the display 742 is an organic light emitting diode ("OLED") display. Other display types are contemplated.

[0162] The touch screen 744 is an input device configured to detect the presence and location of a touch. The touch screen 744 may be a resistive touch screen, a capacitive touch screen, a surface acoustic wave touch screen, an infrared touch screen, an optical imaging touch screen, a dispersive signal touch screen, an acoustic pulse recognition touch screen, or may utilize any other touch screen technology. In some configurations, the touch screen 744 is incorporated as a transparent layer on top of the display 742 to enable a user to interact with objects or other information presented on the display 742 using one or more touches. In other configurations, the touch screen 744 is a touch pad that is incorporated on a surface of a computing device that does not include the display 742. For example, a computing device may have a touch screen incorporated on top of the display 742 and a touch pad on a surface opposite to the display 742.

[0163] In some configurations, the touch screen 744 is a single-touch touch screen. In other configurations, the touch screen 744 is a multi-touch touch screen. In some configurations, the touch screen 744 is configured to detect discrete touches, single-touch gestures, and / or multi-touch gestures. For convenience, these are collectively referred to as "gestures" in this article. Several gestures will now be described. It should be understood that these gestures are exemplary and are not intended to limit the scope of the appended claims. In addition, the described gestures, additional gestures, and / or alternative gestures can be implemented in software used with the touch screen 744. In this way, developers can create gestures specific to specific applications.

[0164] In some configurations, the touch screen 744 supports a click gesture, in which a user clicks the touch screen 744 once on an item presented on the display 742. The click gesture can be used for various reasons, including but not limited to opening or launching, regardless of what the user clicks, such as a graphical icon. In some configurations, the touch screen 744 supports a double-click gesture, in which a user clicks the touch screen 744 twice on an item presented on the display 742. The double-click gesture can be used for a variety of reasons, including but not limited to zooming in or out in stages. In some configurations, the touch screen 744 supports a click and hold gesture, in which a user clicks the touch screen 744 and maintains contact for at least a predetermined time. The click and hold gesture can be used for a variety of reasons, including but not limited to opening a context-specific menu.

[0165] In some configurations, the touch screen 744 supports a pan gesture, in which a user places a finger on the touch screen 744 and maintains contact with the touch screen 744 while moving the finger on the touch screen 744. The pan gesture can be used for various reasons, including but not limited to moving an image or menu through the screen at a controlled speed. Multiple finger pan gestures can also be considered. In some configurations, the touch screen 744 supports a flick gesture, in which the user slides a finger in the direction in which the user wants the screen to move. The flick gesture can be used for a variety of reasons, including but not limited to scrolling horizontally or vertically in a menu or page. In some configurations, the touch screen 744 supports a pinch and stretch gesture, in which the user uses two fingers (e.g., a thumb and index finger) on the touch screen 744 to make a pinching motion or separate the two fingers. The pinch and stretch gesture can be used for various reasons, including but not limited to gradually zooming in or out of a website, map, or picture.

[0166] Although the above gestures have been presented with reference to being performed using one or more fingers, other appendages such as toes or objects such as a stylus may be used to interact with the touch screen 744. Therefore, the above gestures should be understood to be illustrative and should not be construed as limiting in any way.

[0167] The data I / O interface component 746 is configured to facilitate inputting data into and outputting data from the computing device. In some configurations, the data I / O interface component 746 includes a connector configured to provide a wired connection between the computing device and the computer system, for example, for synchronization operation purposes. The connector can be a dedicated connector or a standardized connector, such as USB, micro USB, mini USB, USB-C, etc. In some configurations, the connector is a docking connector for docking the computing device with another device, such as a docking station, an audio device (e.g., a digital music player), or a video device.

[0168] The audio I / O interface component 748 is configured to provide audio input and / or output capabilities to the computing device. In some configurations, the audio I / O interface component 748 includes a microphone configured to collect audio signals. In some configurations, the audio I / O interface component 748 includes a headphone jack configured to provide connectivity for headphones or other external speakers. In some configurations, the audio interface component 748 includes a speaker for outputting audio signals. In some configurations, the audio I / O interface component 748 includes an optical audio cable output.

[0169] The video I / O interface component 750 is configured to provide video input and / or output capabilities to the computing device. In some configurations, the video I / O interface component 750 includes a video connector that is configured to receive video as input from another device (e.g., a video media player such as a DVD or BLU-RAY player) or send video as output to another device (e.g., a monitor, television, or other external display). In some configurations, the video I / O interface component 750 includes a High-Definition Multimedia Interface (“HDMI”), micro HDMI, micro HDMI, DisplayPort, or a dedicated connector for input / output video content. In some configurations, the video I / O interface component 750 or a portion thereof is combined with the audio I / O interface component 748 or a portion thereof.

[0170] The camera 752 may be configured to capture still images and / or video. The camera 752 may utilize a charge coupled device (“CCD”) or a complementary metal oxide semiconductor (“CMOS”) image sensor to capture images. In some configurations, the camera 752 includes a flash to assist in taking pictures in low light environments. The settings of the camera 752 may be implemented as hardware or software buttons.

[0171] Although not shown, one or more hardware buttons may also be included in the computing device architecture 700. The hardware buttons may be used to control certain operational aspects of the computing device. The hardware buttons may be dedicated buttons or multi-purpose buttons. The hardware buttons may be mechanical buttons or sensor-based buttons.

[0172] The power assembly 712 shown includes one or more batteries 754, which can be connected to a battery gauge 756. The batteries 754 can be rechargeable or disposable. Rechargeable battery types include, but are not limited to, lithium polymer, lithium ion, nickel cadmium, and nickel metal hydride. Each battery 754 can be made of one or more cells.

[0173] The battery gauge 756 can be configured to measure battery parameters such as current, voltage, and temperature. In some configurations, the battery gauge 756 is configured to measure the effects of the battery's discharge rate, temperature, age, and other factors to predict the remaining life within a certain percentage of error. In some configurations, the battery gauge 756 provides the measurements to an application that is configured to use the measurements to present useful power management data to the user. The power management data may include one or more of the following: percentage of battery used, percentage of battery remaining, battery status, time remaining, remaining capacity (e.g., in Watt-hours), current consumption, and voltage.

[0174] The power assembly 712 may also include a power connector (not shown) that may be combined with one or more of the above-described I / O assemblies 710. The power assembly 712 may interface with an external power system or charging device via the power I / O assembly 710. Other configurations may also be utilized.

[0175] The disclosure set forth herein also covers the subject matter set forth in the following clauses:

[0176] Clause 1. A computer-implemented method comprising: receiving a request for the location of a file, the request comprising a file protocol URI for the file, the file protocol URI having a query string comprising: an object identifier (ID) attribute comprising a unique ID for the file, a volume ID attribute comprising a unique ID of a first storage volume for storing the file, or a known folder attribute indicating whether the file is stored in a known folder; in response to receiving the request, determining whether the file is stored at a path to the file specified by the file protocol URI; in response to determining that the file is not stored at the path to the file specified by the file protocol URI, determining the location of the file using the object ID attribute, the volume ID attribute, or the known folder attribute; and providing data identifying the location of the file in response to the request.

[0177] Clause 2: The computer-implemented method of clause 1, wherein the query string further comprises one or more other attributes of the file, one or more attributes associated with the file by the file system, or auxiliary metadata.

[0178] Clause 3. The computer-implemented method of any of clauses 1-2, wherein determining the location of the file using the object ID attribute comprises searching for the file in the second storage volume.

[0179] Clause 4. A computer-implemented method of any of clauses 1-3, wherein determining the location of a file using a volume ID attribute comprises: determining whether a second storage volume having a different path from the first storage volume is available, the second storage volume having an associated unique ID that matches the unique ID of the first storage volume; and searching for the file in the second storage volume in response to determining that the unique ID of the first storage volume and the unique ID of the second storage volume match.

[0180] Clause 5. The computer-implemented method of any of Clauses 1-4, wherein determining the location of the file using the known folder attribute comprises searching for the file in one or more known folders.

[0181] Clause 6. The computer-implemented method of any of Clauses 1-5, wherein the file protocol is associated with an activation URI that includes a URI for activating an application associated with the file.

[0182] Clause 7. The computer-implemented method of any of clauses 1-6, wherein the file is accessed by: activating an application associated with the file using an activation URI; and accessing the file by the application at the identified location of the file.

[0183] Item 8: A computing device comprising: one or more processors; at least one computer storage medium having computer executable instructions stored therein, which, when executed by the one or more processors, cause the computing device to: receive a request for a content universal resource identifier (URI) of a file, the request specifying a path to the file on a storage volume; and in response to receiving the request, locate an object identifier (ID) attribute of the file, the object ID attribute including a unique ID corresponding to the file, locate a volume ID attribute including the unique ID of the storage volume, determine whether the file is stored in a known folder, create a content URI for the file, the content URI including a file protocol URI of the file, the file protocol URI having a query string including an object ID attribute, a volume ID attribute, or a known folder attribute identifying a known folder if the file is stored in a known folder, and return the content URI in response to the request so that the content URI can be used to locate the file.

[0184] Clause 9. The computing device of clause 8, wherein the query string further comprises one or more other attributes of the file, one or more attributes associated with the file by the file system, or auxiliary metadata.

[0185] Clause 10. A computing device according to any one of clauses 8-9, wherein the request for the content URI is received from an application, and the application is configured to store the content URI in an active data structure with an activation URI, wherein the activation URI includes a URI for activating the application.

[0186] Clause 11. The computing device of any of clauses 8-10, wherein the request for the content URI is received from an activity monitor configured to monitor an application, and wherein the activity monitor is configured to store the content URI in an activity data structure with an activation URI that includes a URI for activating the application.

[0187] Clause 12. The computing device of any of clauses 8-11, wherein the request for the content URI is received at an application programming interface (API).

[0188] Clause 13. The computing device of any of clauses 8-12, wherein the content URI is contained in an activity data structure, the activity data structure including an activation URI identifying an application, wherein the activation URI is used to activate the application, and wherein the content URI is used to locate a file.

[0189] Clause 14. At least one computer storage medium having computer executable instructions stored thereon, which, when executed by one or more processors of a computing device, cause the computing device to: determine whether a file is located at a path specified by a file protocol URI; in response to determining that the file is not located at the path specified by the file protocol URI, obtain one or more parameters from a query string of the file protocol URI, and use the parameters from the query string of the file protocol URI to determine the location of the file; and cause access to the file to be performed at the determined location of the file.

[0190] Clause 15. The at least one computer storage medium of Clause 14, wherein at least one of the parameters of the query string from the file protocol URI comprises a unique identifier (ID) of the file.

[0191] Clause 16. The at least one computer storage medium of any of clauses 14-15, wherein determining the location of the file using the parameters from the query string of the file protocol URI comprises performing a search for the file based on the unique ID of the file.

[0192] Clause 17. The at least one computer storage medium of any of Clauses 14-16, wherein at least one parameter from the parameters of the query string of the file protocol URI comprises a unique identifier of a first storage volume for storing the file.

[0193] Clause 18: At least one computer storage medium as described in any of clauses 14-17, wherein determining the location of the file using the parameters from the query string of the file protocol URI includes searching for the file in a second storage volume, the second storage volume having the same unique identifier as the first storage volume.

[0194] Clause 19. At least one computer storage medium of any of clauses 14-18, wherein at least one of the parameters of the query string from the file protocol URI includes a known folder attribute for a file, the known folder attribute specifying a known folder on the first computing device in which the file is stored.

[0195] Clause 20. The at least one computer storage medium of any of clauses 14-19, wherein determining the location of the file using the parameters from the query string of the file protocol URI comprises searching for the file in a known folder on the second computing device.

[0196] Based on the foregoing, it should be understood that various techniques for locating files using persistent and universal file identifiers have been disclosed herein. Although the subject matter presented herein has been described in language specific to computer structural features, methods and conversion actions, specific computing machines, and computer-readable media, it should be understood that the subject matter set forth in the appended claims is not necessarily limited to the specific features, actions, or media described herein. Rather, specific features, actions, and media are disclosed as example forms of implementing the claimed subject matter.

[0197] The subject matter described above is provided by way of example only and should not be construed as limiting. Various modifications and changes may be made to the subject matter described herein without following the example configurations and applications shown and described, and without departing from the scope of the present disclosure as set forth in the appended claims.

Claims

1. A computer-implemented method comprising: receiving a first request from a first application executing on a first computing device to create a content uniform resource identifier (URI) for a file in a synchronization location in the first computing device and a second computing device; an internal path used by the file synchronization service to locate the file; identifying a unique identifier assigned to the file by the synchronization service; storing the internal path and the unique identifier in the content URI; receiving a second request from a second application executing on a second computing device, the second request being for locating the file on the second computing device, the second request including the content URI; querying the synchronization service using the unique identifier and the internal path in the content URI; as well as In response to the query, receiving data identifying a local path of the file on the second computing device; as well as The local path of the file is provided to the second application.

2. The computer-implemented method of claim 1, wherein the internal path is a Hypertext Transfer Protocol (HTTP) Uniform Resource Locator (URL) assigned to the file by the synchronization service. 3 . The computer-implemented method of claim 1 , wherein the internal path is located and the unique identifier is identified by sending a request to the synchronization service.

4. The computer-implemented method of claim 1 , further comprising: determining that the file is located at the internal path for the file; and Wherein the internal path of the file is provided to the second application based on determining that the file is located at the internal path for the file.

5. The computer-implemented method of claim 1, wherein the content URI is stored as part of an active data structure for the file. 6 . The computer-implemented method of claim 5 , wherein the second request from the second application is received in response to a user interface control associated with the active data structure being selected.

7. The computer-implemented method of claim 5, wherein the activity data structure further comprises an activation URI.

8. The computer-implemented method of claim 1, wherein the content URI further comprises a volume identification attribute and a known folder attribute.

9. A system comprising: at least one processor; as well as a memory storing instructions, wherein the instructions, when executed by the at least one processor, cause the system to perform operations, the operations comprising: receiving a first request from a first application executing on a first computing device to create a content uniform resource identifier (URI) for a file in a synchronization location in the first computing device and a second computing device; sending a request to the synchronization service for the file, an internal path used by the file synchronization service and a unique identifier assigned to the file by the synchronization service; receiving the internal path and the unique identifier from the synchronization service; storing the internal path and the unique identifier in the content URI; receiving a second request from a second application executing on a second computing device, the second request being for locating the file on the second computing device, the second request including the content URI; querying the synchronization service using the unique identifier and the internal path in the content URI; and In response to the query, receiving data identifying a local path of the file on the second computing device; and The local path of the file is provided to the second application.

10. The system of claim 9, wherein the internal path is an HTTP URL assigned to the file by the synchronization service.

11. The system of claim 9, wherein the second application is a word processing application.

12. The system of claim 9, wherein the operations further comprise: determining that the file is located at the internal path for the file; and Wherein the internal path of the file is provided to the second application based on determining that the file is located at the internal path for the file.

13. The system of claim 9, wherein the content URI is stored as part of an active data structure for the file.

14. The system of claim 13, wherein the second request from the second application is received in response to a user interface control associated with the active data structure being selected.

15. The system of claim 13, wherein the activity data structure further comprises an activation URI.

16. The system of claim 9, wherein the content URI further comprises a volume identification attribute and a known folder attribute.

17. A computer-implemented method comprising: receiving, from an application executing on a computing device, a request to locate a file on the computing device, the request comprising a content URI for the file, the content URI comprising an internal path for the file used by a file synchronization service and a unique identifier assigned to the file by the synchronization service; querying the synchronization service using the unique identifier and the internal path; In response to the query, receiving data identifying a local path of the file on the computing device; Determining that the file does not exist at the local path; as well as In response to determining that the file does not exist at the local path, performing a secondary lookup for the file based on one or more attributes contained in the content URI.

18. The computer-implemented method of claim 17, wherein the assisted lookup comprises requesting an operating system of the computing device to locate the file using the unique identifier.

19. The computer-implemented method of claim 17, wherein the content URI further comprises a volume identifier attribute, and the secondary lookup is based on the volume identifier attribute.

20. The computer-implemented method of claim 17, wherein the content URI further comprises a known folder attribute, and the secondary lookup is based on the known folder attribute.