סיבוב ההצעות

ב-Android 8.0, המשתמשים יכלו לעבור בין סיבוב אוטומטי לסיבוב לאורך מצבים באמצעות משבצת בהגדרות המהירות או הגדרות התצוגה. ב-Android 9, עדכנו במצב של סיבוב לאורך כדי למנוע סיבובים לא מכוונת על ידי הצמדת סיבוב המסך הנוכחי, גם אם מיקום המכשיר משתנה. המשתמשים יכולים להפעיל סיבוב באופן ידני במקרה הצורך, על ידי לחיצה על לחצן חדש בסרגל הניווט. שינינו את השם של מצב 'לאורך' לנעילת סיבוב, והוא פועל כשמסובבים אוטומטית מושבתת. אין שינויים במצב הסיבוב האוטומטי.

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

מצב נעילת הסיבוב פועל על ידי הצגת לחצן בסרגל הניווט בזמן הסיבוב של המכשיר שינויים. כדי לעשות זאת, חיישן הכיוון של המכשיר חייב להישאר פעיל גם כשהסיבוב האוטומטי מושבת. הקשה על הלחצן הזה מגדירה ביעילות את סבב המשתמשים (Settings.System.USER_ROTATION). windowManager משתמש באפשרות הזו של Google, וכן פרטים אחרים על נתוני הפעילות והסטטוס המובילים של המערכת, כדי לשנות את הסיבוב של המערכת. windowManager ממשיך להשתמש ברוטציית משתמשים כאשר מחליטים איזה סיבוב להציג כאשר עוברים פעילות אחרת.

קובץ ה-GIF הזה מציג טלפון בפריסה לרוחב כשהמסך ב:
       כיוון לאורך. יופיע סמל ששואל את המשתמש אם הוא רוצה
       לשנות את כיוון המסך שלהם לרוחב.
איור 1. לחצן לסיבוב ההצעה באמצעות 'החלקה לחצן 'למעלה בדף הבית' התנועה מופעלת

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

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

מקור

תמיכה בהצעות לסבב נוספה אל Android 9. רוב השינויים נכללים במסגרת את הקבצים הבאים.

  • services/.../server/policy/PhoneWindowManager.java:
    • קטעי הוק (hooks) שצורכים את הפלט של WindowOrientationListener (MyOrientationListener, אחראי על המעקב כדי לקבוע אם בוצע סיבוב המכשיר)
    • ההגדרה 'WindowOrientationListener' נשארת פעילה גם אם הסיבוב האוטומטי מושבת (ראו needSensorRunningLp())
    • מחשב את סבב המערכת בהינתן העדפה לסבב משתמשים, למעלה ההגדרות של פעילות screenOrientation וסטטוס המערכת (ראו rotationForOrientationLw())
    • החליטו אם הפעילות העליונה יכולה להסתובב לסיבוב נתון (ראו isRotationChoicePossible())
  • SystemUI/.../statusbar/phone/NavigationBarFragment:
    • ההגדרה קובעת אם לחצן סרגל הניווט יוצג בזמן סיבוב הצעות להתקשרות חזרה מ-PhoneWindowManager (ראו onRotationProposal())
    • המדיניות הזו קובעת מתי להסתיר את לחצן סרגל הניווט הסיבוב (צריך לעיין בקריאות של setRotateSuggestionButtonState(false))
    • טיפול בזמנים קצובים לתפוגה של לחצנים, כולל במקרה המיוחד שבו סרגל הניווט מוסתר (בדרך כלל במסך מלא)
    • איפוס העדפת המשתמש עם חזרה למצב הרגיל של המכשיר כיוון (mRotationWatcher)
    • בוחר את הסגנון המתאים לאנימציה של לחצן סרגל הניווט, הוחלה ב-NavigationBarView (ראו onRotationProposal())
    • הוספת לוגיקה של מצב מבוא, כולל אנימציה מיוחדת (ראה הפניות אל Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED)
    • הטמעה של סימון סבב 2 ללא הגבלה (מידע נוסף זמין ב-disable())
  • SystemUI/.../statusbar/phone/NavigationBarView.java:
    • אנימציה של סמל לחצן הסגנונות כדי להתאים לסיבוב בהמתנה (ראו updateRotateSuggestionButtonStyle())
    • שינויים בחשיפה של הלחצן 'כינויים' (ראו setRotateButtonVisibility()), כולל לוגיקה להסתרה לחצן הסיבוב אם שירותי נגישות מסוימים פעילים (מביא בחשבון את דירוג המחסנית של לחצני סרגל הניווט הימני ביותר)
  • SystemUI/res/layout/menu_ime.xml:
    • כולל KeyButtonView חדש ללחצן הסיבוב, מעל התפריט ובוחר ה-IME/מקלדת אבל מתחת לחצן הנגישות
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml:
    • המערך AnimatedVectorDrawable משמש להנפשה של לחצן סיבוב בסרגל הניווט
    • עיצוב (בSystemUI/res/values/styles.xml) משמש ל: מגדירים את זוויות ההתחלה והסיום של הסיבוב כך שאותה מודעה ניתנת להזזה המשמש להנפשה של העברות שונות להתחלה ולסיום
    • כוונון גוון הסמלים מוגדר באמצעות TintedKeyButtonDrawable

הטמעה

Android 9 כולל את כל השינויים הנחוצים כדי לקבל הצעות לסבב פועלות עבור מכשירים שמשתמשים במקשי הניווט בתוכנה (חזרה, דף הבית וכו').

יצרני מכשירים שיוצרים מכשירים עם מקשי ניווט פיזיים שרוצים כדי להטמיע את התכונה הזו תצטרכו לתכנן ולהטמיע ממשק משתמש משלהם בתשלום או להשבית את התכונה. מומלץ להוסיף לכל פלטפורמה יהיה קל לשימוש כשהמכשיר נמצא ב-90o או ב-180o למערכת הנוכחית מסתובבת ואפשר לגשת אליו במהירות. מהסיבות האלה, השימוש בהתראות (כפי שנעשה בבוחר ה-IME/מקלדת) לא מומלץ.

דרישות החומרה לשימוש בתכונה הזו זהות לדרישות כדי להשתמש בסיבוב האוטומטי.

אתה נדרש כדי לשמור על עקביות בהטמעה של ההעדפה לגבי סבב משתמשים (Settings.System.USER_ROTATION) מאופס להגדרות המקוריות של המכשיר כאשר המערכת משתנה לסיבוב הטבעי של המכשיר מסיבה כלשהי. כשהסיבוב האוטומטי מושבת. ההטמעה הקיימת עושה זאת (ראו NavigationBarFragment.mRotationWatcher).

יש סימון חדש בStatusBarManager.disable2 באופן זמני למנוע הצגה של הצעות לסבב. צפייה StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS הדגל הזה חייב להיות נלקחות בחשבון בכל ההטמעות שהן משמשות באפליקציות מערכת קריטיות, כולל אשף ההגדרה. ההטמעה שסופקה תומכת בכך (ראו NavigationBarFragment.disable()).

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

התאמה אישית

הצעות לסיבוב מופיעות רק במצב נעילה של סיבוב (סיבוב אוטומטי מושבת), ניתן לבחור אם התכונה תופעל כברירת מחדל בהתקנות חדשות על ידי בחירה בכיבוי אוטומטי כברירת מחדל. צפייה def_accelerometer_rotation אינץ' SettingsProvider/res/values/defaults.xml כדי לבצע שינויים בברירת המחדל.

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

אימות

לצורך בדיקה, אפשר להשבית ולהפעיל את התכונה על ידי שינוי הגבלה ערך של Settings.Secure. ניתן לעשות זאת בקלות באמצעות הפעלת באמצעות הפקודה הבאה ממופע adb מורשה:

adb shell settings put secure show_rotation_suggestions <x>

מגדירים את x לערך 0 למצב כבוי ואת 1 להפעלה.

לצורך בדיקה, אפשר לאפס את מצב המבוא על ידי שינוי ערך של Settings.Secure. ניתן לעשות זאת בקלות באמצעות הפעלת באמצעות הפקודה הבאה ממופע adb מורשה:

adb shell settings put secure num_rotation_suggestions_accepted 0