שילוב מילוי אוטומטי עם שירותי מילוי אוטומטי ומקלדות IME

החל מ-Android 11, מקלדות ועריכות אחרות של שיטות קלט (IME) יכולות להציג הצעות למילוי אוטומטי בשורה, בסרגל הצעות או באופן דומה, במקום שהמערכת תציג הצעות בתפריט. מכיוון שההצעות האלה למילוי אוטומטי יכולות להכיל מידע פרטי, כמו סיסמאות או פרטי כרטיס אשראי, ההצעות מוסתרות מ-IME עד שהמשתמש בוחר אחת מהן. כדי להשתמש בתכונה הזו, צריך לעדכן את שירותי ה-IME ואת שירותי המילוי האוטומטי, כמו מנהלי הסיסמאות. אם IME או שירות מילוי אוטומטי לא תומכים במילוי אוטומטי בשורה, ההצעות יוצגו בתפריט, כמו בגרסאות ישנות יותר מ-Android 11.

זרימת עבודה

בתהליך הזה, IME הוא המקלדת הנוכחית או עורך קלט אחר, וספק ההצעות הוא הספק המתאים של ההצעה למילוי אוטומטי. בהתאם לשדה הקלט ולהגדרות של המשתמש, ספק ההצעות יכול להיות הפלטפורמה או שירות מילוי אוטומטי.

  1. המשתמש מתמקד בשדה קלט שמפעיל מילוי אוטומטי, כמו שדה קלט של סיסמה או של כרטיס אשראי.

  2. הפלטפורמה שולחת שאילתה ל-IME הנוכחי ולספק ההצעות המתאים כדי לבדוק אם הם תומכים במילוי אוטומטי בשורת הטקסט. אם ה-IME או ספק ההצעות לא תומכים במילוי אוטומטי בתוך השורה, ההצעה תוצג בתפריט, כמו ב-Android 10 ומטה.

  3. הפלטפורמה מבקשת מ-IME לספק בקשת הצעה. בבקשה הזו מצוין מספר ההצעות המקסימלי שאפשר להציג, וגם מפרטים של הצגה לכל הצעה. מפרט התצוגה כולל פרטים כמו גודל מקסימלי, גודל טקסט, צבעים ונתוני גופן, שמאפשרים לספק ההצעות להתאים את המראה והתחושה של ה-IME.

  4. הפלטפורמה מבקשת מספק ההצעות לספק עד למספר ההצעות המבוקש. כל הצעה כוללת קריאה חוזרת (callback) כדי להנפיח View שמכיל את ממשק המשתמש של ההצעה.

  5. הפלטפורמה מעדכנת את ה-IME שההצעות מוכנות. כדי להציג את ההצעות, ה-IME קורא לשיטת ה-callback כדי להרחיב את View של כל הצעה. כדי להגן על המידע הפרטי של המשתמש, לא מוצגות להצעות בשלב הזה.

  6. אם המשתמש בוחר באחת מההצעות, ה-IME מקבל הודעה באותו אופן שבו הוא מקבל הודעה אם המשתמש בוחר הצעה מתפריט מערכת.

בקטעים הבאים מוסבר איך להגדיר את שירות ה-IME או את שירות המילוי האוטומטי כך שתהיה תמיכה במילוי אוטומטי בתוך שורת הטקסט.

הגדרת ממשקי IME כך שיתמכו במילוי אוטומטי בתוך שורה

בקטע הזה מוסבר איך להגדיר את ה-IME כך שיתמוך במילוי אוטומטי בתוך שורה. אם ה-IME לא תומך במילוי אוטומטי בתוך שורה, הפלטפורמה תציג את ההצעות למילוי אוטומטי בתפריט כברירת מחדל.

ה-IME צריך להגדיר את המאפיין supportsInlinedSuggestions לערך true:

<input-method
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:supportsInlineSuggestions="true"/>

כשהפלטפורמה זקוקה להצעה למילוי אוטומטי, היא קוראת לשיטה InputMethodService.onCreateInlineSuggestionsRequest() של ה-IME. חובה להטמיע את השיטה הזו. מחזירים את הערך InlineSuggestionsRequest ומציינים את הפרטים הבאים:

  • כמה הצעות מערכת ה-IME רוצה להציג.
  • InlinePresentationSpec לכל הצעה, שמגדיר את אופן הצגת ההצעה.

כשיש בפלטפורמה הצעות, היא קוראת לשיטה onInlineSuggestionsResponse() של ה-IME, ומעבירה את הערך InlineSuggestionsResponse שמכיל את ההצעות. חובה להטמיע את השיטה הזו. בהטמעה, צריך להפעיל את InlineSuggestionsResponse.getInlineSuggestions() כדי לקבל את רשימת ההצעות, ואז להפעיל את השיטה InlineSuggestion.inflate() של כל הצעה כדי להרחיב אותה.

הגדרת שירותי מילוי אוטומטי כך שיתמכו במילוי אוטומטי בתוך שורה

בקטע הזה מוסבר איך להגדיר את שירות המילוי האוטומטי כך שיתמוך במילוי אוטומטי בשורה. אם האפליקציה לא תומכת במילוי אוטומטי בתוך שורה, הפלטפורמה תציג את ההצעות למילוי אוטומטי בתפריט כברירת מחדל.

שירות המילוי האוטומטי צריך להגדיר את המאפיין supportsInlinedSuggestions לערך true:

<autofill-service
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:supportsInlineSuggestions="true"/>

כשה-IME זקוק להצעות למילוי אוטומטי, הפלטפורמה קוראת לשיטה onFillRequest() של שירות המילוי האוטומטי, בדיוק כמו בגרסאות של Android 11 ומטה. עם זאת, השירות צריך להפעיל את השיטה getInlineSuggestionsRequest() של אובייקט FillRequest שהוענק כדי לקבל את InlineSuggestionsRequest שנוצר על ידי ה-IME. השדה InlineSuggestionsRequest מציין כמה הצעות צריך להציג בשורה אחת ואיך צריך להציג כל אחת מהן. אם ה-IME לא תומך בהצעות בשורה, השיטה מחזירה את הערך null.

שירות המילוי האוטומטי יוצר אובייקטים מסוג InlinePresentation, עד למספר המקסימלי המבוקש ב-InlineSuggestionsRequest. המצגות צריכות לעמוד באילוצי הגודל שצוינו ב-InlineSuggestionsRequest. כדי להחזיר את ההצעות ל-IME, מפעילים את המקש Dataset.Builder.setValue() פעם אחת לכל הצעה. ב-Android 11 יש גרסאות של Dataset.Builder.setValue() שתומכות בהצעות בשורת הטקסט.