diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 42b5fe3f9bc..336457d24c6 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1011,7 +1011,7 @@ android:taskAffinity="com.android.settings" android:parentActivityName="Settings"> - + @@ -1027,7 +1027,7 @@ + android:value="com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment" /> diff --git a/res/values/strings.xml b/res/values/strings.xml index 714f07ff92b..de3a92322d9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6445,6 +6445,7 @@ + Account for content @@ -9231,14 +9232,14 @@ - My Phone + My Phone - My Tablet + My Tablet - My Device + My Device - Account + Account - Device name + Device name diff --git a/res/xml/me_card.xml b/res/xml/me_card.xml deleted file mode 100644 index 2d8c21f6073..00000000000 --- a/res/xml/me_card.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml new file mode 100644 index 00000000000..673b2a5722a --- /dev/null +++ b/res/xml/my_device_info.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/android/settings/MeCardFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java similarity index 61% rename from src/com/android/settings/MeCardFragment.java rename to src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java index 9790fd5e3fb..a3018072c30 100644 --- a/src/com/android/settings/MeCardFragment.java +++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings; +package com.android.settings.deviceinfo.aboutphone; import android.app.Activity; import android.app.Fragment; @@ -23,13 +23,32 @@ import android.content.pm.UserInfo; import android.os.Bundle; import android.os.UserManager; import android.provider.SearchIndexableResource; +import android.telephony.TelephonyManager; import android.view.View; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.settings.R; +import com.android.settings.SettingsActivity; +import com.android.settings.Utils; import com.android.settings.applications.LayoutPreference; import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.deviceinfo.BluetoothAddressPreferenceController; import com.android.settings.deviceinfo.BrandedAccountPreferenceController; +import com.android.settings.deviceinfo.BuildNumberPreferenceController; +import com.android.settings.deviceinfo.DeviceModelPreferenceController; +import com.android.settings.deviceinfo.FccEquipmentIdPreferenceController; +import com.android.settings.deviceinfo.FeedbackPreferenceController; +import com.android.settings.deviceinfo.ImsStatusPreferenceController; +import com.android.settings.deviceinfo.IpAddressPreferenceController; +import com.android.settings.deviceinfo.ManualPreferenceController; import com.android.settings.deviceinfo.PhoneNumberPreferenceController; +import com.android.settings.deviceinfo.RegulatoryInfoPreferenceController; +import com.android.settings.deviceinfo.SafetyInfoPreferenceController; +import com.android.settings.deviceinfo.WifiMacAddressPreferenceController; +import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceController; +import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController; +import com.android.settings.deviceinfo.simstatus.SimStatusPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settings.widget.EntityHeaderController; @@ -40,10 +59,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -public class MeCardFragment extends DashboardFragment implements Indexable { +public class MyDeviceInfoFragment extends DashboardFragment { private static final String LOG_TAG = "MeCardFragment"; - private static final String KEY_ME_CARD_HEADER = "me_card_header"; + private static final String KEY_MY_DEVICE_INFO_HEADER = "my_device_info_header"; + private static final String KEY_LEGAL_CONTAINER = "legal_container"; @Override public int getMetricsCategory() { @@ -68,7 +88,7 @@ public class MeCardFragment extends DashboardFragment implements Indexable { @Override protected int getPreferenceScreenResId() { - return R.xml.me_card; + return R.xml.my_device_info; } @Override @@ -82,6 +102,21 @@ public class MeCardFragment extends DashboardFragment implements Indexable { final List controllers = new ArrayList<>(); controllers.add(new PhoneNumberPreferenceController(context)); controllers.add(new BrandedAccountPreferenceController(context)); + controllers.add(new SimStatusPreferenceController(context, fragment)); + controllers.add(new DeviceModelPreferenceController(context, fragment)); + controllers.add(new ImeiInfoPreferenceController(context, fragment)); + controllers.add(new FirmwareVersionPreferenceController(context, fragment)); + controllers.add(new ImsStatusPreferenceController(context, lifecycle)); + controllers.add(new IpAddressPreferenceController(context, lifecycle)); + controllers.add(new WifiMacAddressPreferenceController(context, lifecycle)); + controllers.add(new BluetoothAddressPreferenceController(context, lifecycle)); + controllers.add(new RegulatoryInfoPreferenceController(context)); + controllers.add(new SafetyInfoPreferenceController(context)); + controllers.add(new ManualPreferenceController(context)); + controllers.add(new FeedbackPreferenceController(fragment, context)); + controllers.add(new FccEquipmentIdPreferenceController(context)); + controllers.add( + new BuildNumberPreferenceController(context, activity, fragment, lifecycle)); // TODO: Add preference controller for getting the device name. return controllers; } @@ -89,7 +124,7 @@ public class MeCardFragment extends DashboardFragment implements Indexable { private void initHeader() { // TODO: Migrate into its own controller. final LayoutPreference headerPreference = - (LayoutPreference) getPreferenceScreen().findPreference(KEY_ME_CARD_HEADER); + (LayoutPreference) getPreferenceScreen().findPreference(KEY_MY_DEVICE_INFO_HEADER); final View appSnippet = headerPreference.findViewById(R.id.entity_header); final Activity context = getActivity(); final Bundle bundle = getArguments(); @@ -123,7 +158,7 @@ public class MeCardFragment extends DashboardFragment implements Indexable { public List getXmlResourcesToIndex( Context context, boolean enabled) { final SearchIndexableResource sir = new SearchIndexableResource(context); - sir.xmlResId = R.xml.me_card; + sir.xmlResId = R.xml.my_device_info; return Arrays.asList(sir); } @@ -133,5 +168,13 @@ public class MeCardFragment extends DashboardFragment implements Indexable { return buildPreferenceControllers(context, null /*activity */, null /* fragment */, null /* lifecycle */); } + + @Override + public List getNonIndexableKeys(Context context) { + List keys = super.getNonIndexableKeys(context); + // The legal container is duplicated, so we ignore it here. + keys.add(KEY_LEGAL_CONTAINER); + return keys; + } }; } diff --git a/src/com/android/settings/search/SearchIndexableResourcesImpl.java b/src/com/android/settings/search/SearchIndexableResourcesImpl.java index 4067e6b69af..034cbd0e06b 100644 --- a/src/com/android/settings/search/SearchIndexableResourcesImpl.java +++ b/src/com/android/settings/search/SearchIndexableResourcesImpl.java @@ -21,7 +21,7 @@ import android.support.annotation.VisibleForTesting; import com.android.settings.DateTimeSettings; import com.android.settings.DisplaySettings; import com.android.settings.LegalSettings; -import com.android.settings.MeCardFragment; +import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment; import com.android.settings.accessibility.AccessibilitySettings; import com.android.settings.accessibility.AccessibilityShortcutPreferenceFragment; import com.android.settings.accessibility.MagnificationPreferenceFragment; @@ -174,7 +174,7 @@ public class SearchIndexableResourcesImpl implements SearchIndexableResources { addIndex(ZenModeAutomationSettings.class); addIndex(NightDisplaySettings.class); addIndex(SmartBatterySettings.class); - addIndex(MeCardFragment.class); + addIndex(MyDeviceInfoFragment.class); } @Override diff --git a/tests/robotests/src/com/android/settings/deviceinfo/MyDeviceInfoFragmentTest.java b/tests/robotests/src/com/android/settings/deviceinfo/MyDeviceInfoFragmentTest.java new file mode 100644 index 00000000000..36f0662c2a8 --- /dev/null +++ b/tests/robotests/src/com/android/settings/deviceinfo/MyDeviceInfoFragmentTest.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2018 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.deviceinfo; + +import static com.android.settings.SettingsActivity.EXTRA_FRAGMENT_ARG_KEY; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.app.Activity; +import android.content.Context; +import android.os.Bundle; +import android.support.v7.preference.PreferenceScreen; +import android.telephony.TelephonyManager; + +import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment; +import com.android.settings.TestConfig; +import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.testutils.shadow.SettingsShadowResources; +import com.android.settings.testutils.shadow.SettingsShadowSystemProperties; +import com.android.settings.testutils.shadow.ShadowConnectivityManager; +import com.android.settings.testutils.shadow.ShadowUserManager; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowApplication; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config( + manifest = TestConfig.MANIFEST_PATH, + sdk = TestConfig.SDK_VERSION, + shadows = {ShadowConnectivityManager.class, ShadowUserManager.class} +) +public class MyDeviceInfoFragmentTest { + @Mock + private Activity mActivity; + @Mock + private PreferenceScreen mScreen; + @Mock + private TelephonyManager mTelephonyManager; + + private Context mContext; + private MyDeviceInfoFragment mSettings; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + FakeFeatureFactory.setupForTest(); + mContext = RuntimeEnvironment.application; + mSettings = spy(new MyDeviceInfoFragment()); + + when(mSettings.getActivity()).thenReturn(mActivity); + when(mSettings.getContext()).thenReturn(mContext); + when(mActivity.getTheme()).thenReturn(mContext.getTheme()); + when(mActivity.getResources()).thenReturn(mContext.getResources()); + doNothing().when(mSettings).onCreatePreferences(any(), any()); + + doReturn(mScreen).when(mSettings).getPreferenceScreen(); + when(mSettings.getPreferenceScreen()).thenReturn(mScreen); + ShadowApplication.getInstance().setSystemService(Context.TELEPHONY_SERVICE, + mTelephonyManager); + } + + @Test + @Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class, + SettingsShadowSystemProperties.class}) + public void onCreate_fromSearch_shouldNotOverrideInitialExpandedCount() { + final Bundle args = new Bundle(); + args.putString(EXTRA_FRAGMENT_ARG_KEY, "search_key"); + mSettings.setArguments(args); + + mSettings.onCreate(null /* icicle */); + + verify(mScreen).setInitialExpandedChildrenCount(Integer.MAX_VALUE); + } +}