הגדרת אירוע

אירוע מפעיל שינויים במצב ויוזם פעולות. אירועים פועלים כאותות שנשלחים מממשק המשתמש של המערכת או מחוץ לתהליך באמצעות intent. האירועים מיידעים את ממשק המשתמש הגמיש על מקרים שדורשים תגובה.

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

המבנה של אירוע

מזהה ייחודי (ID) חובה שמזהה אירוע. המזהה הזה מסווג את סוג המופע, כמו _System_AppOpenEvent או _System_PanelEmptyEvent.

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

האסימונים מועברים לאירוע כרשימה של צמדי מפתח/ערך שמופרדים באמצעות נקודה-ופסיק (;). הנה רשימת המפתחות שנתמכים על ידי המערכת:

מפתח תיאור
panelId מזהה חלונית ספציפית בממשק המשתמש שמשויכת לאירוע.
component מציין את שם הרכיב, כמו פעילות שמקושרת לאירוע.
package שם החבילה שקשורה לאירוע.
panelToVariantId מציין את וריאנט היעד של חלונית בהקשרים ספציפיים. משתמשים במאפיין הזה כדי להפעיל אנימציות מדורגות על ידי האזנה למעבר בין חלוניות. לדוגמה, הפעלת המעבר של חלונית ב' למצב סגור כשחלונית א' עוברת למצב פתוח.

לדוגמה:

"component=com.android.app;panelId=panel1"

לוגיקה של התאמת אירועים

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

  • התאמה מדויקת של id האירוע: הערך של id האירוע שנשלח חייב להיות זהה בדיוק לערך של id שצוין במסנן של אירוע המעבר או הפעולה. אם המזהים לא זהים, האירוע לא נחשב לתואם.

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

    כדי שתהיה התאמה, כל מאפייני האירוע (האסימונים) שצוינו בהגדרת האירוע של המעבר חייבים להיות זהים למאפיינים התואמים באירוע שנשלח.

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

    לעומת זאת, אם המסנן מציין אסימון שלא קיים באירוע שנשלח, או אם הערך של אסימון תואם לא תואם, הוא לא נחשב להתאמה.

לדוגמה, נניח שהגדרתם מעבר שמופעל כשמתרחש id="app_open" ב-panelId="panel1" עם component="com.android.myapp.Activity".

אם לאירוע שנשלח יש את הערכים id="app_open", panelId="panel1" ו-component="com.android.myapp.Activity", נוצרת התאמה. כל קריטריוני הסינון מתקיימים והערך הספציפי יותר עבור Activity value in the dispatched event is considered a match forcom.android.myapp`.

עם זאת, ההתאמה תיכשל אם האירוע שנשלח הוא id="app_open",‏ panelId="panel1" או component="com.android.yourapp.Activity". למרות ש-id ו-panelId זהים, component לא שווה ל-component במעבר – com.android.myapp – לא זהה ל-com.android.yourapp באירוע שנשלח.

טריגר מעבר

יכול להיות שמעבר יהיה התאמה, אבל זה לא אומר שהוא יופעל. אפשר להפעיל רק מעבר אחד לכל אירוע. ממשק משתמש ניתן לשיפור נועד להפעיל רק את ההתאמה הקרובה ביותר.

לדוגמה, אם יש התאמה בין שני מעברים – אחד עם שם רכיב ואחד בלי שם רכיב -m – רק המעבר עם שם הרכיב מופעל.

שליחה וטיפול באירועים

האירועים הם מרכזיים להתנהגות הדינמית של ממשק המשתמש שניתן להתאמה. אפשר לשלוח אירועים מממשק המשתמש של המערכת או מתהליכים חיצוניים באמצעות intent.

אירועי מערכת

ה-framework מגדיר כמה אירועים במערכת שמסייעים בפעולות האלה:

מאפיין תיאור
_System_OnHomeEvent

(SYSTEM_HOME_EVENT_ID)
מציין שהמערכת קיבלה בקשה להצגת המסך Home. ב-AAOS, מסך הבית יכול להיות תצורה גמישה של חלונות, כמו שילוב של ווידג'טים, או אפילו מפה. האירוע הזה חשוב למעברים או לפעולות שמתבססים על הצגת ממשק הבית הראשי למשתמש.
_System_TaskOpenEvent

(SYSTEM_TASK_OPEN_EVENT_ID)

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

האירוע הזה מכיל טוקנים כמו panelId ו-component.

_System_TaskCloseEvent

(SYSTEM_TASK_CLOSE_EVENT_ID)
אותות שמשימה או אפליקציה נסגרו, ומשמשים כהפך של _System_TaskOpenEvent. כך המערכת יכולה להגיב לסגירה של אפליקציות. הפעולה הזו יכולה להפעיל מעברים כדי להחזיר חלונית למצב ברירת מחדל או כדי ליזום פעולות ניקוי אחרות.
_System_TaskPanelEmptyEvent

(SYSTEM_TASK_PANEL_EMPTY_EVENT_ID)

האירוע נשלח כשחלונית ספציפית מתרוקנת, והוא כולל את הערך panelId כטוקן, כך שהטריגרים מסוננים לפי החלונית שהתרוקנה.

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

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

.
_System_EnterSuwEvent

(SYSTEM_ENTER_SUW_EVENT_ID)
מציין את המערכת שנכנסת לאשף ההגדרה (SUW). האירוע הזה מסמן שהמערכת מוכנה, ואפשר להגדיר אותו כך שיפעיל אפליקציות או יציג חלוניות ייעודיות אחרי שהמערכת תאותחל. כדי להיכנס למצב מערכת קריטי כזה, צריך אירוע ייעודי שיפעיל את ההתאמות או הפעולות המתאימות בממשק המשתמש.
_System_ExitSuwEvent

(SYSTEM_EXIT_SUW_EVENT_ID)
מציין שהמערכת יוצאת מאשף ההגדרה (SUW). בדומה ל-_System_EnterSuwEvent, האירוע הזה מאפשר למערכת להגיב להשלמת תהליך ההגדרה על ידי הפעלת אפליקציות ברירת מחדל או מעבר לממשק משתמש רגיל.
_System_OnAnimationEndEvent

(SYSTEM_ON_ANIMATION_END_EVENT_ID)
מופעל כשסיימתם אנימציה בממשק המשתמש. אפשר להשתמש באירוע הזה כדי להפעיל פעולות או שינויים במצב שקורים אחרי השלמת מעבר חזותי.

האירוע הזה מכיל טוקן של variantId כדי לציין את הווריאציה שהוצגה בסוף האנימציה.