図面は、例示のみを目的として様々な実施形態を示す。当業者であれば、以下の説明から、本明細書で説明される原理から逸脱することなく、本明細書で説明される構造および方法の代替実施形態を利用可能であることを容易に認識するであろう。
詳細な説明
図1は、ターゲットアプリケーションにユーザインタフェース拡張を提供するためのシステム環境の一例を示す。図1は、装置100A、100B、100C(一般化して装置100と呼ぶ)、中央(またはコンテンツ管理)システム110、およびネットワーク120を含んでいる。3つの装置100は例示の目的のためだけに示されており、実際には、任意の数の装置が環境内に存在することができる。同様に、全体を通して説明および図示される他のモジュールまたは構成要素は単一または複数のインスタンスを含むことができ、実装者の必要性に応じて、一般性を失うことなく、組み合わせるか、または分離することができる。この、図示された実施形態では、ユーザインタフェース拡張が装置100とコンテンツ管理システム110との間のコンテンツアイテム同期、コンテンツアイテム共有、プレゼンスおよび見られた状態情報の提供などのコンテンツ管理システム機能を容易にするように構成され得る。他の実施形態では、コンテンツ管理システム機能とは無関係なUI拡張のための他の機能を提供することができる。
装置100は、(以下で説明するように)UI拡張器モジュールを有するコンピューティングデバイスである。UI拡張器モジュールを使用して、装置100はターゲットアプリケーションにUI拡張を生成し、提供することができる。本明細書でより詳細に説明するように、UI拡張は、ターゲットアプリケーションUIの状態に基づいて、かつターゲットアプリケーションUIのUIオブジェクトのグラフィカルプロパティと協調するように生成される。そのようなUI拡張は、その本来の機能またはネイティブにプログラムされた機能を超えて、ターゲットアプリケーションに追加の機能を提供する。例えば、本明細書に例示される実施形態においてUI拡張は、コンテンツアイテムをローカル記憶および視聴し、コンテンツアイテムをコンテンツ管理システム110と同期させることを容易にする機能を提供することができる。様々な実施形態において、ターゲットアプリケーションのためのUI拡張を提供するための装置100の動作について、以下でさらに説明する。
各装置100は、ネットワーク120を介してコンテンツ管理システム110と通信する。ネットワーク120は任意の適切なネットワークであり、ローカルネットワーク、企業ネットワーク、広域ネットワーク、グローバルネットワーク、およびこれらの任意の組合せを含むことができる。いくつかの構成では、装置100が有線または無線通信ネットワークを介してローカルネットワークサービスプロバイダと通信し、インターネットを通じてコンテンツ管理システム110と通信する。特定の構成では、装置100A、100B、および100Cは図1に破線で示すように、ネットワーク120なしで互いに直接通信する。例えば、装置100は、ブルートゥース接続を介した無線接続、ローカルエリアネットワーク、またはユニバーサルシリアルバス(USB)を介した有線接続など、有線または無線接続を介して通信することができる。
コンテンツ管理システム110は、装置100のユーザにコンテンツ共有および同期サービスを提供することができる。これらのサービスは、ユーザが他の装置100のユーザとコンテンツを共有することを可能にする。コンテンツ共有に加えて、コンテンツ管理システム110は、変更に応答して共有コンテンツを更新し、複数の装置100にわたるコンテンツアイテムの同期した変更を可能にすることができる。ユーザはユーザによって所有され、ユーザのアカウントに関連付けられた複数の装置100にわたってコンテンツを同期させることができ、ユーザは、他のユーザのアカウントに関連付けられた装置と同期されたコンテンツを共有することができる。コンテンツ管理システム110によって格納されるコンテンツは、デジタルデータ、ドキュメント、メディア(例えば、画像、写真、ビデオ、オーディオ、ストリーミングコンテンツ)、データファイルおよびデータベース、ソースおよびオブジェクトコード、記録、ならびに他の任意のタイプのデータまたはファイルなど、任意のタイプのデータを含むことができ、本明細書ではそれらをコンテンツアイテムと総称する。コンテンツ管理システム110によって格納されるコンテンツアイテムは、フォルダ、テーブル、コレクション、アルバム、プレイリスト、または他のデータベース構造(例えば、オブジェクト指向、キー/値など)などの他のコンテンツアイテムを整理するためにも使用されうる。実際には、様々な装置100が、ユーザ関連付け、許可、コンテンツ共有許可などに基づいて、コンテンツアイテムの異なるグループを同期させることができる。コンテンツアイテムはコンテンツ管理およびユーザインタラクションを容易にするために、アプリケーションUIおよびUI拡張を通じて提示されうる。しかし、UI拡張に関して本明細書で説明される技術は、コンテンツ管理システムまたは同期されたコンテンツアイテムとのインタラクションを容易にするUI拡張に限定されない。
図2は、UI拡張器モジュール265とともに構成された装置100の様々なモジュールおよび構成要素を示している。装置100は、ユーザに情報を提供するためのディスプレイ220を含み、特定のクライアント装置100はタッチスクリーンを含む。装置100はまた、ネットワーク120を介してコンテンツ管理システム110と通信するためのネットワークインタフェース225を含む。装置100はまた、キーボード、マウス、トラックパッド、タッチスクリーン、または他の機器などの様々なユーザ入力デバイスからユーザ入力を受信する、ユーザ入力モジュール260を含む。クライアント装置100の様々な他の構成要素、例えば、1つまたは複数のコンピュータプロセッサ、ローカル固定メモリ(RAMおよびROM)、ならびに必要に応じて取り外し可能なメモリ(例えばSDカード)、電源、およびオーディオビデオ出力、は本開示を複雑にしすぎないために図示されていない。
装置100は、オペレーティングシステム245、1つまたは複数のアプリケーション255、およびクライアントアプリケーション200を含む。アプリケーション255は、クライアント装置に基づいて変化するネイティブアプリケーションを含むことができる。アプリケーション255のサブセットは、UI拡張器モジュール265がUI拡張を提供することができるターゲットアプリケーションであろう。様々な実装において、UI拡張器モジュールは様々なアプリケーション255をターゲットアプリケーションとして指定することができる。いくつかの実装において、装置100のユーザはアプリケーション255のどれがターゲットアプリケーションとして指定されるかを制御することができる。
アプリケーション255は、ワードプロセッサ、スプレッドシート、データベース管理システム、コードエディタ、画像およびビデオエディタ、電子書籍リーダ、オーディオおよびビデオプレーヤ、ファイルマネージャなど、コンテンツ管理システム110に格納されたコンテンツを処理する(例えば、作成する、閲覧する、消費する、および変更する)ための様々なアプリケーションを含むことができる。
装置100上のオペレーティングシステム245は、ローカルファイルシステム275を提供し、クライアントアプリケーション200およびネイティブアプリケーション255などの様々なソフトウェアモジュールを実行する。装置100は、名前、写真、電話番号、会社、電子メールアドレス、物理アドレス、ウェブサイトURLなどのユーザの連絡先に関する情報を保存する連絡先ディレクトリ240を含むことができる。ネイティブアプリケーション255、オペレーティングシステム245、およびクライアントアプリケーション200のさらなる動作を以下に説明する。
装置100は、カメラ230およびロケーションモジュール235などの追加構成要素を含むことができる。カメラ230は、オンラインコンテンツ管理システム110にアップロードするための画像またはビデオを取り込むために使用される。ロケーションモジュール235は例えば、全地球測位衛星(GPS)信号、基地局三角測量(cellular tower triangulation)、または他の方法を使用して、装置100の位置を求める。ロケーションモジュール235は、ロケーションデータを取得し、カメラ230によってキャプチャされた画像などのコンテンツアイテムに関するメタデータにロケーションデータを追加するためにクライアントアプリケーション200によって使用される。
様々な実装において、クライアント装置100は様々な方法でコンテンツ管理システム110にアクセスすることができる。クライアントアプリケーション200は、コンテンツ管理システム110のサービスへのアクセスを提供する専用アプリケーションまたはモジュールであってよく、ユーザインタフェースを介した共有ファイルへのユーザアクセスと、他のアプリケーションのためのプログラムアクセスとの両方を提供する。クライアント装置100はさらに、ウェブブラウザ250を通じてコンテンツ管理システム110にアクセスしてもよい。あるいは、クライアントアプリケーション200は、コンテンツ管理システム110へのアクセスを、オペレーティングシステム245によって提供されるローカルファイルシステム275と統合してもよい。例えば、オペレーティングシステム245は、ファイルシステム275のコンテンツアイテムとインタラクションするためのUIを提供するために、ファイルシステムブラウザアプリケーション(例えば、ネイティブアプリケーション255)を実行するように構成されてもよい。
UI拡張器モジュール265は、アプリケーション255のうちの1つまたは複数のためのUI拡張を生成することができ、かつ、この機能を実行するための1つの手段である。UI拡張器モジュール265は、スタンドアロンアプリケーションであってもよいし、クライアントアプリケーション200の一部として含まれてもよい。いくつかの実施形態において拡張機能は、コンテンツ管理システム110によって提供されるコンテンツ管理および同期サービスにアクセスするプログラム機能(programmatic functions)を含む。コンテンツ管理システム110へのアクセスがローカルファイルシステム275に統合される場合、コンテンツ管理システム110で維持されるファイル編成スキームは、クライアントアプリケーション200と共にオペレーティングシステム245によってローカルファイル構造として表すことができる。ローカルファイル構造は、コンテンツアイテムのためのファイルシステムパスを定義することができる。
クライアントアプリケーション200は、スタンドアロンアプリケーション、アプリケーションプラグイン、またはブラウザ拡張機能など、様々な形態をとることができる。クライアントアプリケーション200は、ユーザインタフェースモジュール202、インタラクション管理モジュール204、コンテンツアクセスモジュール206、ローカルコンテンツデータストア208、監視プレゼンスデータストア210、コラボレーションモジュール207、およびUI拡張器モジュール265を含む。いくつかの実施形態において、UI拡張器モジュール265はクライアントアプリケーション200とは別個のアプリケーションである。
他のデバイスタスクを処理することに加えて、オペレーティングシステム245は、アプリケーション255からの情報を、アプリケーションのそれぞれのユーザインタフェースを通じて表示することができる。アプリケーション255のためのユーザインタフェースは、1つまたは複数のUIオブジェクトまたは要素を含む。各UIオブジェクトは、プロパティセットによって定義される。プロパティは、ディスプレイ220上の高さ、幅(例えば、X-Y座標対)、または位置など、UIオブジェクトの寸法および位置を定義するグラフィカルプロパティを含むことができる。他のグラフィカルプロパティは、形状、色、不透明度、テクスチャ、テキスト属性、または任意の他の視覚的に知覚可能な特性を定義するプロパティを含むことができる。各UIオブジェクトは、UIオブジェクトを一意に特定するUIオブジェクトIDプロパティをさらに含む。いくつかの実施形態において、UIオブジェクトIDはオペレーティングシステムによって提供されるグローバル一意識別子(GUID)を含む。GUIDは各UIオブジェクトを一意に特定するために、オペレーティングシステムおよび1つまたは複数のアプリケーション255にわたって共有される。プロパティは、メソッド名、関数、または他のプログラムインタフェースなど、オブジェクトに関連付けられたプログラム機能のためのハンドルまたは識別子をさらに含むことができる。
いくつかの実施形態においてUIオブジェクトは、UIオブジェクトのタイプまたはクラスを定義するオブジェクトタイププロパティをさらに含むことができる。いくつかの例示的なUIオブジェクトタイプは、ウィンドウオブジェクト、ボタンオブジェクト、ファイルセレクタオブジェクト、リストビューオブジェクト、メニューオブジェクトなどを含むことができる。いくつかの実施形態においてUIオブジェクトまたはオブジェクトタイプは、UIオブジェクトタイプの挙動または他の特性を定義する、タイプ特有のプロパティをさらに含むことができる。UIオブジェクトプロパティは、バージョンまたは他のステータスプロパティなど、視覚的に現れない他のプロパティをさらに含むことができる。
アプリケーションのユーザインタフェース内のUIオブジェクトは、UI状態内のUIオブジェクトの階層を定義する親子オブジェクトプロパティを含むことができる。例えば、ファイルオブジェクトがフォルダオブジェクト内に位置する場合、ファイルオブジェクトを親フォルダオブジェクトの子として定義することができる。これらの親子プロパティは、関連オブジェクト用のオブジェクトIDを使用して定義される。ファイルオブジェクトとフォルダオブジェクトの両方を含むUIは、ファイルを含むフォルダを表すために、ファイルオブジェクトをフォルダオブジェクトの範囲内に表示するなど、親子関係に従って提示される。本明細書でより詳細に説明するように、親子UIオブジェクト関係の他の例は、メニュー-ボタン、ウィンドウ-メニュー、アプリケーション-ウィンドウなどを含むことができる。
UIオブジェクトは、特定のデバイスおよび構成(configuration)に基づいて変化し得る。UIオブジェクトは、デスクトップインタフェース上のウィンドウ、ならびにモバイルデバイス上のインタフェース要素を含み得る。その意味で、UIオブジェクトは、UIオブジェクトタイププロパティによって定義される異なるUIオブジェクトタイプまたはクラスに属することができる。各UIオブジェクトタイプは、さらにタイプ特有のプロパティも含むことができる。例えば、特定のファイルを表すUIオブジェクトは、ファイルシステム275内のファイルを特定するファイルシステムパスプロパティを含むことができる。ウィンドウなどのUIオブジェクトを使用するオペレーティングシステムの例は、マイクロソフトウィンドウズ(登録商標)10およびOS X(登録商標)である。
UIオブジェクトおよびそれらの関係は、様々な手法またはデータ構造を用いて表される。一般に、オペレーティングシステム245はシステムレベルUI状態285を生成し、管理する。UI状態285はオペレーティングシステムのマスタUI状態であり、オペレーティングシステム245上で稼働するすべてのアプリケーションにわたってオペレーティングシステムによって管理されるすべてのUIオブジェクトを含む。UI状態285ならびに他の低レベル機能(ディスプレイ220、ネットワークインタフェース225、カメラ230、およびロケーションモジュール235の制御など)は、ユーザアプリケーション空間をオペレーティングシステム空間から分離するシステム境界267の下にあると言われる。オペレーティングシステム245は稼働中のアプリケーションに関してUI状態285の完全性およびセキュリティを維持する必要があるので、UI状態285の詳細(aspects)はアプリケーション255、クライアントアプリケーション200、またはUI拡張器モジュール265から直接アクセス可能でない場合がある。したがって、オペレーティングシステム245は、UI API 280を通じた、UI状態285に関する特定のデータのみへのアクセスを提供する。
オペレーティングシステム245は、イベントモニタ287を含む。イベントモニタ287は、特定のUIイベントに関するシステム通知を、そのような通知について登録している任意のアプリケーションに送信することができる。UIイベント(本明細書ではイベントと呼ぶ)は、オペレーティングシステムによって維持されるアプリケーションUIのマスタUI状態の変化を示すことができる。UIイベントのいくつかの例は、ウィンドウオブジェクトのオープン/クローズ、現在フォーカスされているオブジェクトへの変更、ボタンオブジェクトの選択、フォルダオブジェクト内にリストされたファイルオブジェクトの選択、ウィンドウオブジェクトの移動またはリサイズなどを含むことができる。オペレーティングシステムおよびUI拡張器モジュールは、UI API(例えば、カリフォルニア州クパティノのアップル社によるOS X(登録商標)オペレーティングシステムのアクセシビリティAPI、またはワシントン州レドモンドのマイクロソフト社によるマイクロソフトウィンドウズ(登録商標)10オペレーティングシステムのウインドウズシェルAPI)を使用して、UIイベントに関して互いに通信することができる。
例えば、ユーザ入力がターゲットアプリケーションのUIオブジェクトのグラフィカルプロパティの変化を引き起こす場合、UI状態285におけるそのアプリケーションのUI状態は、グラフィカルプロパティの変化に応じてオペレーティングシステムによって更新される。UI状態の変化の検出に応答して、イベントモニタ287は、イベントを示すシステム通知を登録されたリスナに送信することができる。UI拡張器モジュール265が受け取ることのできるいくつかの例示的なUIイベントは、UIオブジェクトの作成/削除、UIオブジェクトのフォーカスまたは選択の変更、UIオブジェクトのグラフィカルプロパティ(例えば、ウィンドウの寸法、形状、位置など)の変更、またはUIオブジェクトプロパティのいくつかの他の変更を含むことができる。
UI拡張器モジュール265は、ターゲットアプリケーションおよび/またはターゲットUIオブジェクトを指定する情報を用いて構成され、ターゲットアプリケーションおよび/またはターゲットUIオブジェクトに関連付けられたUIイベントに関するシステム通知またはコールバックのためにイベントモニタ287に登録する。例えば、UI拡張器はウェブブラウザ250、ワードプロセッサアプリケーション、スプレッドシートアプリケーションについてのイベントを登録し、連絡先ディレクトリ240、カメラ230、またはロケーションモジュール235についてのイベントを登録しないことができる。ターゲットアプリケーションで発生するイベントに関するシステム通知は、その根拠となるターゲットアプリケーションの継続的な実行がUI拡張器モジュール265による通知の受信に依存しないという点で、非同期通知であってよい。登録に続いて、UI拡張モジュール245のUIイベントリスナ270は、システム通知をリッスンすることができる。
様々な実装において、UIサブ状態生成器272は、システム通知に基づいて、ターゲットアプリケーションごとにUIサブ状態274を生成し、維持すること、またはすべてのターゲットアプリケーションからの要素を有する単一のUIサブ状態274を生成し、維持することができるとともに、この機能を実行するための1つの手段である。したがって、UIサブ状態生成器272によって維持されるUIサブ状態274は、オペレーティングシステム245によって管理されるUI状態285とは別個のものである。UI拡張器モジュール265は、UIイベントに基づいてターゲットオブジェクトについてのマスタUI状態295の変化を追跡するためにUIサブ状態を用いる。UI拡張器モジュール265は、UIイベントに関するコールバックを受信するためにUI拡張器モジュール265を登録するUI API 280および/またはグラフィックスAPI 292への呼び出しによって、ターゲットアプリケーションまたはターゲットオブジェクトについての特定のサブ状態情報を取得する。
ターゲットアプリケーションについてUIサブ状態274は、1つまたは複数のターゲットUIオブジェクトを含む。UIサブ状態274のターゲットUIオブジェクトは、マスタオペレーティングシステムUI状態285のUIオブジェクトのサブセットを表す。UIサブ状態274は、ターゲットアプリケーションのUIオブジェクトのすべてではなく、ターゲットアプリケーションの特定のターゲットUIオブジェクトだけを含むことができる。例えば、ターゲットUIオブジェクトは特定のウィンドウまたはペイン、およびターゲットアプリケーションの特定のボタンまたはメニューを含み、他のものは含まなくてもよい。したがって、コンテンツ管理ウィンドウに関連付けられたユーザインタフェースはフォルダまたはファイルを含むことができるが、フォルダおよびファイルのうちの特定のものだけが、コンテンツ管理システムによって管理されるコンテンツアイテムを表すターゲットオブジェクトであってよく、ターゲットオブジェクトでない他のものは、コンテンツ管理システムによって管理されないフォルダおよびファイルを表す。ターゲットアプリケーションおよびターゲットオブジェクトは、UI拡張器モジュール265にとっての関心オブジェクトとして記述することができる。
有利なことに、UIサブ状態生成器272はUIサブ状態274から、UI拡張器モジュール265にとって関心のないUIオブジェクトを除外し、オペレーティングシステム245によって管理されるUI状態285のすべてのUIオブジェクトのサブセットのみを保持する。UIサブ状態274でターゲットUIオブジェクトのみを処理することは、イベント処理効率および速度の点でUI拡張器モジュール265の機能を改善し、かつメモリ割り当て要件を低減する。
UIサブ状態生成器272は、各ターゲットアプリケーションについて別個のUIサブ状態274を生成することができる。いくつかの実施形態では、所定のN個のUIサブ状態274(例えば、直近にフォーカスされたもの)がメモリ内に保持され、より古いUIサブ状態274がメモリから解放される。いくつかの実施形態では、複数のアプリケーション255からのUIサブ状態274が、単一のUIサブ状態274に合成されてもよい。例えば、N個のUIサブ状態274は、各ターゲットアプリケーションルートノードに対する親ノードであるルートUI拡張器アプリケーションノードに接続されてよい。UI状態500および関連するUIサブ状態800の例を、それぞれ図5および図8に示し、以下でより詳細に説明する。
UI拡張生成器276は、ターゲットUIオブジェクトのグラフィカルプロパティと協調するUI拡張を生成するためにUIサブ状態274にアクセスするとともに、この機能を実行するための1つの手段である。したがって、UI拡張生成器276は、オペレーティングシステム245によって維持されるマスタUI状態285に直接アクセス可能でなくてもよい。UIサブ状態生成器272はオペレーティングシステム245のUIイベントマネージャ285からUIイベントに関するシステム通知を受信することに基づいてUIサブ状態274を維持し、UI拡張生成器276はUI拡張を生成またはレンダリングするためにUIサブ状態274を参照する。
上述のように、UI拡張器モジュール265は、通信タイプまたはメッセージの限定されたクラスを定義するオペレーティングシステムのAPIの1つまたは複数を用いて(または以下で説明する内部UI状態290から)、ターゲットアプリケーションおよびオブジェクトのUI状態情報を取得する。これらのAPIは、UI API 280およびグラフィックスAPI 292を含む。UI API 280は、UIイベントのために、オペレーティングシステム245とUI拡張器モジュール265との間のメッセージングを提供する。同様に、グラフィックスAPI 292は、グラフィックスイベントのために、オペレーティングシステム245とUI拡張器モジュール265との間のメッセージングを提供する。グラフィックスAPI 292の一例は、アップル社によって提供されるOS X(登録商標)用のコアグラフィックスAPIを含む。グラフィックスイベントは、オペレーティングシステム245のグラフィックスエンジン294によるグラフィックスオブジェクトにおける変化のレンダリングを意味する。いくつかの実施形態において、UI拡張器モジュール265は、図14に関連して以下でより詳細に説明するように、UI状態285の非同期な変化に対するUIサブ状態275の応答性を維持するためにUIイベント通知を遅延しうる場合に、UIイベントに加えてグラフィックスイベントを登録し、受信することができる。
UI API280の例には、OS X(登録商標)用のアクセシビリティAPI、およびマイクロソフトウィンドウズ(登録商標)用のウィンドウズシェルAPIが含まれる。UI API 280は、UI拡張器モジュール265がオペレーティングシステム245からのUIイベントについてのシステム通知を登録および受信するために用いる、予め定義されたルーチンおよびプロトコルのセットを提供する。グラフィックスAPI 292は、UI拡張器モジュール265がオペレーティングシステム245からのグラフィックスイベントについてのシステム通知を登録および受信するために用いる、予め定義されたルーチンおよびプロトコルのセットを提供する。
UI拡張生成器276は、UIサブ状態274内のターゲットUIオブジェクトのプロパティに基づいてターゲットアプリケーションのためのUI拡張を生成可能であるとともに、この機能を実行するための1つの手段である。UI拡張は、ターゲットアプリケーションのための拡張および追加機能のためのインタフェースを提供する。UI拡張は、コンテンツ管理システム110および関連するサービスとのインタラクションを容易にする拡張器UIオブジェクトにより、ローカルファイルシステムのためのエクスプローラまたはファインダアプリケーションを拡張するといった、拡張機能を提供することができる。
UI拡張生成器276はさらに、アプリケーションUIのターゲットUIオブジェクトと共にUI拡張を表示することができる。例えば、UI拡張を1つまたは複数のターゲットUIオブジェクトと連携して表示することができる。協調時にUI拡張は、ネイティブアプリケーションUIの、統合または付加されたオブジェクトのように動作することができる。例えば、UI拡張は、ターゲットUIメニューオブジェクトのグラフィカルプロパティに対する変更にリサイズ、スケーリング、移動、およびおよびまたは他の方法で適応するUIボタンオブジェクトであってもよい。別の例では、ターゲットUIメニューオブジェクトが移動されるとき、UI拡張はネイティブアプリケーションUIへのUI拡張アタッチメントを保存するために、それに応じて移動されてもよい。さらに別の例ではターゲットUIオブジェクトが移動されるとき、UI拡張は移動が完了するまで隠されてもよく、その時点で、UI拡張は移動されたターゲットUIオブジェクトに対して相対的な位置に再表示され得る。有利なことに、ネイティブアプリケーション255とは別個のUI拡張器モジュール266を用いてUI拡張を生成することは、アプリケーション255がUI拡張アタッチメントの性質(例えば、大きさ、位置、外観、内容など)にいかなる直接的なプログラム的制約を課さないことを意味する。したがって、UI拡張は、ターゲットアプリケーション自体によって許可される所定の固定位置だけではなく、任意の位置でターゲットアプリケーションのUIに添付することができる。したがって、一実施形態では、UI拡張がターゲットアプリケーションのUI内に直接統合されるのではなく、ターゲットUIオブジェクトにグラフィカルオーバレイとして提供される。
いくつかのアプリケーション255は、それ自体の内部UI状態290を維持することができる。アプリケーションの内部UI状態290は、UIオブジェクトの内部モデルと、アプリケーションのためのUIオブジェクトのグラフィカルプロパティとを規定する。アプリケーション255は(例えば、APIを用いて)内部UI状態290への制限されたアクセスを他のアプリケーション255に提供することができる。これらのアプリケーション255について、いくつかの実装形態では、UI拡張を生成するために必要なUIイベントに関するシステム通知からの情報がゆっくりと、利用不可能に、または不完全に提供される場合、UI拡張器モジュール265はアプリケーション255と通信することができる。例えば、マスタUI状態285は、UIサブ状態を解決するのに十分なUIオブジェクトタイプまたはクラスを含まなくてもよい。例えば、ウィンドウズ(登録商標)オペレーティングシステムはウィンドウ、ボタン、メニュー、フォルダ、およびファイルについてウィンドウUIオブジェクトタイプのみを使用し、特定のタイプ情報を維持するために、それ自体のUI状態290内の特定のアプリケーション255にそれを残す。したがって、これらの状況では、UI拡張器モジュール265がUI状態285のUIオブジェクトとUIサブ状態274のターゲットUIオブジェクトとの間の変換機能を、その内部UI状態290についてアプリケーション255から取得したデータに基づいて実行することができる。変換機能はUIサブ状態274のための別個のUIオブジェクトタイプを特定し、ファイルまたはフォルダオブジェクトタイプのためのターゲットアプリケーションおよびファイルシステムパスなどの関連するタイプ特有のパラメータを特定する。UI拡張器モジュール265は、変換機能を使用することなどによって、オブジェクトID間の対応を決定することに基づいて、マスタUIオブジェクトをアプリケーションUIオブジェクトにマッチングさせることができる。
場合によっては、オペレーティングシステム245からのUIイベントのシステム通知がUIオブジェクトによって表されるコンテンツアイテム(例えば、ファイル、フォルダなど)を特定することに失敗することがある。例えば、ウィンドウズ(登録商標)オペレーティングシステムは、そのウィンドウオブジェクトクラス内の基礎となるコンテンツアイテムを識別するパラメータを含まない。図12に関連して以下でより詳細に説明するように、UI拡張器モジュール265はUIオブジェクトタイプ、コンテンツアイテム、または他のオブジェクトプロパティを識別するために、ターゲットアプリケーション255の内部UI状態290に問い合わせることができ、問い合わせの結果を含むようにUIサブ状態275を更新することができる。
オペレーティングシステム245からのイベントのシステム通知はまた、UIサブ状態274をタイミング良く更新し続けるには不十分なことがあり、これは、UI拡張を、ターゲットアプリケーションの基礎となるUIとの協調を崩す要因となり得る。例えば、OS X(登録商標)アクセシビリティAPIまたはウィンドウズシェルAPIのためのUIイベントモニタ287は、ターゲットアプリケーションウィンドウの動きに関して許容できないメッセージング遅延に遭遇しうる。したがって、UI拡張器モジュール265は、より新しく、よりメッセージ遅延が少ない他のソースからイベント通知を受信することができる。例えば、オペレーティングシステム245は、通常、UI状態285のUIオブジェクトをレンダリングするグラフィックスエンジン294を含む。グラフィックスエンジン294によってレンダリングされるUIオブジェクトはグラフィックスオブジェクトであり、UIオブジェクトのグラフィカルプロパティと同様のグラフィカルプロパティを含むことができる。例えば、レンダリングされたウィンドウのグラフィックスオブジェクトはグラフィックスエンジンがグラフィックスオブジェクトをレンダリングできるように、高さ、幅、および位置パラメータを含むことができる。反応のよいユーザインタフェースを保証するため、グラフィックスオペレーションには非常に高い優先順位が与えられるので、UIオブジェクトおよびイベントの現在の状態は、グラフィックスエンジンから最小の遅延で得ることができる。したがって、図14に関して本明細書でより詳細に論じるように、UI拡張器モジュール265はいくつかのターゲットUIオブジェクトのグラフィックスイベントに関するシステム通知を受信するために、OS X(登録商標)用のコアグラフィックスAPIを使用するなど、グラフィックスAPI 292を使用してグラフィックスエンジン294と通信することができる。グラフィックスイベントは本明細書で使用される場合、グラフィックスオブジェクトのグラフィカルプロパティを変更し、したがってグラフィックスオブジェクトのレンダリングの変更をもたらすイベントを指す。
グラフィックスイベントに関するシステム通知は、グラフィックスオブジェクトのグラフィックスオブジェクトIDを含むことができる。UI拡張器モジュール265はグラフィックスイベントのためのUIオブジェクトを決定するために、グラフィックスオブジェクトIDをUIオブジェクトIDにマッピングすることができる。UI拡張器モジュール265は、UIオブジェクトID(またはGUID)をグラフィックスオブジェクトIDに関連付けることができる。したがって、グラフィックスエンジン294およびグラフィックスAPI 292(たとえば、コアグラフィックスAPI)はUI API 280(たとえば、アクセシビリティまたはウィンドウズ(登録商標)シェルAPI)よりも速いイベント通知を提供する。その意味で、UIサブ状態274に関連する非同期イベントの通知はオペレーティングシステム245の様々なプロセスから、適切なAPIを使用して提供される。
さらに、オペレーティングシステム245は、同時に実行することができる複数のネイティブアプリケーション255の制御を管理する。次いで、異なるアプリケーション255にわたるUIオブジェクトは、ディスプレイ画面上で1つのレイヤが別のレイヤに重なるか、または別のレイヤを覆うように、重ねられる。いくつかのオペレーティングシステムおよび構成では、単一のアプリケーションに関するインタフェースオブジェクトだけが同時に表示される。1つのユーザインタフェースオブジェクトは通常、アクティブまたはフォーカスされたUIオブジェクトであり、これは、オペレーティングシステム245がキーボード入力、カーソル移動、タッチセンサ、タッチジェスチャなどのユーザ入力を送るユーザインタフェースオブジェクトであることを意味する。特定の時間にアクティブであるウィンドウまたは他のUIオブジェクトは、フォーカスを有すると言うことができる。ユーザは別のUIオブジェクトを選択して、フォーカスを1つのユーザインタフェースオブジェクトから別のユーザインタフェースオブジェクトに変更することができ、場合によっては、オペレーティングシステム245がユーザ入力なしでフォーカスを変更することができる。
通常、ネイティブアプリケーション255に関連付けられたユーザインタフェースオブジェクト、例えばウィンドウは、実行するネイティブアプリケーション255のプロセス識別子とUIオブジェクトのUIオブジェクトIDとの間の関連を維持するオペレーティングシステム245によって管理される。いくつかの実施形態では、UIオブジェクトIDがGUIDを含むことができる。オペレーティングシステム245は、プロセス識別子および/またはGUIDに関連付けられたコンテンツアイテムおよびファイルシステムパスも維持することができる。例えば、特定のアプリケーションはプロセスID 2587に関連付けられ、ユーザインタフェースオブジェクト識別子4、8、および10を用いて複数のユーザインタフェースオブジェクトを管理することができる。各UIオブジェクトIDはそのネイティブアプリケーション255によって開かれた特定のコンテンツアイテムに別々に関連付けられるか、またはそれを表し、複数のUIオブジェクトIDおよびプロセス識別子を同じコンテンツアイテムに関連付けることができる。
オペレーティングシステム245はまた、UIイベントまたはグラフィックスイベントなどの様々なイベントを処理し、認識する。UIイベントは、とりわけ、コンテンツアイテムをクローズまたはオープンするためのネイティブアプリケーション255からの要求、ウィンドウまたは他のUIオブジェクトをクローズするためのネイティブアプリケーション255からの要求、UIオブジェクトのグラフィカルプロパティを変更するための要求、およびUIオブジェクトフォーカスを変更するための要求を含むことができる。以下で説明するように、UI拡張モジュール256は、これらのUIイベント(およびいくつかの実施形態ではグラフィックスイベント)を使用して、UI拡張を生成することができる。さらに、これらのイベントはコンテンツアイテムに関連するプレゼンスの変化を認識するために、インタラクション管理モジュール204によって使用することができる。
クライアントアプリケーション200はユーザが装置上でコンテンツアイテムを開き、閉じ、編集し、保存し、または共有するときなど、コンテンツアイテムに関して行われるインタラクションを特定することができる。これらのインタラクションはコンテンツアイテムとのインタラクションを記述するインタラクション情報を生成するために、クライアントアプリケーション200によって特定することができる。インタラクション情報は、クライアントアプリケーション200とのインタラクションおよびネイティブアプリケーション255とのインタラクションを含む。ネイティブアプリケーション255内からのコンテンツアイテムに関して実行されるアクションから決定されるインタラクション情報は、プレゼンス情報と呼ばれる。インタラクション情報およびプレゼンス情報を決定するクライアントアプリケーション200などのアプリケーションは、プレゼンスアプリケーションと呼ばれる。(プレゼンス情報に加えて)追加のタイプのインタラクション情報は、クライアントアプリケーション200によって受信される、コンテンツアイテムに関連するノート、メッセージ、および通知要求を含む。メッセージは他のデバイスへのチャットメッセージと、コンテンツアイテムとインタラクションする(例えば、編集する)ユーザの意図を示すメッセージと、コラボレーションセッションを開始するユーザの意図を示すメッセージとを含むことができる。通知要求は、別のユーザのインタラクション情報が変化した際の通知の要求を含むことができる。インタラクション情報はまた、バージョニングノート、イベントタイムスタンプ、または、バージョニング情報または以前のコンテンツアイテムバージョンを閲覧するための要求などの、コンテンツアイテムに関するコンテンツ管理システム110に格納されたさらなる情報に対する要求などのメタデータ修正を含む。クライアントアプリケーション200は、ユーザからチャットまたはインテント情報を受信することができる。様々な実施形態では、装置100がオペレーティングシステム245とのインタラクションを介して、コンテンツアイテムにおけるユーザの存在(すなわち、ユーザがコンテンツアイテムを開いているか、またはネイティブアプリケーション255を使用してコンテンツアイテムを編集していること)を特定する。インタラクション情報は例えば、コンテンツ管理システム110を介して、コンテンツアイテムに関して同期された他の装置100に送信することができる。
装置100はコンテンツ管理システム110と同期したコンテンツアイテムを維持し、ユーザが装置100に格納された様々なネイティブアプリケーション255を使用して、コンテンツアイテムを閲覧し、修正し、またコンテンツアイテムとインタラクションすることを可能にする。例えば、装置100は、画像コンテンツアイテムを操作する写真編集アプリケーション、テキストコンテンツアイテムの修正を可能にするワードプロセッサアプリケーション、または描画コンテンツアイテムの修正を可能にするコンピュータ支援設計(CAD)アプリケーションを含むことができる。インタラクション情報はアプリケーション255を介して装置100によって決定され、インタラクション情報は他の装置100に送信される。さらに、装置100が他の装置100に関するインタラクション情報を受信すると、装置100はそのインタラクション情報を表示する。
一実施形態では、コンテンツアイテムに関するインタラクション情報を検出するアプリケーションとコンテンツアイテムを閲覧または操作するアプリケーションとが異なってもよい。例えば、インタラクション情報を検出するクライアントアプリケーションは、画像コンテンツアイテムを操作または表示する写真編集アプリケーションとは別のものであってよい。様々な実施形態では、インタラクション情報を検出するアプリケーションがコンテンツアイテムをコンテンツ管理システム110と同期させる役割も果たす。プレゼンス情報を検出するアプリケーションはプレゼンスが検出されるアプリケーションと区別することができるので、プレゼンスモニタリングを各タイプのコンテンツアイテムビューアに統合する必要なしに、多くのアプリケーションおよびコンテンツアイテムについて一度にプレゼンスを監視することができる。すなわち、例えば、写真編集アプリケーション、ワードプロセッサアプリケーション、プレイリスト編集アプリケーションのそれぞれについて、アプリケーションに依存したプレゼンス監視アドオンやアプリケーション変更は不要である。
コンテンツアイテムを開くために、ネイティブアプリケーション255はオペレーティングシステム245にコンテンツアイテムを要求し、そのコンテンツアイテムに関してオペレーティングシステム245からコンテンツアイテムへのハンドルを受信する。場合によっては、アプリケーション255がハンドルを維持せず、ネイティブアプリケーション255がコンテンツアイテムからのデータを使用し続ける場合も、またはユーザがコンテンツアイテムに編集を入力する場合も、アプリケーション255はコンテンツアイテムデータをメモリにロードし、その後、コンテンツアイテムハンドルを閉じることができる。したがって、オープンコンテンツアイテムハンドルは、アプリケーションが特定のコンテンツアイテムとインタラクションしているかどうかを判定するための信頼できる方法ではないことが多い。したがって、特定の実施形態では、ネイティブアプリケーション255によって示されるさらなる挙動を使用して、アプリケーションがコンテンツアイテムを編集しているかどうかを判定する。
ネイティブアプリケーション255はまた、ユーザがコンテンツアイテムを変更するとき、およびユーザがコンテンツアイテムを保存する前に、様々な挙動を示す。これらの挙動は、アプリケーションおよびオペレーティングシステム245に基づいて変化する。例えば、いくつかのネイティブアプリケーション255は、オープンコンテンツアイテムとは異なるファイル名、例えば、チルダや他の認識可能なマークから始まる一時的なコンテンツアイテムのファイル名を有する一時的コンテンツアイテムを作成する。他の例ではネイティブアプリケーション255がコンテンツアイテムに関連付けられたユーザインタフェース要素のタイトルを変更し、これはユーザによって直接見ることができても、見ることができなくてもよい。さらに別の例では、ネイティブアプリケーション255がコンテンツアイテムが変更されたことを示すフラグを設定する。ネイティブアプリケーション255は、別のアプリケーションまたはオペレーティングシステムからの要求に応答して、コンテンツアイテムの変更に関する情報を提供することもできる。オープンコンテンツアイテムハンドルは、コンテンツアイテムがネイティブアプリケーション255によって編集されているかどうかを確実に判定することができないので、これらの挙動をプレゼンス管理モジュール204によって使用して、コンテンツアイテムの編集または変更に関するプレゼンスを判定することができる。
ネイティブアプリケーション255は、典型的には互いに独立して装置100上で実行されてよく、アプリケーションと、装置100上で稼働する他のアプリケーションまたはプロセスとの間の通信を許可してもよい。ネイティブアプリケーション255は典型的にはAPIを使用してプロセスに情報を提供し、APIは、アプリケーションが実行中のプロセスに情報を要求することを可能にする。例えば、ネイティブアプリケーション255は、アプリケーション255によって管理される内部UI状態290のUIオブジェクトの要求を許可するAPIを提示してもよく、またはUIオブジェクトのファイルシステムパス(例えば、タイトル、ファイルシステムフォルダロケーションなどを含む)を示してもよく、またはネイティブアプリケーション255によって開かれた(例えば、現在フォーカスされている)コンテンツアイテムに関連付けられたファイルシステムパスを要求してもよい。
クライアントアプリケーション200は、コンテンツ管理システム110へのアクセスを管理する。本明細書で様々に示すように、クライアントアプリケーション200は、クライアントアプリケーション200によってアクセスされるコンテントへのインタフェースを生成するユーザインタフェースモジュール202を含むとともに、この機能を実行するための1つの手段である。生成されたインタフェースは、ディスプレイ220によってユーザに提供される。クライアントアプリケーション200は、コンテンツ管理システム110のコンテンツストレージからアクセスされたコンテンツをローカルコンテンツデータストア208に格納することができる。ここではクライアントアプリケーション200内に示されているが、ローカルコンテンツデータストア208はクライアント装置100のための他のデータと共に、例えば、不揮発性ストレージに格納される。ローカルコンテンツデータストア208がこのように格納されると、クライアントアプリケーション200がコンテンツ管理システム110と通信していないとき、コンテンツは、ユーザ、およびネイティブアプリケーション255などの他のアプリケーションまたはモジュールに利用可能である。コンテンツアクセスモジュール206はローカルコンテンツデータストア208に対する更新を管理し、同期ロジックを使用してコンテンツ管理システム110と通信し、クライアント装置100によって変更されたコンテンツを、コンテンツ管理システム110上に維持されているコンテンツと同期させる。このような同期ロジックの一例は2013年9月27日に出願された米国特許第9,053,165号に提供されており、参照によってその全体が本明細書に組み込まれる。クライアントアプリケーション200は、スタンドアロンアプリケーション、アプリケーションプラグイン、またはブラウザ拡張機能など、様々な形態をとることができる。
コンテンツ管理システム110は、コンテンツアイテムが削除されたこと、またはがコンテンツアイテムの古いバージョンを閲覧または編集していることを指定する情報など、コンテンツアイテムを同期させるための追加データを提供することができる。
インタラクション管理モジュール204はユーザの同期されたコンテンツアイテムに関するインタラクション情報を取得し、管理する。インタラクション管理モジュール204は、プレゼンス情報についてインタラクション管理モジュール204によって監視されているネイティブアプリケーション255とは別個のモジュールとすることができ、また別個のプロセスとして実行することができる。インタラクション管理モジュール204は、同期されたコンテンツアイテムのために装置100上で発生するインタラクションイベントを検出する。インタラクション管理モジュール204は、プレゼンスイベントを監視することによって、またはコメントおよびメッセージなど、受信したユーザ入力を監視することによって、インタラクションイベントを検出することができる。インタラクションイベントは、ユーザがコンテンツアイテムとインタラクションしたことを示す。インタラクションは、コンテンツアイテムを閲覧すること、コンテンツアイテムを編集すること、コンテンツアイテムを保存すること、コメントアイテムについてコメントすること、コンテンツアイテムに関連するメッセージを送信すること、およびコンテンツアイテム内で協働することを含む。インタラクション管理モジュール204は、インタラクションイベントおよび他のインタラクション情報に関する通知をコンテンツ管理システム110に送信する。
多くのタイプのインタラクション情報を決定するために、インタラクション管理モジュール204は、ユーザインタフェース要素を介してインタラクション情報を受信することができる。同期されたコンテンツアイテムに関連するプレゼンス情報を確認するために、インタラクション管理モジュール204は、ターゲットネイティブアプリケーション255に関連付けられたUIオブジェクトを監視する。インタラクション管理モジュール204はUIオブジェクトがコンテンツアイテムに関連付けられた後などに、すべてのユーザインタフェース要素を監視することができ、あるいは、特定のターゲットUIオブジェクトだけを監視することができる。いくつかの実施形態では、UI拡張器モジュール265がターゲットUIオブジェクトのUIイベントを監視し、インタラクション情報をインタラクション管理モジュールに通信する。監視プレゼンスデータストア210は、同期されたコンテンツアイテムに関連するアクションを決定するために特定のUIオブジェクトまたはコンテンツアイテムが監視されることを示すため、インタラクション管理モジュール204によって維持される情報を含む。例えば、監視プレゼンスデータストア210は、ターゲットUIオブジェクトおよび/またはターゲットアプリケーションを保存するデータベースを含むことができる。
ここではクライアントアプリケーション200の一部として示されているが、様々な実装において、コンテンツアクセスモジュール206およびインタラクション管理モジュール204はそれぞれの機能を実行するために別個のモジュールに分離されてもよい。同様に、様々なモジュールおよびデータストアは便宜上、本開示全体にわたって別々に説明されているが、様々な実装において、それらは所望に応じて組み合わせられたり、さらに別々の構成要素に分離される。
図3は、一実施形態による、図1のコンテンツ管理システム110の構成要素を示す。コンテンツ管理システム110を使用するとき、様々なコンテンツ管理サービスを容易にするために、ユーザは、コンテンツ管理システム110を用いてアカウントを作成することができる。各ユーザのアカウントは、ユーザIDまたはユーザ名などの識別子に関連付けられる。一実施形態では、ユーザのアカウント情報がユーザアカウントデータベース318に維持される。ユーザアカウントデータベース318は、登録されたユーザのプロファイル情報を格納することができる。場合によっては、ユーザプロファイル内の個人情報は、ユーザ名および/または電子メールアドレスだけである。しかし、コンテンツ管理システム110は、パスワード回復情報、人口統計情報、支払い情報、およびコンテンツ管理システム機能を提供するために必要な他の詳細など、さらなるユーザ情報を受け入れるように構成することもできる。
ユーザアカウントデータベース318はまた、アカウントタイプ(例えば、無料または有料)、各ユーザの使用情報(例えば、ファイル編集履歴)、許可された最大保管スペース、使用された保管スペース、コンテンツストレージロケーション、セキュリティ設定、個人構成設定、コンテンツ共有データなどのアカウント管理情報を含むことができる。アカウント管理モジュール304は、ユーザアカウントデータベース318内のユーザアカウント詳細を更新および/または取得することができる。アカウント管理モジュール304は、コンテンツ管理システム110内の任意の数の他のモジュールとインタラクションすることができる。
アカウントは複数の装置100に関連付けることができ、コンテンツアイテムはアカウントに関連付けて格納することができる。格納されたコンテンツは、異なる挙動、または他のコンテンツアイテムグループ化方法を有する様々なタイプのフォルダを含むこともできる。例えば、アカウントは、いかなるユーザもアクセス可能なパブリックフォルダを含むことができる。パブリックフォルダには、ウェブアクセス可能なアドレスを割り当てることができる。ウェブアクセス可能なアドレスへのリンクは、パブリックフォルダのコンテンツにアクセスするために使用することができる。別の例では、アカウントが写真コンテンツアイテムを対象とし、写真用に調整された特定の属性およびアクションを提供する写真フォルダ、オーディオファイルコンテンツアイテムを再生したり、他のオーディオ関連アクションを実行したりする能力を提供するオーディオフォルダ、または他の特殊用途フォルダを含むことができる。アカウントはまた、複数のユーザアカウントにリンクされ、複数のユーザアカウントが利用可能な共有フォルダまたはグループフォルダを含むことができる。複数のユーザに対する許可は、共有フォルダごとに異なる。一実施形態ではアカウントが複数のユーザに関連付けられた名前空間であり、各ユーザはその名前空間とインタラクションする許可と関連付けられている。
一実施形態では、コンテンツはコンテンツストレージ320に格納される。コンテンツストレージ320は、記憶装置、複数の記憶装置、またはサーバであってよい。あるいは、コンテンツストレージ320は、1つまたは複数の通信ネットワークを介してアクセス可能なクラウドストレージプロバイダまたはネットワークストレージであってもよい。一構成では、コンテンツ管理システム110がコンテンツアイテムを、デバイス上で見える組織構造と同じ組織構造で保存する。しかし、コンテンツ管理システム110は、コンテンツアイテムを特有の順序、配置、または階層で格納することができる。
コンテンツストレージ320はまた、コンテンツアイテム、コンテンツアイテムタイプ、および様々なアカウント、フォルダ、またはグループに対するコンテンツアイテムの関係を記述するメタデータを格納することができる。コンテンツアイテムのメタデータはコンテンツアイテムの一部として、または別個に格納することができる。一構成では、コンテンツストレージ320に格納された各コンテンツアイテムに、システム全体にわたる固有識別子を割り当てることができる。
コンテンツストレージ320は、重複コンテンツアイテムまたはコンテンツアイテムの重複セグメントを特定することにより、必要とされるストレージスペースの量を低減することができる。一実施形態では、例えば、コンテンツアイテムの単一のコピーのみを格納し、またポインタまたは他の機構を使用して複製を単一のコピーとリンクさせながら、コンテンツアイテムの所有権メタデータ(例えば、所有権リスト)内にユーザの識別子を含めることによって、コンテンツアイテムが異なるユーザ間で共有される。同様に、コンテンツストレージ320は、コンテンツアイテムへの変更、コンテンツアイテムの異なるバージョン(分岐バージョンツリーなど)、および変更履歴を追跡するバージョン制御機構を使用して、コンテンツアイテムを格納することができる。変更履歴は、オリジナルコンテンツアイテムバージョンに適用されると、変更されたコンテンツアイテムバージョンを生成する変更のセットを含む。
一実施形態では、コンテンツ管理システム110が同期モジュール312を使用して、コンテンツアイテムを1つまたは複数のデバイスと自動的に同期させる。同期はプラットフォームに依存しない。すなわち、コンテンツアイテムは、様々なタイプ、機能、オペレーティングシステムを有する複数の装置100にわたって同期される。例えば、クライアントアプリケーション200は、コンテンツ管理システム110の同期モジュール312を介して、装置100のファイルシステム275内のコンテンツを、システム110上の関連するユーザアカウント内のコンテンツアイテムと同期させる。クライアントアプリケーション200は、指定されたフォルダおよびそのサブフォルダ内のコンテンツアイテムに対する任意の変更を同期モジュール312と同期させることができる。そのような変更には、新しい、削除された、修正された、コピーされた、または移動されたファイルまたはフォルダが含まれる。同期モジュール312はまた、装置100に関連付けられたコンテンツに対する任意の変更をクライアントアプリケーション200に提供する。これにより、装置100におけるローカルコンテンツが、コンテンツ管理システム110におけるコンテンツアイテムと同期する。
競合管理モジュール314は、異なる装置100に位置するコンテンツアイテムのバージョン間に不一致があるかどうかを判定する。例えば、コンテンツアイテムが第1のデバイスおよび第2のデバイスにおいて変更される場合、異なるバージョンのコンテンツアイテムが各デバイスに存在し得る。同期モジュール312は例えば、コンテンツアイテム変更の変更時間を識別することによって、そのようなバージョニング競合を決定する。競合管理モジュール314は任意の適切な手段によって、例えば、バージョンをマージすることによって、または、後に提出されるバージョンの1つ以上のデバイスに通知することによって、バージョン間の競合を解決する。
ユーザは、ユーザインタフェースモジュール302によって生成されたウェブインタフェースを介してコンテンツを閲覧または操作することもできる。例えば、ユーザは、コンテンツ管理システム110によって提供されるウェブアドレスをウェブブラウザ250で閲覧することができる。新しいバージョンのファイルのアップロードなど、ウェブインタフェースを介して行われるコンテンツストレージ320内のコンテンツの変更または更新は、ユーザのアカウントに関連付けられた他の装置100に同期される。複数の装置100は単一のアカウントに関連付けられてよく、そのアカウント内のファイルは、複数の装置100の各々の間で同期される。
コンテンツ管理システム110は、様々な装置100と、またAPIを通じて他のコンテンツおよび/またはサービスプロバイダとインタフェースする通信インタフェース300であって、この機能を実行するための1つの手段である通信インタフェース300を含む。特定のソフトウェアアプリケーションは、ユーザのために、APIを介してコンテンツストレージ320にアクセスする。例えば、スマートフォンまたはタブレットコンピューティングデバイスのアプリなどのソフトウェアパッケージは、ユーザがクレデンシャルを提供する際に、コンテンツを読み取る、書き込む、作成する、削除する、共有する、または他の方法で操作するために、コンテンツ管理システム110への直接呼び出しをプログラムにしたがって行うことができる。同様に、APIは、ユーザがウェブサイトを介してコンテンツストレージ320の全部または一部にアクセスすることを可能にすることができる。
コンテンツ管理システム110はまた、認証器モジュール306を含むことができ、認証器モジュール306は要求されたコンテンツアイテムへのアクセスが許可されているかどうかを判定するために、ユーザクレデンシャル、セキュリティトークン、API読み出し、特有のデバイスなどを検証するとともに、この機能を実行するための1つの手段である。
コンテンツ管理システム110は、コンテンツを公的または私的に共有するための共有モジュール310を含む。コンテンツを公的に共有することは、コンテンツ管理システム110とネットワーク通信する任意のコンピューティングデバイスからコンテンツアイテムをアクセス可能にすることを含むことができる。コンテンツを私的に共有することは、各ユーザアカウントがコンテンツアイテムにアクセスできるように、コンテンツストレージ320内のコンテンツアイテムを2つ以上のユーザアカウントにリンクすることを含むことができる。コンテンツは、様々なタイプのユーザアカウントにわたって共有することもできる。
いくつかの実施形態においてコンテンツ管理システム110は、コンテンツストレージ320内の各コンテンツアイテムの位置を特定するコンテンツディレクトリを維持するためのコンテンツ管理モジュール308を含み、クライアントアプリケーションがストレージ320内のコンテンツアイテムへのアクセスを要求することを可能するとともに、この機能を実行するための1つの手段である。コンテンツディレクトリ内のコンテンツエントリは、コンテンツストレージ320内のコンテンツアイテムの位置を特定するコンテンツポインタをさらに含むことができる。例えば、コンテンツエントリは、メモリ内のコンテンツアイテムの記憶アドレスを示すコンテンツポインタを含むことができる。いくつかの実施形態においてコンテンツエントリは、それぞれが1つのコンテンツアイテムの一部を含む複数の位置を指す複数のコンテンツポインタを含む。
コンテンツパスおよびコンテンツポインタに加えて、いくつかの構成におけるコンテンツエントリは、コンテンツアイテムにアクセスするユーザアカウントを特定するユーザアカウント識別子も含む。いくつかの実施形態では、コンテンツアイテムが複数のユーザアカウントによる共有アクセスを有することを示す単一のコンテンツエントリに複数のユーザアカウント識別子を関連付けることができる。
コンテンツアイテムを私的に共有するため、共有モジュール310はコンテンツアイテムに関連付けられたコンテンツエントリにユーザアカウント識別子を追加し、これによって追加されたユーザアカウントがコンテンツアイテムにアクセスすることを許可する。共有モジュール310は、コンテンツアイテムへのユーザアカウントのアクセスを制限するためにコンテンツエントリからユーザアカウント識別子を除去することもできる。
コンテンツを共有するため、共有モジュール310は、任意のウェブブラウザがコンテンツ管理システム110内のコンテンツにアクセスすることを可能にする、URLなどのカスタムネットワークアドレスを生成する。いくつかの実装形態では、ネットワークアドレスを使用するアクセスは、制限なし、もしくは認証なしに提供されてもよいし、またはパスワードなどにより、設定された時間枠内でのみ利用可能とすることにより、特定のロケーションまたはネットワークからのみ利用可能とすることにより、またはそのネットワークアドレスを用いる限定数の総アクセスまたは同時アクセスのみ利用可能とすることにより、制限されてもよい。共有モジュール310は生成されたURLにコンテンツ識別データを含める。このコンテンツ識別データは後に、要求されたコンテンツアイテムを適切に特定し、返送するためにコンテンツ管理システム110で用いることができる。例えば、共有モジュール310は、生成されたURLにユーザアカウント識別子およびコンテンツパスを含めることができる。URLに含まれるコンテンツ識別データは、コンテンツアイテムにアクセスするために装置によってコンテンツ管理システム110に送信することができる。URLを生成することに加え、共有モジュール310は、コンテンツアイテムに対するURLが作成済みであることを記録することもできる。いくつかの実施形態においては、コンテンツアイテムに関連付けられたコンテンツエントリが、そのコンテンツアイテムに対するURLが作成済みかどうかを示すURLフラグを含むことができる。
インタラクション同期モジュール316は、装置からプレゼンス情報を受信し、それをインタラクションデータストア424内のプレゼンスレコードの一部として格納し、コンテンツアイテムに関するユーザプレゼンスを決定する。各ユーザはコンテンツアイテムに関してそのユーザに関連付けられたプレゼンス記録を記述するユーザプレゼンスに関連付けられ、この関連づけは、いかなる特定のユーザ装置、プロセス、またはユーザインタフェース要素を参照することなく行うことができる。プレゼンス情報は特定のユーザインタフェース要素または処理に関するプレゼンスを記述することができるが、ユーザに関連付けられたこのプレゼンスはユーザプレゼンスと呼ばれる。例示的なユーザプレゼンス状態には、コラボレーション中、編集中、閲覧中、オープン中、および不存在が含まれる。この例において、コラボレーション中プレゼンス状態はコンテンツアイテムが2つ以上の装置100上で視聴および変更のために提示されるユーザインタフェース要素に関連付けられていることを示し、編集中ユーザプレゼンス状態はコンテンツアイテムがコンテンツアイテムを変更したユーザインタフェース要素に関連付けられていることを示し、閲覧中ユーザプレゼンス状態はコンテンツアイテムが装置100上のアクティブユーザインタフェース要素に関連付けられていることを示し、オープンユーザプレゼンス状態はユーザインタフェース要素がコンテンツアイテムに関連付けられており、かつコンテンツアイテムが開かれているが、コンテンツアイテムがクローズされてはいないことを示す。様々な実施形態は、より多くの、またはより少ないユーザプレゼンス状態を使用することができる。例えば、一実施形態は編集中、閲覧中、および不存在のみを含み、この場合、コンテンツアイテムを開いたがアクティブユーザインタフェース要素ではないユーザインタフェース要素は、閲覧中もしくは不存在として取り扱われる。プレゼンス情報の取得および追跡はまた、米国特許出願第14/635,192号にさらに説明されており、当該出願の内容は参照により本明細書に組み込まれる。
インタラクション同期モジュール316は、複数の装置100にわたるインタラクション情報の同期を管理する。装置100は、インタラクション同期モジュール316にインタラクション情報を提供する。インタラクション同期モジュール316は、インタラクションデータストア324にインタラクション情報を格納する。インタラクション同期モジュール316は、同期されたコンテンツアイテムに関するインタラクション情報を、ユーザに表示するために同期された装置100に送信する。インタラクション同期モジュール316はさらに、新しい、または見られていないインタラクション情報をユーザに通知するための命令を送信することができる。一実施形態において装置100は、ユーザがインタラクション情報を閲覧したかどうか、およびいつ閲覧したかを示す閲覧情報をインタラクション同期モジュール316に送信する。閲覧情報は、インタラクションデータストア324に記憶される。別の実施形態において閲覧情報は、ユーザがインタラクション情報とインタラクションしたかどうか、およびいつインタラクション情報とインタラクションしたかを示す。インタラクション同期モジュール316は、この情報を、同じユーザに関連付けられた複数の装置100上での重複した通知を回避するために用いることができる。例えば、ユーザが第1の装置100上の新しいインタラクション情報を通知され、インタラクション情報を見る場合、このイベントは、ユーザが第2の装置100上の同じインタラクション情報について通知されないように格納される。
一実施形態では、ユーザがコンテンツアイテムに関連する格納されたインタラクション情報を閲覧したり、インタラクション情報とインタラクションしうるように、インタラクションデータストア324に格納されたインタラクション情報はクライアントアプリケーション200によってアクセス可能である。いくつかの実施形態において、ユーザがコンテンツアイテムに関連する格納されたインタラクション情報を閲覧したり、インタラクション情報とインタラクションすることを容易にするためのUIを提供するため、本明細書で説明されるようにUI拡張が生成される。格納されたインタラクション情報は、インタラクションイベントタイムスタンプおよびバージョン情報などのメタデータを含むことができる。バージョン情報は、インタラクションイベントをコンテンツアイテムの異なるバージョンに関連付ける。一実施形態において、記憶されたインタラクション情報は、インタラクション情報およびメタデータが時系列的に表示されるコンテンツアイテム履歴ログとして装置100のユーザに提供される。このようにして、ユーザはインタラクション情報を1つの場所で容易に見ることができ、コンテンツアイテムに対する変更、編集、閲覧、およびコメントの内容をよりよく理解することができる。例えば、ユーザは、コンテンツアイテムが午後3:00に編集され、編集ユーザが午後3:01に「結論パラグラフを変更した」というコメントを提供したことを見るであろう。これにより、ユーザは、コンテンツアイテムおよび編集プロセス全体を1つの場所で包括的に閲覧することができる。
一実施形態では、コンテンツ管理システム110がコラボレーションモジュール326を含む。コラボレーションモジュール326は、装置100間のコラボレーションを容易にすることができる。例えば、コラボレーションモジュール326はコラボレーションが起こり得るように、装置のアドレスを別の装置と共有することによって、装置ハンドシェイクを開始し得る。さらに、コラボレーションモジュール326は、装置100のコラボレーションモジュール207もしくはクライアントアプリケーション200の任意の他のモジュールによって実行される任意のタスクを実行することができる。
通知キューモジュール328は共有コンテンツアイテムに関するユーザ通知キュー330を作成し、管理する。ユーザ通知キュー330は、コンテンツ管理システム110に格納され、装置100に送信される。ユーザ通知キュー330は、共有ユーザによる共有コンテンツアイテムとの最近のインタラクションを示すためにユーザに提示される、共有コンテンツアイテムとの1つまたは複数のインタラクションのグループである。一実施形態では、コンテンツアイテムに関連付けられた共有ユーザの各々が、そのコンテンツアイテムに対応するユーザ通知キュー330を有する。特定のコンテンツアイテムに関して、ユーザ通知キューは、ユーザによって異なる場合がある。
一実施形態において、通知キューモジュール328はインタラクションイベントの通知を受信し、ユーザ通知キュー330に追加される候補であるインタラクションを決定する。通知キューモジュール328は、共有コンテンツアイテムに対応するユーザ通知キュー330を変更する。ユーザ通知キュー330を変更することは、候補インタラクションを通知キューに追加することと、通知キューに既に存在するインタラクションを除去することとを含むことができる。共有コンテンツアイテムに対応するインタラクションイベントがコンテンツ管理システム110によって受信されると、通知キューモジュール320は、インタラクションを共有ユーザのユーザ通知キュー330に追加するか、および/またはそこからインタラクションを削除するかを決定する。ユーザ通知キュー330に追加されるインタラクションのタイプは、コンテンツアイテム閲覧、コンテンツアイテム編集、コンテンツアイテムコラボレーション、コンテンツアイテムコメント、およびコンテンツアイテムメッセージを含み得る。
一実施形態において、インタラクションは関連づけられたインタラクション優先度を有する。インタラクション優先度は、他のインタラクションタイプに対するインタラクションタイプの相対的な優先度を示す。例えば、コンテンツアイテム編集は、コンテンツアイテム閲覧よりも高い優先順位を有することができる。インタラクション優先度は、コンテンツ管理システム110の実装者によって、またはコンテンツ管理システム110のユーザによって指定される。通知キューモジュール328は、ユーザ通知キュー330内の候補インタラクションおよびインタラクションのインタラクションタイプおよびインタラクション優先度を決定する。様々な実施形態では、通知キューモジュール328がより高い優先度のインタラクションを選択してユーザ通知キュー330に追加し、より低い優先度のインタラクションを選択してユーザ通知キュー330から除去する。例えば、通知キューモジュール328は、ユーザAによる候補インタラクションの優先度を、通知キュー330に既に存在するユーザAによるインタラクションの優先度と比較することができる。候補インタラクションがユーザ通知キュー330内のインタラクションよりも低い優先度のインタラクションである場合、候補インタラクションはキューに追加されない。候補インタラクションがユーザ通知キュー330内のインタラクションよりも高い優先度のインタラクションである場合、候補インタラクションがキューに追加され、キュー内に既に存在するインタラクションがキューから除去される。これにより、ユーザに、コンテンツアイテムと他のユーザとの、より高い優先度のインタラクションを提示することが可能になり、ユーザを混乱させたり、ユーザインタフェースオブジェクトまたは要素内のスペースを無駄に使用したりする可能性のある、あまり重要でない情報を提供せずに、ユーザに重要な情報を提供することができる。
通知キューモジュール328は、ユーザ通知キュー330を装置100に送信することができる。一実施形態において通知キューモジュール328は、ユーザがコンテンツアイテムにアクセスしたという通知の受信に応答して、ユーザ通知キュー330を送信する。アクセス通知は、装置100から直接、またはインタラクション同期モジュール316から到来しうる。アクセス通知は、閲覧または編集のためにコンテンツアイテムを開くなど、コンテンツアイテムのアクセスと整合したプレゼンスイベントを検出することに応答して生成される。一実施形態では、通知キューモジュール328は、関連付けられたユーザが通知キューを閲覧したという通知の受信に応答して、ユーザ通知キュー330をクリアする。このように、ユーザは、ユーザが閲覧済みの通知を提示されないであろう。
コンテンツ管理システム110は、単一のコンピュータを用いて、またはコンピュータのネットワーク(クラウドベースのコンピュータ実装を含む)を用いて実施することができる。本開示において、コンピュータは、1つまたは複数のプロセッサ、メモリ、記憶装置、およびネットワーキングリソースを有する装置である。コンピュータは好ましくは1つまたは複数の高性能CPUおよび、1G以上のメインメモリ、ならびにコンピュータ読み取り可能な永続的ストレージを含み、LINUXまたはその派生物のようなオペレーティングシステムを実行するサーバクラスコンピュータである。本明細書で説明するコンテンツ管理システム110の動作は、ハードウェアによって制御されてもよいし、またはコンピュータストレージにインストールされ、そのようなサーバのプロセッサによって実行されて本明細書に説明する機能を実行させるコンピュータプログラムによって制御されてもよい。これらのシステムはネットワークインタフェースおよびプロトコル、データ入力のための入力デバイス、および表示、印刷、またはデータの他の提示のための出力デバイスとを含む、本明細書で説明される動作に必要な他のハードウェア要素を含むことができるが、それらは本明細書では説明されない。同様に、ファイアウォール、ロードバランサ、フェイルオーバサーバ、ネットワーク管理ツールなどの従来の要素は、システムの特徴を不明瞭にしないように図示されていない。最後に、コンテンツ管理システム110の機能および動作はコンピュータシステム上での実装を必要とするほど十分に複雑であり、単にメンタルステップによって人間の頭で実行することはできない。
1つの構成では、コンテンツ管理システム110に関して以下に説明される構成要素が、コンテンツ管理システム110による管理なしにコンテンツアイテムを共有および同期可能な装置100に組み込まれる。これらの装置100は、上述したように、コンテンツを同期させるとともに、ネットワーク120を通じて、または直接接続を介してインタラクション情報を共有することができる。この構成では、装置100は、以下でコンテンツ管理システム110によって提供されるものとして説明される機能を組み入れるために、同期モジュール312、競合管理モジュール314、インタラクション同期モジュール316、ならびに他のモジュールおよびデータストアの機能を組み入れることができる。したがって、この構成の装置100はピアツーピア構成で動作し、コンテンツ管理システム110またはネットワーク120なしで動作することができる。
UI拡張管理プロセス
図4は、ターゲットアプリケーションについて、コンピュータシステムのディスプレイ上でUIを拡張するための例示的なプロセス400を示す。プロセス400は、UIイベントに関するオペレーティングシステム245とUI拡張器モジュール265との間の通信を利用する。UI拡張器モジュール265とオペレーティングシステム245との間の通信タイプのセットは、UIイベントに関する通信のためのUI API 280などのAPIによって定義することができる。
プロセス400はネイティブアプリケーション255のUIに関するUIサブ状態(例えば、UIサブ状態274)を維持することに基づいて、ネイティブアプリケーション255のUIに対するUI拡張を生成するために使用される。UIサブ状態274はターゲットアプリケーションのターゲットUIオブジェクトに対するUIイベントに関するシステム通知をオペレーティングシステム245に登録し、オペレーティングシステム245から受信することに基づいて更新される。例えば、プロセス400はネイティブアプリケーション255のUIに対するUI拡張オーバーレイを提供するために、オペレーティングシステム245に関連するUI拡張器モジュール265によって実行されることができる。
402において、オペレーティングシステム245は、UI状態285を生成する。上述のように、UI状態285はオペレーティングシステム245によって管理されるマスタUI状態を意味し、複数のネイティブアプリケーション255にわたってオペレーティングシステム245によって管理されるすべてのUIオブジェクトを含む。その意味で、UI状態285は、オペレーティングシステム245上で実行されるUIのデータ表現を提供する。オペレーティングシステム245は、ユーザ入力またはプログラム命令の受信に応答してUI状態285を更新することなどによって、UI状態285を管理する。
図5は、オペレーティングシステムによって管理されるUI状態500の例示的な表現を示す。UI状態500は、UIオブジェクトノードと、ノード間の親子関係を定義する有向辺とを含むグラフまたはツリーによって表される。UI状態500は、UIオブジェクトの階層としてオペレーティングシステム245によって管理されるユーザインタフェースを表す。ノードは単一のUIオブジェクトを表すことができ、または1つまたは複数の(例えば、子)UIオブジェクトを包含する抽象化を表すことができる。例えば、UIオブジェクトノード510〜530は、ウィンドウオブジェクト510、526、および528、メニューオブジェクト512、ボタンオブジェクト516および518、リストビューオブジェクト514、ファイルオブジェクト520、522、および524、ならびにフォルダオブジェクト530といった別個のUIオブジェクトを表す。別の例においてOSオブジェクト502およびアプリケーションオブジェクト504、506、および508はそれらの子UIオブジェクトを包む抽象化を表す。サポートされるUIオブジェクトのタイプまたはクラスはプラットフォームまたはオペレーティングシステムに応じて変化することがあり、必ずしもUI状態500に示される例に限定されない。いくつかの実施形態では、UI状態500がウィンドウズ(登録商標)10オペレーティングシステムについてのウィンドウオブジェクトクラスのような、単一クラスのIUオブジェクトのみを含む。
OSオブジェクト502は、最高レベルのオペレーティングシステムノードを表す。OSオブジェクトは、フォーカスされたアプリケーション255を定義するフォーカスされたアプリケーションプロパティ、および/またはフォーカスされたアプリケーション255のフォーカスされたUIオブジェクトを定義するフォーカスされたUIオブジェクトプロパティを含むことができる。オペレーティングシステム245によって管理されるUIを有する各ネイティブアプリケーション255は、アプリケーションオブジェクト504、506、および508など、OSオブジェクト502の子であるアプリケーションオブジェクトによって表される。いくつかの実施形態では、アプリケーションオブジェクトがアプリケーションオブジェクトがフォーカスされているかどうかを定義するフォーカスされたアプリケーションプロパティ、および/またはアプリケーションオブジェクトのフォーカスされたまたは選択されたUIオブジェクトを定義するフォーカスされたUIオブジェクトプロパティを含むことができる。いくつかの実施形態では、各UIオブジェクトがオブジェクトが現在フォーカスされているUIオブジェクトであるかどうかを定義するフォーカス(focused)プロパティを含むことができる。したがって、UI状態500は、現在フォーカスされているUIオブジェクトを定義することができる。(とりわけ)UIオブジェクトフォーカスの変更はUIイベントに関するシステム通知をトリガし、以下でさらに詳細に説明するように、UI拡張に対する変更をもたらすことができる。
図6Aおよび図6Bは、装置100のディスプレイ220上にレンダリングされたデスクトップ600上のUIオブジェクトフォーカス変更の例を示す。図6Aにおいて、ウィンドウオブジェクト510、526、および528はデスクトップ600上に表示され、ユーザによって見ることができる。この実施形態においてデスクトップ600は、オペレーティングシステム245によって維持される全体的なコンテナまたはフレームであり、ディスプレイ220上のユーザインタフェースオブジェクトを囲んでいる。図6Aおよび図6Bにおいて、UIオブジェクトは、デスクトップコンピューティング環境におけるウィンドウオブジェクトである。モバイルデバイスや、限定されたエリアを有する他の表示部などの他の構成では、一度に単一のUIオブジェクトのみが表示され得る。図6Aに示すように、ウィンドウオブジェクト526はフロントウィンドウとして示され、ウィンドウオブジェクト510および528を部分的に見えなくするフォーカスされたまたはアクティブなウィンドウオブジェクトであり、ウィンドウ526内では、フォルダ610は現在フォーカスされているオブジェクトである。図6Bにおいて、フォーカスはウィンドウオブジェクト510に変更され、ウィンドウオブジェクト510は今やフロントウィンドウであり、アクティブまたはフォーカスされたウィンドウオブジェクトであり、ボタン516はフォーカスされたオブジェクトである。フォーカスは、ウィンドウオブジェクト510とのユーザ入力インタラクションに応答して、またはプログラム命令に応答して変化することができる。特定のオペレーティングシステムおよび構成では、フロントUIオブジェクトでないUIオブジェクトがフォーカスを有する(例えば、ユーザ入力を受信している)ことができる。
図5に戻ると、UI状態500の3つのアプリケーションオブジェクト504、506、および508はそれぞれ、オペレーティングシステム245上で実行される異なるアプリケーション255を表す。各アプリケーションオブジェクトは、ターゲットアプリケーション540のウィンドウオブジェクト510および528などの1つまたは複数の子UIオブジェクトも含むことができる。ウィンドウオブジェクトは、ウィンドウ要素を表すUIオブジェクトである。ネイティブアプリケーションがファイルシステムブラウザである例ではウィンドウオブジェクトがフォルダを表すことができ、ウィンドウオブジェクトの子オブジェクトはフォルダ内に格納されたコンテンツアイテム、および/またはコンテンツアイテムとインタラクションするためのメニュー/ボタンを含むことができる。例えば、ウィンドウオブジェクト510は子リストビューオブジェクト514を含み、子リストビューオブジェクト514は、子ファイルオブジェクト520〜524およびフォルダオブジェクト530をさらに含む。ウィンドウオブジェクト510は、子メニューオブジェクト512をさらに含む。メニューオブジェクト512は、子ボタンオブジェクト516および518をさらに含む。
単一のアプリケーションオブジェクトは、ワードプロセッサアプリケーションのオープンされたファイルにそれぞれ対応する複数のウィンドウ、またはファイルシステム内の異なるフォルダにそれぞれ対応するファイルシステムブラウザアプリケーションの複数のウィンドウなど、複数のウィンドウオブジェクトを含むことができる。例えば、アプリケーションオブジェクト504は、ウィンドウオブジェクト510および528を含む。UI状態500は複数のアプリケーションに関連付けられたUIオブジェクトを含むことができ、その各々は子オブジェクトを含むことができる。例えば、UI状態500は、それぞれが異なるアプリケーション255に関連付けられたアプリケーションオブジェクト504、506、および508を含む。アプリケーションオブジェクト506は、ウィンドウオブジェクト526も含む。アプリケーションオブジェクト506および508の他の子オブジェクトは本開示を過度に複雑にすることを避けるために、図5には示されていない。
図7は、ターゲットアプリケーション540のUIの一例を示す。特に、ターゲットアプリケーション540のUIは、図5に示されるUI状態500のノードによって表されるUIオブジェクトのグラフィカル表現を含む。UIオブジェクトのグラフィック表現は、グラフィックスエンジン294などによって、UIオブジェクトのグラフィカルプロパティに基づいて生成される。したがって、UIは、ターゲットアプリケーション540のメインウィンドウを表すウィンドウオブジェクト510を含む。ターゲットアプリケーションがファイルシステムブラウザである場合、メインウィンドウは、ファイルシステムの開かれたフォルダを表すことができる。
ウィンドウオブジェクト510内には、その子オブジェクト、メニューオブジェクト512、およびリストビューオブジェクト514がある。メニューオブジェクト512内には、その子オブジェクトであるボタンオブジェクト516および518がある。例えば、ボタンオブジェクトは、開かれたフォルダに関連付けられたアクションのためのボタンを表す。リストビューオブジェクト514内には、ファイルオブジェクト520、522、および524、ならびにフォルダオブジェクト530が含まれる。例えば、これらのUIオブジェクトは、ファイルまたはサブフォルダなど、フォルダに格納されたコンテンツアイテムを表す。
図4に戻ると、UI状態400を生成することに加えて、オペレーティングシステム245はUI状態400を維持し、適切なときにUI状態400を更新することができる。例えば、UI状態は、ユーザインタフェース入力イベントの検出に応答して、またはプログラムアプリケーション命令に応答して更新される。オペレーティングシステム245は、UI状態を管理して、オペレーティングシステム245上で実行されるアプリケーション255にわたるユーザ入力処理およびユーザインタフェース提示を容易にする。
404において、UI拡張器モジュール265は、オペレーティングシステム245からのUIイベントに関するシステム通知を登録する。UI拡張器モジュール265は、OS X(登録商標)用アクセシビリティAPIまたはウィンドウズ(登録商標)10用ウィンドウズ(登録商標)シェルAPIなどのUI API 280を使用して、UIイベントに関するイベントを登録する。
オペレーティングシステムAPIは、アプリケーションがオペレーティングシステム245のプロセスとどのようにインタラクションすることができるかについてのプロトコルを定義する。例えば、オペレーティングシステム245は、UI API 280を介してUI拡張器モジュール265とUIイベント及び関連メッセージを通信する。UI API 280は、UI拡張器モジュール265がUIイベントに関する通知を登録および受信することを可能にする通信を提供する。いくつかの例示的なUIイベントはとりわけ、フォーカスUIオブジェクト変更(例えば、フォーカスされたウィンドウ変更)、UIオブジェクト生成、UIオブジェクト移動、UIオブジェクトリサイズ、UIオブジェクトリサイズ、UIオブジェクト最小化、UIオブジェクト最小化解除、UIオブジェクト破壊(例えば、UIから除去される)、UIオブジェクト生成、アプリケーション255起動、アプリケーション255停止を含み得る。
UI API 280は、UI拡張器モジュール265がターゲットアプリケーションおよび/またはターゲットUIオブジェクトを(例えば、ターゲットアプリケーションに存在することが既知のUIオブジェクトIDまたはUIオブジェクトタイプに基づいて)指定することによって、システム通知を登録することを可能にする。オペレーティングシステム245はUIイベントが検出されたときに、登録に従って、ターゲットアプリケーションのUIオブジェクト、または特定のターゲットUIオブジェクトに関するUIイベントについて、システム通知を送信することができる。いくつかのUI APIはUI状態400を完全には公開しないので、UI拡張器モジュール265は、UI状態400がオペレーティングシステム245によって公開されない場合であっても、UIイベント通知処理に基づいて、ターゲットアプリケーションのUIサブ状態274によって表されるUI状態400の部分を再構築することができる。
UIイベントに関するシステム通知の登録に関連して、UI拡張器モジュール265は、適切な登録が完了すると、リスニング状態に入る。システム通知はユーザ入力またはプログラム命令に応答するなど、事実上いつでも非同期にトリガされ、したがって、リスニング状態は非同期UIイベント処理のためにUI拡張器モジュール265を準備する。
406において、オペレーティングシステム245は、UIイベントを検出する。UIイベントは、UI状態400のUIオブジェクトプロパティへの変更など、アプリケーションのUI状態への変更を含むイベントを指す。UIイベントは高さ、幅、および(例えば、X-Y座標対)位置などのUIオブジェクトのグラフィカルプロパティに対する変更、またはファイルパス、入力ステータスなどの他のプロパティに対する変更を含むことができる。
オペレーティングシステム245は、ネイティブアプリケーション255にUIを提供することに関連してUI状態400を更新する。例えば、オペレーティングシステム245は、ユーザ入力モジュール260からユーザ入力を受け取る。オペレーティングシステム245はユーザ入力が生成されると、現在フォーカスされているUIオブジェクト(例えば、ウィンドウオブジェクト)などのUIオブジェクトにユーザ入力を関連付ける。オペレーティングシステム245は、ユーザ入力に基づいてUIイベントの発生を検出する。例えば、ユーザ入力がウィンドウオブジェクトのリサイズを示す場合、オペレーティングシステム245は、ウィンドウオブジェクトのリサイズUIイベントを生成する。オペレーティングシステム245は、UIオブジェクトのUIイベントに基づいてUI状態400を更新する。例えば、ウィンドウオブジェクトリサイズイベントの場合、ウィンドウオブジェクトの高さまたは幅UIオブジェクトパラメータが更新される。オペレーティングシステム245によってディスプレイ上でユーザに提供されるUIは、更新されたUI状態400に基づいて更新することもできる。
408において、オペレーティングシステム245は、UIイベントに関するシステム通知をUI拡張器モジュール265に提供する。オペレーティングシステム245はUI拡張器モジュール265が通知を受信するために登録したUI状態への更新に基づいてシステム通知を生成し、システム通知をUI拡張器モジュール265に送信する。システム通知は、404で実行されるシステム通知登録に対する非同期コールバックとして提供することができる。システム通知はUIオブジェクトを特定するUIオブジェクトIDまたはGUIDを含むことができ、適用可能な場合にはグラフィカルプロパティなど、UIオブジェクトの1つまたは複数の更新されたUIオブジェクトプロパティの指示をさらに含むことができる。
410において、UI拡張器モジュール265はシステム通知がターゲットアプリケーションのターゲットUIオブジェクトに関係するかどうか、言い換えれば、アプリケーションまたは関心のあるオブジェクトの通知に関係するかどうかを判定することができる。UI拡張器モジュール265は、監視されたプレゼンスデータストア210、またはターゲットUIオブジェクトおよび/またはターゲットアプリケーションをそれらのオブジェクトIDに基づいて保存する他のデータベースにアクセスする。したがって、特定のUIオブジェクトIDを含むシステム通知を受信すると、UI拡張器モジュール265は、オブジェクトIDをターゲットオブジェクトおよびアプリケーションのリストとマッチングさせようと試みる。オブジェクトIDがリストされている場合、そのオブジェクトは、ターゲットアプリケーションのターゲットオブジェクトである。
システム通知がターゲットアプリケーションのターゲットUIオブジェクトに関係しないと判定したことに応答して、プロセス400は402に戻り、オペレーティングシステム245はUI状態400を更新し続け、UIイベントを検出する。同様に、UI拡張器モジュール265はオペレーティングシステム245からのUIイベントに関するシステム通知をリスニングし、受信し続ける。
410に戻ると、システム通知がターゲットアプリケーションのターゲットUIオブジェクトに関するものであると判定したことに応答して、UI拡張器モジュール265は、システム通知に基づいて、ターゲットアプリケーションのUIサブ状態274を生成する。UI拡張器モジュール265はUIサブ状態生成器272を介して、UIサブ状態274を生成し、管理する。UIサブ状態274はオペレーティングシステム245によって管理されるUI状態285とは別個であり、UI拡張器モジュール265によって使用されて、ターゲットオブジェクトに対するマスタUI状態295の変更を追跡する。UI拡張器モジュール265は、オペレーティングシステム245上で実行されるターゲットアプリケーションのための定義されたN個のUIサブ状態を生成することができる。いくつかの実施形態では、N個のUIサブ状態は、異なるシステムタイプ、システム構成、または(例えば、メモリ可用性、利用可能な処理能力などに基づく)システムの状態について異なることができる。いくつかの実施形態では、UIサブ状態が所定の時間保持される。例えば、UIサブ状態は、ターゲットアプリケーションが閾値時間の間フォーカスされていない場合に満了することができる。期限切れのターゲットアプリケーションのUIサブ状態は(例えば、定義されたN個のUIサブ状態に到達していない場合であっても)削除することができる。
サブ状態を維持することは、満了時間などの他の要因に基づくことができる(例えば、ターゲットアプリケーションがフォーカスを有してからのしきい値時間量の場合、そのターゲットアプリケーションのサブ状態を削除することができる)。
図5を参照すると、オペレーティングシステム245によって維持されるUI状態500はターゲットUIオブジェクトおよび非ターゲットUIオブジェクトを含み、非ターゲットUIオブジェクトは、図5において*記号でマークされている。ターゲットアプリケーション540のUIサブ状態274は、ターゲットUIオブジェクトのみを含むように生成される。したがって、図8はターゲットアプリケーション540のUIサブ状態800の一例を示し、UI状態500のオブジェクトのサブセット、具体的には、ターゲットアプリケーションオブジェクトまたはターゲットアプリケーション内のターゲットUIオブジェクトだけを含む。したがって、UIサブ状態800は、UI状態500のアプリケーションオブジェクト504、ウィンドウオブジェクト510、メニューオブジェクト512、リストビューオブジェクト514、ボタンオブジェクト516、ボタンオブジェクト518、ファイルオブジェクト520、およびファイルオブジェクト522にそれぞれ対応するアプリケーションオブジェクト804、ウィンドウオブジェクト810、メニューオブジェクト812、リストビューオブジェクト814、ボタンオブジェクト816、ボタンオブジェクト818、ファイルオブジェクト820、およびファイルオブジェクト822を含む。UI状態500の非ターゲットUIオブジェクト(例えば、ターゲットアプリケーションのウィンドウオブジェクト528、フォルダオブジェクト530、およびファイルオブジェクト524、ならびに非ターゲットアプリケーションのオブジェクト506、508、および526)は、UIサブ状態800から除外される。いくつかの実施形態では、UI拡張器モジュール265が非ターゲットUIオブジェクトのUIイベントに関するシステム通知を登録または受信しない。
親子関係に加えて、UIサブ状態800は、ターゲットUIオブジェクトのUIオブジェクトプロパティの一部または全部をさらに定義または含むことができる。したがって、UIサブ状態800は対象のターゲットUIオブジェクトを含み、非ターゲットUIオブジェクトを除外する、オペレーティングシステム245によって管理されるUI状態500の複製されたサブセットを表すことができる。
UIサブ状態800は、オペレーティングシステム245から経時的に受信されたUIイベントの複数のシステム通知に基づいて、経時的に生成される。いくつかの実施形態では、UI拡張器モジュール265がターゲットアプリケーション起動/停止イベントの登録に基づいて、UIイベントの登録を開始する。ターゲットアプリケーションが起動されると、UI拡張器モジュール265は、UI状態を横断(traverse)して、各ターゲットUIオブジェクトに関するシステム通知を登録する。例えば、ターゲットアプリケーションが活動化されると、オペレーティングシステム245は、アプリケーションオブジェクトノード、および任意の子UIオブジェクトノードを生成する。オペレーティングシステム245は、起動イベントに関するシステム通知をUI拡張器モジュール265に送信する。UI API呼び出しを使用して、UI拡張モジュール254はターゲットアプリケーションのUIオブジェクトを要求し、オペレーティングシステム245は、これらのUIオブジェクトのオブジェクトIDをUI拡張器モジュール265に送る。UIオブジェクトは、ターゲットアプリケーションのUI状態のノードを横断(traverse)するなどして、単一の要求で収集することも、複数の要求を使用して収集することもできる。受信されたUIオブジェクトごとに、UI拡張器モジュール265はUIオブジェクトがターゲットUIオブジェクトであるかどうかを判定するために、ターゲットアプリケーションのために定義されたルールのセットを使用する。UIオブジェクトがターゲットUIオブジェクトである場合、UI拡張器モジュール265は、ターゲットUIオブジェクトをUIサブ状態に追加することによって、ターゲットアプリケーションのUIサブ状態を更新する。次いで、UI拡張器モジュール265はターゲットUIオブジェクトに関するシステム通知を登録し、システム通知に基づいてUI状態と協調してUIサブ状態を維持する。同様に、イベントがUIオブジェクトまたはターゲットアプリケーションがもはや利用可能ではないことを示す場合(例えば、アプリケーションまたはウィンドウクローズ、ファイルの移動または削除など)、UI拡張器モジュール265はUIサブ状態800からUIオブジェクトを削除することができ、いくつかの実施形態では、削除されたUIオブジェクトに関するシステム通知を登録解除することができる。
414において、UI拡張器モジュール265は、UIサブ状態800に基づいて、ターゲットアプリケーションのフォーカスされたターゲットUIオブジェクトのためのUI拡張を生成する。UIイベントによって示されるように、ターゲットUIオブジェクトがフォーカスされたUIオブジェクトになると、フォーカスされたターゲットUIオブジェクトのためのUI拡張を生成または更新することができる。
UI拡張のグラフィカルプロパティはUI拡張がネイティブアプリケーション255のUIと統合されているか、またはそれに添付されているように見えるように、フォーカスされたターゲットUIオブジェクトのグラフィカルプロパティと経時的に協調して維持される。いくつかの実施形態では、UI拡張がフォーカスされたUIオブジェクトまたはフォーカスされたUIオブジェクトの基礎となるコンテンツアイテムに文脈的に関連するUIオブジェクト(例えば、ボタン、メニューなど)をさらに含むことができる。UI拡張の作成および更新に関するさらなる詳細は、図10に関連して以下で説明される。
416において、UI拡張器モジュール265は、UI拡張を表示する。UI拡張は、ターゲットUIオブジェクトに対して表示することができる。図9は、UI拡張902を有するターゲットアプリケーション540のUIの模式的な例を示す。UI拡張902は、高さ、長さ、および位置などのグラフィカルプロパティを有する。拡張UIオブジェクトのグラフィカルプロパティは、UI拡張902自体がターゲットアプリケーションの実際の基礎となるUIとは別個であっても、ターゲットアプリケーションのUIに統合もしくは付属しているように見えるよう、サイズおよび位置が調整される。これは、UI拡張902を、ターゲットアプリケーションのUIの手前、例えばウィンドウオブジェクト510の手前にオーバーレイとしてレンダリングすることによって行われる。ターゲットアプリケーションのUIオブジェクトのグラフィカルプロパティが更新されると、統合または付属した見かけを経時的に維持するために1つ以上のUI拡張オブジェクトのグラフィカルプロパティがそれに応じて更新される。例えば、ウィンドウオブジェクト510が100ピクセル右に移動されたとすると、UI拡張902の位置は、その位置を正確に同じ量だけシフトするように直ちに更新される。これは、以下でさらに説明するように、例えば、ユーザインタフェース内のオブジェクトに対する変更の高頻度システム通知をUI拡張器モジュール265に提供するグラフィックスAPIを利用することによって行われる。
いくつかの実施形態において、UI拡張のグラフィカルプロパティ(例えば、位置、隠された/表示された状態など)または機能(例えば、ツール、ボタンなど)は、ユーザによってカスタマイズされてもよい。例えば、ユーザは、UI拡張上でドラッグアンドドロップまたは他のユーザインタフェース操作を実行することによって、ターゲットアプリケーションのウィンドウ内のUI拡張の位置をカスタマイズすることができる。いくつかの実装において、これらのカスタマイズはターゲットアプリケーション固有のものであってもよいし、および/または複数のターゲットアプリケーションの実行全体にわたって記憶され、永続的なものであってもよい。
プロセス400は、1つまたは複数のターゲットUIオブジェクトに関連してUI拡張が生成され、経時的に表示されるように繰り返される。その意味で、プロセス400は、オペレーティングシステムのユーザインタフェースの状態(UI状態500)とは別個のUI表現(UIサブ状態800)を維持するUIイベントループを提供する。したがって、方法400は402に戻ることができ、そこでオペレーティングシステム245はUI状態500の更新やイベント通知の送信などを継続することができる。
図10は、ターゲットアプリケーションのUIオブジェクトのグラフィカルプロパティ更新と協調してUI拡張を更新するためのプロセス1000の一例を示す。UI拡張の構成はターゲットアプリケーションまたはオペレーティングシステムによって制限されないが、経時的に協調し続けるために、UI拡張のグラフィカルプロパティはターゲットアプリケーションUIオブジェクトに対するグラフィカルプロパティの変更に基づいて変更されうる。
1005において、UI拡張器モジュール265はオペレーティングシステム245から、ターゲットUIオブジェクトのグラフィカルプロパティ更新を示すUIイベントのシステム通知を受信する。プロセス400の402〜408における議論は、1005において適用可能である。
UI拡張器モジュール265は、UIイベントがターゲットUIオブジェクトのグラフィカルプロパティ更新を示すかどうかを判定する。UIオブジェクトのグラフィカルプロパティは、高さ、幅、およびX-Y位置などのパラメータを含むことができる。グラフィカルプロパティは、ディスプレイ上のUIオブジェクトの形状、サイズ、および位置を定義することができる。上述のように、UI拡張器モジュール265は、ターゲットUIオブジェクトのUIイベントに関するシステム通知を登録することができる。
UI拡張器モジュール265は、UIイベントのターゲットUIオブジェクトを表すノードを含むことができるUIサブ状態800を維持する。UIサブ状態800は、各UIオブジェクトのグラフィカルプロパティを含むことができる。あるUIイベントでグラフィカルプロパティのインスタンスが受信されると、UI拡張器モジュール265は、そのUIイベントがターゲットUIオブジェクトのグラフィカルプロパティ更新を示していると判定する。例えば、ターゲットUIオブジェクトの形状、サイズ、または位置が変更されていてもよい。別の例では、UIイベントがUIイベントのグラフィカルプロパティ更新を示しているかどうかを判定するため、受信したグラフィカルプロパティは、過去に保存されたターゲットUIオブジェクトのグラフィカルプロパティと比較される。
1010において、UI拡張器モジュール265は、ターゲットUIオブジェクトのグラフィカルプロパティ更新に基づいてUIサブ状態800を更新する。例えば、ターゲットUIオブジェクトのUIオブジェクトプロパティの過去に保存された1つ以上が、UIイベントから受信されたUIオブジェクトプロパティに基づいて更新される。ターゲットUIオブジェクトが新しいターゲットUIオブジェクトである場合、UI拡張器モジュール265は、ターゲットUIオブジェクトをUIサブ状態800に追加する。したがって、UIサブ状態800は、ターゲットUIオブジェクトについてのオペレーティングシステムのUI状態500の変化を追跡する。
1015でUI拡張器モジュール265は、(もしあれば)ターゲットUIオブジェクトの1つまたは複数のターゲットUI子オブジェクトのグラフィカルプロパティを決定する。ターゲットUI子オブジェクトは、UI状態またはサブ状態内の他のターゲットUIオブジェクトの子であるターゲットUIオブジェクトを意味する。ターゲットUIオブジェクトがウィンドウオブジェクトである場合、ターゲットUIオブジェクトのグラフィカルプロパティ更新は、ウィンドウオブジェクトが移動したか、リサイズされたことを示しうる。同様に、ウィンドウオブジェクトの子UIオブジェクト(例えば、メニュー、ファイル、フォルダなど)も、ウィンドウオブジェクト内のグラフィカルプロパティ変更に基づいて移動していたりサイズが変化していたりするかもしれない。
図8を参照すると、メニューオブジェクト812およびリストビューオブジェクト814は、ウィンドウオブジェクト810のターゲットUI子オブジェクトである。親子関係は、グラフィカルプロパティ関係を定義することができる。図9を参照すると、メニューオブジェクト512およびリストビューオブジェクト514は、親ウィンドウオブジェクト710のスペース内に適合するようなサイズにされ、親ウィンドウオブジェクト710のグラフィカルスペース内に配置される。
UI拡張器モジュール265は、ターゲットUIオブジェクトのターゲットUI子オブジェクトを決定するとともに、高さ、幅、および位置などのターゲットUI子オブジェクトのグラフィカルプロパティを決定するために、UIサブ状態800を参照することができる。ターゲットUI子オブジェクトは必ずしも直下の子に限定されず、いくつかの実施形態では、UI拡張器モジュール265がターゲットUIオブジェクトの孫、ひ孫など、他の子孫UIオブジェクトのグラフィカルプロパティを決定することができる。いくつかの実装形態では、ターゲットUIオブジェクトの新しいUI子孫オブジェクトの生成が、UI拡張器モジュール265が自身のサブ状態にその新しいUI子孫オブジェクトを追加するかどうかを判定し、新しいUI子孫オブジェクトを別のターゲットUIオブジェクトとして分類するとともに、新しいターゲットUIオブジェクトについてのUIイベントの通知を登録するきっかけとなり得る。
いくつかの実施形態では、ターゲットUI子オブジェクトがUIイベント通知について登録されている場合、ターゲットUI子オブジェクトのグラフィカルプロパティの変更もUIイベントをトリガする。子ターゲットUIオブジェクトのそれぞれについて、オペレーティングシステム245はUIイベントを示すシステム通知を送信することができる。子ターゲットUIオブジェクトのそれぞれについて、UI拡張器モジュール265は、UIサブ状態からのターゲット子UIオブジェクトのグラフィカルプロパティを、システム通知から受信したターゲット子UIオブジェクトのグラフィカルプロパティと比較することができる。グラフィカルプロパティが異なる場合、UI拡張器モジュール265は、UIイベントが子ターゲットUIオブジェクトのグラフィカルプロパティ更新を示すと判定する。
1020で、UI拡張器モジュール265は、UI拡張の1つまたは複数のグラフィカルプロパティを、ターゲットUIオブジェクトおよびターゲットUI子オブジェクトのグラフィカルプロパティと協調するように更新する。UI拡張はボタン、メニュー、リストなどの1つまたは複数の拡張UIオブジェクトを含み、これらのオブジェクトは、フォーカスされたUIオブジェクトに関連する追加機能および/または情報を提供する。いくつかの実施形態においてUI拡張器モジュール265は、拡張UIオブジェクトを含む内部UI状態を維持することができる。UI拡張のグラフィカルプロパティを更新することは、UI拡張の内部UI状態を更新することを含みうる。
UI拡張が以前に生成されていない場合、UI拡張器モジュール265は、UIオブジェクトおよび任意のターゲットUI子オブジェクトのグラフィカルプロパティと協調するようにUI拡張を生成する。協調時にUI拡張は、ネイティブアプリケーションUIに統合された、または付属するオブジェクトのように動作する。付属は、アプリケーション255およびオペレーティングシステム245がUI拡張のグラフィカルプロパティ(例えば、サイズ、位置、外観、内容など)に直接的な制約を課さないという点で、任意であり得る。UI拡張は、例えば、開発者またはユーザによって決定される、任意のサイズ、形状、および任意の位置を有する。
図11a〜11cは、ターゲットUIオブジェクトグラフィカルプロパティの変化に伴うUI拡張1112の調整を示す。図11A〜11Cでは、ターゲットUIオブジェクト1102〜1110がデスクトップ1100上に表示され、ユーザに見える状態にある。ウィンドウオブジェクト1102は子UIオブジェクト1106および1104を含み、子UIオブジェクト1104および1106は、それぞれ、子UIオブジェクト1108および1110を含む。
UI拡張1112は、ターゲットUIオブジェクト1102〜1110に関連して提供される。ウィンドウオブジェクト1102が、図11aに示されるような初期状態から移動またはリサイズされる場合、UI拡張1112もまた、図11bに示されるように、それに応じて移動またはリサイズされてよい。UI拡張オブジェクトを移動またはリサイズすることは、高さ、幅、または(例えば、中心)位置など、UI拡張の1つまたは複数のグラフィカルプロパティを更新することを含みうる。
UI拡張1112は、ターゲットオブジェクト1102、1104、および1106によって定義されるオープングラフィカル領域1114内など、特定の方法で付属するようにサイズと位置が調整される。ターゲットオブジェクト1102、1104、および1106のグラフィカルプロパティの変化によってオープングラフィカル領域1114のサイズおよび位置が変化すると、UI拡張のグラフィカルプロパティがそれに応じて更新される。図11bにおいてUI拡張1112は、UI拡張1112がオープングラフィカル領域1114でウィンドウターゲットオブジェクト1102の右下隅に取り付けられた状態を維持するように移動される。UI拡張1112はさらに、オープングラフィカル領域1114内に収まって見えるようにリサイズされる。この場合も、この実施形態では、UI拡張1112がターゲットオブジェクト1102のウィンドウの手前にオーバーレイとして表示され、ターゲットオブジェクト1112自体によって制御されるウィンドウ内の実際のオブジェクトとしては表示されない。
図11cでは、ターゲットオブジェクト1102、1104、および1106がターゲットオブジェクトを遮らずにUI拡張1112を表示することができるオープングラフィカル領域(例えば、右下隅)をもはや規定しないようにターゲットオブジェクト1102がリサイズされている。UI拡張生成器276は、リサイズされたターゲットオブジェクトのグラフィカルプロパティを評価し、他のUIオブジェクトを遮らずにUI拡張1112をオープングラフィカル領域1116に表示することができると判定する。したがって、UI拡張生成器276はUI拡張1112のサイズおよび位置を更新し、それをオーバーレイとして表示することで、オープングラフィカル領域1116内にUI拡張1112が収まって見えるようにする。UI拡張1112がネイティブアプリケーションUIオブジェクトを遮ることは回避した方が望ましいことが多いものの、UI拡張1112はネイティブUIアプリケーションのオープングラフィック領域内にあることに限定されず、他の(例えば、任意の)付属方法も可能である。例えば、UI拡張1112は、ネイティブアプリケーションUIのUIオブジェクトを完全に、もしくは部分的に覆ってもよい。別の例においてUI拡張1112は、領域1120でターゲットオブジェクト1102の直下など、ターゲットUIオブジェクトのウィンドウに隣接して提示され得る。
図12は、ターゲットUIオブジェクトに関するイベントのシステム通知から、ターゲットアプリケーション、UIオブジェクトタイプ、およびコンテンツアイテムを特定するための例示的なプロセス1200を示す。上述のように、UIサブ状態800のターゲットUIオブジェクトは、UIオブジェクトのタイプまたはクラスを定義するUIオブジェクトタイププロパティを含むことができる。UIサブ状態800のいくつかの例示的なUIオブジェクトタイプは、ウィンドウオブジェクト、メニューオブジェクト、ボタンオブジェクト、ファイルオブジェクト、またはフォルダオブジェクトタイプを含むことができる。ファイルUIオブジェクトタイプは、ファイル、ファイルシステムパス、またはターゲットアプリケーションを特定する、追加のパラメータを含むことができる。
しかし、場合によっては、オペレーティングシステム245によって維持されるマスタUI状態500が、UIサブ状態800のUIオブジェクトタイプの一部またはすべてを含まなくてもよい。例えば、ウィンドウズ(登録商標)オペレーティングシステムは、すべてのUIオブジェクトをウィンドウタイプとして取り扱う。言い換えると、オペレーティングシステムのUI抽象化(例えば、UI状態500)によって提供されるUIオブジェクトノードクラスのセットは、UI状態400から完全なUIサブ状態800を作成するのに十分に詳細な情報をそれ自体では提供しない場合がある。同様に、ウィンドウオブジェクトのUI状態400はUIオブジェクト(またはUIオブジェクトの基礎となるファイル)またはターゲットアプリケーション(たとえば、ドキュメントファイルを処理するマイクロソフト(登録商標)ワードアプリケーション)によって表されるファイルのIDのような重要な情報を含まないかもしれない。いくつかの実施形態において、オペレーティングシステム245がUIオブジェクトに関するシステム通知を生成するとき、通知は基礎となるファイルまたはターゲットアプリケーションを特定しない。代わりに、システム通知はターゲットUIオブジェクトを特定するGUIDを含む。
さらに、いくつかの実施形態においては、装置100に格納されたデータの一部が、コンテンツ管理システム110によって管理されるコンテンツアイテムである。基礎となるファイルがコンテンツ管理システム110によって管理されるコンテンツアイテムであるか、システム110の外部にあるファイルであるかを判定するため、ターゲットUIオブジェクトの基礎となるファイルを特定することができる。このように、プロセス1200は、UIオブジェクトタイプ、およびタイプ固有のプロパティを、ターゲットUIオブジェクトに関するUIイベントのシステム通知から特定するために実行され、そこではUIオブジェクトID((たはGUID)のみがUIイベント通知から提供される。ファイルオブジェクトタイプの場合、プロパティは、基礎となるファイルおよび/またはコンテンツアイテムを含むことができる。
1205において、UI拡張器モジュール265は、フォーカスされたターゲットUIオブジェクトについてのUIイベントを示すシステム通知を受信する。ターゲットUIオブジェクトにはオペレーティングシステム245によってGUIDが割り当てられ、このGUIDはシステム通知に含まれている。別の例においてUI拡張器モジュール265は、システム通知の受信に引き続いて、オペレーティングシステム245にGUIDを要求し、オペレーティングシステム245からGUIDを受信する。
一例では、ターゲットアプリケーションが文書処理アプリケーション(例えば、マイクロソフト(登録商標)ワード)である。フォーカスされたターゲットUIオブジェクトは、開かれた文書ファイルを含んだ文書処理アプリケーションのウィンドウUIオブジェクトとすることができる。システム通知は、ターゲットUIオブジェクトがフォーカスされたターゲットUIオブジェクトになったことを示すことができる。UI拡張器モジュール265は、ドキュメントファイルがコンテンツ管理システムによって管理されるコンテンツアイテムである場合、文書処理アプリケーションのUIに関連するUI拡張を生成することができる。オペレーティングシステム245が(オペレーティングシステム245がファイルシステムパスプロパティとともにファイルオブジェクトクラスを含まないために)この情報をUI状態400内のUIオブジェクトプロパティとして維持していないとしても、ターゲットアプリケーションおよびコンテンツアイテム(例えばファイルシステムパス)は、システム通知から受信されるターゲットUIオブジェクトのGUIDから決定されなければならない。
1210において、UI拡張器モジュール265は、候補ターゲットアプリケーションの内部UI状態290に問い合わせることに基づいて、候補GUIDを決定する。候補ターゲットアプリケーションはネイティブアプリケーション255のセットを含むことができ、候補ターゲットアプリケーションの1つは、UIイベント通知のターゲットUIオブジェクトに関するターゲットアプリケーションである。
例えば、ワードプロセッサアプリケーションが候補ターゲットアプリケーションである場合、ワードプロセッサアプリケーションは、ワードプロセッサアプリケーションのUIオブジェクトを表す内部UI状態290を維持することができる。候補ターゲットアプリケーションは、UIオブジェクト情報を内部UI状態290に照会して受信するために用いることができるAPIをさらに提供することができる。このAPIを使用して、UI拡張器モジュール265は、現在フォーカスされているドキュメントウィンドウと、ワードプロセッサアプリケーション内のUIオブジェクトに関するGUIDとを要求し、受信する。UI拡張器モジュール265は現在フォーカスされているUIオブジェクトについての候補ターゲットアプリケーションの内部UI状態を照会することに基づいて、各候補ターゲットアプリケーションに関連付けられた候補GUIDを要求し、受信する。
1215においてUI拡張器モジュール265は、オペレーティングシステム245から受信したGUIDと候補ターゲットアプリケーションから受信した候補GUIDとを比較することに基づいて、候補ターゲットアプリケーションからターゲットアプリケーションを決定する。例えば、UI拡張器モジュール265はGUIDを候補GUIDのうちの1つとマッチングさせることができ、マッチングする候補GUIDに関連付けられた候補ターゲットアプリケーションがターゲットアプリケーションとして決定される。
1220において、UI拡張器モジュール265は、GUIDを用いてターゲットアプリケーションに問い合わせることに基づいて、ターゲットUIオブジェクトに関連付けられたファイルシステムパスを決定する。例えば、UI拡張器モジュール265は、GUIDを用いてファイルシステムパスを問い合わせるためにターゲットアプリケーションのAPIを使用してもよいし、あるいはターゲットアプリケーションの現在フォーカスされているUIオブジェクトに関連づけられたファイルシステムパスを問い合わせることによってターゲットアプリケーションのAPIを用いてもよい。ファイルシステムパスは、ファイルシステムディレクトリパスおよびファイル名を含むことができる。
1225において、UI拡張器モジュール265は、ファイルシステムパスに基づいて、UIオブジェクトタイプおよびコンテンツアイテムを決定する。ファイルシステムパスは、ディレクトリおよびファイル名を含むことができる。ファイル名はUIオブジェクトタイプを特定するために使用されるファイルタイプ拡張子(例えば、ドキュメントファイルについては.doc)を含むことができる。別の例では、特定のファイル名のないフォルダディレクトリが、UIオブジェクトがフォルダオブジェクトタイプであることを示すことができる。
コンテンツアイテムはまた、ファイルシステムパスから特定されてもよい。上述のように、コンテンツアイテムはコンテンツ管理システム110によって格納されたデータを意味し、複数の装置100にわたって同期されうる。さらに、コンテンツ管理システム110で維持されるファイル編成スキームがクライアントアプリケーション200と共にオペレーティングシステム245によってローカルファイル構造として表されるように、コンテンツ管理システム110へのアクセスをローカルファイル管理システムに統合することができる。ローカルファイル構造のオブジェクト(例えば、フォルダ、ファイル)は、ファイルシステムパスによって参照され、したがって、コンテンツアイテムはファイルシステムパスから特定される。いくつかの実施形態において、UI拡張器モジュール265は、コンテンツアクセスモジュール206にファイルシステムパスを問い合わせることに基づいて、ターゲットUIオブジェクトに関連づけられたファイルシステムパスがコンテンツアイテムであるかどうかを判定することができる。コンテンツアクセスモジュール206は、コンテンツアイテムのディレクトリおよびそれらのファイルシステムパスを含むことができる。
1230において、UI拡張器モジュール265は、UIオブジェクトタイプおよびコンテンツアイテムに基づいてUI拡張を生成する。例えば、(例えば、ファイルシステムパスおよび、UIオブジェクトがコンテンツアイテムであるかどうかを特定する)UIオブジェクトタイプおよびタイプ固有のプロパティは、UIサブ状態800のUIオブジェクトに格納される。
UI拡張は、ターゲットUIオブジェクトのUIに対するオーバレイとして表示することができる。したがって、UI拡張はユーザの視点からはターゲットアプリケーションのUIと統合されているように見えるが、UI拡張器モジュール265はターゲットアプリケーションのUIにアクセスまたは変更する必要はなく、同時に、ターゲットアプリケーションはUI拡張に対するプログラム制御を有さない。したがって、ターゲットアプリケーション255またはオペレーティングシステム245はUI拡張オーバーレイのグラフィカルプロパティにいかなる制限も課さないので、UI拡張はターゲットアプリケーションのUIに関連するなど、システム内の任意のUIに任意に付属させることができる。
UI拡張器モジュール265によって生成されるUI拡張は、ターゲットアプリケーションによって提供されず、好ましくはターゲットアプリケーション内の現在フォーカスされているUIオブジェクトに関連する、拡張された機能を提供することができる。例えば、コンテンツアイテムがドキュメントファイルである場合、UI拡張は、コンテンツ管理システム100で同期されたコンテンツアイテムとのインタラクション、または選択された他のユーザとそのドキュメントファイルを共有する機能、またはオペレーティングシステムまたはコンテンツ管理システムの適切な機能を使用してドキュメントファイルのバージョン履歴を表示する機能など、ドキュメントファイルの拡張機能を提供するUIオブジェクトを含むことができる。その意味において、UI拡張のグラフィカルまたは機能プロパティは、フォーカスされたコンテンツアイテム、またはフォーカスされたコンテンツアイテムのプロパティ(例えば、ファイルタイプ))基づいて更新される。
図13は、フォーカスされたファイルオブジェクトのためのUI拡張1302および1310の例を示す。ターゲットファイルシステムブラウザアプリケーション内のコンテンツアイテムを表すファイルオブジェクト522の選択またはフォーカスに応答して、ボタンオブジェクト1304、1306、および1308を含むUI拡張1302を生成することができる。ボタンオブジェクト1304、1306、および1308は、コンテンツアイテムとのインタラクティブな機能を提供する。例えば、コメントボタン1304はユーザがコンテンツアイテムにコメントを追加することを可能にし、バージョン選択ボタン1306はユーザがコンテンツアイテムの異なるバージョンを選択することを可能にする機能を提供し、共有ファイルボタン1308は、ユーザがコンテンツ管理システムの他のユーザとファイルを共有することを可能にする機能を提供する。
UIイベントは、1つまたは複数のUI拡張の作成をトリガすることができる。例えば、UI拡張1310は、ファイルオブジェクト522の選択またはフォーカスに応答して生成されてもよい。UI拡張1310はコンテンツアイテムを編集している、閲覧している、または開いた他のユーザを特定するインタラクションデータを表示する追加機能を提供する。別の例では、フォーカスされたUIオブジェクトがファイルオブジェクト524などのコンテンツアイテムでない場合、UI拡張1202/1210は生成されず、または異なるUI拡張が生成される(例えば、コンテンツアイテム追加ボタン)。様々な実装において、UI拡張1302および1310の機能は単一のUI拡張に、または3つ以上のUI拡張に実装されてもよい。
1235でUI拡張器モジュール265は、ファイルシステムパスおよびターゲットアプリケーションを含むように、ターゲットUIオブジェクトのUIサブ状態800を更新する。例えば、ターゲットUIオブジェクトがファイルオブジェクトである場合、そのターゲットUIオブジェクトのGUIDに関連付けて、ファイルシステムパスおよびターゲットアプリケーションが格納される。ターゲットUIオブジェクトのGUIDがイベントのその後のシステム通知で受信されると、UI拡張器モジュール265は、受信したGUIDを使用してUIサブ状態800からファイルシステムパスまたはターゲットアプリケーションを参照することができる。その意味で、プロセス1200は、オペレーティングシステム245のマスタUI状態400のノードクラスと、UIサブ状態のノードクラスとの間の変換機能を提供する。いくつかの実施形態では、UI状態400のUIオブジェクトとUIサブ状態800のターゲットUIオブジェクトとの間にポインタがマッピングされる。いくつかの実施形態では、UI状態400のUIオブジェクトと特定のターゲットUIオブジェクトとの間に既存のマッピングが存在する場合、ステップ1210〜1225はスキップされる。その代わりに、マッピングは、UIオブジェクトのGUIDからターゲットアプリケーションまたはコンテンツアイテムを調べるために使用される。いくつかの実施形態では、異なるターゲットUIオブジェクトタイプが異なる変換機能に関連付けられる。例えば、異なるUIオブジェクトタイプは、異なるAPIを有する異なるターゲットアプリケーションによって処理される。
図14は、グラフィックスイベントのシステム通知からターゲットUIオブジェクトを特定するための例示的なプロセス1400を示す。ターゲットアプリケーションのUIサブ状態800を生成するためのUIイベントの使用は、先に詳細に説明されている。UIイベントはオペレーティングシステム245によって維持されるUI状態400の変化に関連付けられたイベントを意味し、システム通知の登録は、UI API 280を使用してオペレーティングシステム245と通信することを含みうる。
しかし、APIによって提供されるUIイベントのセットは、UIサブ状態800がマスタUI状態400に対して古くなることを防ぐのに十分ではない場合がある。例えば、オペレーティングシステム245は、UI拡張がターゲットアプリケーションのUIとの協調に失敗するような、UIイベント関して許容できなシステム通知遅延を被るかもしれない。したがって、UIイベント通知のみを用いてUIサブ状態800を更新すると、UIサブ状態800がUI状態400に対して古くなりうる。
プロセス1400は、UIオブジェクトグラフィカルプロパティを提供することができる、非同期イベントの他のソースからのシステム通知を使用する。上述のように、オペレーティングシステム245は、表示のためにUIオブジェクトをレンダリングするグラフィックスエンジン294を含んでいる。UI拡張器モジュール265は、OS X(登録商標)オペレーティングシステムのコアグラフィックスAPIのようなグラフィックスAPI 292を使用して、オペレーティングシステム245のグラフィックスエンジン294と通信することができる。グラフィックスAPI 292はグラフィックスイベントに関する非同期システム通知を登録し、受信するために使用され、グラフィックスイベントに関する通知は、UIサブ状態800を更新するために使用される。グラフィックスイベント(または他の非UIイベント)を受信すると、UIサブ状態800内の正しいターゲットUIオブジェクトがグラフィックスイベントのシステム通知から特定できることを確実にするため、イベントとターゲットUIオブジェクトとの間の相関が確立される。
1405において、オペレーティングシステム245は、グラフィックスエンジン294を用いて、UI状態400のUIオブジェクトに対応するグラフィックスオブジェクトをレンダリングする。例えば、グラフィックスエンジン294はUIオブジェクトグラフィックスプロパティを受信するために、オペレーティングシステムによって維持されるUI状態400を監視する。グラフィックスエンジン294は、UIオブジェクトグラフィックスプロパティに基づいてグラフィックスオブジェクトをレンダリングする。レンダリングされたグラフィックスオブジェクトのそれぞれは、オペレーティングシステム245によって管理されるUI状態400のUIオブジェクトに対応する。
1410で、オペレーティングシステム245は、グラフィックスエンジン294によってレンダリングされたグラフィックスオブジェクトにグラフィックスオブジェクトIDを割り当てる。レンダリングされる各UIオブジェクト、またはグラフィックスオブジェクトは、グラフィックスオブジェクトIDに関連付けられる。グラフィックスオブジェクトIDは、グラフィックスエンジン294によってレンダリングされるグラフィックスオブジェクトの固有識別子である。グラフィックスオブジェクトIDが、関連付けられたターゲットUIオブジェクトのターゲットUIオブジェクトID(またはGUID)と異なる場合、UI拡張器モジュール265は以下でより詳細に説明するように、グラフィックスオブジェクトIDとターゲットUIオブジェクトIDとの間の関連付けを作成する。
1415において、UI拡張器モジュール265は、フォーカスされたターゲットUIオブジェクトについてのグラフィックスオブジェクトIDをオペレーティングシステム245のグラフィックスエンジン294に要求する。1420で、オペレーティングシステム245は、フォーカスされたグラフィックスオブジェクトについてのグラフィックスオブジェクトIDをUI拡張器モジュール265に送信する。グラフィックスイベント/オブジェクトに関する、UI拡張器モジュール265とオペレーティングシステム245との間の通信は、グラフィックスAPI 292を使用することができる。
いくつかの実施形態では、プロセス800の408で上述したように、ターゲットUIオブジェクトがフォーカスされたUIオブジェクトになったことを示すUIのシステム通知をUI拡張器モジュール265が受信した際に、ターゲットUIオブジェクトについてのグラフィックスオブジェクトIDの要求が開始される。システム通知は、ターゲットUIオブジェクトを特定するUIオブジェクトIDまたはGUIDを含むことができる。UIイベント通知に応答して、UI拡張器モジュール265は、フォーカスされたターゲットUIオブジェクトに対応するフォーカスされたグラフィックスオブジェクトについてのグラフィックスオブジェクトIDをオペレーティングシステム245に求める要求を生成する。
1425においてUI拡張器モジュール265は、受信したグラフィックスオブジェクトIDをターゲットUIオブジェクトのUIオブジェクトIDに関連付ける。グラフィックスオブジェクトIDとUIオブジェクトIDとの関連付けは、UI拡張器モジュール265がその後、グラフィックスオブジェクトIDを含んだグラフィックスイベントのためのシステム通知を受信するときに使用される。受信したグラフィックスオブジェクトIDは関連付けられたターゲットUIオブジェクトを参照するために使用され、それにより、グラフィックスイベントのターゲットUIオブジェクトをグラフィックスイベント通知から特定することができる。
1430においてUI拡張器モジュール265は、オペレーティングシステム245からのグラフィックスオブジェクトIDのグラフィックスイベントに関するシステム通知を登録する。この要求は、1420でオペレーティングシステム245から以前に受信したグラフィックスオブジェクトIDを含むことができる。
1435において、オペレーティングシステム245は、グラフィックスイベントを決定する。グラフィックスエンジン294はUI状態285を監視し、UI状態285のUIオブジェクトのグラフィカルプロパティに基づいてグラフィックスオブジェクトをレンダリングする。オペレーティングシステム245はグラフィックスオブジェクトの高さ、幅、または位置など、グラフィックスオブジェクトレンダリングが変更されたときに、グラフィックスイベントを決定することができる。
1440において、グラフィックスイベントの決定に応答して、オペレーティングシステム245は、グラフィックスイベントに関するシステム通知をUI拡張器モジュール265に送信する。グラフィックスAPI 292にしたがって、システム通知は、グラフィックスイベントに関連するグラフィックスオブジェクトのグラフィックスオブジェクトIDを含む。システム通知は、グラフィックスオブジェクトのグラフィカルプロパティをさらに含むことができる。グラフィックスイベントは、グラフィカルプロパティが以前の状態と異なる場合に引き起こされうる。
1445においてUI拡張器モジュール265は、受信したシステム通知のグラフィックスオブジェクトIDに基づいて、グラフィックスイベントのターゲットUIオブジェクトを決定する。UI拡張器モジュール265は、1425で生成された関連付けグラフィックスオブジェクトIDおよびUIオブジェクトIDを参照することができる。
1450においてUI拡張器モジュール265は、UIサブ状態800について、ターゲットUIオブジェクトのグラフィカルプロパティを更新する。ターゲットUIオブジェクトのグラフィカルプロパティは、グラフィックスイベントに関するシステム通知と共に受信されたグラフィックスオブジェクトのグラフィカルプロパティに従って更新される。さらに、UI拡張器モジュール265は、UIサブ状態800のターゲットUIオブジェクトのグラフィカルプロパティへの更新に基づいてUI拡張を更新する。
これまでの本発明の実施形態の説明は例示目的で提示されたものであり、網羅的であること、または本発明を開示された形態そのものに限定することを意図したものではない。当業者は、先の開示に照らして多くの修正および変形が可能であることを理解することができる。
この説明のいくつかの部分は、情報に対する動作のアルゴリズムおよび記号表現に関して本発明の実施形態を説明している。これらのアルゴリズムの説明および表現は、データ処理技術分野の当業者によって、他の当業者に彼らの仕事の内容を効果的に伝えるために一般に使用されている。これらの動作は機能的に、計算的に、または論理的に説明されるが、コンピュータプログラムまたは同等の電気回路、マイクロコードなどによって実施されるものと理解される。さらに、時には、一般性を失うことなく、これらの動作の構成をモジュールと呼ぶことも便利であることが分かっている。説明された操作およびそれらの関連するモジュールは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せで実施され得る。
本明細書で説明されるステップ、操作、またはプロセスのいずれも、単独で、または他のデバイスと組み合わせて、1つまたは複数のハードウェアまたはソフトウェアモジュールを用いて実行または実装され得る。一実施形態では、ソフトウェアモジュールがコンピュータプログラムコードを含むコンピュータ可読媒体を備えるコンピュータプログラム製品で実装され、コンピュータプログラムコードは説明されるステップ、操作、またはプロセスのいずれかまたはすべてを実行するために、コンピュータプロセッサによって実行され得る。
本発明の実施形態は、本明細書の動作を実行するための装置にも関連しうる。この装置は必要とされる目的のために特別に構築されてもよく、および/またはコンピュータに記憶されたコンピュータプログラムによって選択的に起動または再構成される汎用コンピューティングデバイスを備えてもよい。そのようなコンピュータプログラムは、コンピュータシステムバスに結合することができる、非一時的な有形のコンピュータ可読記憶媒体、または電子命令を格納するのに適した任意のタイプの媒体に格納することができる。さらに、本明細書で言及される任意のコンピューティングシステムは単一のプロセッサを含むことができ、またはコンピューティング能力を高めるために複数のプロセッサ設計を採用するアーキテクチャとすることができる。
本発明の実施形態は、本明細書に記載の計算プロセスによって生成される製品にも関することができる。そのような製品はコンピューティングプロセスから得られる情報を含むことができ、情報は、非一時的な有形のコンピュータ可読記憶媒体上に格納され、本明細書で説明されるコンピュータプログラム製品または他のデータ組合せの任意の実施形態を含むことができる。
相対的な用語、例えば、高いまたは重要でないといった用語は、他に定義されない場合、値を割り当て、その値が確立された閾値とどのように比較されるかを決定するものと理解することができる。例えば、「高速接続を選択する」という語句は、閾値を超える接続速度に対応して割り当てられた値を有する接続を選択することを意味すると理解することができる。本明細書において、閾値を超えるとは、比較対象の項目に関する値が指定された他の値を上回ること、比較対象の項目が、最大値を有する所定の指定された数の項目に含まれること、または比較対象の項目が指定された上位百分率内の値を有することを意味する。最大値を有する所定の指定された数の項目に含まれること、または比較対象の項目が指定された上位百分率内の値を有することを意味する。本明細書において、閾値を下回るとは、比較対象の項目に関する値が指定された他の量を下回ること、比較対象の項目が、最小値を有する所定の指定された数の項目に含まれること、または比較対象の項目が指定された下位百分率内の値を有することを意味する。本明細書において、閾値内であるとは、比較対象の項目に関する値が2つの指定された他の値の間にあること、比較対象の項目が中くらいの指定された数の項目に含まれること、または比較対象の項目が中くらいの指定されたパーセント範囲内の量を有することを意味する。
本明細書において、「または」という用語は、項目群の任意の可能な配列を意味する。例えば、句「A、B、またはC」はA、B、Cの少なくとも1つ、それらの任意の組合せ(例えば、A; B; C; AとB; AとC; BとC; A、B、およびC)、または、任意の項目の重複(AとA; B、BおよびC; A、A、B、C、およびCなど)を意味する。
最後に、本明細書で使用される言語は主に、可読性および教育目的のために選択されたものであり、本発明の主題を描写または限定するために選択されたものではない場合がある。したがって、本発明の範囲は、この詳細な説明によってではなく、むしろ、本明細書に基づく出願に対して発行される任意の特許請求の範囲によって限定されることが意図される。したがって、本発明の実施形態の開示は、以下の特許請求の範囲に記載される本発明の範囲を例示することを意図するものであって、限定することを意図するものではない。