Loading res/xml/accessibility_settings.xml +3 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,9 @@ <SwitchPreference android:key="toggle_power_button_ends_call_preference" android:title="@string/accessibility_power_button_ends_call_prerefence_title" android:persistent="false"/> android:persistent="false" settings:controller="com.android.settings.accessibility.PowerButtonEndsCallPreferenceController"/> <SwitchPreference android:key="toggle_lock_screen_rotation_preference" Loading src/com/android/settings/accessibility/AccessibilitySettings.java +1 −37 Original line number Diff line number Diff line Loading @@ -39,8 +39,6 @@ import android.provider.SearchIndexableResource; import android.provider.Settings; import android.text.TextUtils; import android.util.ArrayMap; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.accessibility.AccessibilityManager; import androidx.annotation.VisibleForTesting; Loading Loading @@ -99,8 +97,6 @@ public class AccessibilitySettings extends DashboardFragment implements // Preferences private static final String TOGGLE_INVERSION_PREFERENCE = "toggle_inversion_preference"; private static final String TOGGLE_POWER_BUTTON_ENDS_CALL_PREFERENCE = "toggle_power_button_ends_call_preference"; private static final String TOGGLE_LARGE_POINTER_ICON = "toggle_large_pointer_icon"; private static final String TOGGLE_DISABLE_ANIMATIONS = "toggle_disable_animations"; Loading Loading @@ -198,7 +194,6 @@ public class AccessibilitySettings extends DashboardFragment implements private final Map<ComponentName, PreferenceCategory> mPreBundledServiceComponentToCategoryMap = new ArrayMap<>(); private SwitchPreference mTogglePowerButtonEndsCallPreference; private SwitchPreference mToggleLargePointerIconPreference; private SwitchPreference mToggleDisableAnimationsPreference; private SwitchPreference mToggleMasterMonoPreference; Loading Loading @@ -312,10 +307,7 @@ public class AccessibilitySettings extends DashboardFragment implements @Override public boolean onPreferenceTreeClick(Preference preference) { if (mTogglePowerButtonEndsCallPreference == preference) { handleTogglePowerButtonEndsCallPreferenceClick(); return true; } else if (mToggleMasterMonoPreference == preference) { if (mToggleMasterMonoPreference == preference) { handleToggleMasterMonoPreferenceClick(); return true; } else if (mHearingAidPreferenceController.handlePreferenceTreeClick(preference)) { Loading Loading @@ -358,14 +350,6 @@ public class AccessibilitySettings extends DashboardFragment implements DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_ENABLED, false); } private void handleTogglePowerButtonEndsCallPreferenceClick() { Settings.Secure.putInt(getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, (mTogglePowerButtonEndsCallPreference.isChecked() ? Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF)); } private void handleToggleMasterMonoPreferenceClick() { Settings.System.putIntForUser(getContentResolver(), Settings.System.MASTER_MONO, mToggleMasterMonoPreference.isChecked() ? 1 : 0, UserHandle.USER_CURRENT); Loading @@ -380,15 +364,6 @@ public class AccessibilitySettings extends DashboardFragment implements // Display inversion. mToggleInversionPreference = findPreference(TOGGLE_INVERSION_PREFERENCE); // Power button ends calls. mTogglePowerButtonEndsCallPreference = (SwitchPreference) findPreference(TOGGLE_POWER_BUTTON_ENDS_CALL_PREFERENCE); if (!KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER) || !Utils.isVoiceCapable(getActivity())) { mCategoryToPrefCategoryMap.get(CATEGORY_INTERACTION_CONTROL) .removePreference(mTogglePowerButtonEndsCallPreference); } // Large pointer icon. mToggleLargePointerIconPreference = findPreference(TOGGLE_LARGE_POINTER_ICON); Loading Loading @@ -657,17 +632,6 @@ public class AccessibilitySettings extends DashboardFragment implements // Dark Mode mDarkUIPreferenceController.updateState(mDarkUIModePreference); // Power button ends calls. if (KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER) && Utils.isVoiceCapable(getActivity())) { final int incallPowerBehavior = Settings.Secure.getInt(getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT); final boolean powerButtonEndsCall = (incallPowerBehavior == Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP); mTogglePowerButtonEndsCallPreference.setChecked(powerButtonEndsCall); } // Master mono updateMasterMono(); Loading src/com/android/settings/accessibility/PowerButtonEndsCallPreferenceController.java 0 → 100644 +54 −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.accessibility; import android.content.Context; import android.provider.Settings; import android.view.KeyCharacterMap; import android.view.KeyEvent; import com.android.settings.Utils; import com.android.settings.core.TogglePreferenceController; public class PowerButtonEndsCallPreferenceController extends TogglePreferenceController { public PowerButtonEndsCallPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } @Override public boolean isChecked() { final int incallPowerBehavior = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT); return incallPowerBehavior == Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP; } @Override public boolean setChecked(boolean isChecked) { return Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, (isChecked ? Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF)); } @Override public int getAvailabilityStatus() { return !KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER) || !Utils.isVoiceCapable(mContext) ? UNSUPPORTED_ON_DEVICE : AVAILABLE; } } tests/robotests/src/com/android/settings/accessibility/PowerButtonEndsCallPreferenceControllerTest.java 0 → 100644 +129 −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.accessibility; import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.provider.Settings; import androidx.preference.SwitchPreference; import com.android.settings.core.BasePreferenceController; import com.android.settings.testutils.shadow.ShadowKeyCharacterMap; import com.android.settings.testutils.shadow.ShadowUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowUtils.class, ShadowKeyCharacterMap.class}) public class PowerButtonEndsCallPreferenceControllerTest { private static final int UNKNOWN = -1; private Context mContext; private SwitchPreference mPreference; private PowerButtonEndsCallPreferenceController mController; @Before public void setUp() { mContext = RuntimeEnvironment.application; mPreference = new SwitchPreference(mContext); mController = new PowerButtonEndsCallPreferenceController(mContext, "power_button"); } @After public void tearDown() { ShadowUtils.reset(); ShadowKeyCharacterMap.reset(); } @Test public void getAvailabilityStatus_hasPowerKeyAndVoiceCapable_shouldReturnAvailable() { ShadowKeyCharacterMap.setDevicehasKey(true); ShadowUtils.setIsVoiceCapable(true); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.AVAILABLE); } @Test public void getAvailabilityStatus_noVoiceCapable_shouldReturnUnsupportedOnDevice() { ShadowKeyCharacterMap.setDevicehasKey(true); ShadowUtils.setIsVoiceCapable(false); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE); } @Test public void getAvailabilityStatus_noPowerKey_shouldReturnUnsupportedOnDevice() { ShadowKeyCharacterMap.setDevicehasKey(false); ShadowUtils.setIsVoiceCapable(true); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE); } @Test public void isChecked_enabledHangUp_shouldReturnTrue() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP); mController.updateState(mPreference); assertThat(mController.isChecked()).isTrue(); assertThat(mPreference.isChecked()).isTrue(); } @Test public void isChecked_disabledHangUp_shouldReturnFalse() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF); mController.updateState(mPreference); assertThat(mController.isChecked()).isFalse(); assertThat(mPreference.isChecked()).isFalse(); } @Test public void setChecked_enabled_shouldEnableHangUp() { mController.setChecked(true); assertThat(Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, UNKNOWN)) .isEqualTo(Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP); } @Test public void setChecked_disabled_shouldDisableHangUp() { mController.setChecked(false); assertThat(Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, UNKNOWN)) .isEqualTo(Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF); } } tests/robotests/src/com/android/settings/testutils/shadow/ShadowKeyCharacterMap.java 0 → 100644 +41 −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.testutils.shadow; import android.view.KeyCharacterMap; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; @Implements(KeyCharacterMap.class) public class ShadowKeyCharacterMap extends org.robolectric.shadows.ShadowKeyCharacterMap{ private static boolean sIsDeviceHasKey; public static void reset() { sIsDeviceHasKey = false; } public static void setDevicehasKey(boolean isDeviceHasKey) { sIsDeviceHasKey = isDeviceHasKey; } @Implementation protected static boolean deviceHasKey(int keyCode) { return sIsDeviceHasKey; } } Loading
res/xml/accessibility_settings.xml +3 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,9 @@ <SwitchPreference android:key="toggle_power_button_ends_call_preference" android:title="@string/accessibility_power_button_ends_call_prerefence_title" android:persistent="false"/> android:persistent="false" settings:controller="com.android.settings.accessibility.PowerButtonEndsCallPreferenceController"/> <SwitchPreference android:key="toggle_lock_screen_rotation_preference" Loading
src/com/android/settings/accessibility/AccessibilitySettings.java +1 −37 Original line number Diff line number Diff line Loading @@ -39,8 +39,6 @@ import android.provider.SearchIndexableResource; import android.provider.Settings; import android.text.TextUtils; import android.util.ArrayMap; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.accessibility.AccessibilityManager; import androidx.annotation.VisibleForTesting; Loading Loading @@ -99,8 +97,6 @@ public class AccessibilitySettings extends DashboardFragment implements // Preferences private static final String TOGGLE_INVERSION_PREFERENCE = "toggle_inversion_preference"; private static final String TOGGLE_POWER_BUTTON_ENDS_CALL_PREFERENCE = "toggle_power_button_ends_call_preference"; private static final String TOGGLE_LARGE_POINTER_ICON = "toggle_large_pointer_icon"; private static final String TOGGLE_DISABLE_ANIMATIONS = "toggle_disable_animations"; Loading Loading @@ -198,7 +194,6 @@ public class AccessibilitySettings extends DashboardFragment implements private final Map<ComponentName, PreferenceCategory> mPreBundledServiceComponentToCategoryMap = new ArrayMap<>(); private SwitchPreference mTogglePowerButtonEndsCallPreference; private SwitchPreference mToggleLargePointerIconPreference; private SwitchPreference mToggleDisableAnimationsPreference; private SwitchPreference mToggleMasterMonoPreference; Loading Loading @@ -312,10 +307,7 @@ public class AccessibilitySettings extends DashboardFragment implements @Override public boolean onPreferenceTreeClick(Preference preference) { if (mTogglePowerButtonEndsCallPreference == preference) { handleTogglePowerButtonEndsCallPreferenceClick(); return true; } else if (mToggleMasterMonoPreference == preference) { if (mToggleMasterMonoPreference == preference) { handleToggleMasterMonoPreferenceClick(); return true; } else if (mHearingAidPreferenceController.handlePreferenceTreeClick(preference)) { Loading Loading @@ -358,14 +350,6 @@ public class AccessibilitySettings extends DashboardFragment implements DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_ENABLED, false); } private void handleTogglePowerButtonEndsCallPreferenceClick() { Settings.Secure.putInt(getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, (mTogglePowerButtonEndsCallPreference.isChecked() ? Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF)); } private void handleToggleMasterMonoPreferenceClick() { Settings.System.putIntForUser(getContentResolver(), Settings.System.MASTER_MONO, mToggleMasterMonoPreference.isChecked() ? 1 : 0, UserHandle.USER_CURRENT); Loading @@ -380,15 +364,6 @@ public class AccessibilitySettings extends DashboardFragment implements // Display inversion. mToggleInversionPreference = findPreference(TOGGLE_INVERSION_PREFERENCE); // Power button ends calls. mTogglePowerButtonEndsCallPreference = (SwitchPreference) findPreference(TOGGLE_POWER_BUTTON_ENDS_CALL_PREFERENCE); if (!KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER) || !Utils.isVoiceCapable(getActivity())) { mCategoryToPrefCategoryMap.get(CATEGORY_INTERACTION_CONTROL) .removePreference(mTogglePowerButtonEndsCallPreference); } // Large pointer icon. mToggleLargePointerIconPreference = findPreference(TOGGLE_LARGE_POINTER_ICON); Loading Loading @@ -657,17 +632,6 @@ public class AccessibilitySettings extends DashboardFragment implements // Dark Mode mDarkUIPreferenceController.updateState(mDarkUIModePreference); // Power button ends calls. if (KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER) && Utils.isVoiceCapable(getActivity())) { final int incallPowerBehavior = Settings.Secure.getInt(getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT); final boolean powerButtonEndsCall = (incallPowerBehavior == Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP); mTogglePowerButtonEndsCallPreference.setChecked(powerButtonEndsCall); } // Master mono updateMasterMono(); Loading
src/com/android/settings/accessibility/PowerButtonEndsCallPreferenceController.java 0 → 100644 +54 −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.accessibility; import android.content.Context; import android.provider.Settings; import android.view.KeyCharacterMap; import android.view.KeyEvent; import com.android.settings.Utils; import com.android.settings.core.TogglePreferenceController; public class PowerButtonEndsCallPreferenceController extends TogglePreferenceController { public PowerButtonEndsCallPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } @Override public boolean isChecked() { final int incallPowerBehavior = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT); return incallPowerBehavior == Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP; } @Override public boolean setChecked(boolean isChecked) { return Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, (isChecked ? Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF)); } @Override public int getAvailabilityStatus() { return !KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER) || !Utils.isVoiceCapable(mContext) ? UNSUPPORTED_ON_DEVICE : AVAILABLE; } }
tests/robotests/src/com/android/settings/accessibility/PowerButtonEndsCallPreferenceControllerTest.java 0 → 100644 +129 −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.accessibility; import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.provider.Settings; import androidx.preference.SwitchPreference; import com.android.settings.core.BasePreferenceController; import com.android.settings.testutils.shadow.ShadowKeyCharacterMap; import com.android.settings.testutils.shadow.ShadowUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowUtils.class, ShadowKeyCharacterMap.class}) public class PowerButtonEndsCallPreferenceControllerTest { private static final int UNKNOWN = -1; private Context mContext; private SwitchPreference mPreference; private PowerButtonEndsCallPreferenceController mController; @Before public void setUp() { mContext = RuntimeEnvironment.application; mPreference = new SwitchPreference(mContext); mController = new PowerButtonEndsCallPreferenceController(mContext, "power_button"); } @After public void tearDown() { ShadowUtils.reset(); ShadowKeyCharacterMap.reset(); } @Test public void getAvailabilityStatus_hasPowerKeyAndVoiceCapable_shouldReturnAvailable() { ShadowKeyCharacterMap.setDevicehasKey(true); ShadowUtils.setIsVoiceCapable(true); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.AVAILABLE); } @Test public void getAvailabilityStatus_noVoiceCapable_shouldReturnUnsupportedOnDevice() { ShadowKeyCharacterMap.setDevicehasKey(true); ShadowUtils.setIsVoiceCapable(false); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE); } @Test public void getAvailabilityStatus_noPowerKey_shouldReturnUnsupportedOnDevice() { ShadowKeyCharacterMap.setDevicehasKey(false); ShadowUtils.setIsVoiceCapable(true); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE); } @Test public void isChecked_enabledHangUp_shouldReturnTrue() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP); mController.updateState(mPreference); assertThat(mController.isChecked()).isTrue(); assertThat(mPreference.isChecked()).isTrue(); } @Test public void isChecked_disabledHangUp_shouldReturnFalse() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF); mController.updateState(mPreference); assertThat(mController.isChecked()).isFalse(); assertThat(mPreference.isChecked()).isFalse(); } @Test public void setChecked_enabled_shouldEnableHangUp() { mController.setChecked(true); assertThat(Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, UNKNOWN)) .isEqualTo(Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP); } @Test public void setChecked_disabled_shouldDisableHangUp() { mController.setChecked(false); assertThat(Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, UNKNOWN)) .isEqualTo(Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF); } }
tests/robotests/src/com/android/settings/testutils/shadow/ShadowKeyCharacterMap.java 0 → 100644 +41 −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.testutils.shadow; import android.view.KeyCharacterMap; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; @Implements(KeyCharacterMap.class) public class ShadowKeyCharacterMap extends org.robolectric.shadows.ShadowKeyCharacterMap{ private static boolean sIsDeviceHasKey; public static void reset() { sIsDeviceHasKey = false; } public static void setDevicehasKey(boolean isDeviceHasKey) { sIsDeviceHasKey = isDeviceHasKey; } @Implementation protected static boolean deviceHasKey(int keyCode) { return sIsDeviceHasKey; } }