Set preference visible to false when there is no keyboard.
1. Physical keyboard settings should only show up if at least one PK is connected. 2. Update tests. 3. Fix NullPointerException. Bug: 269983475 Bug: 270109384 Bug: 271357910 Test: atest and manual Change-Id: If7798587fb386dbf669fc249cab304d91a26879b
This commit is contained in:
@@ -308,6 +308,12 @@ public class KeyboardLayoutDialogFragment extends InstrumentedDialogFragment
|
|||||||
public Keyboards loadInBackground() {
|
public Keyboards loadInBackground() {
|
||||||
Keyboards keyboards = new Keyboards();
|
Keyboards keyboards = new Keyboards();
|
||||||
InputManager im = (InputManager)getContext().getSystemService(Context.INPUT_SERVICE);
|
InputManager im = (InputManager)getContext().getSystemService(Context.INPUT_SERVICE);
|
||||||
|
if (mInputDeviceIdentifier == null || NewKeyboardSettingsUtils.getInputDevice(
|
||||||
|
im, mInputDeviceIdentifier) == null) {
|
||||||
|
keyboards.keyboardLayouts.add(null); // default layout
|
||||||
|
keyboards.current = 0;
|
||||||
|
return keyboards;
|
||||||
|
}
|
||||||
String[] keyboardLayoutDescriptors = im.getEnabledKeyboardLayoutsForInputDevice(
|
String[] keyboardLayoutDescriptors = im.getEnabledKeyboardLayoutsForInputDevice(
|
||||||
mInputDeviceIdentifier);
|
mInputDeviceIdentifier);
|
||||||
for (String keyboardLayoutDescriptor : keyboardLayoutDescriptors) {
|
for (String keyboardLayoutDescriptor : keyboardLayoutDescriptors) {
|
||||||
|
@@ -21,7 +21,6 @@ import android.content.Context;
|
|||||||
import android.hardware.input.InputDeviceIdentifier;
|
import android.hardware.input.InputDeviceIdentifier;
|
||||||
import android.hardware.input.InputManager;
|
import android.hardware.input.InputManager;
|
||||||
import android.hardware.input.KeyboardLayout;
|
import android.hardware.input.KeyboardLayout;
|
||||||
import android.view.InputDevice;
|
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -37,7 +36,6 @@ import java.util.Arrays;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
public class KeyboardLayoutPickerController extends BasePreferenceController implements
|
public class KeyboardLayoutPickerController extends BasePreferenceController implements
|
||||||
InputManager.InputDeviceListener, LifecycleObserver, OnStart, OnStop {
|
InputManager.InputDeviceListener, LifecycleObserver, OnStart, OnStop {
|
||||||
|
|
||||||
@@ -68,15 +66,12 @@ public class KeyboardLayoutPickerController extends BasePreferenceController imp
|
|||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
mIm.registerInputDeviceListener(this, null);
|
mIm.registerInputDeviceListener(this, null);
|
||||||
|
if (mInputDeviceIdentifier == null
|
||||||
final InputDevice inputDevice =
|
|| NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier) == null) {
|
||||||
mIm.getInputDeviceByDescriptor(mInputDeviceIdentifier.getDescriptor());
|
|
||||||
if (inputDevice == null) {
|
|
||||||
mParent.getActivity().finish();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mInputDeviceId = inputDevice.getId();
|
mInputDeviceId =
|
||||||
|
NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier).getId();
|
||||||
updateCheckedState();
|
updateCheckedState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,6 +145,9 @@ public class KeyboardLayoutPickerController extends BasePreferenceController imp
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void createPreferenceHierarchy() {
|
private void createPreferenceHierarchy() {
|
||||||
|
if (mKeyboardLayouts == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
for (KeyboardLayout layout : mKeyboardLayouts) {
|
for (KeyboardLayout layout : mKeyboardLayouts) {
|
||||||
final SwitchPreference pref = new SwitchPreference(mScreen.getContext());
|
final SwitchPreference pref = new SwitchPreference(mScreen.getContext());
|
||||||
pref.setTitle(layout.getLabel());
|
pref.setTitle(layout.getLabel());
|
||||||
|
@@ -19,11 +19,11 @@ package com.android.settings.inputmethod;
|
|||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.hardware.input.InputDeviceIdentifier;
|
import android.hardware.input.InputDeviceIdentifier;
|
||||||
|
import android.hardware.input.InputManager;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
|
|
||||||
|
|
||||||
public class KeyboardLayoutPickerFragment extends DashboardFragment {
|
public class KeyboardLayoutPickerFragment extends DashboardFragment {
|
||||||
|
|
||||||
private static final String TAG = "KeyboardLayoutPicker";
|
private static final String TAG = "KeyboardLayoutPicker";
|
||||||
@@ -45,10 +45,10 @@ public class KeyboardLayoutPickerFragment extends DashboardFragment {
|
|||||||
|
|
||||||
final InputDeviceIdentifier inputDeviceIdentifier = getActivity().getIntent().
|
final InputDeviceIdentifier inputDeviceIdentifier = getActivity().getIntent().
|
||||||
getParcelableExtra(EXTRA_INPUT_DEVICE_IDENTIFIER);
|
getParcelableExtra(EXTRA_INPUT_DEVICE_IDENTIFIER);
|
||||||
if (inputDeviceIdentifier == null) {
|
final InputManager im = context.getSystemService(InputManager.class);
|
||||||
getActivity().finish();
|
if (NewKeyboardSettingsUtils.getInputDevice(im, inputDeviceIdentifier) == null) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
use(KeyboardLayoutPickerController.class).initialize(this /*parent*/,
|
use(KeyboardLayoutPickerController.class).initialize(this /*parent*/,
|
||||||
inputDeviceIdentifier);
|
inputDeviceIdentifier);
|
||||||
}
|
}
|
||||||
|
@@ -68,6 +68,9 @@ public class NewKeyboardLayoutEnabledLocalesFragment extends DashboardFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateCheckedState() {
|
private void updateCheckedState() {
|
||||||
|
if (NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier) == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
PreferenceScreen preferenceScreen = getPreferenceScreen();
|
PreferenceScreen preferenceScreen = getPreferenceScreen();
|
||||||
preferenceScreen.removeAll();
|
preferenceScreen.removeAll();
|
||||||
List<InputMethodInfo> infoList = mImm.getEnabledInputMethodListAsUser(mUserId);
|
List<InputMethodInfo> infoList = mImm.getEnabledInputMethodListAsUser(mUserId);
|
||||||
@@ -174,8 +177,8 @@ public class NewKeyboardLayoutEnabledLocalesFragment extends DashboardFragment
|
|||||||
public void onStart() {
|
public void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
mIm.registerInputDeviceListener(this, null);
|
mIm.registerInputDeviceListener(this, null);
|
||||||
final InputDevice inputDevice =
|
InputDevice inputDevice =
|
||||||
mIm.getInputDeviceByDescriptor(mInputDeviceIdentifier.getDescriptor());
|
NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier);
|
||||||
if (inputDevice == null) {
|
if (inputDevice == null) {
|
||||||
getActivity().finish();
|
getActivity().finish();
|
||||||
return;
|
return;
|
||||||
|
@@ -19,6 +19,7 @@ package com.android.settings.inputmethod;
|
|||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.hardware.input.InputDeviceIdentifier;
|
import android.hardware.input.InputDeviceIdentifier;
|
||||||
|
import android.hardware.input.InputManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.inputmethod.InputMethodInfo;
|
import android.view.inputmethod.InputMethodInfo;
|
||||||
import android.view.inputmethod.InputMethodSubtype;
|
import android.view.inputmethod.InputMethodSubtype;
|
||||||
@@ -33,25 +34,24 @@ public class NewKeyboardLayoutPickerContent extends DashboardFragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onAttach(Context context) {
|
public void onAttach(Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
|
InputManager inputManager = getContext().getSystemService(InputManager.class);
|
||||||
Bundle arguments = getArguments();
|
Bundle arguments = getArguments();
|
||||||
final String title = arguments.getString(NewKeyboardSettingsUtils.EXTRA_TITLE);
|
final String title = arguments.getString(NewKeyboardSettingsUtils.EXTRA_TITLE);
|
||||||
final String layout = arguments.getString(NewKeyboardSettingsUtils.EXTRA_KEYBOARD_LAYOUT);
|
final String layout = arguments.getString(NewKeyboardSettingsUtils.EXTRA_KEYBOARD_LAYOUT);
|
||||||
final int userId = arguments.getInt(NewKeyboardSettingsUtils.EXTRA_USER_ID);
|
final int userId = arguments.getInt(NewKeyboardSettingsUtils.EXTRA_USER_ID);
|
||||||
final InputDeviceIdentifier inputDeviceIdentifier =
|
final InputDeviceIdentifier identifier =
|
||||||
arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER);
|
arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER);
|
||||||
final InputMethodInfo inputMethodInfo =
|
final InputMethodInfo inputMethodInfo =
|
||||||
arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_INFO);
|
arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_INFO);
|
||||||
final InputMethodSubtype inputMethodSubtype =
|
final InputMethodSubtype inputMethodSubtype =
|
||||||
arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_SUBTYPE);
|
arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_SUBTYPE);
|
||||||
|
if (identifier == null
|
||||||
|
|| NewKeyboardSettingsUtils.getInputDevice(inputManager, identifier) == null) {
|
||||||
if (inputDeviceIdentifier == null) {
|
return;
|
||||||
getActivity().finish();
|
|
||||||
}
|
}
|
||||||
getActivity().setTitle(title);
|
getActivity().setTitle(title);
|
||||||
use(NewKeyboardLayoutPickerController.class).initialize(this /*parent*/, userId,
|
use(NewKeyboardLayoutPickerController.class).initialize(this /*parent*/, userId,
|
||||||
inputDeviceIdentifier, inputMethodInfo, inputMethodSubtype, layout);
|
identifier, inputMethodInfo, inputMethodSubtype, layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -20,7 +20,6 @@ import android.content.Context;
|
|||||||
import android.hardware.input.InputDeviceIdentifier;
|
import android.hardware.input.InputDeviceIdentifier;
|
||||||
import android.hardware.input.InputManager;
|
import android.hardware.input.InputManager;
|
||||||
import android.hardware.input.KeyboardLayout;
|
import android.hardware.input.KeyboardLayout;
|
||||||
import android.view.InputDevice;
|
|
||||||
import android.view.inputmethod.InputMethodInfo;
|
import android.view.inputmethod.InputMethodInfo;
|
||||||
import android.view.inputmethod.InputMethodSubtype;
|
import android.view.inputmethod.InputMethodSubtype;
|
||||||
|
|
||||||
@@ -75,13 +74,12 @@ public class NewKeyboardLayoutPickerController extends BasePreferenceController
|
|||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
mIm.registerInputDeviceListener(this, null);
|
mIm.registerInputDeviceListener(this, null);
|
||||||
final InputDevice inputDevice =
|
if (mInputDeviceIdentifier == null
|
||||||
mIm.getInputDeviceByDescriptor(mInputDeviceIdentifier.getDescriptor());
|
|| NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier) == null) {
|
||||||
if (inputDevice == null) {
|
|
||||||
mParent.getActivity().finish();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mInputDeviceId = inputDevice.getId();
|
mInputDeviceId =
|
||||||
|
NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier).getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -138,6 +136,9 @@ public class NewKeyboardLayoutPickerController extends BasePreferenceController
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void createPreferenceHierarchy() {
|
private void createPreferenceHierarchy() {
|
||||||
|
if (mKeyboardLayouts == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
for (KeyboardLayout layout : mKeyboardLayouts) {
|
for (KeyboardLayout layout : mKeyboardLayouts) {
|
||||||
final KeyboardLayoutPreference pref;
|
final KeyboardLayoutPreference pref;
|
||||||
if (mLayout.equals(layout.getLabel())) {
|
if (mLayout.equals(layout.getLabel())) {
|
||||||
|
@@ -27,13 +27,11 @@ import com.android.settings.R;
|
|||||||
|
|
||||||
public class NewKeyboardLayoutPickerFragment extends Fragment {
|
public class NewKeyboardLayoutPickerFragment extends Fragment {
|
||||||
|
|
||||||
private ViewGroup mFragmentView;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
|
|
||||||
mFragmentView = (ViewGroup) inflater.inflate(
|
ViewGroup fragmentView = (ViewGroup) inflater.inflate(
|
||||||
R.layout.keyboard_layout_picker, container, false);
|
R.layout.keyboard_layout_picker, container, false);
|
||||||
getActivity().getSupportFragmentManager()
|
getActivity().getSupportFragmentManager()
|
||||||
.beginTransaction()
|
.beginTransaction()
|
||||||
@@ -47,6 +45,6 @@ public class NewKeyboardLayoutPickerFragment extends Fragment {
|
|||||||
.replace(R.id.keyboard_layouts, fragment)
|
.replace(R.id.keyboard_layouts, fragment)
|
||||||
.commit();
|
.commit();
|
||||||
|
|
||||||
return mFragmentView;
|
return fragmentView;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,8 @@
|
|||||||
package com.android.settings.inputmethod;
|
package com.android.settings.inputmethod;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.hardware.input.InputDeviceIdentifier;
|
||||||
|
import android.hardware.input.InputManager;
|
||||||
import android.view.InputDevice;
|
import android.view.InputDevice;
|
||||||
import android.view.inputmethod.InputMethodInfo;
|
import android.view.inputmethod.InputMethodInfo;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
@@ -102,4 +104,8 @@ public class NewKeyboardSettingsUtils {
|
|||||||
return mInputMethodSubtype;
|
return mInputMethodSubtype;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static InputDevice getInputDevice(InputManager im, InputDeviceIdentifier identifier) {
|
||||||
|
return im.getInputDeviceByDescriptor(identifier.getDescriptor());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -160,6 +160,10 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
|
|||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
ThreadUtils.postOnBackgroundThread(() -> {
|
ThreadUtils.postOnBackgroundThread(() -> {
|
||||||
final List<HardKeyboardDeviceInfo> newHardKeyboards = getHardKeyboards(context);
|
final List<HardKeyboardDeviceInfo> newHardKeyboards = getHardKeyboards(context);
|
||||||
|
if (newHardKeyboards.isEmpty()) {
|
||||||
|
getActivity().finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
ThreadUtils.postOnMainThread(() -> updateHardKeyboards(newHardKeyboards));
|
ThreadUtils.postOnMainThread(() -> updateHardKeyboards(newHardKeyboards));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -22,6 +22,7 @@ import android.icu.text.ListFormatter;
|
|||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.PreferenceControllerMixin;
|
import com.android.settings.core.PreferenceControllerMixin;
|
||||||
import com.android.settings.inputmethod.PhysicalKeyboardFragment.HardKeyboardDeviceInfo;
|
import com.android.settings.inputmethod.PhysicalKeyboardFragment.HardKeyboardDeviceInfo;
|
||||||
@@ -34,7 +35,6 @@ import com.android.settingslib.core.lifecycle.events.OnResume;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public class PhysicalKeyboardPreferenceController extends AbstractPreferenceController
|
public class PhysicalKeyboardPreferenceController extends AbstractPreferenceController
|
||||||
implements PreferenceControllerMixin, LifecycleObserver, OnResume, OnPause,
|
implements PreferenceControllerMixin, LifecycleObserver, OnResume, OnPause,
|
||||||
InputManager.InputDeviceListener {
|
InputManager.InputDeviceListener {
|
||||||
@@ -54,13 +54,14 @@ public class PhysicalKeyboardPreferenceController extends AbstractPreferenceCont
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAvailable() {
|
public boolean isAvailable() {
|
||||||
return mContext.getResources().getBoolean(R.bool.config_show_physical_keyboard_pref);
|
return !getKeyboards().isEmpty()
|
||||||
|
&& mContext.getResources().getBoolean(R.bool.config_show_physical_keyboard_pref);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
mPreference = preference;
|
mPreference = preference;
|
||||||
updateSummary();
|
updateEntry();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -80,33 +81,42 @@ public class PhysicalKeyboardPreferenceController extends AbstractPreferenceCont
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInputDeviceAdded(int deviceId) {
|
public void onInputDeviceAdded(int deviceId) {
|
||||||
updateSummary();
|
updateEntry();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInputDeviceRemoved(int deviceId) {
|
public void onInputDeviceRemoved(int deviceId) {
|
||||||
updateSummary();
|
updateEntry();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInputDeviceChanged(int deviceId) {
|
public void onInputDeviceChanged(int deviceId) {
|
||||||
updateSummary();
|
updateEntry();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSummary() {
|
private void updateEntry() {
|
||||||
if (mPreference == null) {
|
if (mPreference == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final List<HardKeyboardDeviceInfo> keyboards =
|
List<HardKeyboardDeviceInfo> keyboards = getKeyboards();
|
||||||
PhysicalKeyboardFragment.getHardKeyboards(mContext);
|
|
||||||
if (keyboards.isEmpty()) {
|
if (keyboards.isEmpty()) {
|
||||||
mPreference.setSummary(R.string.keyboard_disconnected);
|
mPreference.setVisible(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final List<String> summaries = new ArrayList<>();
|
updateSummary(keyboards);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateSummary(List<HardKeyboardDeviceInfo> keyboards) {
|
||||||
|
mPreference.setVisible(true);
|
||||||
|
List<String> summaries = new ArrayList<>();
|
||||||
for (HardKeyboardDeviceInfo info : keyboards) {
|
for (HardKeyboardDeviceInfo info : keyboards) {
|
||||||
summaries.add(info.mDeviceName);
|
summaries.add(info.mDeviceName);
|
||||||
}
|
}
|
||||||
mPreference.setSummary(ListFormatter.getInstance().format(summaries));
|
mPreference.setSummary(ListFormatter.getInstance().format(summaries));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
List<HardKeyboardDeviceInfo> getKeyboards() {
|
||||||
|
return PhysicalKeyboardFragment.getHardKeyboards(mContext);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,12 +24,13 @@ import static org.mockito.Mockito.verify;
|
|||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.hardware.input.InputDeviceIdentifier;
|
||||||
import android.hardware.input.InputManager;
|
import android.hardware.input.InputManager;
|
||||||
import android.view.InputDevice;
|
import android.view.InputDevice;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.inputmethod.PhysicalKeyboardFragment.HardKeyboardDeviceInfo;
|
||||||
import com.android.settings.testutils.shadow.ShadowInputDevice;
|
import com.android.settings.testutils.shadow.ShadowInputDevice;
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
@@ -42,15 +43,24 @@ import org.robolectric.RobolectricTestRunner;
|
|||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class PhysicalKeyboardPreferenceControllerTest {
|
public class PhysicalKeyboardPreferenceControllerTest {
|
||||||
|
|
||||||
|
private static final String DEVICE_NAME = "deviceName";
|
||||||
|
private static final String LAYOUT_LABEL = "deviceLayutLabel";
|
||||||
|
private static final String BLUETOOTHADDRESS = "deviceBluetoothAddress";
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@Mock
|
@Mock
|
||||||
private InputManager mIm;
|
private InputManager mIm;
|
||||||
@Mock
|
@Mock
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
|
@Mock
|
||||||
|
private InputDeviceIdentifier mIdentifier;
|
||||||
|
|
||||||
private PhysicalKeyboardPreferenceController mController;
|
private PhysicalKeyboardPreferenceController mController;
|
||||||
|
|
||||||
@@ -69,9 +79,18 @@ public class PhysicalKeyboardPreferenceControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testPhysicalKeyboard_byDefault_shouldBeShown() {
|
public void testPhysicalKeyboard_byDefault_shouldBeShown() {
|
||||||
final Context context = spy(RuntimeEnvironment.application.getApplicationContext());
|
final Context context = spy(RuntimeEnvironment.application.getApplicationContext());
|
||||||
mController = new PhysicalKeyboardPreferenceController(context, null);
|
List<HardKeyboardDeviceInfo> keyboards = new ArrayList<>();
|
||||||
|
keyboards.add(new HardKeyboardDeviceInfo(
|
||||||
|
DEVICE_NAME,
|
||||||
|
mIdentifier,
|
||||||
|
LAYOUT_LABEL,
|
||||||
|
BLUETOOTHADDRESS));
|
||||||
|
mController = spy(new PhysicalKeyboardPreferenceController(context, null));
|
||||||
|
when(mController.getKeyboards()).thenReturn(keyboards);
|
||||||
|
|
||||||
assertThat(mController.isAvailable()).isTrue();
|
boolean result = mController.isAvailable();
|
||||||
|
|
||||||
|
assertThat(result).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -85,11 +104,11 @@ public class PhysicalKeyboardPreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Config(shadows = ShadowInputDevice.class)
|
@Config(shadows = ShadowInputDevice.class)
|
||||||
public void updateState_noKeyboard_setDisconnectedSummary() {
|
public void updateState_noKeyboard_setPreferenceVisibleFalse() {
|
||||||
ShadowInputDevice.sDeviceIds = new int[0];
|
ShadowInputDevice.sDeviceIds = new int[0];
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mPreference);
|
||||||
|
|
||||||
verify(mPreference).setSummary(R.string.keyboard_disconnected);
|
verify(mPreference).setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Reference in New Issue
Block a user