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

W Androidzie 11 wprowadziliśmy koncepcję dobrze zdefiniowanych typów użytkowników, które reprezentują różne grupy użytkowników dozwolone w ramach funkcji Androida dla wielu użytkowników. Dzięki tej funkcji OEM może dostosowywać wstępnie zdefiniowane typy użytkowników AOSP i definiować nowe. Więcej informacji znajdziesz w sekcji poświęconej typom użytkowników.

Na tej stronie znajdziesz szczegółowe wskazówki dotyczące implementacji, które są niezbędne do dostosowywania typów użytkowników.

Personalizacja

Aby dostosować typy użytkowników AOSP i zdefiniować nowe typy profili, producent OEM musi nałożyć config_user_types.xml odpowiednie zmiany. Plik config_user_types.xml zawiera implementację referencyjną i pełną listę atrybutów, które można skonfigurować.

Każdy atrybut, taki jak default-restrictions, który jest określony w pliku config_user_types.xml, zastępuje domyślną wartość AOSP. Każdy atrybut, który nie został określony, jest zgodny z ustawieniem domyślnym AOSP. Zmiana większości atrybutów, np. atrybutów plakietki typu profilu, wpływa na istniejących użytkowników tego typu. Ponieważ jednak default-restrictions są stosowane tylko podczas tworzenia użytkownika, zmiana tego konkretnego atrybutu nie wpłynie na zmianę pliku config_user_types.xml przez OTA nie będzie miała 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 dostosowywania poszczególnych typów użytkowników są następujące:

  • Profile można w pełni dostosowywać i definiować. W takim przypadku to producent OEM odpowiada za wprowadzenie zmian w platformie, które są wymagane do obsługi niestandardowego profilu na Androidzie, 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ć tylko ich atrybut default-restrictions.
  • Za pomocą tego mechanizmu nie można dostosować użytkownika systemowego. W tym przypadku default-restrictions można ustawić za pomocą właściwości com.android.internal.R.array.config_defaultFirstUserRestrictions. Więcej informacji znajdziesz na stronie config.xml.

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

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

<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ładzie kodu następujące typy użytkowników AOSP są dostosowywane przez modyfikację obsługiwanych właściwości.

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

    • Domyślne ograniczenie funkcji no_sms zostaje ustawione na Prawda przez określenie default-restrictions no_sms="true".
  • Użytkownik profilu android.os.usertype.profile.MANAGED:

    • Dla każdego użytkownika nadrzędnego można ustawić 2 profile. Wystarczy, że ustawisz max-allowed-per-parent='2'.
    • Atrybuty plakietki są ustawiane na odpowiednie wartości za pomocą tych elementów: icon-badge, badge-plain, badge-no-background, badge-labels, badge-colors.
    • Aby ustawić domyślne ograniczenia no_sms i no_outgoing_calls, należy określić wartość default-restrictions no_sms="true" no_outgoing_calls="true".

Znaczenie i domyślne wartości tych właściwości znajdziesz w artykułach UserTypeFactory.java i UserTypeDetails.java.

Zdefiniuj niestandardowe typy profili

Poniższa próbka kodu 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 typ profilu com.example.profilename jest zdefiniowany w taki sposób:

  • max-allowed-per-parents ma wartość 2 w przypadku 2 profili na użytkownika nadrzędnego.

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