diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 310af0e6e58..d0a2c05c7e2 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -592,14 +592,8 @@
-
-
-
-
-
+ android:value="com.android.settings.datetime.DateTimeSettings" />
@@ -640,12 +634,6 @@
-
-
-
-
-
+ android:value="com.android.settings.category.ia.system" />
+ android:value="com.android.settings.users.UserSettings" />
+ android:value="true" />
+
+
+
+
-
+
+ android:targetClass="@string/additional_system_update_menu"/>
\ No newline at end of file
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 945ac5c927b..aa96a0212b1 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -16,7 +16,6 @@
package com.android.settings.core.gateway;
-import com.android.settings.DateTimeSettings;
import com.android.settings.DisplaySettings;
import com.android.settings.IccLockSettings;
import com.android.settings.MasterClear;
@@ -63,6 +62,7 @@ import com.android.settings.connecteddevice.usb.UsbDetailsFragment;
import com.android.settings.datausage.DataSaverSummary;
import com.android.settings.datausage.DataUsageList;
import com.android.settings.datausage.DataUsageSummary;
+import com.android.settings.datetime.DateTimeSettings;
import com.android.settings.deletionhelper.AutomaticStorageManagerSettings;
import com.android.settings.development.DevelopmentSettingsDashboardFragment;
import com.android.settings.deviceinfo.PrivateVolumeForget;
diff --git a/src/com/android/settings/datetime/DateTimePreferenceController.java b/src/com/android/settings/datetime/DateTimePreferenceController.java
new file mode 100644
index 00000000000..c2b2b00ba1c
--- /dev/null
+++ b/src/com/android/settings/datetime/DateTimePreferenceController.java
@@ -0,0 +1,43 @@
+/*
+ * 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.datetime;
+
+import android.content.Context;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.datetime.ZoneGetter;
+
+import java.util.Calendar;
+
+public class DateTimePreferenceController extends BasePreferenceController {
+
+ public DateTimePreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ final Calendar now = Calendar.getInstance();
+ return ZoneGetter.getTimeZoneOffsetAndName(mContext,
+ now.getTimeZone(), now.getTime());
+ }
+}
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/datetime/DateTimeSettings.java
similarity index 73%
rename from src/com/android/settings/DateTimeSettings.java
rename to src/com/android/settings/datetime/DateTimeSettings.java
index dd489da1c6e..469a4c7e1b8 100644
--- a/src/com/android/settings/DateTimeSettings.java
+++ b/src/com/android/settings/datetime/DateTimeSettings.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 The Android Open Source Project
+ * 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.
@@ -11,10 +11,10 @@
* 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.
+ * limitations under the License
*/
-package com.android.settings;
+package com.android.settings.datetime;
import android.app.Activity;
import android.app.Dialog;
@@ -22,23 +22,13 @@ import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
+import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.dashboard.SummaryLoader;
-import com.android.settings.datetime.AutoTimeFormatPreferenceController;
-import com.android.settings.datetime.AutoTimePreferenceController;
-import com.android.settings.datetime.AutoTimeZonePreferenceController;
-import com.android.settings.datetime.DatePreferenceController;
-import com.android.settings.datetime.TimeChangeListenerMixin;
-import com.android.settings.datetime.TimeFormatPreferenceController;
-import com.android.settings.datetime.TimePreferenceController;
-import com.android.settings.datetime.TimeZonePreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.datetime.ZoneGetter;
import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
-import java.util.Calendar;
import java.util.List;
@SearchIndexable
@@ -144,36 +134,6 @@ public class DateTimeSettings extends DashboardFragment implements
showDialog(DatePreferenceController.DIALOG_DATEPICKER);
}
- private static class SummaryProvider implements SummaryLoader.SummaryProvider {
-
- private final Context mContext;
- private final SummaryLoader mSummaryLoader;
-
- public SummaryProvider(Context context, SummaryLoader summaryLoader) {
- mContext = context;
- mSummaryLoader = summaryLoader;
- }
-
- @Override
- public void setListening(boolean listening) {
- if (listening) {
- final Calendar now = Calendar.getInstance();
- mSummaryLoader.setSummary(this, ZoneGetter.getTimeZoneOffsetAndName(mContext,
- now.getTimeZone(), now.getTime()));
- }
- }
- }
-
- public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
- = new SummaryLoader.SummaryProviderFactory() {
- @Override
- public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
- SummaryLoader summaryLoader) {
- return new SummaryProvider(activity, summaryLoader);
- }
- };
-
-
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.date_time_prefs);
}
diff --git a/src/com/android/settings/language/LanguageAndInputPreferenceController.java b/src/com/android/settings/language/LanguageAndInputPreferenceController.java
new file mode 100644
index 00000000000..04bf6227fb8
--- /dev/null
+++ b/src/com/android/settings/language/LanguageAndInputPreferenceController.java
@@ -0,0 +1,63 @@
+/*
+ * 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.language;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodManager;
+
+import com.android.settings.core.BasePreferenceController;
+
+import java.util.List;
+
+public class LanguageAndInputPreferenceController extends BasePreferenceController {
+
+ private PackageManager mPackageManager;
+ private InputMethodManager mInputMethodManager;
+
+ public LanguageAndInputPreferenceController(Context context, String key) {
+ super(context, key);
+ mPackageManager = mContext.getPackageManager();
+ mInputMethodManager = mContext.getSystemService(InputMethodManager.class);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ final String flattenComponent = Settings.Secure.getString(
+ mContext.getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
+ if (!TextUtils.isEmpty(flattenComponent)) {
+ final String pkg = ComponentName.unflattenFromString(flattenComponent)
+ .getPackageName();
+ final List imis = mInputMethodManager.getInputMethodList();
+ for (InputMethodInfo imi : imis) {
+ if (TextUtils.equals(imi.getPackageName(), pkg)) {
+ return imi.loadLabel(mPackageManager);
+ }
+ }
+ }
+ return "";
+ }
+}
diff --git a/src/com/android/settings/language/LanguageAndInputSettings.java b/src/com/android/settings/language/LanguageAndInputSettings.java
index 4f45890162e..c8966297a26 100644
--- a/src/com/android/settings/language/LanguageAndInputSettings.java
+++ b/src/com/android/settings/language/LanguageAndInputSettings.java
@@ -18,21 +18,13 @@ package com.android.settings.language;
import android.app.Activity;
import android.app.settings.SettingsEnums;
-import android.content.ComponentName;
-import android.content.ContentResolver;
import android.content.Context;
-import android.content.pm.PackageManager;
-import android.provider.Settings;
-import android.text.TextUtils;
-import android.view.inputmethod.InputMethodInfo;
-import android.view.inputmethod.InputMethodManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.inputmethod.PhysicalKeyboardPreferenceController;
import com.android.settings.inputmethod.SpellCheckerPreferenceController;
import com.android.settings.inputmethod.VirtualKeyboardPreferenceController;
@@ -122,44 +114,6 @@ public class LanguageAndInputSettings extends DashboardFragment {
return controllers;
}
- private static class SummaryProvider implements SummaryLoader.SummaryProvider {
-
- private final Context mContext;
- private final SummaryLoader mSummaryLoader;
-
- public SummaryProvider(Context context, SummaryLoader summaryLoader) {
- mContext = context;
- mSummaryLoader = summaryLoader;
- }
-
- @Override
- public void setListening(boolean listening) {
- final ContentResolver contentResolver = mContext.getContentResolver();
- if (listening) {
- final String flattenComponent = Settings.Secure.getString(
- contentResolver, Settings.Secure.DEFAULT_INPUT_METHOD);
- if (!TextUtils.isEmpty(flattenComponent)) {
- final PackageManager packageManage = mContext.getPackageManager();
- final String pkg = ComponentName.unflattenFromString(flattenComponent)
- .getPackageName();
- final InputMethodManager imm = (InputMethodManager)
- mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
- final List imis = imm.getInputMethodList();
- for (InputMethodInfo imi : imis) {
- if (TextUtils.equals(imi.getPackageName(), pkg)) {
- mSummaryLoader.setSummary(this, imi.loadLabel(packageManage));
- return;
- }
- }
- }
- mSummaryLoader.setSummary(this, "");
- }
- }
- }
-
- public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
- = (activity, summaryLoader) -> new SummaryProvider(activity, summaryLoader);
-
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.language_and_input) {
diff --git a/tests/robotests/src/com/android/settings/language/LanguageAndInputPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/language/LanguageAndInputPreferenceControllerTest.java
new file mode 100644
index 00000000000..3f27fddc895
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/language/LanguageAndInputPreferenceControllerTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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.language;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings;
+import android.view.inputmethod.InputMethodInfo;
+
+import com.android.settings.testutils.shadow.ShadowInputMethodManagerWithMethodList;
+
+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;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = ShadowInputMethodManagerWithMethodList.class)
+public class LanguageAndInputPreferenceControllerTest {
+ private Context mContext;
+
+ @Before
+ public void setUp() {
+ mContext = spy(RuntimeEnvironment.application);
+ }
+
+ @Test
+ public void getSummary_shouldSetToCurrentImeName() {
+ final ComponentName componentName = new ComponentName("name1", "cls");
+ final ContentResolver cr = mContext.getContentResolver();
+ Settings.Secure.putString(cr, Settings.Secure.DEFAULT_INPUT_METHOD,
+ componentName.flattenToString());
+ final List imis = new ArrayList<>();
+ imis.add(mock(InputMethodInfo.class));
+ when(imis.get(0).getPackageName()).thenReturn("name1");
+ when(imis.get(0).loadLabel(any())).thenReturn("label");
+ ShadowInputMethodManagerWithMethodList.getShadow().setInputMethodList(imis);
+
+ final LanguageAndInputPreferenceController controller =
+ new LanguageAndInputPreferenceController(mContext, "key");
+
+ assertThat(controller.getSummary().toString()).contains("label");
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java b/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java
index 19e62b11c9e..a6a362e27ee 100644
--- a/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java
@@ -28,23 +28,17 @@ import static org.mockito.Mockito.when;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
-import android.content.ComponentName;
-import android.content.ContentResolver;
import android.content.Context;
-import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.hardware.input.InputManager;
import android.os.UserManager;
-import android.provider.Settings;
import android.view.autofill.AutofillManager;
-import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import android.view.textservice.TextServicesManager;
import androidx.lifecycle.LifecycleObserver;
import com.android.settings.R;
-import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.testutils.XmlTestUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -67,16 +61,12 @@ public class LanguageAndInputSettingsTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Activity mActivity;
@Mock
- private PackageManager mPackageManager;
- @Mock
private InputManager mIm;
@Mock
private InputMethodManager mImm;
@Mock
private DevicePolicyManager mDpm;
@Mock
- private InputMethodManager mInputMethodManager;
- @Mock
private AutofillManager mAutofillManager;
private TestFragment mFragment;
@@ -123,31 +113,6 @@ public class LanguageAndInputSettingsTest {
assertThat(controllers.isEmpty()).isFalse();
}
- @Test
- public void testSummary_shouldSetToCurrentImeName() {
- final Activity activity = mock(Activity.class);
- final SummaryLoader loader = mock(SummaryLoader.class);
- final ComponentName componentName = new ComponentName("pkg", "cls");
- final ContentResolver cr = activity.getContentResolver();
- Settings.Secure.putString(cr, Settings.Secure.DEFAULT_INPUT_METHOD,
- componentName.flattenToString());
- when(activity.getSystemService(Context.INPUT_METHOD_SERVICE))
- .thenReturn(mInputMethodManager);
- when(activity.getPackageManager()).thenReturn(mPackageManager);
- final List imis = new ArrayList<>();
- imis.add(mock(InputMethodInfo.class));
- when(imis.get(0).getPackageName()).thenReturn(componentName.getPackageName());
- when(mInputMethodManager.getInputMethodList()).thenReturn(imis);
-
- SummaryLoader.SummaryProvider provider = LanguageAndInputSettings.SUMMARY_PROVIDER_FACTORY
- .createSummaryProvider(activity, loader);
-
- provider.setListening(true);
-
- verify(imis.get(0)).loadLabel(mPackageManager);
- verify(loader).setSummary(provider, null);
- }
-
@Test
public void testNonIndexableKeys_existInXmlLayout() {
final Context context = spy(RuntimeEnvironment.application);