סובב הצעות

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

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

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

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

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

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

מָקוֹר

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

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

יישום

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

יצרני מכשירים שיוצרים מכשירים עם מקשי ניווט בחומרה שרוצים ליישם תכונה זו יצטרכו לתכנן וליישם את תקציב ממשק המשתמש שלהם או להשבית את התכונה. מומלץ שכל משטח שהוכנס יהיה קל לשימוש כאשר המכשיר מוחזק ב-90º או 180º לסיבוב המערכת הנוכחי והוא נגיש במהירות. מסיבות אלו, השימוש בהודעות (כפי שנעשה עבור בורר ה-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