Loading res/values/strings.xml +8 −0 Original line number Diff line number Diff line Loading @@ -4456,6 +4456,10 @@ <string name="keyboard_shortcuts_helper">Keyboard shortcuts helper</string> <!-- Summary text for the 'keyboard shortcuts helper' dialog. [CHAR LIMIT=100] --> <string name="keyboard_shortcuts_helper_summary">Display available shortcuts</string> <!-- Title for the 'Work profile' preference category inside Languages and inputs'. [CHAR LIMIT=45] --> <string name="language_and_input_for_work_category_title">Work profile</string> <!-- Title for the 'Virtual keyboards for work' preference. [CHAR LIMIT=45] --> <string name="virtual_keyboards_for_work_title">Virtual keyboard for work</string> <!-- Summary text for keyboards when no layout has been selected. [CHAR LIMIT=35] --> <string name="default_keyboard_layout">Default</string> Loading Loading @@ -4487,6 +4491,8 @@ <!-- User dictionary settings --><skip /> <!-- User dictionary settings. The title of the list item to go into the Personal dictionary settings screen. [CHAR LIMIT=35] --> <string name="user_dict_settings_title">Personal dictionary</string> <!-- Title for the 'Spell checker for work' preference. [CHAR LIMIT=45] --> <string name="user_dict_settings_for_work_title">Personal dictionary for work</string> <!-- User dictionary settings. The summary of the list item to go into the Personal dictionary settings screen. --> <string name="user_dict_settings_summary">""</string> <!-- User dictionary settings. The title of the menu item to add a new word to the user dictionary. --> Loading Loading @@ -6376,6 +6382,8 @@ <!-- Title for spell checker settings --> <string name="spellcheckers_settings_title">Spell checker</string> <!-- Title for spell checker settings for work [CHAR LIMIT=45]--> <string name="spellcheckers_settings_for_work_title">Spell checker for work</string> <!-- Prompt for the user to enter their current full-backup password --> <string name="current_backup_pw_prompt">Type your current full backup password here</string> res/xml/language_and_input.xml +23 −0 Original line number Diff line number Diff line Loading @@ -92,4 +92,27 @@ android:summary="@string/vibrate_input_devices_summary" settings:controller="com.android.settings.inputmethod.GameControllerPreferenceController" /> <com.android.settings.widget.WorkOnlyCategory android:key="language_and_input_for_work_category" android:title="@string/language_and_input_for_work_category_title"> <Preference android:key="virtual_keyboards_for_work_pref" android:title="@string/virtual_keyboards_for_work_title" android:fragment="com.android.settings.inputmethod.VirtualKeyboardFragment" settings:controller="com.android.settings.inputmethod.VirtualKeyboardForWorkPreferenceController" /> <Preference android:key="spellcheckers_settings_for_work_pref" android:title="@string/spellcheckers_settings_for_work_title" android:fragment="com.android.settings.inputmethod.SpellCheckersSettings" settings:controller="com.android.settings.language.UserDictionaryForWorkPreferenceController" /> <Preference android:key="user_dictionary_settings_for_work_pref" android:title="@string/user_dict_settings_for_work_title" android:fragment="com.android.settings.inputmethod.UserDictionaryList" settings:controller="com.android.settings.inputmethod.SpellCheckerForWorkPreferenceController" /> </com.android.settings.widget.WorkOnlyCategory> </PreferenceScreen> src/com/android/settings/core/WorkProfilePreferenceController.java 0 → 100644 +97 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.android.settings.core; import android.content.Context; import android.os.UserHandle; import android.os.UserManager; import android.text.TextUtils; import androidx.annotation.Nullable; import androidx.preference.Preference; import com.android.settings.Utils; /** * Abstract class to provide additional logic to deal with optional {@link Preference} entries that * are used only when work profile is enabled. * * <p>TODO(b/123376083): Consider merging this into {@link BasePreferenceController}.</p> */ public abstract class WorkProfilePreferenceController extends BasePreferenceController { @Nullable private final UserHandle mWorkProfileUser; /** * Constructor of {@link WorkProfilePreferenceController}. Called by * {@link BasePreferenceController#createInstance(Context, String)} through reflection. * * @param context {@link Context} to instantiate this controller. * @param preferenceKey Preference key to be associated with the {@link Preference}. */ public WorkProfilePreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); mWorkProfileUser = Utils.getManagedProfile(UserManager.get(context)); } /** * @return Non-{@code null} {@link UserHandle} when a work profile is enabled. * Otherwise {@code null}. */ @Nullable protected UserHandle getWorkProfileUser() { return mWorkProfileUser; } /** * Called back from {@link #handlePreferenceTreeClick(Preference)} to associate source metrics * category. * * @return One of {@link android.app.settings.SettingsEnums}. */ protected abstract int getSourceMetricsCategory(); /** * {@inheritDoc} * * <p>When you override this method, do not forget to check {@link #getWorkProfileUser()} to * see if work profile user actually exists or not.</p> */ @AvailabilityStatus @Override public int getAvailabilityStatus() { return mWorkProfileUser != null ? AVAILABLE : DISABLED_FOR_USER; } /** * Launches the specified fragment for the work profile user if the associated * {@link Preference} is clicked. Otherwise just forward it to the super class. * * @param preference the preference being clicked. * @return {@code true} if handled. */ public boolean handlePreferenceTreeClick(Preference preference) { if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) { return super.handlePreferenceTreeClick(preference); } new SubSettingLauncher(preference.getContext()) .setDestination(preference.getFragment()) .setSourceMetricsCategory(getSourceMetricsCategory()) .setArguments(preference.getExtras()) .setUserHandle(mWorkProfileUser) .launch(); return true; } } src/com/android/settings/inputmethod/SpellCheckerForWorkPreferenceController.java 0 → 100644 +51 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.inputmethod; import android.app.settings.SettingsEnums; import android.content.Context; import android.view.inputmethod.InputMethodSystemProperty; import com.android.settings.R; import com.android.settings.core.WorkProfilePreferenceController; /** * Preference controller for "Spell checker for work". * * @see SpellCheckerPreferenceController */ public final class SpellCheckerForWorkPreferenceController extends WorkProfilePreferenceController { public SpellCheckerForWorkPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } @Override protected int getSourceMetricsCategory() { return SettingsEnums.SETTINGS_LANGUAGE_CATEGORY; } @AvailabilityStatus @Override public int getAvailabilityStatus() { if (!mContext.getResources().getBoolean(R.bool.config_show_spellcheckers_settings) || !InputMethodSystemProperty.PER_PROFILE_IME_ENABLED) { return UNSUPPORTED_ON_DEVICE; } return super.getAvailabilityStatus(); } } src/com/android/settings/inputmethod/VirtualKeyboardForWorkPreferenceController.java 0 → 100644 +48 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.inputmethod; import android.app.settings.SettingsEnums; import android.content.Context; import android.view.inputmethod.InputMethodSystemProperty; import com.android.settings.R; import com.android.settings.core.WorkProfilePreferenceController; public final class VirtualKeyboardForWorkPreferenceController extends WorkProfilePreferenceController { public VirtualKeyboardForWorkPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } @Override protected int getSourceMetricsCategory() { return SettingsEnums.SETTINGS_LANGUAGE_CATEGORY; } @AvailabilityStatus @Override public int getAvailabilityStatus() { if (!mContext.getResources().getBoolean(R.bool.config_show_virtual_keyboard_pref) || !InputMethodSystemProperty.PER_PROFILE_IME_ENABLED) { return UNSUPPORTED_ON_DEVICE; } return super.getAvailabilityStatus(); } } Loading
res/values/strings.xml +8 −0 Original line number Diff line number Diff line Loading @@ -4456,6 +4456,10 @@ <string name="keyboard_shortcuts_helper">Keyboard shortcuts helper</string> <!-- Summary text for the 'keyboard shortcuts helper' dialog. [CHAR LIMIT=100] --> <string name="keyboard_shortcuts_helper_summary">Display available shortcuts</string> <!-- Title for the 'Work profile' preference category inside Languages and inputs'. [CHAR LIMIT=45] --> <string name="language_and_input_for_work_category_title">Work profile</string> <!-- Title for the 'Virtual keyboards for work' preference. [CHAR LIMIT=45] --> <string name="virtual_keyboards_for_work_title">Virtual keyboard for work</string> <!-- Summary text for keyboards when no layout has been selected. [CHAR LIMIT=35] --> <string name="default_keyboard_layout">Default</string> Loading Loading @@ -4487,6 +4491,8 @@ <!-- User dictionary settings --><skip /> <!-- User dictionary settings. The title of the list item to go into the Personal dictionary settings screen. [CHAR LIMIT=35] --> <string name="user_dict_settings_title">Personal dictionary</string> <!-- Title for the 'Spell checker for work' preference. [CHAR LIMIT=45] --> <string name="user_dict_settings_for_work_title">Personal dictionary for work</string> <!-- User dictionary settings. The summary of the list item to go into the Personal dictionary settings screen. --> <string name="user_dict_settings_summary">""</string> <!-- User dictionary settings. The title of the menu item to add a new word to the user dictionary. --> Loading Loading @@ -6376,6 +6382,8 @@ <!-- Title for spell checker settings --> <string name="spellcheckers_settings_title">Spell checker</string> <!-- Title for spell checker settings for work [CHAR LIMIT=45]--> <string name="spellcheckers_settings_for_work_title">Spell checker for work</string> <!-- Prompt for the user to enter their current full-backup password --> <string name="current_backup_pw_prompt">Type your current full backup password here</string>
res/xml/language_and_input.xml +23 −0 Original line number Diff line number Diff line Loading @@ -92,4 +92,27 @@ android:summary="@string/vibrate_input_devices_summary" settings:controller="com.android.settings.inputmethod.GameControllerPreferenceController" /> <com.android.settings.widget.WorkOnlyCategory android:key="language_and_input_for_work_category" android:title="@string/language_and_input_for_work_category_title"> <Preference android:key="virtual_keyboards_for_work_pref" android:title="@string/virtual_keyboards_for_work_title" android:fragment="com.android.settings.inputmethod.VirtualKeyboardFragment" settings:controller="com.android.settings.inputmethod.VirtualKeyboardForWorkPreferenceController" /> <Preference android:key="spellcheckers_settings_for_work_pref" android:title="@string/spellcheckers_settings_for_work_title" android:fragment="com.android.settings.inputmethod.SpellCheckersSettings" settings:controller="com.android.settings.language.UserDictionaryForWorkPreferenceController" /> <Preference android:key="user_dictionary_settings_for_work_pref" android:title="@string/user_dict_settings_for_work_title" android:fragment="com.android.settings.inputmethod.UserDictionaryList" settings:controller="com.android.settings.inputmethod.SpellCheckerForWorkPreferenceController" /> </com.android.settings.widget.WorkOnlyCategory> </PreferenceScreen>
src/com/android/settings/core/WorkProfilePreferenceController.java 0 → 100644 +97 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.android.settings.core; import android.content.Context; import android.os.UserHandle; import android.os.UserManager; import android.text.TextUtils; import androidx.annotation.Nullable; import androidx.preference.Preference; import com.android.settings.Utils; /** * Abstract class to provide additional logic to deal with optional {@link Preference} entries that * are used only when work profile is enabled. * * <p>TODO(b/123376083): Consider merging this into {@link BasePreferenceController}.</p> */ public abstract class WorkProfilePreferenceController extends BasePreferenceController { @Nullable private final UserHandle mWorkProfileUser; /** * Constructor of {@link WorkProfilePreferenceController}. Called by * {@link BasePreferenceController#createInstance(Context, String)} through reflection. * * @param context {@link Context} to instantiate this controller. * @param preferenceKey Preference key to be associated with the {@link Preference}. */ public WorkProfilePreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); mWorkProfileUser = Utils.getManagedProfile(UserManager.get(context)); } /** * @return Non-{@code null} {@link UserHandle} when a work profile is enabled. * Otherwise {@code null}. */ @Nullable protected UserHandle getWorkProfileUser() { return mWorkProfileUser; } /** * Called back from {@link #handlePreferenceTreeClick(Preference)} to associate source metrics * category. * * @return One of {@link android.app.settings.SettingsEnums}. */ protected abstract int getSourceMetricsCategory(); /** * {@inheritDoc} * * <p>When you override this method, do not forget to check {@link #getWorkProfileUser()} to * see if work profile user actually exists or not.</p> */ @AvailabilityStatus @Override public int getAvailabilityStatus() { return mWorkProfileUser != null ? AVAILABLE : DISABLED_FOR_USER; } /** * Launches the specified fragment for the work profile user if the associated * {@link Preference} is clicked. Otherwise just forward it to the super class. * * @param preference the preference being clicked. * @return {@code true} if handled. */ public boolean handlePreferenceTreeClick(Preference preference) { if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) { return super.handlePreferenceTreeClick(preference); } new SubSettingLauncher(preference.getContext()) .setDestination(preference.getFragment()) .setSourceMetricsCategory(getSourceMetricsCategory()) .setArguments(preference.getExtras()) .setUserHandle(mWorkProfileUser) .launch(); return true; } }
src/com/android/settings/inputmethod/SpellCheckerForWorkPreferenceController.java 0 → 100644 +51 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.inputmethod; import android.app.settings.SettingsEnums; import android.content.Context; import android.view.inputmethod.InputMethodSystemProperty; import com.android.settings.R; import com.android.settings.core.WorkProfilePreferenceController; /** * Preference controller for "Spell checker for work". * * @see SpellCheckerPreferenceController */ public final class SpellCheckerForWorkPreferenceController extends WorkProfilePreferenceController { public SpellCheckerForWorkPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } @Override protected int getSourceMetricsCategory() { return SettingsEnums.SETTINGS_LANGUAGE_CATEGORY; } @AvailabilityStatus @Override public int getAvailabilityStatus() { if (!mContext.getResources().getBoolean(R.bool.config_show_spellcheckers_settings) || !InputMethodSystemProperty.PER_PROFILE_IME_ENABLED) { return UNSUPPORTED_ON_DEVICE; } return super.getAvailabilityStatus(); } }
src/com/android/settings/inputmethod/VirtualKeyboardForWorkPreferenceController.java 0 → 100644 +48 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.inputmethod; import android.app.settings.SettingsEnums; import android.content.Context; import android.view.inputmethod.InputMethodSystemProperty; import com.android.settings.R; import com.android.settings.core.WorkProfilePreferenceController; public final class VirtualKeyboardForWorkPreferenceController extends WorkProfilePreferenceController { public VirtualKeyboardForWorkPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } @Override protected int getSourceMetricsCategory() { return SettingsEnums.SETTINGS_LANGUAGE_CATEGORY; } @AvailabilityStatus @Override public int getAvailabilityStatus() { if (!mContext.getResources().getBoolean(R.bool.config_show_virtual_keyboard_pref) || !InputMethodSystemProperty.PER_PROFILE_IME_ENABLED) { return UNSUPPORTED_ON_DEVICE; } return super.getAvailabilityStatus(); } }