From: Fan Zhang Date: Mon, 7 Nov 2016 23:12:52 +0000 (-0800) Subject: Add Input & Gesture/Language & Region pages under System. X-Git-Tag: android-x86-8.1-r1~1376^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=a1d1d67ce3bd3d88e4d8811717565201956af459;p=android-x86%2Fpackages-apps-Settings.git Add Input & Gesture/Language & Region pages under System. - Removed LanguageAndInputDashboardAlias because now the contents are moved to new pages. Bug: 32637613 Bug: 32643833 Test: RunSettingsRoboTests Change-Id: Ia66a942a449a07b9cbba53bdc97738148aafadb4 --- diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 713ba42606..acff8f45ac 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -3190,18 +3190,35 @@ - - - + + + + + android:value="com.android.settings.language.LanguageAndRegionSettings"/> + + + + + + + + + - + + Languages & input Languages & input + + Languages & region + + Input & gestures Keyboard & input methods diff --git a/res/xml/input_and_gesture.xml b/res/xml/input_and_gesture.xml new file mode 100644 index 0000000000..fb89589f0c --- /dev/null +++ b/res/xml/input_and_gesture.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/xml/language_and_region.xml b/res/xml/language_and_region.xml new file mode 100644 index 0000000000..62179c9229 --- /dev/null +++ b/res/xml/language_and_region.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 451c7e3663..85fb334a8e 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -41,12 +41,14 @@ public class Settings extends SettingsActivity { public static class WifiSettingsActivity extends SettingsActivity { /* empty */ } public static class WifiP2pSettingsActivity extends SettingsActivity { /* empty */ } public static class InputMethodAndLanguageSettingsActivity extends SettingsActivity { /* empty */ } + public static class InputAndGestureSettingsActivity extends SettingsActivity { /* empty */ } public static class AvailableVirtualKeyboardActivity extends SettingsActivity { /* empty */ } public static class KeyboardLayoutPickerActivity extends SettingsActivity { /* empty */ } public static class PhysicalKeyboardActivity extends SettingsActivity { /* empty */ } public static class InputMethodAndSubtypeEnablerActivity extends SettingsActivity { /* empty */ } public static class SpellCheckersSettingsActivity extends SettingsActivity { /* empty */ } public static class LocalePickerActivity extends SettingsActivity { /* empty */ } + public static class LanguageAndRegionSettingsActivity extends SettingsActivity { /* empty */ } public static class UserDictionarySettingsActivity extends SettingsActivity { /* empty */ } public static class HomeSettingsActivity extends SettingsActivity { /* empty */ } public static class DisplaySettingsActivity extends SettingsActivity { /* empty */ } diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index bd00085585..d1c726625c 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -99,11 +99,13 @@ import com.android.settings.fuelgauge.PowerUsageDetail; import com.android.settings.fuelgauge.PowerUsageSummary; import com.android.settings.gestures.GestureSettings; import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment; +import com.android.settings.inputmethod.InputAndGestureSettings; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; import com.android.settings.inputmethod.KeyboardLayoutPickerFragment; import com.android.settings.inputmethod.PhysicalKeyboardFragment; import com.android.settings.inputmethod.SpellCheckersSettings; import com.android.settings.inputmethod.UserDictionaryList; +import com.android.settings.language.LanguageAndRegionSettings; import com.android.settings.localepicker.LocaleListEditor; import com.android.settings.location.LocationSettings; import com.android.settings.network.NetworkDashboardFragment; @@ -291,7 +293,8 @@ public class SettingsActivity extends SettingsDrawerActivity // Home page > Security "com.android.settings.Settings.LocationDashboardAlias", // Home page > System - "com.android.settings.Settings.LanguageAndInputDashboardAlias", + Settings.LanguageAndRegionSettingsActivity.class.getName(), + Settings.InputAndGestureSettingsActivity.class.getName(), "com.android.settings.Settings.DateTimeDashboardAlias", "com.android.settings.Settings.AccessibilityDashboardAlias", "com.android.settings.Settings.AboutDeviceDashboardAlias", @@ -311,6 +314,8 @@ public class SettingsActivity extends SettingsDrawerActivity LocaleListEditor.class.getName(), InputMethodAndLanguageSettings.class.getName(), AvailableVirtualKeyboardFragment.class.getName(), + InputAndGestureSettings.class.getName(), + LanguageAndRegionSettings.class.getName(), SpellCheckersSettings.class.getName(), UserDictionaryList.class.getName(), UserDictionarySettings.class.getName(), diff --git a/src/com/android/settings/core/InstrumentedFragment.java b/src/com/android/settings/core/InstrumentedFragment.java index ca683e3c05..107fbab734 100644 --- a/src/com/android/settings/core/InstrumentedFragment.java +++ b/src/com/android/settings/core/InstrumentedFragment.java @@ -40,6 +40,8 @@ public abstract class InstrumentedFragment extends ObservablePreferenceFragment protected final int NETWORK_CATEGORY_FRAGMENT = PLACEHOLDER_METRIC + 3; protected final int CONNECTED_DEVICE_CATEGORY_FRAGMENT = PLACEHOLDER_METRIC + 4; protected final int APP_AND_NOTIFICATION_CATEGORY_FRAGMENT = PLACEHOLDER_METRIC + 5; + protected final int INPUT_AND_GESTURE_CATEGORY_FRAGMENT = PLACEHOLDER_METRIC + 6; + protected final int LANGUAGE_AND_REGION_CATEGORY_FRAGMENT = PLACEHOLDER_METRIC + 7; public InstrumentedFragment() { // Mixin that logs visibility change for activity. diff --git a/src/com/android/settings/inputmethod/InputAndGestureSettings.java b/src/com/android/settings/inputmethod/InputAndGestureSettings.java new file mode 100644 index 0000000000..874fc0b2b4 --- /dev/null +++ b/src/com/android/settings/inputmethod/InputAndGestureSettings.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2016 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.content.Context; + +import com.android.settings.R; +import com.android.settings.core.PreferenceController; +import com.android.settings.dashboard.DashboardFragment; +import com.android.settingslib.drawer.CategoryKey; + +import java.util.ArrayList; +import java.util.List; + +public class InputAndGestureSettings extends DashboardFragment { + + private static final String TAG = "InputAndGestureSettings"; + + @Override + public int getMetricsCategory() { + return INPUT_AND_GESTURE_CATEGORY_FRAGMENT; + } + + @Override + protected String getCategoryKey() { + return CategoryKey.CATEGORY_SYSTEM_INPUT; + } + + @Override + protected String getLogTag() { + return TAG; + } + + @Override + protected int getPreferenceScreenResId() { + return R.xml.input_and_gesture; + } + + @Override + protected List getPreferenceControllers(Context context) { + final GameControllerPreferenceController gameControllerPreferenceController + = new GameControllerPreferenceController(context); + getLifecycle().addObserver(gameControllerPreferenceController); + + final List controllers = new ArrayList<>(); + controllers.add(gameControllerPreferenceController); + + return controllers; + } +} diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java index 351f6b5470..2c121399f6 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java +++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java @@ -51,6 +51,11 @@ import com.android.settingslib.drawer.CategoryKey; import java.util.ArrayList; import java.util.List; +/** + * @deprecated New features should use {@code InputAndGestureSettings} and + * {@code LanguageAndRegionSettings} instead. + */ +@Deprecated public class InputMethodAndLanguageSettings extends DashboardFragment implements KeyboardLayoutDialogFragment.OnSetupKeyboardLayoutsListener, Indexable { diff --git a/src/com/android/settings/language/LanguageAndRegionSettings.java b/src/com/android/settings/language/LanguageAndRegionSettings.java new file mode 100644 index 0000000000..5741255437 --- /dev/null +++ b/src/com/android/settings/language/LanguageAndRegionSettings.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2016 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.language; + +import android.content.Context; +import android.speech.tts.TtsEngines; + +import com.android.settings.R; +import com.android.settings.core.PreferenceController; +import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.inputmethod.SpellCheckerPreferenceController; +import com.android.settingslib.drawer.CategoryKey; + +import java.util.ArrayList; +import java.util.List; + +public class LanguageAndRegionSettings extends DashboardFragment { + + private static final String TAG = "LangAndRegionSettings"; + + @Override + public int getMetricsCategory() { + return LANGUAGE_AND_REGION_CATEGORY_FRAGMENT; + } + + @Override + protected String getCategoryKey() { + return CategoryKey.CATEGORY_SYSTEM_LANGUAGE; + } + + @Override + protected String getLogTag() { + return TAG; + } + + @Override + protected int getPreferenceScreenResId() { + return R.xml.language_and_region; + } + + @Override + protected List getPreferenceControllers(Context context) { + final List controllers = new ArrayList<>(); + controllers.add(new PhoneLanguagePreferenceController(context)); + controllers.add(new SpellCheckerPreferenceController(context)); + controllers.add(new UserDictionaryPreferenceController(context)); + controllers.add(new TtsPreferenceController(context, new TtsEngines(context))); + return controllers; + } + +} diff --git a/tests/robotests/src/com/android/settings/inputmethod/InputAndGestureSettingsTest.java b/tests/robotests/src/com/android/settings/inputmethod/InputAndGestureSettingsTest.java new file mode 100644 index 0000000000..f51ee56f69 --- /dev/null +++ b/tests/robotests/src/com/android/settings/inputmethod/InputAndGestureSettingsTest.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2016 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.content.Context; +import android.hardware.input.InputManager; + +import com.android.settings.R; +import com.android.settings.SettingsRobolectricTestRunner; +import com.android.settings.TestConfig; +import com.android.settings.core.PreferenceController; +import com.android.settings.core.lifecycle.Lifecycle; +import com.android.settings.core.lifecycle.LifecycleObserver; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; + +import java.util.List; + +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class InputAndGestureSettingsTest { + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private Context mContext; + private TestFragment mFragment; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + when(mContext.getSystemService(Context.INPUT_SERVICE)).thenReturn(mock(InputManager.class)); + mFragment = new TestFragment(mContext); + } + + @Test + public void testGetPreferenceScreenResId() { + assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.input_and_gesture); + } + + @Test + public void testGetPreferenceControllers_shouldRegisterLifecycleObservers() { + final List controllers = mFragment.getPreferenceControllers(mContext); + int lifecycleObserverCount = 0; + for (PreferenceController controller : controllers) { + if (controller instanceof LifecycleObserver) { + lifecycleObserverCount++; + } + } + verify(mFragment.getLifecycle(), times(lifecycleObserverCount)) + .addObserver(any(LifecycleObserver.class)); + } + + public static class TestFragment extends InputAndGestureSettings { + + private Lifecycle mLifecycle; + private Context mContext; + + public TestFragment(Context context) { + mContext = context; + mLifecycle = mock(Lifecycle.class); + } + + @Override + public Context getContext() { + return mContext; + } + + @Override + protected Lifecycle getLifecycle() { + if (mLifecycle == null) { + return super.getLifecycle(); + } + return mLifecycle; + } + } +} diff --git a/tests/robotests/src/com/android/settings/language/LanguageAndRegionSettingsTest.java b/tests/robotests/src/com/android/settings/language/LanguageAndRegionSettingsTest.java new file mode 100644 index 0000000000..7efdc9df95 --- /dev/null +++ b/tests/robotests/src/com/android/settings/language/LanguageAndRegionSettingsTest.java @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2016 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.language; + +import android.content.Context; +import android.view.textservice.TextServicesManager; + +import com.android.settings.R; +import com.android.settings.SettingsRobolectricTestRunner; +import com.android.settings.TestConfig; +import com.android.settings.core.PreferenceController; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; + +import java.util.List; + +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class LanguageAndRegionSettingsTest { + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private Context mContext; + private TestFragment mFragment; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + when(mContext.getSystemService(Context.TEXT_SERVICES_MANAGER_SERVICE)) + .thenReturn(mock(TextServicesManager.class)); + mFragment = new TestFragment(mContext); + } + + @Test + public void testGetPreferenceScreenResId() { + assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.language_and_region); + } + + @Test + public void testGetPreferenceControllers_shouldAllBeCreated() { + final List controllers = mFragment.getPreferenceControllers(mContext); + + assertThat(controllers.isEmpty()).isFalse(); + } + + public static class TestFragment extends LanguageAndRegionSettings { + + private Context mContext; + + public TestFragment(Context context) { + mContext = context; + } + + @Override + public Context getContext() { + return mContext; + } + } + +}