หมุนคำแนะนำ

ใน Android 8.0 ผู้ใช้สามารถสลับระหว่างการหมุนอัตโนมัติและการหมุนแนวตั้ง โดยใช้การ์ดการตั้งค่าด่วนหรือการตั้งค่าการแสดงผล ใน Android 9 เราได้อัปเดต โหมดการหมุนภาพบุคคลเพื่อขจัดการหมุนโดยไม่ตั้งใจโดยการปักหมุด การหมุนหน้าจอปัจจุบันแม้ว่าตำแหน่งของอุปกรณ์จะเปลี่ยนไป ผู้ใช้เรียกใช้ได้ หมุนด้วยตนเองเมื่อจำเป็น โดยกดปุ่มใหม่ในแถบนำทาง เราเปลี่ยนชื่อโหมดภาพบุคคลเป็นล็อกการหมุน และจะเปิดใช้งานเมื่อหมุนอัตโนมัติ ปิดอยู่ ไม่มีการเปลี่ยนแปลงในโหมดหมุนอัตโนมัติ

เมื่ออุปกรณ์อยู่ในโหมดล็อกการหมุน ผู้ใช้จะล็อกหน้าจอ รองรับการหมุนด้านบน กิจกรรมที่มองเห็นได้ (ตามระบบปัจจุบัน ) หากกิจกรรมยอดนิยมสามารถแสดงในการหมุนเวียนได้หลายครั้งใน โหมดหมุนอัตโนมัติ ตัวเลือกเดียวกันนี้ควรจะมีอยู่ในโหมดล็อกการหมุน โดยมีข้อยกเว้นบางประการตามscreenOrientationของกิจกรรม การตั้งค่า

โหมดล็อกการหมุนทำงานโดยแสดงปุ่มในแถบนำทางเมื่อหมุนอุปกรณ์ การเปลี่ยนแปลง เซ็นเซอร์การวางแนวของอุปกรณ์ต้องทำงานอยู่เพื่อให้ดำเนินการดังกล่าวได้ แม้ว่าการหมุนอัตโนมัติจะปิดอยู่ การแตะปุ่มนี้จะตั้งค่าการหมุนเวียนผู้ใช้อย่างมีประสิทธิภาพ ค่ากำหนด (Settings.System.USER_ROTATION) WindowManager ใช้สิ่งนี้ ค่ากำหนด พร้อมด้วยรายละเอียดอื่นๆ เกี่ยวกับสถานะ "กิจกรรม" และ "ระบบ" ด้านบน เพื่อเปลี่ยนการหมุนของระบบ WindowManager ใช้การหมุนเวียนผู้ใช้ต่อไป มากกว่า 1 ชิ้นเมื่อตัดสินใจว่าจะแสดงผลระบบอย่างไรเมื่อเปลี่ยนไปใช้ กิจกรรมอื่น

วันที่ GIF นี้แสดงโทรศัพท์ในแนวนอนโดยถือหน้าจอใน
       ในแนวตั้ง ไอคอนจะปรากฏขึ้นเพื่อถามผู้ใช้ว่าต้องการ
       เปลี่ยนการวางแนวหน้าจอเป็นแนวนอน
รูปที่ 1 ปุ่มหมุนคำแนะนำที่มี "เลื่อน ขึ้นบนปุ่มหน้าแรก" เปิดใช้ท่าทางสัมผัสแล้ว

ควรคงค่ากำหนดการหมุนเวียนผู้ใช้ไว้เมื่อย้ายไปมาระหว่างกิจกรรม แต่เพราะผู้ใช้โทรศัพท์ส่วนใหญ่ต้องการแสดง Shorts ในภาพรวม ในช่วงระยะเวลาชั่วคราว เราได้เพิ่มการให้น้ำหนักพิเศษตามการวางแนว การหมุนเวียนผู้ใช้ ระบบจะรีเซ็ตเป็นการวางแนวตามธรรมชาติของอุปกรณ์เมื่อใดก็ตามที่ การหมุนของระบบจะเปลี่ยนเป็นการวางแนวตามธรรมชาติของอุปกรณ์ สำหรับโทรศัพท์ส่วนใหญ่ การวางแนวตามธรรมชาติของอุปกรณ์คือแนวตั้ง (0o) กำลังรีเซ็ตการหมุนเวียนผู้ใช้ มักเกิดขึ้นเมื่อใช้แอปแนวตั้งเท่านั้น ล็อกโทรศัพท์ หรือ การกลับไปยังพื้นที่ทำงานของ Launcher

การโต้ตอบการหมุนเวียนของผู้ใช้ไม่ได้เปลี่ยนแปลงไปมากนักในทศวรรษที่ผ่านมา ผู้ใช้ อาจพบว่าฟีเจอร์นี้ค้นหาได้ยากเมื่อพิจารณาจากประวัติที่ผ่านมาซึ่งมีการหมุนเวียน และตำแหน่งปุ่มในแถบนำทาง ด้วยเหตุนี้เราจึงได้เพิ่ม โหมดแนะนำกับปุ่มหมุนที่ไฮไลต์ปุ่มดังกล่าวเมื่อปรากฏขึ้น บทนำ การทำงานของโหมดนี้จะเกิดขึ้นเฉพาะกับการโต้ตอบกับปุ่ม 2-3 ปุ่มแรกหลังจากนั้น โหมดแนะนำถูกปิดใช้งาน

แหล่งที่มา

เพิ่มการสนับสนุนคำแนะนำการหมุนเวียนไปยัง Android 9 การเปลี่ยนแปลงส่วนใหญ่มักอยู่ใน ไฟล์ต่อไปนี้

  • services/.../server/policy/PhoneWindowManager.java:
    • ฮุกที่ใช้เอาต์พุตของ WindowOrientationListener (MyOrientationListener มีหน้าที่ตรวจสอบ เซ็นเซอร์เพื่อระบุว่ามีการหมุนอุปกรณ์หรือไม่)
    • ให้ WindowOrientationListener ทำงานอยู่ตลอดเวลา การหมุนอัตโนมัติปิดใช้อยู่ (ดูneedSensorRunningLp())
    • คำนวณการหมุนเวียนของระบบตามค่ากำหนดการหมุนเวียนของผู้ใช้ ด้านบน การตั้งค่ากิจกรรม screenOrientation และสถานะระบบ (ดูrotationForOrientationLw())
    • ตรวจสอบว่ากิจกรรมยอดนิยมสามารถหมุนไปยังการหมุนที่กำหนดได้หรือไม่ (โปรดดู isRotationChoicePossible())
  • SystemUI/.../statusbar/phone/NavigationBarFragment:
    • กำหนดว่าควรแสดงปุ่ม Navbar ขณะหมุนหรือไม่ การติดต่อกลับตามคำแนะนำจาก PhoneWindowManager (ดูonRotationProposal())
    • จัดการเมื่อต้องการซ่อนปุ่ม Navbar ที่หมุน (ดูการเรียก setRotateSuggestionButtonState(false))
    • จัดการกับการหมดเวลาของปุ่ม รวมถึงกรณีพิเศษเมื่อ แถบนำทางซ่อนอยู่ (โดยทั่วไปจะเป็นแบบเต็มหน้าจอ)
    • รีเซ็ตค่ากำหนดของผู้ใช้เมื่อกลับไปใช้ตามปกติ การวางแนว (mRotationWatcher)
    • เลือกรูปแบบที่เหมาะสมสำหรับภาพเคลื่อนไหวของปุ่ม Navbar ใช้ใน NavigationBarView แล้ว (ดูonRotationProposal())
    • เพิ่มตรรกะโหมดแนะนำ รวมถึงภาพเคลื่อนไหวพิเศษ (ดูส่วนอ้างอิงถึง Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED)
    • ใช้แฟล็กการหมุนเวียนหรือปิดใช้2 (ดู disable())
  • SystemUI/.../statusbar/phone/NavigationBarView.java:
    • ภาพเคลื่อนไหวของไอคอนปุ่มรูปแบบให้ตรงกับการหมุนเวียนที่รอดำเนินการ (โปรดดู updateRotateSuggestionButtonStyle())
    • จัดการการเปลี่ยนแปลงการแสดงปุ่ม (โปรดดู setRotateButtonVisibility()) รวมถึงตรรกะที่จะซ่อน ปุ่มหมุนหากบริการการช่วยเหลือพิเศษบางรายการทำงานอยู่ (พิจารณาการจัดอันดับกลุ่มปุ่ม Navbar ด้านขวาสุด)
  • SystemUI/res/layout/menu_ime.xml:
    • มีKeyButtonViewใหม่สำหรับปุ่มหมุน วางซ้อนอยู่เหนือเมนูและตัวเลือก IME/แป้นพิมพ์ แต่อยู่ใต้ ปุ่มการช่วยเหลือพิเศษ
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml:
    • เชิงซ้อน AnimatedVectorDrawable ที่ใช้สร้างภาพเคลื่อนไหว หมุนปุ่ม Navbar
    • การจัดรูปแบบ (ใน SystemUI/res/values/styles.xml) ใช้เพื่อ ตั้งค่ามุมเริ่มต้นและมุมสิ้นสุดของการหมุนเพื่อให้ดึงส่วนที่ถอนออกได้เหมือนกัน ที่ใช้ในการสร้างภาพเคลื่อนไหวในการหมุนเริ่มต้นและสิ้นสุดต่างๆ
    • มีการตั้งค่าการแต้มสีไอคอนผ่าน TintedKeyButtonDrawable

การใช้งาน

Android 9 มีการเปลี่ยนแปลงที่จําเป็นทั้งหมดเพื่อให้ คำแนะนำการหมุนที่ทำงานสำหรับ อุปกรณ์ที่ใช้แป้นนำทางของซอฟต์แวร์ (กลับ หน้าแรก ฯลฯ)

ผู้ผลิตอุปกรณ์ที่สร้างอุปกรณ์ที่มีคีย์การนำทางฮาร์ดแวร์ที่ต้องการ ในการใช้ฟีเจอร์นี้ จะต้องออกแบบและใช้งาน UI ระบบของตนเอง ราคาแพงหรือปิดการใช้งานคุณลักษณะ ขอแนะนำให้ใช้แพลตฟอร์มที่แนะนำ ใช้งานง่ายเมื่อถืออุปกรณ์ไว้ที่ตำแหน่ง 90o หรือ 180o ตามระบบปัจจุบัน การหมุนและเข้าถึงได้ง่าย ด้วยเหตุนี้ การใช้การแจ้งเตือน (เช่นเดียวกับที่ดำเนินการกับเครื่องมือเลือก IME/แป้นพิมพ์)

ข้อกำหนดเกี่ยวกับฮาร์ดแวร์ในการใช้ฟีเจอร์นี้จะเหมือนกับข้อกำหนด เพื่อใช้การหมุนอัตโนมัติ

จำเป็นต้องใช้เพื่อความสอดคล้องในการติดตั้งใช้งาน ค่ากำหนดการหมุนเวียนของผู้ใช้ (Settings.System.USER_ROTATION) รีเซ็ตเป็นตามปกติของอุปกรณ์ การหมุนเมื่อระบบเปลี่ยนเป็นการหมุนตามธรรมชาติของอุปกรณ์ไม่ว่าด้วยเหตุผลใดก็ตาม เมื่อหมุนอัตโนมัติปิดอยู่ การติดตั้งใช้งานที่มีให้มีการดำเนินการนี้ (ดู NavigationBarFragment.mRotationWatcher)

มี Flag ใหม่ใน 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