Wdrażanie niestandardowych typów użytkowników

W systemie Android 11 wprowadzono koncepcję dobrze zdefiniowanych typów użytkowników, reprezentujących wszystkie typy użytkowników dozwolone przez funkcję wielu użytkowników systemu Android. Dzięki tej funkcji producenci OEM mogą dostosowywać predefiniowane typy użytkowników AOSP i definiować nowe typy profili. Aby uzyskać więcej informacji, zobacz sekcję dotyczącą typów użytkowników .

Na tej stronie szczegółowo opisano wytyczne dotyczące implementacji potrzebne do dostosowania typów użytkowników.

Dostosowywanie

Aby dostosować typy użytkowników AOSP i zdefiniować nowe typy profili, producent OEM musi nałożyć na plik config_user_types.xml żądane dostosowania. Plik config_user_types.xml zawiera referencyjną implementację i obszerną listę konfigurowalnych atrybutów.

Każdy atrybut, taki jak default-restrictions określony w pliku config_user_types.xml , zastępuje wartość domyślną AOSP. Każdy atrybut, który nie jest określony, jest zgodny z wartością domyślną AOSP. Zmiana większości atrybutów, takich jak atrybuty plakietki typu profilu, wpływa na istniejących wcześniej użytkowników tego typu użytkownika. Ponieważ jednak default-restrictions są stosowane tylko w momencie tworzenia użytkownika, modyfikacja tego konkretnego atrybutu w przypadku zmiany pliku config_user_types.xml przez OTA nie ma wpływu na istniejących wcześniej użytkowników. Podobnie określenie maksymalnej liczby użytkowników ma zastosowanie tylko przy tworzeniu nowych użytkowników; istniejący użytkownicy nie są usuwani.

Aktualne ograniczenia dostosowywania dla każdego typu użytkownika są następujące:

  • Profile można w pełni dostosowywać i definiować. W takim przypadku producent OEM jest odpowiedzialny za wprowadzenie modyfikacji platformy wymaganych do obsługi jego niestandardowego profilu w systemie Android, ponieważ AOSP obsługuje tylko wstępnie zdefiniowane typy użytkowników AOSP.
  • Nie można zdefiniować pełnych użytkowników i można dostosować jedynie ich atrybut default-restrictions .
  • Za pomocą tego mechanizmu nie można personalizować użytkownika systemu. W takim przypadku default-restrictions można ustawić za pomocą com.android.internal.R.array.config_defaultFirstUserRestrictions . Więcej informacji można znaleźć w config.xml .

Zmodyfikuj istniejące typy użytkowników

Istniejące typy użytkowników można dostosować, zastępując ich atrybuty, jak pokazano w poniższym przykładzie kodu.

<user-types version="0">
    <full-type name="android.os.usertype.full.SECONDARY" >
        <default-restrictions no_sms="true" />
    </full-type>

    <profile-type
        name='android.os.usertype.profile.MANAGED'
        max-allowed-per-parent='2'
        icon-badge='@android:drawable/ic_corp_icon_badge_case'
        badge-plain='@android:drawable/ic_corp_badge_case'
        badge-no-background='@android:drawable/ic_corp_badge_no_background' >
        <badge-labels>
            <item res='@android:string/managed_profile_label_badge' />
            <item res='@android:string/managed_profile_label_badge_2' />
        </badge-labels>
        <badge-colors>
            <item res='@android:color/profile_badge_1' />
            <item res='@android:color/profile_badge_2' />
        </badge-colors>
        <default-restrictions no_sms="true" no_outgoing_calls="true" />
    </profile-type>
</user-types>

W tym przykładowym kodzie następujące typy użytkowników AOSP są dostosowywane poprzez modyfikację obsługiwanych właściwości.

  • Pełny użytkownik android.os.usertype.full.SECONDARY :

    • Domyślne ograniczenie no_sms jest ustawiane na true poprzez określenie default-restrictions no_sms="true" .
  • Profil użytkownika android.os.usertype.profile.MANAGED :

    • Dla każdego użytkownika nadrzędnego dozwolone są dwa profile, ustawiając max-allowed-per-parent='2' .
    • Atrybuty identyfikatora są ustawiane na żądane wartości za pomocą icon-badge , badge-plain , badge-no-background , badge-labels , badge-colors .
    • Domyślne ograniczenia no_sms i no_outgoing_calls są ustawiane na true poprzez określenie default-restrictions no_sms="true" no_outgoing_calls="true" .

Znaczenie i wartości domyślne tych właściwości można znaleźć w plikach UserTypeFactory.java i UserTypeDetails.java .

Zdefiniuj niestandardowe typy profili

Poniższy przykładowy kod pokazuje, jak definiowane są nowe, niestandardowe typy profili.

<user-types version="1">
    <profile-type
        name="com.example.profilename"
        max-allowed-per-parent="2" />

    <change-user-type
        from="android.os.usertype.profile.MANAGED"
        to="com.example.profilename"
        whenVersionLeq="1" />
</user-types>

W tym przykładzie kodu typ profilu com.example.profilename jest zdefiniowany w następujący sposób:

  • max-allowed-per-parents jest ustawione na 2 dla dwóch profili na użytkownika-rodzica.

  • change-user-type : konwertuje wszystkie istniejące profile zarządzane typu android.os.usertype.profile.MANAGED na nowy typ com.example.profilename podczas aktualizacji urządzenia z wersji user-type <= 1 za pośrednictwem OTA.