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);