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

Android 11 wprowadził pojęcie dobrze zdefiniowanych typów użytkowników, które reprezentują wszystkie typy użytkowników dozwolone przez funkcję Androida dotyczącą wielu użytkowników. Dzięki tej funkcji producenci OEM mogą dostosowywać wstępnie zdefiniowane 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 wskazówki dotyczące implementacji, które pomogą Ci dostosować typy 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.xmlna preferowane ustawienia. Plik config_user_types.xml zawiera implementację referencyjną i obszerną listę atrybutów, które można konfigurować.

Każdy atrybut, np. default-restrictions, określony w pliku config_user_types.xml, zastępuje domyślne ustawienie AOSP. Każdy atrybut, który nie jest określony, podlega ustawieniom domyślnym AOSP. Zmiana większości atrybutów, np. atrybutów plakietki typu profilu, ma wpływ na użytkowników tego typu, którzy korzystali z usługi przed wprowadzeniem zmian. Ponieważ jednak atrybuty default-restrictions są stosowane tylko w momencie tworzenia użytkownika, zmiana tego atrybutu w przypadku modyfikacji pliku config_user_types.xml za pomocą OTA nie będzie miała wpływu na już istniejących użytkowników. Podobnie określenie maksymalnej liczby użytkowników ma zastosowanie tylko podczas tworzenia nowych użytkowników; dotychczasowi użytkownicy nie są usuwani.

Obecne ograniczenia personalizacji dla poszczególnych typów użytkowników:

  • Profile można w pełni dostosowywać i definiować. W takim przypadku producent OEM jest odpowiedzialny za wprowadzenie zmian w platformie, które umożliwią obsługę 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, a jedynie ich atrybut default-restrictions można dostosować.
  • Za pomocą tego mechanizmu nie można dostosować użytkownika systemu. W takim przypadku możesz ustawić parametr default-restrictions 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ładzie kodu dostosowujemy 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 „true” (prawda) przez podanie wartości default-restrictions no_sms="true".
  • Użytkownik profilu android.os.usertype.profile.MANAGED:

    • Każdy rodzic może mieć 2 profile, jeśli ustawi max-allowed-per-parent='2'.
    • Atrybuty plakietki są ustawiane na wybrane wartości za pomocą atrybutów icon-badge, badge-plain, badge-no-background, badge-labels i badge-colors.
    • Domyślne ograniczenia no_sms i no_outgoing_calls mają wartość true, jeśli określisz je za pomocą parametru default-restrictions no_sms="true" no_outgoing_calls="true".

Znaczenie i wartości domyślne tych właściwości znajdziesz w elementach 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ładzie kodu typ profilu com.example.profilename jest zdefiniowany w ten sposób:

  • max-allowed-per-parents jest ustawiony na 2 dla 2 profili na rodzica.

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