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

W Androidzie 11 wprowadzono koncepcję dobrze zdefiniowanych typów użytkowników, które reprezentują wszystkie różne typy użytkowników dozwolone przez funkcję wielu użytkowników w Androidzie. Dzięki tej funkcji producenci OEM mogą dostosowywać predefiniowane typy użytkowników AOSP i definiować nowe typy profili. Więcej informacji znajdziesz w sekcji Typy użytkowników.

Na tej stronie znajdziesz szczegółowe wytyczne dotyczące implementacji, które są 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ć config_user_types.xml z preferowanymi dostosowaniami. Plik config_user_types.xml zawiera implementację referencyjną i pełną listę atrybutów, które można skonfigurować.

Każdy atrybut, np. default-restrictions, który jest określony w pliku config_user_types.xml, zastępuje domyślne ustawienie AOSP. Każdy atrybut, który nie jest określony, jest zgodny z domyślnym ustawieniem AOSP. Zmiana większości atrybutów, np. atrybutów plakietki typu profilu, wpływa na użytkowników, którzy już korzystają z tego typu. Ponieważ jednak default-restrictions są stosowane tylko w momencie tworzenia użytkownika, zmiana tego konkretnego atrybutu w przypadku zmiany pliku config_user_types.xml przez OTA nie ma wpływu na istniejących użytkowników. Podobnie określenie maksymalnej liczby użytkowników ma zastosowanie tylko podczas tworzenia nowych użytkowników. Istniejący użytkownicy nie są usuwani.

Obecne ograniczenia dotyczące dostosowywania dla poszczególnych typów użytkowników są następujące:

  • Profile można w pełni dostosowywać i definiować. W takim przypadku producent OEM jest odpowiedzialny za wprowadzenie zmian w platformie wymaganych do obsługi niestandardowego profilu w Androidzie, ponieważ AOSP obsługuje tylko predefiniowane typy użytkowników AOSP.
  • Nie można definiować pełnych użytkowników, a dostosowywać można tylko ich atrybut default-restrictions.
  • Nie można dostosować użytkownika systemu za pomocą tego mechanizmu. W tym przypadku wartość default-restrictions można ustawić za pomocą parametru com.android.internal.R.array.config_defaultFirstUserRestrictions. Więcej informacji znajdziesz w sekcji config.xml.

Modyfikowanie istniejących typów użytkowników

Istniejące typy użytkowników można dostosowywać, zastępując ich atrybuty, jak pokazano w tym 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 dostosowano te typy użytkowników AOSP, modyfikując obsługiwane właściwości:

  • Użytkownik z pełnym dostępem android.os.usertype.full.SECONDARY:

    • Domyślne ograniczenie no_sms jest ustawione na wartość „true” (prawda) przez określenie default-restrictions no_sms="true".
  • Użytkownik profilu android.os.usertype.profile.MANAGED:

    • Każdy użytkownik będący rodzicem może mieć 2 profile, jeśli ustawi max-allowed-per-parent='2'.
    • Atrybuty plakietki są ustawione na wybrane wartości za pomocą icon-badge, badge-plain, badge-no-background, badge-labels, badge-colors.
    • Domyślne ograniczenia no_smsno_outgoing_calls są ustawione na wartość true przez określenie default-restrictions no_sms="true" no_outgoing_calls="true".

Znaczenie i wartości domyślne tych właściwości znajdziesz w sekcjach UserTypeFactory.javaUserTypeDetails.java.

Definiowanie niestandardowych typów profili

Poniższy przykładowy kod pokazuje, jak definiuje się 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ładowym kodzie com.example.profilename typ profilu jest zdefiniowany w ten sposób:

  • max-allowed-per-parents jest ustawiona na 2 w przypadku 2 profili na użytkownika będącego rodzicem.

  • change-user-type: podczas uaktualniania urządzenia z wersji user-type systemu <= 1 za pomocą aktualizacji OTA przekształca wszystkie istniejące zarządzane profile typu android.os.usertype.profile.MANAGED w nowy typ com.example.profilename.