Rotacja sugestii

W Androidzie 8.0 użytkownicy mogli przełączać się między autoobracaniem a obrotem pionowym za pomocą kafelka Szybkich ustawień lub ustawień wyświetlacza. Na Androidzie 9, zaktualizowaliśmy do orientacji pionowej, aby zapobiec niezamierzonym obróceniom, przypnij bieżącego obrotu ekranu, nawet jeśli położenie urządzenia się zmieni. Użytkownicy mogą aktywować ręcznie obrócić mapę, naciskając nowy przycisk na pasku nawigacyjnym. Zmieniliśmy nazwę trybu pionowego na blokadę obracania. Funkcja ta aktywuje się przy autoobracaniu jest wyłączony. Tryb autoobracania się nie zmienia.

Gdy urządzenie jest w trybie blokady obracania, użytkownicy mogą zablokować ekran rotacja obsługiwana przez górną, widoczną aktywność (z uwzględnieniem bieżącego systemu) ). Jeśli najwyższa aktywność może zostać wyrenderowana w wielu rotacjach w regionie w trybie autoobracania, te same opcje powinny być dostępne w trybie blokady obracania z kilkoma wyjątkami na podstawie screenOrientation danych o aktywności .

Tryb blokady obracania wyświetla przycisk na pasku nawigacyjnym podczas obrotu urządzenia zmian. W tym celu czujnik orientacji urządzenia musi pozostawać aktywny. nawet przy wyłączonym autoobracaniu. Kliknięcie tego przycisku powoduje ustawienie rotacji użytkownika (Settings.System.USER_ROTATION). WindowManager korzysta z tego oraz inne szczegóły głównych aktywności i stanu systemu, aby zmienić obrót systemu. WindowManager nadal używa rotacji użytkowników podczas decydowania, w jakiej rotacji ma się wyrenderować system przy przechodzeniu do inną aktywność.

Ten GIF przedstawia telefon w orientacji poziomej z włączonym ekranem
       do orientacji pionowej. Pojawi się ikona z pytaniem użytkownika, czy chce
       zmienić orientację ekranu na poziomą.
Rysunek 1. Obróć przycisk sugestii za pomocą opcji „Przesuń palcem na przycisku ekranu głównego”. z obsługą gestów
.

Przy przechodzeniu między aktywnościami należy zachować preferencje rotacji użytkowników. Większość użytkowników telefonów chce tylko przez krótki czas patrzeć w orientacji poziomej, ale dodaliśmy też naturalną orientację. Rotacja użytkowników jest zresetowany do naturalnej orientacji urządzenia za każdym razem, obrót systemu zmienia się do naturalnej orientacji urządzenia. Na większości telefonów naturalna orientacja urządzenia to pionowa (0o). Resetuję rotację użytkowników często zdarza się, gdy używasz aplikacji tylko w orientacji pionowej, blokujesz telefon powrót do obszaru roboczego Menu z aplikacjami.

Interakcje użytkowników związane z rotacją nie zmieniły się w ciągu ostatniej dekady. Użytkownicy mogą mieć trudności z odkryciem tej funkcji, biorąc pod uwagę wcześniejsze doświadczenia z rotacją. i umiejscowienie przycisków na pasku nawigacyjnym. Dlatego dodaliśmy do przycisku Obróć, który jest podświetlony, gdy się pojawi. Wprowadzenie w trybie działania ma miejsce tylko kilka pierwszych interakcji z przyciskami, po których upływie tryb wprowadzenia jest wyłączony.

Źródło

Obsługa sugestii dotyczących rotacji została dodana do tych elementów: Android 9. Większość zmian jest zawarta w .

  • services/.../server/policy/PhoneWindowManager.java:
    • Elementy przykuwające uwagę na dane wyjściowe z WindowOrientationListener (MyOrientationListener, odpowiada za monitorowanie aby określić, czy urządzenie zostało obrócone).
    • Utrzymuje aktywność WindowOrientationListener nawet wtedy, gdy autoobracanie jest wyłączone (patrz needSensorRunningLp())
    • Oblicza rotację systemu z uwzględnieniem preferencji rotacji użytkowników, góra Ustawienia aktywności i stan systemu w screenOrientation (zobacz: rotationForOrientationLw())
    • Określ, czy najwyższa aktywność może być rotowana do danej rotacji (patrz: isRotationChoicePossible()).
  • SystemUI/.../statusbar/phone/NavigationBarFragment:
    • Określa, czy przycisk paska nawigacyjnego ma być wyświetlany podczas obrotu sugerowane wywołania zwrotne od PhoneWindowManager (zobacz: onRotationProposal())
    • Ukrywa przycisk obracania paska nawigacyjnego (patrz wywołania funkcji setRotateSuggestionButtonState(false)).
    • Obsługuje czas oczekiwania przycisku, łącznie ze specjalnymi przypadkami, gdy pasek nawigacyjny jest ukryty (zwykle jest widoczny na pełnym ekranie)
    • Resetuje ustawienia użytkownika po powrocie do trybu naturalnego urządzenia orientacja (mRotationWatcher)
    • Wybiera odpowiedni styl animacji przycisku na pasku nawigacyjnym, zastosowano w: NavigationBarView (zobacz: onRotationProposal())
    • Dodaje funkcje logiczne w trybie wprowadzenia, w tym specjalistyczną animację. (zobacz odniesienia do Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED).
    • Implementuje flagę rotacji wyłączania2 (patrz disable()).
  • SystemUI/.../statusbar/phone/NavigationBarView.java:
    • Animacja ikony przycisku Style zgodnie z oczekiwaniem na obrót (patrz updateRotateSuggestionButtonStyle()).
    • Zmiany widoczności przycisku uchwytów (patrz setRotateButtonVisibility()), w tym logikę ukrywania. przycisk obracania, jeśli aktywne są określone usługi ułatwień dostępu. (biorąc pod uwagę pozycję stosów przycisków umieszczonych najdalej na prawo od paska nawigacyjnego)
  • SystemUI/res/layout/menu_ime.xml:
    • Zawiera nowy element KeyButtonView dla przycisku obracania, umieszczone nad menu oraz edytorem IME/klawiaturą, ale poniżej Przycisk ułatwień dostępu
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml:
    • Złożony element AnimatedVectorDrawable użyty do animacji przycisk obracania paska nawigacyjnego
    • Styl (w języku: SystemUI/res/values/styles.xml) jest używany do: ustaw początkowy i końcowy kąt obrotu tak, aby można było rysować ten sam element służy do animowania różnych obrotów początkowych i końcowych
    • Odcień ikony można ustawić w: TintedKeyButtonDrawable

Implementacja

Android 9 zawiera wszystkie zmiany niezbędne do sugestie dotyczące rotacji działają na urządzeniach, które korzystają z oprogramowanych klawiszy nawigacyjnych (wstecz, ekran główny itp.).

producenci urządzeń, którzy opracowują własne urządzenia ze sprzętowymi klawiszami nawigacyjnymi, Aby wdrożyć tę funkcję, muszą zaprojektować i wdrożyć własny interfejs użytkownika lub wyłączyć tę funkcję. Zaleca się, aby wszelkie wprowadzane powierzchnie być łatwe w obsłudze, gdy urządzenie jest ustawione pod kątem 90o lub 180o w stosunku do obecnego systemu; i jest szybko dostępne. Dlatego korzystanie z powiadomień (tak jak w przypadku edytora IME/selektora klawiatury) nie jest zalecany.

Wymagania sprzętowe potrzebne do korzystania z tej funkcji są takie same jak wymagania sprzętowe aby użyć autoobracania.

Dla spójności implementacji niezbędna jest preferencja rotacji użytkowników (Settings.System.USER_ROTATION) jest resetowany do naturalnych ustawień urządzenia gdy system z dowolnego powodu zmieni się na naturalną obrót urządzenia gdy autoobracanie jest wyłączone. Zajmuje to udostępniona implementacja (zobacz NavigationBarFragment.mRotationWatcher).

StatusBarManager.disable2 ma nową flagę, która tymczasowo zapobiega wyświetlaniu sugestii dotyczących rotacji. Zobacz StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS Ta flaga musi być są respektowane we wszystkich implementacjach, jakie są używane przez kluczowe aplikacje systemowe, Kreator konfiguracji. Udostępniona implementacja to umożliwia (zobacz NavigationBarFragment.disable()).

Zdecydowanie zalecamy włączenie tej funkcji i przestrzeganie zasad AOSP i implementacji, o ile to możliwe. Chcemy, aby rotacja przebiegła podobnie między urządzeniami, co odzwierciedla jednolitość na większości obecnie telefonów. między autoobracaniem a blokadą w orientacji pionowej.

Dostosowywanie

Sugestie dotyczące obracania wyświetlają się tylko w trybie blokady obrotu (autoobracanie jest wyłączone), można wybrać, czy funkcja ma być domyślnie włączona w przypadku nowych instalacji, domyślnie wyłączone autoobracanie. Zobacz def_accelerometer_rotation in SettingsProvider/res/values/defaults.xml, aby wprowadzić zmiany domyślne.

Użytkownicy mogą łatwo zmienić to, czy autoobracanie jest włączone, czy wyłączone (niezależnie od ustawienia domyślnego). używając kafelka obracania w Szybkich ustawieniach lub ustawieniach wyświetlacza.

Weryfikacja

W ramach testów funkcję tę można wyłączyć i włączyć przez zmianę bramki Wartość: Settings.Secure. Najłatwiej to zrobić, uruchamiając następujące polecenie z instancji adb z podwyższonymi uprawnieniami:

adb shell settings put secure show_rotation_suggestions <x>

Ustaw x na 0 (wyłączone), a 1 na „włączone”.

Na potrzeby testów tryb wprowadzenia można zresetować, modyfikując powiązane Wartość: Settings.Secure. Najłatwiej to zrobić, uruchamiając następujące polecenie z instancji adb z podwyższonymi uprawnieniami:

adb shell settings put secure num_rotation_suggestions_accepted 0