(58)【調査した分野】(Int.Cl.,DB名)
前記UIを介した複数のユーザ入力操作の各々に応答して、前記少なくとも1つのテンプレートに基づいて前記1つ以上のユーザ入力値が有効であるか否かを判定するステップをさらに含み、
前記プロンプトを生成するステップは、前記1つ以上のユーザ入力値が有効であると判定された場合にのみ実行される、請求項1〜3のいずれかに記載の方法。
前記少なくとも1つのテンプレートを前記リモートプロバイダに求める前記要求は、前記アプリケーションのテキスト入力フィールドの選択に応答して送信される、請求項1〜11のいずれかに記載の方法。
前記1つ以上のユーザ入力値に対応するデータセットが前記リモートプロバイダによって既に記憶されているか否かを判定するステップは、前記リモートプロバイダによって前に提供されたデータセットのリストに基づいて行なわれる、請求項15に記載の方法。
【発明を実施するための形態】
【0012】
詳細な説明
例示的な方法およびシステムを本明細書に記載する。本明細書に記載の例示的な実施形態または特徴はすべて、必ずしも他の実施形態または特徴よりも好ましい、または有利であると解釈すべきではない。本明細書に記載の例示的な実施形態は、限定することを意図するものではない。開示されたシステムおよび方法のある局面が種々の異なる構成で配置および組み合わせ可能であることは、容易に理解されるであろう。本明細書ではそれらのすべてが企図されている。
【0013】
さらに、図示される特定の配置は、限定的であるとみなすべきではない。他の実施形態では、提示された図中の各要素の数を増減させることも可能であるということを理解すべきである。さらに、図示された要素のうちの一部を組み合わせること、または省略することも可能である。さらに、ある例示的な実施形態は、図示されていない要素を含む場合もある。
【0014】
本明細書で概括的に記載および図示される本開示の局面は、種々の異なる構成で配置、置換、組み合わせ、分離、および設計され得ることが容易に理解されるであろう。本明細書ではそれらのすべてが企図されている。
【0015】
I.概略
携帯機器、携帯電話、パソコン、およびタブレットなどのユーザ機器は、現代の通信ネットワーク内の至る所に存在する。これらのデバイスのうちの多くは、このようなネットワーク内の通信を円滑化しながら1つ以上のアプリケーションを実行することが可能である。さらに、これらのデバイスのうちの多くは、ユーザがユーザ機器と対話することを可能にする1つ以上のUIを提供する。
【0016】
例えば、ユーザはUIを用いて、画像、テキスト、および他のグラフィック要素の使用により、ユーザ機器上のアプリケーションで使用される情報を通信することが可能である。UIは、ユーザ機器に接続された多数のデバイスから入力を受け付けることも可能である。これらの多数のデバイスの例としては、タッチスクリーン、存在感知ディスプレイ、コンピュータマウス、キーボード、および、ユーザによるUI、さらにはアプリケーションの制御を可能にする他のデバイスなどがある。
【0017】
最適なシナリオであれば、ユーザは効果的かつ効率的にUIを用いて情報を通信することができるであろう。しかしながら、1つ以上の要因によって、ユーザのそのような能力が制限される場合がある。このような制限下で動作する場合、より多くの情報を通信する必要性が増すほど、その情報を効果的かつ効率的に通信する能力がますます制限される恐れがある。
【0018】
一例として、画面が小さいユーザ機器の場合、アプリケーションによって使用される情報を通信するために膨大な量のテキストをUIに打ち込むことは、非常に困難な場合がある。特に、ユーザにとってテキストが記憶しにくいものである場合はなおさらである。したがって、ユーザが当該アプリケーションを次回使用するときに情報を再度通信しなくてもよいように、アプリケーションが当該情報を記憶することができれば好都合である。しかしながら、当然のことながら、ユーザが通信しようとするアプリケーション数が増加すると、UIを用いてそれらのアプリケーションの各々に膨大な量のテキストを通信することは、ユーザにとって大きな負担になり得る(初めての場合であっても、そうではない場合であっても)。このことは、たとえユーザによって入力された情報を個々のアプリケーションが記憶したとしても然りである。結果としてユーザは、そのような情報の入力を促されると、それらのアプリケーションへの関心が薄れる(または、それらの使用を完全に断念する)かもしれない。
【0019】
これらの課題のうちのいくつかは、リモートプロバイダの助けを借りて、複数のアプリケーションを横断して自動記入を円滑化するための仲介役としてユーザ機器のオペレーティングシステムを機能させることにより、ユーザ機器のユーザが効果的かつ効率的にそれらのアプリケーションで使用される情報を通信することが可能になる方法、システム、およびデバイスを用いることによって解決し得る。具体的には、ある例では、部分的には、自動記入を有効にし、権限を与えられたリモートプロバイダに自動記入用のデータ提供を許可し、自動記入データを検索し、後で使用するために自動記入データを保存することによって、ユーザはユーザ機器のオペレーティングシステムレベルで自動記入を使用してもよい。
【0020】
さらに、このように自動記入の円滑化を助けるためにリモートプロバイダを用いることによって、自動記入を使用する際のユーザの体験がいくつかの点で改善され得る。例えば、ユーザは、入力したデータ(例えば、パスワード、クレジットカード番号など)に関して、セキュリティの強化を享受することができる。なぜなら、そのデータをユーザ機器上でローカルに格納するのではなく、リモートプロバイダによってリモートに格納することができるからである。別の一例では、ユーザは、入力したデータ(例えば、パスワード、クレジットカード番号など)に関して、場合によっては複数のデバイスを横断して、自動記入を後で利用する際に利便性の向上を享受することができる。なぜなら、そのデータをユーザ機器上でローカルに格納するのではなく、リモートプロバイダによってリモートに格納することができるからである。しかしながら、上記で詳述したように、ユーザが後で自動記入に使用するためにデータを入力したとしても、そのデータを後で自動記入に使用することをユーザが承諾しない限り、リモートプロバイダはそのデータにアクセスできない場合があるので、ユーザ入力データを後で自動記入に使用することに関して、その種類、程度、および詳細、またはその方法についてさえ、リモートプロバイダがオペレーティングシステムに洞察または指示を与えることは難しい。
【0021】
ゆえに、このようなシステムにおいて、そのような自動記入機能に関与し、利用したいというユーザの意欲をそぐかもしれないさらなる課題は、後で自動記入に使用するために記憶され得る情報の種類または程度を特定できないことである。例えば、「<種類>を<サービス>に保存しますか?」という汎用の自動記入保存プロンプトをユーザに提示した場合、ユーザによって入力されたデータの詳細を把握できないため、<種類>および<サービス>は、「パスワード」や「クレジットカード」などの一般的な単語の使用によってしか設定することができないかもしれない。この問題は、1つ以上のやむを得ない理由(例えば、それが個人識別情報(すなわち「PII」)、および/または他の機密情報であるという理由)でデバイスがユーザ入力データの解析または保存をサポートしていない場合もあるという事実によって、さらに複雑化し得る。また、デバイスがユーザ入力データを解析または保存できないことによって、デバイスにおける他の解析上の制約が生じる可能性があり、および/または、ユーザが望まない体験をさせられる可能性もある(例えば、ユーザが(今回の分も含めて)入力したデータを後で自動記入に使用するために保存することを既に選択したにもかかわらず、デバイスが上記の汎用保存プロンプトを表示してしまい、そのことはユーザを苛立たせるかもしれない。)さらに、このようにデバイスがユーザ入力データを解析または保存できないことによって、デバイスを用いたユーザの自動記入体験に関与する他の解析コンポーネントにとって困難を生じさせる可能性がある(例えば、デバイスによるユーザ入力データのバリデーションが制限され、その結果、提携する自動記入プロバイダは、受信時にそのデータに関するエラーに対処しなければならないかもしれない)。
【0022】
さらに、これらの問題は、他のデバイスまたはプラットフォームでは起こらず、それらには携帯機器のセキュリティ制約がない場合もある(例えば、オペレーティングシステムがクレジットカードの概念を把握することができず、その結果、ユーザ入力された番号に基づくクレジットカードの種類、それが有効か否か、発行銀行に基づいて表示すべきアイコンなどを推測することができない可能性もある)。というのは、そのような情報およびロジックが、携帯機器から(例えば、提携する自動記入プロバイダに)オフロードされている場合があるからである。したがって、後で自動記入に使用するためにシステムによって保存されることになるユーザ入力データの種類、程度、および詳細の正確な近似物をユーザに提供しようとすると、「鶏が先か、卵が先か」問題が生じる。すなわち、携帯機器のオペレーティングシステムは、ユーザによって入力されたユーザ入力データをテキスト入力フィールドを介して得ることで初めてそのロジックを推測することができるが、一方で、情報に基づくプロンプトを提供するためにそのデータを解析、送信、または格納することは、ユーザの承諾前にはできないという問題である。したがって、後で自動記入に使用されることになるユーザ入力データの種類、程度、および詳細の正確な近似物を、そのデータを危険にさらすことなくユーザに提供する必要がある。
【0023】
本明細書では、後で自動記入に使用されることになるユーザ入力データの種類、程度、および詳細を、そのデータを危険にさらすことなく、ユーザ機器のユーザに通知することを可能にする方法、システム、およびデバイスに関する例示的な実施形態を開示する。具体的には、本明細書で開示する例示的な実施形態では、部分的には、システムがユーザ入力データをどのように処理すべきかについての1つ以上のテンプレートを要求して受信し、そのデータの入力を受け取り、ユーザ機器が自動記入プロバイダから受信した1つ以上のテンプレートを踏まえてそれを処理および他の方法でバリデーションし、このユーザ入力データを後で自動記入に使用するためにリモートプロバイダに送信することを許可させるためのカスタマイズされたプロンプトを生成および表示することによって、ユーザ機器のオペレーティングシステムレベルで、後で自動記入に使用するために入力されたデータをインテリジェントにユーザに通知することが可能になる。
【0024】
ユーザによって何らかのデータが入力される前にテンプレートを受信することによって、デバイスのオペレーティングシステムは、ユーザ入力が行なわれると即座に、ネットワーク通信を必要とせずに、カスタマイズされたプロンプトを表示することができる。代替的なシステムとしては、リモートプロバイダがカスタマイズされたプロンプトを生成してそれをデバイスに送り返すには、ユーザ入力データをリモートプロバイダに送信することが必要とされてもよい。ただし、このような代替的なシステムでは、特にデバイスのユーザがネットワーク接続の悪い地域にいる場合、カスタマイズされたプロンプトをユーザに対して表示できるまでにネットワーク遅延が生じる可能性がある。
【0025】
本開示に係る実施形態の一例では、(場合によってはユーザ機器の)オペレーティングシステムは、ユーザ機器のUI上に表示されたアプリケーションにおいて自動記入を行うためのユーザによる許可を受け付けてもよい。例えば、自動記入を有効にするために、オペレーティングシステムは、テキスト入力フィールドが共通の自動記入ディスクリプタに関連しているか否か(例えば、テキスト入力フィールドが「カード番号」または「有効期限」などの項目に関連しているか否か)を判定し、次いで、自動記入を設定するようユーザに促してもよい。さらなる一局面では、自動記入の円滑化を手助けするために指定されたリモートプロバイダをユーザが1つしか有しない場合は、そのリモートプロバイダの使用に同意するようユーザに促してもよい。一方、指定されたリモートプロバイダが複数ある場合は、1つ以上のリモートプロバイダを選択するようユーザに促してもよい。しかしながら、いずれのシナリオであっても、オペレーティングシステムを用いて自動記入機能を行なうためにはユーザ固有の機密情報および/または個人情報が必要となり得るので、オペレーティングシステムは、自動記入の許可の基礎となる詳細をユーザに通知してもよい。それらの詳細は、オペレーティングシステムに関する詳細な取り決め、および/または各リモートプロバイダに関する免責事項を受諾することを含んでもよい。これにより、それらのリモートプロバイダのうちの1つ以上を用いた自動記入の使用をユーザが許可する前に、ユーザに情報を与えて同意を確認することができる。
【0026】
さらなる一局面では、オペレーティングシステムは、当該オペレーティングシステムをトリガしてUI上に表示された内容を確認させるイベントを検出してもよい。例示的な実施形態では、このイベントは、アプリケーションの起動、アプリケーション上のテキスト入力フィールドの選択、または、テキスト入力フィールドがフォーカスを持つこと(例えば、特定のテキストフィールドがアクティブになり、キーボードがUI上に表示されること)を示す信号を含み得るが、他にも多数の例があり得る。
【0027】
さらなる一局面では、オペレーティングシステムは、上記内容のうちのどの部分がユーザ固有の機密情報を含んでいないかを判定してもよい。
【0028】
さらなる一局面では、内容のうちの当該部分を利用して、オペレーティングシステムは、アプリケーションで使用する少なくとも1つのテンプレートを提供することによって、当該アプリケーションにおける自動記入の円滑化の手助けを求める要求をリモートプロバイダに送信してもよい。この実施形態では、そのような要求は、オペレーティングシステムおよびユーザの両方にとって有益であり得る。なぜなら、それによってリモートプロバイダは、UI上に表示された内容を安全かつプライベートにパースし、アプリケーションにおける自動記入の円滑化にはいずれの情報が有用であるかを判定する(例えば、アプリケーション上のいずれのテキスト入力フィールドが自動記入可能であるかを判定する)ことが可能だからである。ある実施形態では、このような少なくとも1つのテンプレートをリモートプロバイダに求める要求は、アプリケーションの起動に応答して送信されてもよい。他の実施形態では、この要求は、アプリケーションのテキスト入力フィールドの選択に応答して送信されてもよい。さらに他の実施形態では、この要求は、1つ以上のテキスト入力フィールドに関連するメタデータを含んでもよい。
【0029】
いずれにしても、このような要求がリモートプロバイダに送信されると、オペレーティングシステムは、要求に対する応答を受信し得る。この応答は、UI上に表示されたアプリケーションの1つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、少なくとも1つのテンプレートを含む。さらなる実施形態では、テンプレートは、少なくとも1つの正規表現を含んでもよい。さらなる実施形態では、テンプレートは、複数の値と、対応する複数の画像との間のマッピングを含み、システムは、マッピングおよび1つ以上のユーザ入力値に基づいて、プロンプト内に含める画像を決定してもよい。さらなる実施形態では、テンプレートは部分的な値マスクを含み、システムは、1つ以上のユーザ入力値のうちの1つに部分的な値マスクを適用することによって、プロンプト内に含める値を決定してもよい。
【0030】
別の一例では、所定の拡張に関する条件が真であると評価された場合、テンプレートおよび/またはUIを拡張してもよい。例えば、リモートプロバイダは、クレジットカードの種類に基づいてさらにカスタマイズ可能な支払データのテンプレートを提供してもよい(例えば、クレジットカードの種類Aの場合には、カスタマイズされたプロンプト内にカスタマイズされたテキストとともにロゴまたは関連図形を示す一方、クレジットカードの種類Bの場合には、カスタマイズされたプロンプト内にロゴまたは関連図形のみを示してもよい)。さらなる一局面では、テンプレートに関する条件付きカスタマイズを通してこれを実現する。すなわち、対応する条件を満たした場合に、テンプレートをさまざまな種類の入力データでさらに拡張する。さらなる一局面では、テンプレートを拡張した後、各拡張に関連する変換リストを用いてポピュレートしてもよい。例えば、カードが種類Aのクレジットカードである場合、オペレーティングシステムは、種類Aのクレジットカードに固有のUI要素を挿入し、関連する変換を用いることによって、それらの要素をポピュレートしてもよい。
【0031】
さらなる実施形態では、応答は、複数の値ホルダのレイアウトと、対応する複数の変換とを含み、システムは、1つ以上のユーザ入力値のうちの少なくとも1つに対して対応する変換を適用することによって、上記複数の値ホルダの各値ホルダについて値を決定してもよい。このプロンプトは、レイアウトの各値ホルダについて決定された値を含む。さらなる一局面において、ある実施形態では、レイアウトは、文字列テンプレートを含んでもよい。
【0032】
いずれにしても、このような応答が受信されると、オペレーティングシステムは、1つ以上のテキスト入力フィールド内に1つ以上のユーザ入力値を受け付け得る。
【0033】
オペレーティングシステムは、後で自動記入に使用するために1つ以上のユーザ入力値をリモートプロバイダに送信することを許可させるためのプロンプトを生成してもよい。このプロンプトは、少なくとも1つのテンプレートを用いて、1つ以上のユーザ入力値を処理することによってカスタマイズされたものである。さらなる一局面において、ある実施形態では、このプロンプトはリモートプロバイダの識別子を含んでもよい。さらなる一局面において、ある実施形態では、プロンプトが生成されると、オペレーティングシステムは、プロンプトの生成後に少なくとも1つのテンプレートを破棄してもよい。
【0034】
このプロンプトが生成されると、オペレーティングシステムは、1つ以上のユーザ入力値をリモートプロバイダに送信するための許可を、プロンプトを介して受け付けもよい。その許可を受け付けたことに応答して、オペレーティングシステムは、1つ以上のユーザ入力値をリモートプロバイダに送信してもよい。
【0035】
さらなる実施形態では、オペレーティングシステムは、少なくとも1つのテンプレートを用いて1つ以上のユーザ入力値のバリデーションを行ない、バリデーションが成功したこと(例えば、ユーザがクレジットカード番号の正しい桁数を入力したと認定したこと)に応答してプロンプトを生成してもよい。一方、他の例では、このようなバリデーションが成功しなかった場合、オペレーティングシステムは、プロンプトを生成も表示もしない。
【0036】
さらなる実施形態では、オペレーティングシステムは、UIを介した複数のユーザ入力操作の各々に応答して、少なくとも1つのテンプレートに基づいて1つ以上のユーザ入力値が有効であるか否かを判定してもよい。オペレーティングシステムは、1つ以上のユーザ入力値が有効であると判定した場合にのみ、プロンプトを生成してもよい。例えば、上記複数のユーザ入力操作の各々は、1つ以上のテキスト入力フィールドのうちの1つにテキスト文字を入力することであってもよい。
【0037】
さらに他の実施形態では、オペレーティングシステムは、1つ以上のユーザ入力値に対応するデータセットがリモートプロバイダによって既に記憶されているか否かを判定してもよい。オペレーティングシステムは、1つ以上のユーザ入力値に対応するデータセットがリモートプロバイダによって既に記憶されていないと判定した場合にのみ、プロンプトを生成してもよい。さらなる一局面において、ある実施形態では、オペレーティングシステムは、リモートプロバイダによって前に提供されたデータセットのリストに基づいて、1つ以上のユーザ入力値に対応するデータセットがリモートプロバイダによって既に記憶されているか否かを判定してもよい。
【0038】
II.分散コンピューティングアーキテクチャ
以下では、さまざまな実施形態に詳細に言及する。これらの実施形態の例が添付の図面に示されている。以下の詳細な説明では、本開示および記載された実施形態の十分な理解を提供するために、多くの具体的詳細が説明されている。しかしながら、本開示は、それらの具体的詳細がなくても実践することが可能である。他の例では、実施形態の局面を不必要に不鮮明にしないようにするために、公知の方法、手順、構成要素、および回路を詳細には説明していない。
【0039】
図1は、例示的な実施形態に従って、ネットワーク106を介して、ユーザ機器104a、104b、104c、104d、104eおよびリモートプロバイダ112、114と通信するように構成されたサーバデバイス108、110を含む分散コンピューティングアーキテクチャ100を示す。ネットワーク106は、ローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、企業のイントラネット、公衆インターネット、または、ネットワークで結ばれたコンピューティングデバイス間の通信経路を提供するように構成された他の如何なる種類のネットワークに対応するものであってもよい。ネットワーク106は、1つ以上のLAN、WAN、企業のイントラネット、および/または公衆インターネットの組み合わせに対応するものであってもよい。
【0040】
図1はユーザ機器の小さな集まりを示しているにすぎないが、分散アプリケーションアーキテクチャは、数十、数百、または数千のユーザ機器を提供してもよい。さらに、ユーザ機器104a、104b、104c、104d、104e(または任意の追加のプログラム可能なデバイス)は、リモートプロバイダの助けを借りて、ユーザがコンピューティングデバイスのオペレーティングシステムを用いて複数のアプリケーションを横断して自動記入を円滑化することが可能な、如何なる種類のコンピューティングデバイスであってもよい。例えば、一般的なラップトップコンピュータ、デスクトップコンピュータ、ウェアラブルコンピューティングデバイス、携帯型コンピューティングデバイス、ヘッドマウントデバイス(HMD)、ネットワーク端末、無線通信デバイス(例えば、スマートフォンまたは携帯電話)などである。ある実施形態では、ユーザ機器104a、104b、および104cによって示されるように、ユーザ機器は、ネットワーク106に直接的に接続されてもよい。他の実施形態では、ユーザ機器104dおよび104eによって示されるように、ユーザ機器は、ユーザ機器104cなどの関連コンピューティングデバイスを介して、ネットワーク106に間接的に接続されてもよい。このような実施形態では、ユーザ機器104cは、ユーザ機器104dおよび104eとネットワーク106との間で電子情報を伝達する関連コンピューティングデバイスとして機能し得る。
図1には示さないが、さらに他の実施形態では、1つのユーザ機器が直接的かつ間接的にネットワーク106に接続されてもよい。
【0041】
サーバデバイス108、110は、要求に応じてコンピュータおよび他のデバイスに対してコンピュータ処理リソースおよびデータを共有するクラウド型サーバシステムの一部として動作してもよい。特に、サーバデバイス108、110は、 ユーザ機器104a〜104eによって要求された1つ以上のサービスを行なうように構成されてもよい。例えば、サーバデバイス108および/または110は、ユーザ機器104a〜104eにコンテンツを提供してもよい。さらなる一局面では、サーバデバイス108および/または110は、直接的に、または、第三者によって要求されたコンテンツの送信を促進することによって、ユーザ機器104a〜104eにコンテンツを提供してもよい。コンテンツは、ウェブページ、ハイパーテキスト、スクリプト、バイナリデータ(例えば、コンパイルされたソフトウェア)、画像、音声、および/または動画を含み得るが、これらに限定されない。コンテンツは、圧縮されたコンテンツ、および/または圧縮されていないコンテンツを含んでもよい。コンテンツは、暗号化されたコンテンツ、および/または暗号化されていないコンテンツを含んでもよい。
【0042】
リモートプロバイダ112、114は、要求に応じてコンピュータおよび他のデバイスに対してコンピュータ処理リソースおよびデータを共有するクラウド型サーバシステムの一部として動作してもよい。特に、リモートプロバイダ112、114は、例示的な実施形態に従って、ネットワーク106上のコンテンツを提供、受信、記憶、管理、および送信してもよい。例えば、リモートプロバイダ112および/または114は、ユーザ機器104a〜104eによって使用されるコンテンツの要求を受信し、そのコンテンツを含む応答を生成するとともに、ネットワークに接続されたデバイスにその応答を送信してもよい。
【0043】
例として、サーバデバイス108および/または110は、リモートプロバイダ112および/または114の助けを借りて、ユーザ機器104a〜104e上の複数のアプリケーションを横断して自動記入を円滑化するコンテンツを提供してもよい。さらに、サーバデバイス108および/または110は、データベース、検索、演算、グラフィック、音声、動画、ワールド・ワイド・ウェブ/インターネットの利用、および/または他の機能のためのソフトウェアへのアクセスをユーザ機器104a〜104eに提供してもよい。他にも多数のコンテンツの例があり得る。
【0044】
III.方法フローチャートおよび例示的な実施形態
図2は、リモートプロバイダの助けを借りて、ユーザがユーザ機器のオペレーティングシステムを用いて、複数のアプリケーションを横断して後の自動記入が円滑化するようにユーザ入力データを保存することを可能にするために行なわれ得る方法200を示すフローチャートである。
図1に関して例示および説明するように、方法200は、ユーザ機器104a〜104eおよびリモートプロバイダ112および/または114などの1つ以上のコンピューティングデバイス(場合によっては、さらにサーバ108および/または110)によって実行されてもよい。さらに他の例では、方法200は、クラウド型システムの一部として動作するユーザ機器104a〜104eおよびリモートプロバイダ112および/または114(場合によっては、さらにサーバ108および/または110)によって実行されてもよい。さらに、方法200は、
図1に具体的に示したコンピューティングデバイス以外の1つ以上の他の種類のコンピューティングデバイスによって行なわれてもよい。
【0045】
なお、以下では方法200のステップがオペレーティングシステムによって完結されるものとして説明しているが、ユーザ機器に関連する他の構成要素、アプリケーション、および/または技術が方法200のステップを行なってもよい。
【0046】
なお、本明細書でフローチャートに関連して記載される機能は、特殊機能および/または設定された一般的機能のハードウェアモジュールとして実現されてもよいし、
図2に示すフローチャートに関連して記載される特定のロジック機能、判定、および/またはステップを実現するためにプロセッサによって実行されるプログラムコードの一部として実現されてもよい。プログラムコードが用いられる場合は、プログラムコードは、例えばディスクまたはハードドライブを含む記憶装置など、任意の種類のコンピュータ可読媒体に格納されてもよい。
【0047】
さらに、
図2に示されるフローチャートの各ブロックは、処理における特定のロジック機能を行なうように配線された回路を表わしてもよい。特に断りのない限り、
図2に示すフローチャートにおける機能は、図示または記載とは異なる順序で実行してもよい。記載される方法の全体としての機能が維持されるならば、関与する機能に応じて、例えば別々に記載された機能を実質的に同時に実行してもよいし、場合によっては逆の順序で実行してもよい。
【0048】
ブロック210において、方法200は、ユーザ機器のユーザインターフェイス(UI)上のアプリケーションによって表示された内容のサブセットを判定することを含んでもよい。このサブセットは、ユーザ固有の情報を含まない。特に、ユーザは、コンピューティングデバイスとの対話中に、そのデバイス上の、あるアプリケーションと対話することを決定し得る。オペレーティングシステムは、ユーザがアプリケーションと対話中であること、および、オペレーティングシステムが把握している内容で、かつアプリケーションの自動記入に関係のある内容が存在することを認識し得る。このデータに従って、オペレーティングシステムは、アプリケーションにおいて自動記入を行うための許可をオペレーティングシステムに与えるようユーザに促してもよい。これにより、ユーザとユーザインターフェイス機能との対話、および/またはユーザインターフェイス機能の応答性が向上し得る。
【0049】
概して、オペレーティングシステムは、自動記入に共通に関連するある特定のデータを認識してもよい。一例では、オペレーティングシステムは、アプリケーションに関連するテキスト入力フィールドが共通の自動記入ディスクリプタ(例えば、「カード番号」または「有効期限」)を含む、またはそれに関連するということを認識してもよい。それに応答して、この例では、オペレーティングシステムは、自動記入を設定するようユーザに促してもよい。
【0050】
ある例では、このプロンプトへのユーザの応答の前、後、または最中に、オペレーティングシステムは、自動記入の円滑化をさらに手助けするために、1つ以上のリモートプロバイダのリストをコンパイルしてもよい。一局面では、自動記入の円滑化を手助けするために指定されたリモートプロバイダが1つしかない場合には、そのリモートプロバイダの使用に同意するようユーザに促してもよい。一方、別の一局面では、自動記入の円滑化を手助けするために指定されたリモートプロバイダが複数ある場合には、1つのリモートプロバイダを選択するようユーザに促し、さらに当該リモートプロバイダの使用に同意するようユーザに促してもよい。さらに別の一局面では、ユーザは2つ以上のリモートプロバイダを選択可能であってもよい。その場合もやはり、選択された各リモートプロバイダの使用に同意するようユーザに促してもよい。
【0051】
別の一例では、オペレーティングシステムは、イベント(場合によっては、自動記入トリガイベント)がトリガされることによって、UI上のアプリケーションによって表示された内容のサブセットを判定し始めてもよい。自動記入トリガイベントは、ユーザ機器、またはユーザ機器上のアプリケーションの現在の状態(ユーザによる、デバイスとの対話の状態を含む)に関する情報を提供してもよい。自動記入トリガイベントを用いることにより、適切な時点で、許可された自動記入をいつ行うべきかをオペレーティングシステムが知るのを手助けすることも可能である。ある例では、自動記入トリガイベントは、デバイスとの直接的または間接的なユーザ対話であってもよい。ただし、概して、自動記入がユーザによって承諾されると、デバイスとのユーザ対話はオペレーティングシステムによって監視され得る。
【0052】
一実施形態では、例として、自動記入トリガイベントは、ユーザ機器との直接的なユーザ対話に関連するデータによって示されてもよい。例えば、ユーザによるアプリケーションの起動、ユーザによるアプリケーションのテキスト入力フィールドの選択、または、1つ以上のアプリケーションにおいて自動記入を設定せよというユーザからの要求などがあるが、他にも多数のシナリオがあり得る。
【0053】
他の例では、自動記入トリガイベントは、ユーザ機器との間接的なユーザ対話に関連するデータを含んでもよい。例えば、アプリケーションが起動されたことを示す信号、または、アプリケーションのテキスト入力フィールドもしくはユーザ機器のUI上に表示された内容の他の何らかのパラメータがフォーカスを持つことを示す信号などがあるが、他にも多数のシナリオがあり得る。さらなる一局面では、ユーザによるユーザ機器との間接的な対話は、キーボードなどのグラフィックまたはGUIがUI上に表示されることによって反映されてもよい。
【0054】
概して、これらのシナリオのうちのいずれかに従って、オペレーティングシステムは自動記入を円滑化しようとする際に、機密情報および/または個人情報を確認してもよい。この自動記入の使用に同意する前にその詳細を知ることは、ユーザにとって好都合であり得る。具体的には、オペレーティングシステムは機密情報および/または個人情報を含むデバイス上の内容を確認することが可能であるので、オペレーティングシステムは、自動記入を行う前に、当該自動記入の許可の基礎となる詳細をユーザに知らせることができる。
【0055】
さらなる一局面では、選択されたリモートプロバイダは、通常はユーザが提供しない何らかの情報を受信する可能性があるので、ユーザが選択した各自動記入プロバイダの使用に関する条件を含む取り決めを承諾するように、ユーザに促してもよい。ある例では、自動記入プロバイダの使用に関する詳細をユーザが十分に理解することを確実にするために、自動記入の使用を許可する前に、取り決めの承諾をユーザに促してもよい。この取り決めは、オペレーティングシステム、および/または自動記入のためにユーザが選択した各自動記入プロバイダの使用に関する免責事項を含んでもよい。
【0056】
さらに他の例では、自動記入の使用を許可する前に、照合送信プロンプトをユーザに示してもよい。この照合送信プロンプトは、UI上に表示された1つ以上のテキスト入力フィールドに入力された1つ以上の値をリモートプロバイダに送信することを、オペレーティングシステムに許可するものである。例えば、ユーザは、オペレーティングシステムが自動記入の設定をユーザに促す基礎となったアプリケーションとは別のアプリケーション(「第2のアプリケーション」)に、1つ以上の値を入力した場合もある。さらなる一局面では、オペレーティングシステムは、ユーザによって許可されると、後で使用するために1つ以上の値をリモートプロバイダに送信してもよい。
【0057】
概して、アプリケーションによってUI上に表示される内容とは、オペレーティングシステムが把握することのできるアプリケーションに関連する任意の情報を指す。一例では、上記内容は、ユーザ機器のUI上に表示された内容の現在のビュー階層を含んでもよい。ただし、上記内容は機密および/またはプライベートな情報を含み得るので、オペレーティングシステムは、ユーザ固有の情報を含まない内容のサブセットのみを判定する。
【0058】
ある例では、ユーザ固有の情報は、個人識別情報、または、単独もしくは他の情報を伴って使用することによってある1人の人間を識別し、接触し、もしくは突き止めること、または、他の情報もしくはデータに照らして個人を識別することが可能な他の任意の情報を含んでもよい。さらなる例では、ユーザ固有の情報は、ユーザが機密および/またはプライベートな情報として指定した情報を含んでもよい。
【0059】
さらに他の例では、ユーザ固有の情報は、ユーザに関連する1つ以上の要素に基づいて機密および/またはプライベートな情報として指定された情報を含んでもよい。例えば、ユーザ固有の情報は、ユーザ、ユーザ機器、および/またはリモートプロバイダが位置する地理的領域に基づいて機密および/またはプライベートな情報として指定された情報を含み得るが、他にも多数の可能性があり得る。他の例では、ユーザ固有の情報は、ユーザの属性(例えば、ユーザの年齢)に基づいて機密および/またはプライベートな情報として指定された情報を含んでもよい。
【0060】
ブロック220において、方法200はさらに、アプリケーションで使用される少なくとも1つのテンプレートを求める要求をリモートプロバイダに送信することを含む。この要求は、UI上に表示された内容のサブセットを含む。テンプレートを求める要求は、ユーザ機器での自動記入の使用の円滑化を手助けするために選択されたリモートプロバイダに送信されてもよい。具体的には、ユーザ固有の情報を含まない表示内容のサブセットに基づいて、オペレーティングシステムは、当該内容のサブセット内の情報またはそのセブセットに関連する情報を含む要求をリモートプロバイダに送信してもよい。これによって、特に、UI上に表示された記入可能なフィールドについてリモートプロバイダに注意喚起することができる。いずれにせよ、この要求は、オペレーティングシステムおよびユーザの両方にとって有益であり得る。なぜなら、それによってリモートプロバイダは、UI上に表示された内容を安全かつプライベートにパースし、アプリケーションにおける自動記入の円滑化にはいずれの情報が有用であるかを判定(例えば、アプリケーション上のいずれのテキスト入力フィールドが自動記入可能であるかを判定)することができるからである。
【0061】
ある例では、上記要求は、UI上に表示されたテキスト入力フィールドに関連する情報を含んでもよい。一局面では、この情報は、テキスト入力フィールドに関連する1つ以上のディスクリプタを含んでもよい。例えば、ディスクリプタは、「名前」、「ユーザ名」、「Eメール」、「パスワード」、「アドレス」、「市」、「状態」、「郵便番号」、「国」、「口座番号」、および/または「カード番号」などの項目を含み得るが、他にも多数の可能性があり得る。
【0062】
他の例では、上記要求は、ユーザ機器の現在のビュー階層に関連する情報を含んでもよい。一局面では、この情報は、UI上に表示された内容のサブセットをコンパイルまたは維持することに関連する情報(例えば、根底にあるスクリプトおよび/またはコード)を含んでもよい。別の一局面では、この情報は、UI上に表示された内容のサブセットの何らかの近似物に関連する情報(例えば、内容のサブセットのワイヤフレーム表示)を含んでもよい。さらに別の一局面では、この情報は、UI上に表示された内容のサブセットのアーキテクチャに関連する情報(例えば、相対レイアウト、線形レイアウト、ボタン、表のレイアウト、表の行、チェックボックス、および/または他の要素に関連する情報)を含んでもよい。
【0063】
いずれにしても、オペレーティングシステムは、アプリケーションで使用されるテンプレートを要求し得る。ある例では、テンプレートは次のようなメカニズムであってもよい。すなわち、オペレーティングシステムに送信されるParcelableオブジェクトで表現されたビジネスロジックをリモートプロバイダが提供し、その後、ユーザによって提供されたデータをオペレーティングシステムがこれらのオブジェクトに入力し、必要なビジネスロジックを推測するというメカニズムである。例えば、これらのテンプレートは、自動記入処理の一部として用いられてもよく、1つ以上の任意のオブジェクトによって表わされてもよい。例として、以下のものが挙げられる。
・Validatorテンプレート:クレジットカード情報のバリデーションを行なうために使用される(クレジットカード情報が有効ではない場合、フレームワークはUIを介して「保存」プロンプトを表示しない)。
・Generatorテンプレート:クレジットカード番号を生成するために使用される(そのサービスのためにクレジットカードが既に保存されている場合、フレームワークはUIを介して「保存」プロンプトを表示しない)。
・CustomPresentationテンプレート:画像、マスクされたクレジットカード番号、有効期限、リンク付きのテキストなどを含み得るカスタムプレゼンテーションを表示するために使用される。
【0064】
いずれにしても、ある例では、この要求は、アプリケーションの起動に応答して送信されてもよい。ある例では、この要求は、アプリケーションのテキスト入力フィールドの選択に応答して送信されてもよい。
【0065】
さらに他の例では、この要求は、1つ以上のテキスト入力フィールドに関連するメタデータを含んでもよい。このメタデータは、他のデータに関する情報を提供するデータまたは情報であってもよい。例として、以下のものが挙げられる。
・記述メタデータ:発見および識別などの目的でリソースを記述するものであってもよい。タイトル、要旨、作成者、およびキーワードなどの要素を含み得る。
・構造メタデータ:データのコンテナに関するものであってもよい。合成オブジェクトをどのように組み立てるかを示す。例えば、デジタル教材に関して、どのようにページを順序付けし、章を構成し、種類、バージョン、関係、および他の特性を記述するか、など。
・管理メタデータ:リソースの管理を助ける情報を提供するものであってもよい。例えば、それが作成された日時および方法、ファイルの種類、他の技術情報、ならびに誰がそれにアクセス可能であるか、など。
【0066】
ブロック230において、方法200はさらに、要求に対する応答をリモートプロバイダから受信することを含んでもよい。この応答は、UI上のアプリケーションによって表示された1つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、少なくとも1つのテンプレートを含む。概して、リモートプロバイダから受信された応答は、自動記入の円滑化においてオペレーティングシステムの助けとなるデータ(例えば、テンプレート)を提供し得る。
【0067】
一例では、上記応答は、第1のインスタンスで、自動記入の円滑化においてオペレーティングシステムの助けとなるデータを含み得る。例えば、上記応答は、UI上のアプリケーションによって表示された1つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、少なくとも1つのテンプレートを含んでもよい。
【0068】
ある例では、テンプレートは、少なくとも1つの正規表現を含んでもよい。ここで、正規表現(「regex」、「regexp」、または「正則表現」と呼ばれる場合もある)は、ユーザ入力されたテキストに対するパターンマッチング、および/または「検索および置換」機能を実行するために使用可能な文字のパターンを記述するオブジェクトであってもよい。さらなる一局面では、正規表現は、さまざまなシンタックスまたはフォーマットのうちの任意のものを用いてもよい。例えば、検索エンジン、ワードプロセッサおよびテキストエディタの検索および置換ダイアログ、文書処理ユーティリティ、および字句解析に使用されるものなどである。さらに、多くのプログラミング言語は、内蔵の、またはライブラリを介して、正規表現機能を提供する。
【0069】
ある例では、テンプレートは、複数の値と、対応する複数の画像との間のマッピングを含み、オペレーティングシステムは、マッピングおよび1つ以上のユーザ入力値に基づいて、プロンプト内に含める画像を決定してもよい(それによって、例えば、ユーザによって入力されたクレジットカードの種類のクレジットカードシンボルを表示することができる)。ここで、マッピングとは、2つの異なるデータモデルの間のデータ要素マッピングを作成する処理であってもよい(これは、多種多様なデータ統合タスクの第1段階として使用可能である)。マッピング自体を正規表現として作成することも可能である。
【0070】
ある例では、テンプレートは部分的な値マスクを含み、オペレーティングシステムは、1つ以上のユーザ入力値のうちの1つに部分的な値マスクを適用することによって、プロンプト内に含める値を決定してもよい(それによって、例えば、クレジットカード番号の下4桁のみを表示することができる)。ここで、値マスクまたは部分的な値マスクとは、ユーザが入力データの特定の部分しか見ることができないように、入力フィールド上にマスクをかけることを含み得るものである。
【0071】
ブロック240において、方法200はさらに、1つ以上のテキスト入力フィールド内に1つ以上のユーザ入力値を受け付けることを含んでもよい。ユーザ入力値は、ユーザが個々の文字、数字、または単語を入力する(例えば、打ち込む)期間にわたって受け付けてもよい。
【0072】
ブロック250において、方法200はさらに、後で自動記入に使用するために1つ以上のユーザ入力値をリモートプロバイダに送信することを許可させるためのプロンプトを生成することを含んでもよい。このプロンプトは、少なくとも1つのテンプレートを用いて、1つ以上のユーザ入力値を処理することによってカスタマイズされたものである。ある例では、カスタマイズされたプロンプトは、リモートプロバイダがまだアクセスすることができないユーザ入力データであって、なおかつ、リモートプロバイダがテンプレートを提供することによってオペレーティングシステムがそれを解析および適用し、カスタマイズされたプロンプトを作成するのを補助した、ユーザ入力データに関する詳細を含んでもよい。ある例では、このテンプレートによって、オペレーティングシステムは、後で自動記入に使用するために1つ以上のユーザ入力値をリモートプロバイダに送信することを許可させるためのカスタマイズされたプロンプト(例えば、クレジットカードBを自動記入プロバイダXに保存しますか?」)を生成することが可能になる。これは、汎用の自動記入保存プロンプト(例えば、「<種類>を<サービス>に保存しますか?」)とは異なるものである(「<種類>を<サービス>に保存しますか?」の場合、ユーザによって入力されたデータの詳細を把握できないため、<種類>および<サービス>は、「パスワード」や「クレジットカード」などの一般的な単語の使用によってしか設定することができないかもしれない)。
【0073】
さらなる一局面において、ある実施形態では、このプロンプトは、リモートプロバイダの識別子(例えば、クレジットカードBもしくは自動記入プロバイダX、またはその両方に固有の画像)を含んでもよい。概して、リモートプロバイダから受信された識別子は、UI上に表示された記入可能なフィールドに対応するユーザ入力データに関連するものであってもよい。さらなる一局面では、ユーザ入力データに関連する1つまたは複数の識別子を表示することは、オペレーティングシステムおよびユーザの両方にとって好都合であり得る(というのは、オペレーティングシステムがどのデータを自動記入に使用すべきかを決定する際に、ユーザはすべての利用可能なデータを検討するのではなく、表示された識別子を選択し、その識別子に関連するユーザ入力データを使用することができるからである)。
【0074】
さらなる一局面において、ある実施形態では、プロンプトが生成されると、オペレーティングシステムは、プロンプトの生成後に少なくとも1つのテンプレートを破棄してもよい。このように破棄することは、オペレーティングシステムが引き受ける通常のワークフローまたは処理の一部であってもよく、オペレーティングシステムにとって有利な結果をもたらし得るものである(例えば、オペレーティングシステムは、テンプレートを用いたユーザ入力データのさらなる処理を無視することができ、その結果、オペレーティングシステムのためのリソースを解放することができる)。したがって、リモート自動記入プロバイダは、アプリケーションが起動するたびに、および/または、アプリケーションがその行程を実行するたびに、新たなテンプレートの送信を担うことができる。
【0075】
IV.さらなる例示的な実施形態
ある例では、本明細書に記載の方法は、このようなプロンプトが生成されると、オペレーティングシステムが、1つ以上のユーザ入力値をリモートプロバイダに送信するための許可を、プロンプトを介して受け付けることを含んでもよい。その許可を受け付けたことに応答して、オペレーティングシステムは、1つ以上のユーザ入力値をリモートプロバイダに送信してもよい。
【0076】
ある例では、オペレーティングシステムは、少なくとも1つのテンプレートを用いて1つ以上のユーザ入力値のバリデーションを行ない、バリデーションが成功したことに応答してプロンプトを生成してもよい。バリデーション成功の例としては、ユーザがクレジットカード番号の正しい桁数を入力したと認定したこと、あるいは、ユーザがそれよりも前にその入力データを入力していない(よって、自動記入プロンプトを、汎用、カスタマイズのいずれも、作成すべきではない)と認定したことなどが挙げられる。
【0077】
ある例では、オペレーティングシステムは、UIを介した複数のユーザ入力操作の各々に応答して、少なくとも1つのテンプレートに基づいて、1つ以上のユーザ入力値が有効であるか否かを判定してもよい。オペレーティングシステムは、1つ以上のユーザ入力値が有効であると判定した場合にのみ、プロンプトを生成してもよい。例えば、上記複数のユーザ入力操作の各々は、1つ以上のテキスト入力フィールドのうちの1つにテキスト文字を入力することであってもよい。
【0078】
他のある例では、オペレーティングシステムは、1つ以上のユーザ入力値に対応するデータセットがリモートプロバイダによって既に記憶されているか否かを判定してもよい。オペレーティングシステムは、1つ以上のユーザ入力値に対応するデータセットがリモートプロバイダによって既に記憶されていないと判定した場合にのみ、プロンプトを生成してもよい。さらなる一局面において、ある例では、オペレーティングシステムは、リモートプロバイダによって前に提供されたデータセットのリストに基づいて、1つ以上のユーザ入力値に対応するデータセットがリモートプロバイダによって既に記憶されているか否かを判定してもよい。
【0079】
別の一例では、自動記入に使用可能な入力値のセットおよび関連する識別子が複数ある場合には、ユーザが選択できるように、それらの識別子は、その各々が値のセットに対応している識別子のリスト(ドロップダウンメニューまたは他の形式)として表示されてもよい。
【0080】
さらに別に一例では、値が記入され得るテキスト入力フィールドに記入インジケータが表示されてもよい。具体的には、記入インジケータは、いずれのテキスト入力フィールドに特定の値のセットが自動記入されるかを、自動記入を行う前にユーザに予め確認させることができる。さらに、記入インジケータは、オペレーティングシステムによって生成されたグラフィック(例えば、鉛筆の図形)の形式、またはリモートプロバイダから受信された特定のグラフィック(例えば、リモートプロバイダに関連する商標または図形)の形式、または他の形式で表示されてもよい。当然のことながら、他の例も可能である。
【0081】
本明細書に記載の方法はさらに、データセット識別子の選択を示す入力データをオペレーティングシステムが受け付けることを含んでもよい。概して、データセット識別子の選択を示す入力データを受け付けることにより、オペレーティングシステムは、ユーザがデータセット識別子およびその識別子に関連する値を自動記入に使用するために選択しているということを知ることができる。
【0082】
V. さらなる説明のための図および例示的な実施形態
図3Aは、例示的な実施形態に従って、自動記入の設定を促すプロンプトを示す図である。特に、携帯電話などのユーザ機器302は、当該ユーザ機器上にアプリケーション304の一部を表示し得る。アプリケーション304は、共通の自動記入ディスクリプタ306(例えば、「カード番号」)および/または308(例えば、「有効期限」)を含む、またはそれに関連するテキスト入力フィールドを含んでもよい。この例では、ユーザ機器302のオペレーティングシステムが1つ以上の共通の自動記入ディスクリプタ306および/または308を認識すると、オペレーティングシステムは、自動記入を設定するように促すプロンプト310を表示する。さらなる例では、上述したように、ユーザが自動記入の設定を選択した後、自動記入の円滑化を手助けするための1つ以上のリモートプロバイダを選択するようユーザに促してもよい。また、選択されたプロバイダに関連する1つ以上の取り決めを確認し、承諾するようユーザに促してもよい。
【0083】
図3Bは、例示的な実施形態に従って、ユーザ機器のUIを介して選択されるように表示されたデータセット識別子を示す図である。特に、携帯電話などのユーザ機器302は、当該ユーザ機器上にアプリケーション304の一部を表示し得る。この例では、上述したように、何らかのフォーカスを持つアプリケーションのテキスト入力フィールド312(ここでは、表示されたキーボードを介してフィールドにテキストを入力可能であることを示す縦線が、「カード番号」テキスト入力フィールドに置かれている)、および、そのようなフォーカスを持たないテキスト入力フィールド314(ここでは、「有効期限」テキスト入力フィールドには、そのような縦線がない)に応答して、オペレーティングシステムはこのフォーカスを認識し、UI上に表示された、ユーザ固有の情報を含まない内容のサブセットを判定し、その内容のサブセットをリモートプロバイダに送信する。さらにオペレーティングシステムは、リモートプロバイダからの応答を受信すると、自動記入に使用可能な、ユーザによって前に入力された値に関連するデータセット識別子316を、ユーザが選択できるように表示する。さらなる例では、オペレーティングシステムは、前に入力されたユーザデータを記入可能なテキスト入力フィールドに記入インジケータ318(ここでは、鉛筆の図形)を表示してもよい。
【0084】
図3Cは、例示的な実施形態に従って、ユーザ機器のUIを介して選択されるように表示された複数のデータセット識別子を示す図である。
図3Bの例示的な実施形態とは異なり、ユーザ機器302のオペレーティングシステムは、リモートプロバイダからの応答を受信すると、自動記入に使用可能な、前に入力されたユーザデータのセットの各々に関連するデータセット識別子のリスト320を、ユーザが選択できるように表示する。さらなる例では、オペレーティングシステムは、ユーザ入力データを記入可能なテキスト入力フィールドに記入インジケータ318(ここでは、鉛筆の図形)をさまざまな方法で表示してもよい。例えば、一局面では、オペレーティングシステムは、表示された識別子のリストの中からの識別子の予備選択を受け付けたことに基づいて、テキスト入力フィールドに記入インジケータ318を表示してもよい。一方、別の一例では、オペレーティングシステムは、表示された識別子のリストの中の識別子のうちのいずれかに関連する、前に入力されたユーザデータが記入され得るテキスト入力フィールドに、記入インジケータ318を表示してもよい。当然のことながら、他の例も可能である。
【0085】
図4Aは、例示的な実施形態に従って、UI上に表示されたアプリケーションのテキスト入力フィールドへのユーザによるデータ手入力に関連するユーザインターフェイス機能を示す図である。より具体的には、携帯電話などのユーザ機器402は、当該ユーザ機器上にアプリケーション404の一部を表示し得る。この例では、ユーザは、携帯機器のオペレーティングシステムによる自動記入を許可したとしても、入力データを手動で第1のテキスト入力フィールド406(ここでは、「カード番号」テキスト入力フィールド)および第2のテキスト入力フィールド408(ここでは、「有効期限」テキスト入力フィールド)に入力することができる。さらなる一局面では、自動記入に使用可能な、前に入力されたユーザデータに関連する1つ以上のデータセット識別子410が表示されていても、および/または、前に入力されたユーザデータを記入可能なテキスト入力フィールドに記入インジケータ412(ここでは、鉛筆の図形)が表示されていても、ユーザは入力データを手動で入力することができる。別の例示的な一実施形態では、ユーザがテキスト入力フィールドに手動で入力データを入力したことに応答して、オペレーティングシステムは、表示されたデータセット識別子、および/または自動記入に使用可能な関連データをフィルタにかけてもよい。それによって、表示されたデータセット識別子、および/または自動記入に使用可能な関連データを、ユーザが手動で入力した入力データに合致または対応するものに限定することができる。例えば、前に入力されたユーザデータのいずれにも合致しないクレジットカードをユーザが手動で入力し始めた場合、オペレーティングシステムは、UIを介して自動記入用に表示するものを決定する際に、そのデータをすべて除外してもよい。
【0086】
図4Bは、例示的な実施形態に従って、
図4Aに示すUI上に表示されたアプリケーションのテキスト入力フィールドへのユーザによるデータ手入力に関連する、確認メッセージおよび汎用のデータ保存プロンプトを示す図である。具体的には、UI上に表示されたテキスト入力フィールドに関連する入力データをユーザが手動で入力すると、オペレーティングシステムは、UI上に表示されたアプリケーションのテキスト入力フィールドへの記入が行なわれた旨をユーザに通知するための確認メッセージ414を生成し、表示し得る。さらなる一例では、オペレーティングシステムは、アプリケーションのテキスト入力フィールドに入力された入力データの保存をユーザに促す汎用のプロンプト416を表示してもよい。これは、選択されたリモートプロバイダに、後で自動記入に使用するために入力データを送信することを含んでもよい。さらなる一局面では、オペレーティングシステムは、ユーザがプロンプトに応答するまでデータを一時的に保持し、応答した時点で当該データをリモートプロバイダに送信することによって、入力データを後で自動記入に使用するために保存してもよい。一方、別の一例では、オペレーティングシステムは、データが自動記入プロバイダに送信された後は、ユーザ入力データを無視してもよい。
【0087】
図4Cは、
図4Aと同様に、UI上に表示されたアプリケーションのテキスト入力フィールドへのユーザによるデータ手入力に関連するユーザインターフェイス機能を示す図である。ただし、他の例示的な実施形態に従うものである。より具体的には、携帯電話などのユーザ機器402は、当該ユーザ機器上にアプリケーション404の一部を表示し得る。この例では、ユーザは、携帯機器のオペレーティングシステムによる自動記入を許可したとしても、入力データを手動で第1のテキスト入力フィールド406(ここでは、「カード番号」テキスト入力フィールド)および第2のテキスト入力フィールド408(ここでは、「有効期限」テキスト入力フィールド)に入力することができる。さらなる一局面では、自動記入に使用可能な、前に入力されたユーザデータに関連する1つ以上のデータセット識別子410が表示されていても、および/または、前に入力されたユーザデータを記入可能なテキスト入力フィールドに記入インジケータ412(ここでは、鉛筆の図形)が表示されていても、ユーザは入力データを手動で入力することができる。
【0088】
一方、
図4Dは、
図4Bとは異なり、例示的な実施形態に従って、
図4Cに示すUI上に表示されたアプリケーションのテキスト入力フィールドへのユーザによるデータ手入力に関連する、確認メッセージおよびカスタマイズされたデータ保存プロンプトを示す図である。具体的には、UI上に表示されたテキスト入力フィールドに関連する入力データをユーザが手動で入力すると、オペレーティングシステムは、UI上に表示されたアプリケーションのテキスト入力フィールドへの記入が行なわれた旨をユーザに通知するための確認メッセージ418を生成し、表示し得る。
【0089】
さらなる一例では、オペレーティングシステムは、アプリケーションのテキスト入力フィールドに入力された入力データの保存をユーザに促すカスタマイズされたプロンプト420を表示してもよい。これは、選択されたリモートプロバイダに、後で自動記入に使用するために入力データを送信することを含んでもよい。ここでは、カスタマイズされたプロンプト420は、汎用のプロンプト416とは異なり、ユーザによって手動で入力されたデータに基づくいくつかのカスタマイズされた態様を含む。例えば、カスタマイズされた態様は、以下を含み得る。
・カスタマイズされた識別子「B」(これは、クレジットカード会社もしくはリモートプロバイダ、またはその両方に関係するものであってもよい。例えば、クレジットカードの種類Aの場合には、カスタマイズされたプロンプト内にカスタマイズされたテキストとともにロゴまたは関連図形を示してもよい。)
・クレジットカードの詳細についてのカスタマイズされた表示(クレジットカード番号の下4桁「〜0121」および有効期限「12/20」)。
・以前に入力された他のクレジットカードとの関係についてのカスタマイズされた表示(「CC3−0121」)。
【0090】
さらに、これらのカスタマイズされた態様は、以前に生成された態様とは異なるものであってもよい。例えば、クレジットカードの種類Aの場合にはカスタマイズされたプロンプト内にロゴまたは関連図形「A」(ここでは、410において図示)を示す一方、クレジットカードの種類Bの場合には、カスタマイズされたプロンプト内にカスタマイズされたテキストとともにロゴまたは関連図形「B」(ここでは、416において図示)を示してもよい(ここでは、416の「クレジットカードBを自動記入プロバイダXに保存しますか?」として図示)。
【0091】
さらなる一局面では、オペレーティングシステムは、ユーザがプロンプトに応答するまでデータを一時的に保持し、応答した時点で当該データをリモートプロバイダに送信することによって、入力データを後で自動記入に使用するために保存してもよい。あるいは、オペレーティングシステムは、データが自動記入プロバイダに送信された後は、ユーザ入力データを無視してもよい。
【0092】
いずれにしても、カスタマイズされたプロンプト420の生成および表示を実現することは、決して容易なタスクではない。オペレーティングシステムは、手動で入力されたユーザデータの適切な詳細またはロジックを把握することができない可能性もある(例えば、クレジットカードの概念を把握することができず、その結果、ユーザ入力された番号に基づくクレジットカードの種類、それが有効か否か、発行銀行に基づいて表示すべきアイコンなどを推測することができない可能性もある)。そのような情報およびロジックは、カスタマイズされたプロンプトを生成するために、携帯機器から(例えば、提携する自動記入プロバイダに)オフロードされている場合がある。
【0093】
したがって、後で自動記入に使用するためにシステムによって保存されることになるユーザ入力データの種類、程度、および詳細の正確な近似物をユーザに提供しようとすると、「鶏が先か、卵が先か」問題が生じる。すなわち、携帯機器のオペレーティングシステムは、ユーザによって入力されたユーザ入力データをテキスト入力フィールドを介して得ることで初めてそのロジックを推測することができるが、一方で、情報に基づくプロンプトを提供するためにそのデータを解析、送信、または格納することは、ユーザの承諾前にはできないという問題である。
【0094】
後で自動記入に使用されることになるユーザ入力データの種類、程度、および詳細の正確な近似物を、そのデータをユーザによる承諾の前に危険にさらすことなくユーザに提供するためには、オペレーティングシステムは、ユーザによって手動で入力されたデータ(繰り返しになるが、例えばクレジットカード番号などのPIIまたはセキュリティ保護された情報であってもよい)をユーザによる承諾の前に露出させることなく、リモートプロバイダから得たロジックを提供する方法が必要である。さらに、それを行なう際に、オペレーティングシステムは、予め定められた1つ以上の条件を維持するのが好都合である(例えば、ユーザに対する既存の保存ダイアログのセキュリティ機能を維持すること、リモートプロバイダによって保存ダイアログをカスタマイズさせること、データの表示前にリモートプロバイダによってそのデータを変換させること、特定の情報(例えば、クレジットカード番号)が既に保存されている場合は、保存ダイアログを表示させないようにする方法を提供すること、入力データの形式が無効である場合には、特定の情報(例えば、クレジットカード番号)を保存するためのオプションを提示しないこと、など)。
【0095】
例えば、ユーザ機器402のオペレーティングシステムは、アプリケーション404によって表示された内容のサブセット(ユーザ固有の情報を含まない)を判定し、アプリケーション404で使用される少なくとも1つのテンプレートを求める要求をリモートプロバイダに送信し得る。これに対するリモートプロバイダからの応答は、UI上のアプリケーションによって表示された1つ以上のテキスト入力フィールド内のユーザ入力データをどのように処理するかを示す、少なくとも1つのテンプレートを含んでもよい(例えば、テキスト入力フィールド406(ここでは、「カード番号」テキスト入力フィールド)、および/または、テキスト入力フィールド408(ここでは、「有効期限」テキスト入力フィールド))。
【0096】
ある例では、このようなテンプレートは次のようなメカニズムであってもよい。すなわち、オペレーティングシステムに送信されるParcelableオブジェクトで表現されたビジネスロジックをリモートプロバイダが提供し、ユーザによって提供されたデータをオペレーティングシステムがこれらのオブジェクトに入力し、必要なビジネスロジックを推測するというメカニズムである。例えば、これらのテンプレートは、この処理の一部として用いられてもよく、1つ以上の任意のオブジェクトによって表わされてもよい。
【0097】
いずれにせよ、オペレーティングシステムは、UI上に表示された入力フィールド内の実際の値(例えば、自動記入処理における値)、または他の何らかのUI上に表示された内容をValueFinderによって抽出することが必要になる場合がある。このValueFinderは、実際のユーザ入力をテンプレートによって提供されたフィールドにマッピングするために必要になる場合がある(すなわち、リモートプロバイダによって提供されたテンプレートはidへのリファレンスを有し、この機能によって実際の値を得る)。例えば、オペレーティングシステムは、この処理を助けるために、例えば以下のようなインターフェイスを用いることができる。
public interface ValueFinder {
AutofillValue findByAutofillId(AutofillId id);
}
ある例では、テンプレートは、ユーザ入力データ(例えば、クレジットカード情報)のフォーマットのバリデーションを行なうために使用可能なValidatorテンプレートであってもよい。ある例では、Validatorテンプレートは、ユーザ入力データが有効か否か(例えば、クレジットカード番号が無効である)とオペレーティングシステムが判断することを助けるために使用することができる。ある例では、入力されたデータが有効ではない場合、オペレーティングシステムは、入力されたデータを後で自動記入に使用するために保存するようユーザに促すプロンプトを表示しない(
図4Bの416に示す汎用プロンプトも、
図4Dの420に示すカスタマイズされたプロンプトも、表示しない)。このように、カスタマイズされたプロンプトの生成は、Validatorのテンプレートおよびロジックには依存しておらず、逆もまた同様である。
【0098】
このようなValidatorテンプレートの効果的な使用を容易にするために、オペレーティングシステムは、例えば以下のようなValidatorインターフェイスを用いることができる。
public interface Validator extends Parcelable {
boolean isValid (ValueFinder finder);
}
さらなる一局面では、オペレーティングシステムは、Validatorインターフェイスの多数の実現例を提供することができる。例えば、以下のものが挙げられる。
・CharSequenceValidator(リモートプロバイダによって受け渡される正規表現に基づいて、単一ビューの内容のバリデーションを行なうことができる。)
・LuhnChecksumValidator(提供された身元確認情報がLuhnアルゴリズムを通過し得るか否かのバリデーションを行なうことができる。)
・Validators(ANDやORのような論理式を用いて複数のバリデータを組み合わせる方法を提供することができる。)
他にも多数の可能性があり得る。
【0099】
いずれにしても、SaveInfoオブジェクトがValidatorを有し、オペレーティングシステムがプロンプトをUIを介して表示しようとするとき(
図4Bの416に示す汎用プロンプトも、
図4Dの420に示すカスタマイズされたプロンプトも同様)、オペレーティングシステムは、まずセッションデータをValidatorに送り、「isValid(session)」が真を返した場合のみ、UIを介してプロンプトを表示する。このような例示的なValidatorテンプレートの使用を容易にするために、オペレーティングシステムは、以下の例示的なコードのサンプルを用いることができる。
【0100】
クレジットカード入力フィールドにちょうど16桁の英数字を入れることを要する単純なバリデータの文脈の場合:
saveBuilder.setValidator(new CharSequenceValidator.Builder(ccNumberId,
"^\\d{16}$" ).build());
15または16桁の英数字をサポートするバリデータの文脈の場合:
import static android.service.autofill.Validators.or;
saveBuilder.setValidator(or(
new CharSequenceValidator.Builder(ccNumberId, "^\\d{15}$").build(),
new CharSequenceValidator.Builder(ccNumberId, "^\\d{16}$").build())
));
15または16桁の英数字をサポートするバリデータであって、Luhnアルゴリズムを通過することが必要なバリデータの文脈の場合:
import static android.service.autofill.Validators.or;
saveBuilder.setValidator(
and (LuhnChecksumValidator.getInstance(),
or (new CharSequenceValidator.Builder(ccNumberId, "^\\d{15}$").build(),
new CharSequenceValidator.Builder(ccNumberId, "^\\d{16}$").build())
)
));
各々に4桁の英数字を入れる4つのフィールド内にクレジットカード番号を格納する画面用のバリデータの文脈の場合:
import static android.service.autofill.Validators.and;
saveBuilder.setValidator(and(
new CharSequenceValidator.Builder(ccNumber1Id, "^\\d{4}$").build()),
new CharSequenceValidator.Builder(ccNumber2Id, "^\\d{4}$").build()),
new CharSequenceValidator.Builder(ccNumber3Id, "^\\d{4}$").build()),
new CharSequenceValidator.Builder(ccNumber4Id, "^\\d{4}$").build ())
));
ある例では、テンプレートは、クレジットカード番号の生成に使用可能なGeneratorテンプレートであってもよい。Generatorテンプレートは、そのサービスのためにクレジットカードが既に保存されている否かの判定を助けるために使用することができる。既に保存されていた場合、オペレーティングシステムは、入力されたデータを後で自動記入に使用するために保存するようユーザに促すプロンプトを表示しない(
図4Bの416に示す汎用プロンプトも、
図4Dの420に示すカスタマイズされたプロンプトも、表示しない)。このように、カスタマイズされたプロンプトの生成は、Generatorのテンプレートおよびロジックには依存しておらず、逆もまた同様である。
【0101】
ある例では、リモートプロバイダが既に何らかのユーザ入力データを有する場合、ユーザが選択できるように、1つ以上の識別子を、その各々が値および/またはデータのセットに対応するように、識別子のリスト(ドロップダウンメニューまたは他の形式)として表示してもよい。Generatorテンプレートを、そのような識別子機能および新たに手動で入力されたユーザデータと統合させ、2つを比較または識別し、その問題を解決してもよいが、他にも多数の方法があり得る。例えば、ユーザ入力が微妙に異なる場合、異なる入力値および/または識別子をUIを介して表示してもよい(例えば、リモートプロバイダが1つ以上のテンプレートを介して値「1234」を送信し、ユーザが「1234」と入力した場合、これらの入力値は、実現例に応じて、UIを介して、異なる結果として示されてもよいし、同じ結果として示されてもよい。
【0102】
さらなる例では、テンプレートは、ユーザ機器402のUIを介してカスタムプレゼンテーション(例えば、カスタマイズされたプロンプト)を表示するために使用可能なCustomPresentationテンプレートであってもよい。CustomPresentationテンプレートを使用することによって、後で自動記入に使用されることになる入力データの種類、程度、および詳細をユーザに通知するために、画像、マスクされたクレジットカード番号、有効期限、リンク付きのテキスト、および他のこのような情報をユーザに提示し得るカスタムプレゼンテーションを表示することができる。
【0103】
ある例では、CustomPresentationオブジェクトが、リモートプロバイダに、クレジットカードタイトル用のRemoteViewsテンプレートを定義させる。また、CustomPresentationオブジェクトは、そのテンプレート上のchild viewを、実行時に推測値に置換するために使用されるTransformationを、リモートプロバイダに定義させる。さらなる一局面では、このようなCustomPresentationテンプレートの効果的な使用を容易にするために、オペレーティングシステムは、例えば以下のようなTransformationインターフェイスを用いることができる。
public interface Transformation extends Parcelable {
void apply (ValueFinder finder, RemoteViews parentTemplate, int childViewId);
}
さらなる一局面では、オペレーティングシステムは、Transformationインターフェイスの多数の実現例を提供することができる。例えば、以下のものが挙げられる。
・SingleViewCharSequenceTransformation(正規表現およびグループ置換を用いて、文字列における単一ビューを変換することができる。典型的には、クレジットカード番号をマスクするために使用可能である。)
・MultipleViewsCharSequenceTransformation(正規表現およびグループ置換を用いて、文字列における複合ビューを変換することができる。典型的には、有効期限を生成するために使用可能である。)
・CharSequenceTransformation(SingleViewCharSequenceTransformationおよびMultipleViewsCharSequenceTransformationの何らかの組み合わせを含み得る。)
・ImageTransformation(どの正規表現がビューの値にマッチするかに基づいて、画像を選択することができる。典型的には、適切なクレジットカードアイコンを選択するために使用可能である)
他にも、TextTransformationなどの多数の可能性があり得る。TextTransformationは、ImageTransformationと類似するが、テキスト(クレジットカード銀行名など)を生成し得る点で異なる。他にも多数の可能性があり得る。
【0104】
このような例示的なCustomPresentationテンプレートの使用を容易にするために、オペレーティングシステムは、SingleViewCharSequenceTransformation、MultipleViewsCharSequenceTransformation、またはImageTransformationによる変換を用いてカスタマイズされたプロンプト(例えば、
図4Dの420)を生成する、以下の例示的なコードのサンプルを用いることができる。
【0105】
リモートビュー用のXMLテンプレートを定義する文脈の場合:
<LinearLayout>
<ImageView android:id = " @+id/templateccLogo "/>
<TextView android:id=" @+id/templateCcNumber "/>
<TextView android:id = " @+id/templateExpDate "/>
</LinearLayout>
次いで、リモートビュー用のXMLテンプレートを定義する文脈の場合:
saveBuilder.setCustomPresentation (new CustomPresentation.Builder(presentation)
.addChild (R.id.templateCcNumber,
new SingleViewCharSequenceTransformation.Builder(
ccNumberId, "^.*(\\d\\d\\d\\d)$", "...$1")
. build())
.addChild (R.id.templateExpDate,
new MultipleViewsCharSequenceTransformation.Builder()
.addField (ccExpMonthId, "^(\\d\\d)$", "Exp: $1")
.addField (ccExpYearId, "^(\\d\\d)$", "/$1")
.build())
.addChild (R.id.templateccLogo, new ImageTransformation.Builder(ccNumberId)
.addOption ("^4815.*$", R.drawable.visa)
.addOption ("^4816.*$", R.drawable.master_card)
.build())
.build());
さらに他の一局面において、ある例では、MultipleViewsCharSequenceTransformationをStringTransformationで置換してもよい。これは、以下の例示的なコードのサンプルによって実現可能である。
new StringFormatTransformation.Builder("Exp: %s/%s")
.addArg(ccExpMonthId, "^(\\d\\d)$")
.addArg(ccExpYearId, "^(\\d\\d)$")
.build())
さらなる一局面では、このような手法は、特定の利点をもたらすことができる(例えば、オペレーティングシステムによるテンプレートの可読性を高めることができる)。このような例は他にも可能である。
【0106】
別の例示的な態様の例示的なドキュメンテーションおよびサンプルコードセグメントを以下に提示する。
CharSequenceTransformation:
/**
* Replaces a {@link TextView} child of a {@link CustomDescription} with the contents of one or
* more regular expressions (regexs).
*
* <p>When it contains more than one field, the fields that match their regex are added to the
* overall transformation result.
*
* <p>For example, a transformation to mask a credit card number contained in just one field would
* be:
*
* <pre class="prettyprint">
* new CharSequenceTransformation
* .Builder(ccNumberId, Pattern.compile("^.*(\\d\\d\\d\\d)$"), "...$1")
* .build();
* </pre>
*
* <p>But a transformation that generates a {@code Exp: MM / YYYY} credit expiration date from two
* fields (month and year) would be:
*
* <pre class="prettyprint">
* new CharSequenceTransformation
* .Builder(ccExpMonthId, Pattern.compile("^(\\d\\d)$"), "Exp: $1")
* .addField(ccExpYearId, Pattern.compile("^(\\d\\d\\d\\d)$"), " / $1");
* </pre>
*/
CustomDescription:
/**
* Defines a custom description for the Save UI affordance.
*
* <p>This is useful when the autofill service needs to show a detailed view of what would be saved;
* for example, when the screen contains a credit card, it could display a logo of the credit card
* bank, the last four digits of the credit card number, and its expiration number.
*
* <p>A custom description is made of 2 parts:
* <ul>
* <li>A {@link RemoteViews presentation template} containing children views.
* <li>{@link Transformation Transformations} to populate the children views.
* </ul>
*
* <p>For the credit card example mentioned above, the (simplified) template would be:
*
* <pre class="prettyprint">
* <LinearLayout>
* <ImageView android:id="@+id/templateccLogo"/>
* <TextView android:id="@+id/templateCcNumber"/>
* <TextView android:id="@+id/templateExpDate"/>
* </LinearLayout>
* </pre>
*
* <p>Which in code translates to:
*
* <pre class="prettyprint">
* CustomDescription.Builder buider = new Builder(new RemoteViews(pgkName, R.layout.cc_template);
* </pre>
*
* <p>Then the value of each of the 3 children would be changed at runtime based on the the value of
* the screen fields and the {@link Transformation Transformations}:
*
* <pre class="prettyprint">
* // Image child - different logo for each bank, based on credit card prefix
* builder.addChild(R.id.templateccLogo,
* new ImageTransformation.Builder(ccNumberId)
* .addOption(Pattern.compile("^4815.*$"), R.drawable.ic_credit_card_logo1)
* .addOption(Pattern.compile("^1623.*$"), R.drawable.ic_credit_card_logo2)
* .addOption(Pattern.compile("^42.*$"), R.drawable.ic_credit_card_logo3)
* .build();
* // Masked credit card number (as .....LAST_4_DIGITS)
* builder.addChild(R.id.templateCcNumber, new CharSequenceTransformation
* .Builder(ccNumberId, Pattern.compile("^.*(\\d\\d\\d\\d)$"), "...$1")
* .build();
* // Expiration date as MM / YYYY:
* builder.addChild(R.id.templateExpDate, new CharSequenceTransformation
* .Builder(ccExpMonthId, Pattern.compile("^(\\d\\d)$"), "Exp: $1")
* .addField(ccExpYearId, Pattern.compile("^(\\d\\d)$"), "/$1")
* .build();
* </pre>
*
* <p>See {@link ImageTransformation}, {@link CharSequenceTransformation} for more info about these
* transformations.
*/
ImageTransformation:
/**
* Replaces the content of a child {@link ImageView} of a
* {@link RemoteViews presentation template} with the first image that matches a regular expression
* (regex).
*
* <p>Typically used to display credit card logos. Example:
*
* <pre class="prettyprint">
* new ImageTransformation.Builder(ccNumberId, Pattern.compile("^4815.*$"),
* R.drawable.ic_credit_card_logo1, "Brand 1")
* .addOption(Pattern.compile("^1623.*$"), R.drawable.ic_credit_card_logo2, "Brand 2")
* .addOption(Pattern.compile("^42.*$"), R.drawable.ic_credit_card_logo3, "Brand 3")
* .build();
* </pre>
*
* <p>There is no imposed limit in the number of options, but keep in mind that regexs are
* expensive to evaluate, so use the minimum number of regexs and add the most common first
* (for example, if this is a tranformation for a credit card logo and the most common credit card
* issuers are banks X and Y, add the regexes that resolves these 2 banks first).
*/
Validator:
/**
* Sets an object used to validate the user input - if the input is not valid, the
* autofill save UI is not shown.
*
* <p>Typically used to validate credit card numbers. Examples:
*
* <p>Validator for a credit number that must have exactly 16 digits:
*
* <pre class="prettyprint">
* Validator validator = new RegexValidator(ccNumberId, Pattern.compile(""^\\d{16}$"))
* </pre>
*
* <p>Validator for a credit number that must pass a Luhn checksum and either have
* 16 digits, or 15 digits starting with 108:
*
* <pre class="prettyprint">
* import android.service.autofill.Validators;
*
* Validator validator =
* and(
* new LuhnChecksumValidator(ccNumberId),
* or(
* new RegexValidator(ccNumberId, Pattern.compile(""^\\d{16}$")),
* new RegexValidator(ccNumberId, Pattern.compile(""^108\\d{12}$"))
* )
* );
* </pre>
*
* <p><b>Note:</b> the example above is just for illustrative purposes; the same validator
* could be created using a single regex for the {@code OR} part:
*
* <pre class="prettyprint">
* Validator validator =
* and(
* new LuhnChecksumValidator(ccNumberId),
* new RegexValidator(ccNumberId, Pattern.compile(""^(\\d{16}|108\\d{12})$"))
* );
* </pre>
*
* <p>Validator for a credit number contained in just 4 fields and that must have exactly
* 4 digits on each field:
*
* <pre class="prettyprint">
* import android.service.autofill.Validators;
*
* Validator validator =
* and(
* new RegexValidator(ccNumberId1, Pattern.compile(""^\\d{4}$")),
* new RegexValidator(ccNumberId2, Pattern.compile(""^\\d{4}$")),
* new RegexValidator(ccNumberId3, Pattern.compile(""^\\d{4}$")),
* new RegexValidator(ccNumberId4, Pattern.compile(""^\\d{4}$"))
* );
* </pre>
*
* @param validator an implementation provided by the Android System.
* @return this builder.
*
* @throws IllegalArgumentException if {@code validator} is not a class provided
* by the Android System.
*
VI.コンピューティングデバイス
次に、
図5を参照すると、
図5は例示的な実施形態に従うコンピューティングデバイス500の機能ブロック図である。特に、
図5に示すコンピューティングデバイス500は、前述のサーバデバイス108および/または110、および/またはリモートプロバイダ112および/または114、ユーザ機器104a〜104eのうちのいずれか、方法200、ユーザ機器302、および/またはユーザ機器402の少なくとも1つの機能を行なうように構成されてもよい。
【0107】
コンピューティングデバイス500は、ユーザインターフェイスモジュール501、ネットワーク通信インターフェイスモジュール502、1つ以上のプロセッサ503、データストレージ504、および1つ以上のセンサ520を含んでもよく、これらのうちのすべてがシステムバス、ネットワーク、または他の接続メカニズム505を介して互いにリンクされてもよい。
【0108】
ユーザインターフェイスモジュール501は、外部のユーザ入力/出力デバイスとの間でデータを送信および/または受信するように動作可能であってもよい。例えば、ユーザインターフェイスモジュール501は、キーボード、キーパッド、タッチスクリーン、存在感知ディスプレイ、コンピュータマウス、トラックボール、ジョイスティック、カメラ、音声認識モジュールおよび/または他の同様のデバイスなどのユーザ入力デバイスとの間で、データを送信および/または受信するように構成されてもよい。ユーザインターフェイスモジュール501はさらに、1つ以上の陰極線管(CRT)、液晶ディスプレイ、発光ダイオード(LED)、デジタル光処理(DLP)技術を使用するディスプレイ、プリンタ、電球、および/または他の同様のデバイスなどの、現在公知であるかまたはこれから開発されるユーザ表示デバイスに出力を提供するように構成されてもよい。また、ユーザインターフェイスモジュール501は、スピーカー、スピーカージャック、音声出力ポート、音声出力デバイス、イヤホン、および/または他の同様のデバイスなどで、可聴出力を生成するように構成されてもよい。ユーザインターフェイスモジュール501はさらに、コンピューティングデバイス500におけるタッチおよび/または物理的接触によって検出可能な振動および/または他の出力などの触覚出力を生成可能な1つ以上の触覚デバイスを備えて構成されてもよい。ある実施形態では、ユーザインターフェイスモジュール501を用いて、コンピューティングデバイス500を利用するためのGUIを提供してもよい。
【0109】
ネットワーク通信インターフェイスモジュール502は、ネットワークを介して通信するように構成可能な1つ以上の無線インターフェイス507および/または1つ以上の有線インターフェイス508を含んでもよい。無線インターフェイス507は、1つ以上の無線送信機、受信機、および/または、送受信機(例えば、ブルートゥース(登録商標)送受信機、Zigbee(登録商標)送受信機、Wi−Fi送受信機、WiMAX(登録商標)送受信機および/もしくは無線ネットワークを介して通信するように構成可能な他の同様のタイプの無線送受信機など)を含んでもよい。有線インターフェイス508は、1つ以上の有線送信機、受信機、および/または、送受信機(例えば、イーサーネット(登録商標)送受信機、ユニバーサルシリアルバス(USB)送受信機、あるいは、ツイストペアワイヤー、同軸ケーブル、光ファイバーリンクもしくは有線ネットワークへの同様の物理接続を介して通信するように構成可能な同様の送受信機など)を含んでもよい。
【0110】
ある実施形態では、ネットワーク通信インターフェイスモジュール502は、信頼性があり、セキュアで、および/または認証された通信を提供するように構成され得る。各通信について、信頼性のある通信(すなわち保証されたメッセージの送達)を保証するための情報は、場合によってはメッセージヘッダおよび/またはフッタの一部(たとえばパケット/メッセージシーケンシング情報、カプセル化ヘッダおよび/またはフッタ、サイズ/時間情報、ならびに送信照合情報(例えば、CRCおよび/またはパリティーチェック値など))として提供され得る。通信は、1つ以上の暗号プロトコルおよび/またはアルゴリズムを使用して、セキュリティ保護(たとえばエンコードもしくは暗号化)することが可能であり、および/または、復号化/デコードすることが可能である。当該暗号プロトコルおよび/またはアルゴリズムの例としては、DES、AES、RSA、Diffie−Hellman、および/またはDSAなどがあるが、これらに限定されない。通信をセキュリティ保護する(その後復号化/デコードする)ために、他の暗号プロトコルおよび/またはアルゴリズムを同様に使用してもよいし、上記で列挙したものに加えて使用してもよい。
【0111】
1つ以上のプロセッサ503は、1つ以上の汎用プロセッサおよび/または1つ以上の特殊目的プロセッサ(たとえばデジタルシグナルプロセッサ、グラフィックス・プロセッシング・ユニット、特定用途向け集積回路など)を含んでもよい。1つ以上のプロセッサ503は、データストレージ504に含まれるコンピュータ可読プログラム命令506、および/または本明細書に記載の他の命令を実行するように構成されてもよい。
【0112】
データストレージ504は、1つ以上のプロセッサ503のうちの少なくとも1つによって読み出しおよび/またはアクセスすることのできる1つ以上のコンピュータ可読記憶媒体を含んでもよい。この1つ以上のコンピュータ可読記憶媒体は、光学、磁気、有機または他のメモリもしくはディスクストレージなどの揮発性および/または不揮発性ストレージコンポーネントを含んでもよい。これらのストレージコンポーネントは、全体的または部分的に、1つ以上のプロセッサ503のうちの少なくとも1つと統合されてもよい。ある実施形態では、データストレージ504は、単一の物理デバイス(たとえば1つの光学、磁気、有機または他のメモリまたはディスク記憶装置)を使用して実現され得る。一方、他の実施形態では、データストレージ504は2つ以上の物理デバイスを使用して実現され得る。
【0113】
データストレージ504は、コンピュータ可読プログラム命令506と、場合によってはその他のデータとを含んでもよい。ある実施形態では、データストレージ504は、本明細書に記載の方法、シナリオ、および技術のうちの少なくとも一部、および/または、本明細書に記載のデバイスおよびネットワークの機能のうちの少なくとも一部を行なうことが必要なストレージをさらに含んでもよい。
【0114】
ある実施形態では、コンピューティングデバイス500は、1つ以上のセンサ520を含んでもよい。センサ520は、コンピューティングデバイス500の環境での条件を測定し、その環境に関するデータを提供するように構成されてもよい。例えば、センサ520は、次のうちの1つ以上を含んでもよい。
【0115】
(i)他の物体および/またはデバイスを識別する識別センサ。例えば、RFIDリーダ、近接センサ、1次元バーコードリーダ、2次元バーコード(例えば、クイックレスポンス(QR)コード)リーダ、およびレーザトラッカーなどがあるが、これらに限定されない。識別センサは、RFIDタグ、バーコード、QRコード(登録商標)、および/または、読取可能に構成された他のデバイスおよび/または物体などの識別子を読み取り、少なくとも識別情報を提供するように構成されてもよい。
【0116】
(ii)コンピューティングデバイス500の位置および/または動きを測定するセンサ。例えば、傾斜センサ、ジャイロスコープ、加速度計、ドップラーセンサ、グローバル・ポジショニング・システム(GPS)デバイス、ソーナーセンサ、レーダーデバイス、レーザー変位センサ、およびコンパスなどがあるが、これらに限定されない。
【0117】
(iii)コンピューティングデバイス500の環境を示すデータを取得する環境センサ。例えば、赤外線センサ、光学センサ、光センサ、カメラ、バイオセンサ、生体センサ、容量センサ、タッチセンサ、温度センサ、無線センサ、ラジオセンサ、動作センサ、マイクロフォン、音センサ、超音波センサ、および/または煙センサなどがあるが、これらに限定されない。
【0118】
(iv)コンピューティングデバイス500に関して作用する1つ以上の力を測定する力センサ(例えば、慣性力および/または重力)。例えば、1つ以上の寸法における力、トルク、グラウンドフォース、摩擦を測定する1つ以上のセンサ、および/または、ZMPのZMPおよび/もしくは位置を特定するゼロモーメントポイント(ZMP)センサなどがあるが、これらに限定されない。
【0119】
他にも多数のセンサ520の例があり得る。
本開示は、本適用例で記載された特定の実施形態に限定すべきではない。これらの特定の実施形態は、さまざまな局面の説明を目的としたものである。当業者には明らかであるように、本開示の精神および範囲から逸脱せずに、多数の変更および変形が可能である。本開示で列挙したものに加えて、本開示の範囲内で機能的に均等な方法および装置が、上述の記載から当業者には明らかであろう。そのような変更例および変形例も、添付の特許請求の範囲内であることが意図される。
【0120】
上述の詳細な説明では、添付の図面を参照して、開示されたシステム、デバイス、および方法のさまざまな特徴および機能を記載している。これらの図面において、文脈が他の態様を示していなければ、通常、同様の符号は同様の構成要素を特定する。詳細な説明に記載された例示的な実施形態、図面、および特許請求の範囲は、限定的であるよう意図されるものではない。本明細書で提示された主題の精神または範囲から逸脱せずに、他の実施形態を利用し、他の変更を行なうことも可能である。本明細書で概括的に記載し、図面に示した本開示の局面は、種々の異なる構成で配置、置換、合体、分離、および設計され得ることが容易に理解されるであろう。これらはすべて、本明細書で明示的に企図されるものである。
【0121】
図面に示されるとともに本明細書で説明されたラダー図、シナリオ、およびフローチャートのうちのいずれかまたはすべてに関して、各ブロックおよび/または通信は、例示的な実施形態に係る情報の処理および/または情報の送信を表わす場合がある。これらの例示的な実施形態の範囲内には、代替的な実施形態も含まれる。代替的な実施形態においては、例えば、ブロック、送信、通信、要求、応答、および/またはメッセージとして記載された機能が、関与する機能に応じて、図示または説明されたものとは異なる順序で実行されてもよい(実質的に同時、または逆の順序で実行されることを含む)。さらに、本明細書で説明されたラダー図、シナリオ、およびフローチャートのうちのいずれかで用いるブロックおよび/または機能は、より多くてもよいし、より少なくてもよい。また、これらのラダー図、シナリオ、およびフローチャートは、部分的または全体的に互いに組み合わせることも可能である。
【0122】
情報の処理を表わすブロックは、本明細書に記載した方法または手法の特定のロジック機能を行なうように構成された回路に対応してもよい。代替的またはさらには、情報の処理を表わすブロックは、モジュール、セグメント、またはプログラムコード(関連データを含む)の一部に対応してもよい。プログラムコードは、上記方法または手法における特定のロジック機能または動作を実現するためにプロセッサによって実行され得る1つ以上の命令を含んでもよい。プログラムコードおよび/または関連データは、ディスク、ハードドライブ、または他の記憶媒体を含む記憶装置など、任意の種類のコンピュータ可読媒体に格納されてもよい。
【0123】
コンピュータ可読媒体は、非一時的なコンピュータ可読媒体、例えば、レジスタメモリ、プロセッサキャッシュ、およびランダムアクセスメモリ(RAM)といった、短期間データを格納する非一時的なコンピュータ可読媒体などを含んでもよい。コンピュータ可読媒体は、より長い期間プログラムコードおよび/またはデータを格納する非一時的なコンピュータ可読媒体、例えば、読み取り専用メモリ(ROM)、光学または磁気ディスク、コンパクトディスク読み取り専用メモリ(CD−ROM)といった二次的または永続的な長期記憶装置などを含んでもよい。コンピュータ可読媒体は、他の如何なる揮発性または非揮発性の記憶システムであってもよい。コンピュータ可読媒体は、例えば、コンピュータ可読記憶媒体、すなわち有形の記憶装置とみなしてもよい。
【0124】
さらに、1つ以上の情報送信を表わすブロックは、同一の物理デバイスのソフトウェアモジュール間および/またはハードウェアモジュール間の情報送信に対応してもよい。一方、他の情報送信は、異なる物理デバイスのソフトウェアモジュール間および/またはハードウェアモジュール間で行なわれてもよい。
【0125】
本明細書においてさまざまな局面および実施形態を開示したが、当業者には他の局面および実施形態も明らかであろう。本明細書において開示されたさまざまな局面および実施形態は説明の目的で提示されたものであり、限定するように意図されたものではない。その真の範囲は、以下の特許請求の範囲によって示される。