Loading res/xml/keyboard_layout_picker_fragment.xml 0 → 100644 +23 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2018 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. --> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto" android:key="keyboard_layout_picker" android:title="@string/keyboard_layout_picker_title" settings:controller="com.android.settings.inputmethod.KeyboardLayoutPickerController"> </PreferenceScreen> src/com/android/settings/inputmethod/KeyboardLayoutPickerController.java 0 → 100644 +162 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 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.Fragment; import android.content.Context; import android.hardware.input.InputDeviceIdentifier; import android.hardware.input.InputManager; import android.hardware.input.KeyboardLayout; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.view.InputDevice; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class KeyboardLayoutPickerController extends BasePreferenceController implements InputManager.InputDeviceListener, LifecycleObserver, OnStart, OnStop { private final InputManager mIm; private final Map<SwitchPreference, KeyboardLayout> mPreferenceMap; private Fragment mParent; private int mInputDeviceId; private InputDeviceIdentifier mInputDeviceIdentifier; private KeyboardLayout[] mKeyboardLayouts; private PreferenceScreen mScreen; public KeyboardLayoutPickerController(Context context, String key) { super(context, key); mIm = (InputManager) context.getSystemService(Context.INPUT_SERVICE); mInputDeviceId = -1; mPreferenceMap = new HashMap<>(); } public void initialize(Fragment parent, InputDeviceIdentifier inputDeviceIdentifier) { mParent = parent; mInputDeviceIdentifier = inputDeviceIdentifier; mKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice(mInputDeviceIdentifier); Arrays.sort(mKeyboardLayouts); } @Override public void onStart() { mIm.registerInputDeviceListener(this, null); final InputDevice inputDevice = mIm.getInputDeviceByDescriptor(mInputDeviceIdentifier.getDescriptor()); if (inputDevice == null) { mParent.getActivity().finish(); return; } mInputDeviceId = inputDevice.getId(); updateCheckedState(); } @Override public void onStop() { mIm.unregisterInputDeviceListener(this); mInputDeviceId = -1; } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mScreen = screen; createPreferenceHierarchy(); } @Override public int getAvailabilityStatus() { return AVAILABLE; } @Override public boolean handlePreferenceTreeClick(Preference preference) { if (!(preference instanceof SwitchPreference)) { return false; } final SwitchPreference switchPref = (SwitchPreference) preference; final KeyboardLayout layout = mPreferenceMap.get(switchPref); if (layout != null) { final boolean checked = switchPref.isChecked(); if (checked) { mIm.addKeyboardLayoutForInputDevice(mInputDeviceIdentifier, layout.getDescriptor()); } else { mIm.removeKeyboardLayoutForInputDevice(mInputDeviceIdentifier, layout.getDescriptor()); } } return true; } @Override public void onInputDeviceAdded(int deviceId) { } @Override public void onInputDeviceRemoved(int deviceId) { if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) { mParent.getActivity().finish(); } } @Override public void onInputDeviceChanged(int deviceId) { if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) { updateCheckedState(); } } private void updateCheckedState() { final String[] enabledKeyboardLayouts = mIm.getEnabledKeyboardLayoutsForInputDevice( mInputDeviceIdentifier); Arrays.sort(enabledKeyboardLayouts); for (Map.Entry<SwitchPreference, KeyboardLayout> entry : mPreferenceMap.entrySet()) { entry.getKey().setChecked(Arrays.binarySearch(enabledKeyboardLayouts, entry.getValue().getDescriptor()) >= 0); } } private void createPreferenceHierarchy() { for (KeyboardLayout layout : mKeyboardLayouts) { final SwitchPreference pref = new SwitchPreference(mScreen.getContext()); pref.setTitle(layout.getLabel()); pref.setSummary(layout.getCollection()); pref.setKey(layout.getDescriptor()); mScreen.addPreference(pref); mPreferenceMap.put(pref, layout); } } } src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java +16 −110 Original line number Diff line number Diff line Loading @@ -18,29 +18,15 @@ package com.android.settings.inputmethod; import android.content.Context; import android.hardware.input.InputDeviceIdentifier; import android.hardware.input.InputManager; import android.hardware.input.InputManager.InputDeviceListener; import android.hardware.input.KeyboardLayout; import android.os.Bundle; import android.support.v7.preference.CheckBoxPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.view.InputDevice; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class KeyboardLayoutPickerFragment extends SettingsPreferenceFragment implements InputDeviceListener { private InputDeviceIdentifier mInputDeviceIdentifier; private int mInputDeviceId = -1; private InputManager mIm; private KeyboardLayout[] mKeyboardLayouts; private HashMap<CheckBoxPreference, KeyboardLayout> mPreferenceMap = new HashMap<>(); public class KeyboardLayoutPickerFragment extends DashboardFragment { private static final String TAG = "KeyboardLayoutPicker"; /** * Intent extra: The input device descriptor of the keyboard whose keyboard Loading @@ -54,105 +40,25 @@ public class KeyboardLayoutPickerFragment extends SettingsPreferenceFragment } @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); mInputDeviceIdentifier = getActivity().getIntent().getParcelableExtra( EXTRA_INPUT_DEVICE_IDENTIFIER); if (mInputDeviceIdentifier == null) { getActivity().finish(); } mIm = (InputManager) getSystemService(Context.INPUT_SERVICE); mKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice(mInputDeviceIdentifier); Arrays.sort(mKeyboardLayouts); setPreferenceScreen(createPreferenceHierarchy()); } @Override public void onResume() { super.onResume(); mIm.registerInputDeviceListener(this, null); public void onAttach(Context context) { super.onAttach(context); InputDevice inputDevice = mIm.getInputDeviceByDescriptor(mInputDeviceIdentifier.getDescriptor()); if (inputDevice == null) { final InputDeviceIdentifier inputDeviceIdentifier = getActivity().getIntent(). getParcelableExtra(EXTRA_INPUT_DEVICE_IDENTIFIER); if (inputDeviceIdentifier == null) { getActivity().finish(); return; } mInputDeviceId = inputDevice.getId(); updateCheckedState(); } @Override public void onPause() { mIm.unregisterInputDeviceListener(this); mInputDeviceId = -1; super.onPause(); } @Override public boolean onPreferenceTreeClick(Preference preference) { if (preference instanceof CheckBoxPreference) { CheckBoxPreference checkboxPref = (CheckBoxPreference)preference; KeyboardLayout layout = mPreferenceMap.get(checkboxPref); if (layout != null) { boolean checked = checkboxPref.isChecked(); if (checked) { mIm.addKeyboardLayoutForInputDevice(mInputDeviceIdentifier, layout.getDescriptor()); } else { mIm.removeKeyboardLayoutForInputDevice(mInputDeviceIdentifier, layout.getDescriptor()); } return true; } } return super.onPreferenceTreeClick(preference); } @Override public void onInputDeviceAdded(int deviceId) { use(KeyboardLayoutPickerController.class).initialize(this /*parent*/, inputDeviceIdentifier); } @Override public void onInputDeviceChanged(int deviceId) { if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) { updateCheckedState(); } protected String getLogTag() { return TAG; } @Override public void onInputDeviceRemoved(int deviceId) { if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) { getActivity().finish(); } } private PreferenceScreen createPreferenceHierarchy() { PreferenceScreen root = getPreferenceManager().createPreferenceScreen(getActivity()); for (KeyboardLayout layout : mKeyboardLayouts) { CheckBoxPreference pref = new CheckBoxPreference(getPrefContext()); pref.setTitle(layout.getLabel()); pref.setSummary(layout.getCollection()); root.addPreference(pref); mPreferenceMap.put(pref, layout); } return root; } private void updateCheckedState() { String[] enabledKeyboardLayouts = mIm.getEnabledKeyboardLayoutsForInputDevice( mInputDeviceIdentifier); Arrays.sort(enabledKeyboardLayouts); for (Map.Entry<CheckBoxPreference, KeyboardLayout> entry : mPreferenceMap.entrySet()) { entry.getKey().setChecked(Arrays.binarySearch(enabledKeyboardLayouts, entry.getValue().getDescriptor()) >= 0); } protected int getPreferenceScreenResId() { return R.xml.keyboard_layout_picker_fragment; } } tests/robotests/assets/grandfather_not_implementing_index_provider +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ com.android.settings.enterprise.ApplicationListFragment$AdminGrantedPermissionLo com.android.settings.enterprise.ApplicationListFragment$AdminGrantedPermissionMicrophone com.android.settings.enterprise.ApplicationListFragment$EnterpriseInstalledPackages com.android.settings.enterprise.EnterpriseSetDefaultAppsListFragment com.android.settings.inputmethod.KeyboardLayoutPickerFragment com.android.settings.wifi.tether.WifiTetherSettings com.android.settings.wifi.SavedAccessPointsWifiSettings com.android.settings.notification.ZenModeEventRuleSettings Loading tests/robotests/assets/grandfather_not_implementing_indexable +0 −1 Original line number Diff line number Diff line com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment com.android.settings.deviceinfo.PrivateVolumeForget com.android.settings.inputmethod.SpellCheckersSettings com.android.settings.inputmethod.KeyboardLayoutPickerFragment com.android.settings.fuelgauge.InactiveApps com.android.settings.accessibility.CaptionPropertiesFragment com.android.settings.accessibility.AccessibilitySettingsForSetupWizard Loading Loading
res/xml/keyboard_layout_picker_fragment.xml 0 → 100644 +23 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2018 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. --> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto" android:key="keyboard_layout_picker" android:title="@string/keyboard_layout_picker_title" settings:controller="com.android.settings.inputmethod.KeyboardLayoutPickerController"> </PreferenceScreen>
src/com/android/settings/inputmethod/KeyboardLayoutPickerController.java 0 → 100644 +162 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 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.Fragment; import android.content.Context; import android.hardware.input.InputDeviceIdentifier; import android.hardware.input.InputManager; import android.hardware.input.KeyboardLayout; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.view.InputDevice; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class KeyboardLayoutPickerController extends BasePreferenceController implements InputManager.InputDeviceListener, LifecycleObserver, OnStart, OnStop { private final InputManager mIm; private final Map<SwitchPreference, KeyboardLayout> mPreferenceMap; private Fragment mParent; private int mInputDeviceId; private InputDeviceIdentifier mInputDeviceIdentifier; private KeyboardLayout[] mKeyboardLayouts; private PreferenceScreen mScreen; public KeyboardLayoutPickerController(Context context, String key) { super(context, key); mIm = (InputManager) context.getSystemService(Context.INPUT_SERVICE); mInputDeviceId = -1; mPreferenceMap = new HashMap<>(); } public void initialize(Fragment parent, InputDeviceIdentifier inputDeviceIdentifier) { mParent = parent; mInputDeviceIdentifier = inputDeviceIdentifier; mKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice(mInputDeviceIdentifier); Arrays.sort(mKeyboardLayouts); } @Override public void onStart() { mIm.registerInputDeviceListener(this, null); final InputDevice inputDevice = mIm.getInputDeviceByDescriptor(mInputDeviceIdentifier.getDescriptor()); if (inputDevice == null) { mParent.getActivity().finish(); return; } mInputDeviceId = inputDevice.getId(); updateCheckedState(); } @Override public void onStop() { mIm.unregisterInputDeviceListener(this); mInputDeviceId = -1; } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mScreen = screen; createPreferenceHierarchy(); } @Override public int getAvailabilityStatus() { return AVAILABLE; } @Override public boolean handlePreferenceTreeClick(Preference preference) { if (!(preference instanceof SwitchPreference)) { return false; } final SwitchPreference switchPref = (SwitchPreference) preference; final KeyboardLayout layout = mPreferenceMap.get(switchPref); if (layout != null) { final boolean checked = switchPref.isChecked(); if (checked) { mIm.addKeyboardLayoutForInputDevice(mInputDeviceIdentifier, layout.getDescriptor()); } else { mIm.removeKeyboardLayoutForInputDevice(mInputDeviceIdentifier, layout.getDescriptor()); } } return true; } @Override public void onInputDeviceAdded(int deviceId) { } @Override public void onInputDeviceRemoved(int deviceId) { if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) { mParent.getActivity().finish(); } } @Override public void onInputDeviceChanged(int deviceId) { if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) { updateCheckedState(); } } private void updateCheckedState() { final String[] enabledKeyboardLayouts = mIm.getEnabledKeyboardLayoutsForInputDevice( mInputDeviceIdentifier); Arrays.sort(enabledKeyboardLayouts); for (Map.Entry<SwitchPreference, KeyboardLayout> entry : mPreferenceMap.entrySet()) { entry.getKey().setChecked(Arrays.binarySearch(enabledKeyboardLayouts, entry.getValue().getDescriptor()) >= 0); } } private void createPreferenceHierarchy() { for (KeyboardLayout layout : mKeyboardLayouts) { final SwitchPreference pref = new SwitchPreference(mScreen.getContext()); pref.setTitle(layout.getLabel()); pref.setSummary(layout.getCollection()); pref.setKey(layout.getDescriptor()); mScreen.addPreference(pref); mPreferenceMap.put(pref, layout); } } }
src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java +16 −110 Original line number Diff line number Diff line Loading @@ -18,29 +18,15 @@ package com.android.settings.inputmethod; import android.content.Context; import android.hardware.input.InputDeviceIdentifier; import android.hardware.input.InputManager; import android.hardware.input.InputManager.InputDeviceListener; import android.hardware.input.KeyboardLayout; import android.os.Bundle; import android.support.v7.preference.CheckBoxPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.view.InputDevice; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class KeyboardLayoutPickerFragment extends SettingsPreferenceFragment implements InputDeviceListener { private InputDeviceIdentifier mInputDeviceIdentifier; private int mInputDeviceId = -1; private InputManager mIm; private KeyboardLayout[] mKeyboardLayouts; private HashMap<CheckBoxPreference, KeyboardLayout> mPreferenceMap = new HashMap<>(); public class KeyboardLayoutPickerFragment extends DashboardFragment { private static final String TAG = "KeyboardLayoutPicker"; /** * Intent extra: The input device descriptor of the keyboard whose keyboard Loading @@ -54,105 +40,25 @@ public class KeyboardLayoutPickerFragment extends SettingsPreferenceFragment } @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); mInputDeviceIdentifier = getActivity().getIntent().getParcelableExtra( EXTRA_INPUT_DEVICE_IDENTIFIER); if (mInputDeviceIdentifier == null) { getActivity().finish(); } mIm = (InputManager) getSystemService(Context.INPUT_SERVICE); mKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice(mInputDeviceIdentifier); Arrays.sort(mKeyboardLayouts); setPreferenceScreen(createPreferenceHierarchy()); } @Override public void onResume() { super.onResume(); mIm.registerInputDeviceListener(this, null); public void onAttach(Context context) { super.onAttach(context); InputDevice inputDevice = mIm.getInputDeviceByDescriptor(mInputDeviceIdentifier.getDescriptor()); if (inputDevice == null) { final InputDeviceIdentifier inputDeviceIdentifier = getActivity().getIntent(). getParcelableExtra(EXTRA_INPUT_DEVICE_IDENTIFIER); if (inputDeviceIdentifier == null) { getActivity().finish(); return; } mInputDeviceId = inputDevice.getId(); updateCheckedState(); } @Override public void onPause() { mIm.unregisterInputDeviceListener(this); mInputDeviceId = -1; super.onPause(); } @Override public boolean onPreferenceTreeClick(Preference preference) { if (preference instanceof CheckBoxPreference) { CheckBoxPreference checkboxPref = (CheckBoxPreference)preference; KeyboardLayout layout = mPreferenceMap.get(checkboxPref); if (layout != null) { boolean checked = checkboxPref.isChecked(); if (checked) { mIm.addKeyboardLayoutForInputDevice(mInputDeviceIdentifier, layout.getDescriptor()); } else { mIm.removeKeyboardLayoutForInputDevice(mInputDeviceIdentifier, layout.getDescriptor()); } return true; } } return super.onPreferenceTreeClick(preference); } @Override public void onInputDeviceAdded(int deviceId) { use(KeyboardLayoutPickerController.class).initialize(this /*parent*/, inputDeviceIdentifier); } @Override public void onInputDeviceChanged(int deviceId) { if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) { updateCheckedState(); } protected String getLogTag() { return TAG; } @Override public void onInputDeviceRemoved(int deviceId) { if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) { getActivity().finish(); } } private PreferenceScreen createPreferenceHierarchy() { PreferenceScreen root = getPreferenceManager().createPreferenceScreen(getActivity()); for (KeyboardLayout layout : mKeyboardLayouts) { CheckBoxPreference pref = new CheckBoxPreference(getPrefContext()); pref.setTitle(layout.getLabel()); pref.setSummary(layout.getCollection()); root.addPreference(pref); mPreferenceMap.put(pref, layout); } return root; } private void updateCheckedState() { String[] enabledKeyboardLayouts = mIm.getEnabledKeyboardLayoutsForInputDevice( mInputDeviceIdentifier); Arrays.sort(enabledKeyboardLayouts); for (Map.Entry<CheckBoxPreference, KeyboardLayout> entry : mPreferenceMap.entrySet()) { entry.getKey().setChecked(Arrays.binarySearch(enabledKeyboardLayouts, entry.getValue().getDescriptor()) >= 0); } protected int getPreferenceScreenResId() { return R.xml.keyboard_layout_picker_fragment; } }
tests/robotests/assets/grandfather_not_implementing_index_provider +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ com.android.settings.enterprise.ApplicationListFragment$AdminGrantedPermissionLo com.android.settings.enterprise.ApplicationListFragment$AdminGrantedPermissionMicrophone com.android.settings.enterprise.ApplicationListFragment$EnterpriseInstalledPackages com.android.settings.enterprise.EnterpriseSetDefaultAppsListFragment com.android.settings.inputmethod.KeyboardLayoutPickerFragment com.android.settings.wifi.tether.WifiTetherSettings com.android.settings.wifi.SavedAccessPointsWifiSettings com.android.settings.notification.ZenModeEventRuleSettings Loading
tests/robotests/assets/grandfather_not_implementing_indexable +0 −1 Original line number Diff line number Diff line com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment com.android.settings.deviceinfo.PrivateVolumeForget com.android.settings.inputmethod.SpellCheckersSettings com.android.settings.inputmethod.KeyboardLayoutPickerFragment com.android.settings.fuelgauge.InactiveApps com.android.settings.accessibility.CaptionPropertiesFragment com.android.settings.accessibility.AccessibilitySettingsForSetupWizard Loading