Add fragment in xml instead of using injected way
- It can improve performance because we use less injected item
- Also remove summary provider from those fragments
Bug: 141653158
Test: robolectric
Change-Id: I6255f71b3b8300aea064a4fefd6711c1ff59e08a
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 310af0e..d0a2c05 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -592,14 +592,8 @@
<category android:name="android.intent.category.VOICE_LAUNCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
- <intent-filter>
- <action android:name="com.android.settings.action.SETTINGS" />
- </intent-filter>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.system" />
- <meta-data android:name="com.android.settings.order" android:value="-240"/>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.DateTimeSettings" />
+ android:value="com.android.settings.datetime.DateTimeSettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
</activity>
@@ -640,12 +634,6 @@
<category android:name="android.intent.category.VOICE_LAUNCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
- <intent-filter>
- <action android:name="com.android.settings.action.SETTINGS"/>
- </intent-filter>
- <meta-data android:name="com.android.settings.order" android:value="-260"/>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.system"/>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.language.LanguageAndInputSettings"/>
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
@@ -2387,11 +2375,11 @@
</intent-filter>
<meta-data android:name="com.android.settings.order" android:value="-45"/>
<meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.system" />
+ android:value="com.android.settings.category.ia.system" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.users.UserSettings" />
+ android:value="com.android.settings.users.UserSettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
+ android:value="true" />
</activity>
<activity
diff --git a/res/xml/system_dashboard_fragment.xml b/res/xml/system_dashboard_fragment.xml
index 6a753f2..88b8d2f 100644
--- a/res/xml/system_dashboard_fragment.xml
+++ b/res/xml/system_dashboard_fragment.xml
@@ -22,6 +22,14 @@
settings:initialExpandedChildrenCount="4">
<Preference
+ android:key="language_input_settings"
+ android:title="@string/language_settings"
+ android:icon="@drawable/ic_settings_language"
+ android:order="-260"
+ android:fragment="com.android.settings.language.LanguageAndInputSettings"
+ settings:controller="com.android.settings.language.LanguageAndInputPreferenceController"/>
+
+ <Preference
android:key="gesture_settings"
android:title="@string/gesture_preference_title"
android:icon="@drawable/ic_settings_gestures"
@@ -30,6 +38,14 @@
settings:controller="com.android.settings.gestures.GesturesSettingPreferenceController"/>
<Preference
+ android:key="date_time_settings"
+ android:title="@string/date_and_time"
+ android:icon="@drawable/ic_settings_date_time"
+ android:order="-240"
+ android:fragment="com.android.settings.datetime.DateTimeSettings"
+ settings:controller="com.android.settings.datetime.DateTimePreferenceController"/>
+
+ <Preference
android:key="reset_dashboard"
android:title="@string/reset_dashboard_title"
android:summary="@string/reset_dashboard_summary"
@@ -47,7 +63,7 @@
android:order="-30"
settings:keywords="@string/keywords_system_update_settings"
settings:controller="com.android.settings.system.SystemUpdatePreferenceController">
- <intent android:action="android.settings.SYSTEM_UPDATE_SETTINGS" />
+ <intent android:action="android.settings.SYSTEM_UPDATE_SETTINGS"/>
</Preference>
<Preference
@@ -57,7 +73,7 @@
settings:controller="com.android.settings.system.AdditionalSystemUpdatePreferenceController">
<intent android:action="android.intent.action.MAIN"
android:targetPackage="@string/additional_system_update"
- android:targetClass="@string/additional_system_update_menu" />
+ android:targetClass="@string/additional_system_update_menu"/>
</Preference>
</PreferenceScreen>
\ 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 945ac5c..aa96a02 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.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 0000000..c2b2b00
--- /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 dd489da..469a4c7 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.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 @@
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 0000000..04bf622
--- /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<InputMethodInfo> 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 4f45890..c896629 100644
--- a/src/com/android/settings/language/LanguageAndInputSettings.java
+++ b/src/com/android/settings/language/LanguageAndInputSettings.java
@@ -18,21 +18,13 @@
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 @@
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<InputMethodInfo> 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 0000000..3f27fdd
--- /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<InputMethodInfo> 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 19e62b1..a6a362e 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 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 @@
@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;
@@ -124,31 +114,6 @@
}
@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<InputMethodInfo> 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);
final Resources res = spy(RuntimeEnvironment.application.getResources());