diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 2d031ed1384..9106a0a1c54 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -202,6 +202,31 @@ android:value="true" /> + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 54bdc776ab3..da35c4b8b23 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -16,7 +16,10 @@ package com.android.settings; +import static com.android.settings.core.FeatureFlags.CONNECTED_DEVICE_V2; + import android.os.Bundle; +import android.util.FeatureFlagUtils; import com.android.settings.enterprise.EnterprisePrivacySettings; @@ -165,7 +168,12 @@ public class Settings extends SettingsActivity { // Top level categories for new IA public static class NetworkDashboardActivity extends SettingsActivity {} - public static class ConnectedDeviceDashboardActivity extends SettingsActivity {} + public static class ConnectedDeviceDashboardActivity extends SettingsActivity { + public static final boolean isEnabled() { + return FeatureFlagUtils.isEnabled(null /* context */, CONNECTED_DEVICE_V2); + } + } + public static class ConnectedDeviceDashboardActivityOld extends SettingsActivity {} public static class AppAndNotificationDashboardActivity extends SettingsActivity {} public static class StorageDashboardActivity extends SettingsActivity {} public static class UserAndAccountDashboardActivity extends SettingsActivity {} diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 78c9c215a75..60d16ff11df 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -789,6 +789,21 @@ public class SettingsActivity extends SettingsDrawerActivity Utils.isBandwidthControlEnabled() /* enabled */, isAdmin) || somethingChanged; + final boolean isConnectedDeviceV2Enabled = + Settings.ConnectedDeviceDashboardActivity.isEnabled(); + // Enable new connected page if v2 enabled + somethingChanged = setTileEnabled( + new ComponentName(packageName, + Settings.ConnectedDeviceDashboardActivity.class.getName()), + isConnectedDeviceV2Enabled && !UserManager.isDeviceInDemoMode(this) /* enabled */, + isAdmin) || somethingChanged; + // Enable old connected page if v2 disabled + somethingChanged = setTileEnabled( + new ComponentName(packageName, + Settings.ConnectedDeviceDashboardActivityOld.class.getName()), + !isConnectedDeviceV2Enabled && !UserManager.isDeviceInDemoMode(this) /* enabled */, + isAdmin) || somethingChanged; + somethingChanged = setTileEnabled(new ComponentName(packageName, Settings.SimSettingsActivity.class.getName()), Utils.showSimCardTile(this), isAdmin) @@ -809,11 +824,6 @@ public class SettingsActivity extends SettingsDrawerActivity !UserManager.isDeviceInDemoMode(this), isAdmin) || somethingChanged; - somethingChanged = setTileEnabled(new ComponentName(packageName, - Settings.ConnectedDeviceDashboardActivity.class.getName()), - !UserManager.isDeviceInDemoMode(this), isAdmin) - || somethingChanged; - somethingChanged = setTileEnabled(new ComponentName(packageName, Settings.DateTimeSettingsActivity.class.getName()), !UserManager.isDeviceInDemoMode(this), isAdmin) diff --git a/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.java b/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.java index 8d9e1c433d7..c4962d6482d 100644 --- a/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.java +++ b/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.java @@ -14,4 +14,4 @@ public class BluetoothFeatureProviderImpl implements BluetoothFeatureProvider { public boolean isDeviceDetailPageEnabled() { return false; } -} +} \ No newline at end of file diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java index 483b00c3e44..74f6ea2215a 100644 --- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java +++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java @@ -43,7 +43,6 @@ import java.util.List; public class ConnectedDeviceDashboardFragment extends DashboardFragment { private static final String TAG = "ConnectedDeviceFrag"; - private UsbModePreferenceController mUsbPrefController; @Override public int getMetricsCategory() { @@ -67,28 +66,7 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment { @Override protected List getPreferenceControllers(Context context) { - final List controllers = new ArrayList<>(); - final Lifecycle lifecycle = getLifecycle(); - final NfcPreferenceController nfcPreferenceController = - new NfcPreferenceController(context); - lifecycle.addObserver(nfcPreferenceController); - controllers.add(nfcPreferenceController); - mUsbPrefController = new UsbModePreferenceController(context, new UsbBackend(context)); - lifecycle.addObserver(mUsbPrefController); - controllers.add(mUsbPrefController); - final BluetoothMasterSwitchPreferenceController bluetoothPreferenceController = - new BluetoothMasterSwitchPreferenceController( - context, Utils.getLocalBtManager(context), this, - (SettingsActivity) getActivity()); - lifecycle.addObserver(bluetoothPreferenceController); - controllers.add(bluetoothPreferenceController); - - SmsMirroringFeatureProvider smsMirroringFeatureProvider = - FeatureFactory.getFactory(context).getSmsMirroringFeatureProvider(); - AbstractPreferenceController smsMirroringController = - smsMirroringFeatureProvider.getController(context); - controllers.add(smsMirroringController); - return controllers; + return null; } @VisibleForTesting @@ -136,28 +114,14 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment { @Override public List getXmlResourcesToIndex( Context context, boolean enabled) { - final SearchIndexableResource sir = new SearchIndexableResource(context); - sir.xmlResId = R.xml.connected_devices; - return Arrays.asList(sir); + return new ArrayList<>(); } @Override public List getNonIndexableKeys(Context context) { - final List keys = super.getNonIndexableKeys(context); - PackageManager pm = context.getPackageManager(); - if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC)) { - keys.add(NfcPreferenceController.KEY_TOGGLE_NFC); - keys.add(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS); - } - keys.add(BluetoothMasterSwitchPreferenceController.KEY_TOGGLE_BLUETOOTH); - SmsMirroringFeatureProvider smsMirroringFeatureProvider = - FeatureFactory.getFactory(context).getSmsMirroringFeatureProvider(); - SmsMirroringPreferenceController smsMirroringController = - smsMirroringFeatureProvider.getController(context); - smsMirroringController.updateNonIndexableKeys(keys); - return keys; + return new ArrayList<>(); } }; } diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java new file mode 100644 index 00000000000..6a8f26d9e09 --- /dev/null +++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java @@ -0,0 +1,168 @@ +/* + * 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.connecteddevice; + +import android.app.Activity; +import android.content.Context; +import android.content.pm.PackageManager; +import android.provider.SearchIndexableResource; +import android.support.annotation.VisibleForTesting; + +import com.android.internal.logging.nano.MetricsProto; +import com.android.settings.R; +import com.android.settings.SettingsActivity; +import com.android.settings.bluetooth.BluetoothMasterSwitchPreferenceController; +import com.android.settings.bluetooth.Utils; +import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.dashboard.SummaryLoader; +import com.android.settings.deviceinfo.UsbBackend; +import com.android.settings.nfc.NfcPreferenceController; +import com.android.settings.overlay.FeatureFactory; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settingslib.core.AbstractPreferenceController; +import com.android.settingslib.core.lifecycle.Lifecycle; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * This is the previous {@link ConnectedDeviceDashboardFragment} in Android O, in Android P the + * main entry will be {@link ConnectedDeviceDashboardFragment} + * + * @deprecated + */ +@Deprecated +public class ConnectedDeviceDashboardFragmentOld extends DashboardFragment { + + private static final String TAG = "ConnectedDeviceFrag2"; + private UsbModePreferenceController mUsbPrefController; + + @Override + public int getMetricsCategory() { + return MetricsProto.MetricsEvent.SETTINGS_CONNECTED_DEVICE_CATEGORY; + } + + @Override + protected String getLogTag() { + return TAG; + } + + @Override + protected int getHelpResource() { + return R.string.help_url_connected_devices; + } + + @Override + protected int getPreferenceScreenResId() { + return R.xml.connected_devices_old; + } + + @Override + protected List getPreferenceControllers(Context context) { + final List controllers = new ArrayList<>(); + final Lifecycle lifecycle = getLifecycle(); + final NfcPreferenceController nfcPreferenceController = + new NfcPreferenceController(context); + lifecycle.addObserver(nfcPreferenceController); + controllers.add(nfcPreferenceController); + mUsbPrefController = new UsbModePreferenceController(context, new UsbBackend(context)); + lifecycle.addObserver(mUsbPrefController); + controllers.add(mUsbPrefController); + final BluetoothMasterSwitchPreferenceController bluetoothPreferenceController = + new BluetoothMasterSwitchPreferenceController( + context, Utils.getLocalBtManager(context), this, + (SettingsActivity) getActivity()); + lifecycle.addObserver(bluetoothPreferenceController); + controllers.add(bluetoothPreferenceController); + + SmsMirroringFeatureProvider smsMirroringFeatureProvider = + FeatureFactory.getFactory(context).getSmsMirroringFeatureProvider(); + AbstractPreferenceController smsMirroringController = + smsMirroringFeatureProvider.getController(context); + controllers.add(smsMirroringController); + return controllers; + } + + @VisibleForTesting + static class SummaryProvider implements SummaryLoader.SummaryProvider { + + private final Context mContext; + private final SummaryLoader mSummaryLoader; + private final NfcPreferenceController mNfcPreferenceController; + + public SummaryProvider(Context context, SummaryLoader summaryLoader) { + mContext = context; + mSummaryLoader = summaryLoader; + mNfcPreferenceController = new NfcPreferenceController(context); + } + + @Override + public void setListening(boolean listening) { + if (listening) { + if (mNfcPreferenceController.isAvailable()) { + mSummaryLoader.setSummary(this, + mContext.getString(R.string.connected_devices_dashboard_summary)); + } else { + mSummaryLoader.setSummary(this, mContext.getString( + R.string.connected_devices_dashboard_no_nfc_summary)); + } + } + } + } + + 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); + } + }; + + /** + * For Search. + */ + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex( + Context context, boolean enabled) { + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.connected_devices_old; + return Arrays.asList(sir); + } + + @Override + public List getNonIndexableKeys(Context context) { + final List keys = super.getNonIndexableKeys(context); + PackageManager pm = context.getPackageManager(); + if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC)) { + keys.add(NfcPreferenceController.KEY_TOGGLE_NFC); + keys.add(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS); + } + keys.add(BluetoothMasterSwitchPreferenceController.KEY_TOGGLE_BLUETOOTH); + + SmsMirroringFeatureProvider smsMirroringFeatureProvider = + FeatureFactory.getFactory(context).getSmsMirroringFeatureProvider(); + SmsMirroringPreferenceController smsMirroringController = + smsMirroringFeatureProvider.getController(context); + smsMirroringController.updateNonIndexableKeys(keys); + + return keys; + } + }; +} diff --git a/src/com/android/settings/core/FeatureFlags.java b/src/com/android/settings/core/FeatureFlags.java index 58ca7d1b88f..547318faf02 100644 --- a/src/com/android/settings/core/FeatureFlags.java +++ b/src/com/android/settings/core/FeatureFlags.java @@ -24,4 +24,5 @@ public class FeatureFlags { public static final String SEARCH_V2 = "settings_search_v2"; public static final String SUGGESTIONS_V2 = "new_settings_suggestion"; public static final String APP_INFO_V2 = "settings_app_info_v2"; + public static final String CONNECTED_DEVICE_V2 = "settings_connected_device_v2"; } diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index 52ae57f4b43..37cd4310be7 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -58,6 +58,7 @@ import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment; import com.android.settings.bluetooth.BluetoothSettings; import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment; +import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragmentOld; import com.android.settings.dashboard.SupportFragment; import com.android.settings.datausage.DataPlanUsageSummary; import com.android.settings.datausage.DataUsageList; @@ -248,6 +249,7 @@ public class SettingsGateway { SystemDashboardFragment.class.getName(), NetworkDashboardFragment.class.getName(), ConnectedDeviceDashboardFragment.class.getName(), + ConnectedDeviceDashboardFragmentOld.class.getName(), AppAndNotificationDashboardFragment.class.getName(), UserAndAccountDashboardFragment.class.getName(), EnterprisePrivacySettings.class.getName(), @@ -261,6 +263,7 @@ public class SettingsGateway { // Home page Settings.NetworkDashboardActivity.class.getName(), Settings.ConnectedDeviceDashboardActivity.class.getName(), + Settings.ConnectedDeviceDashboardActivityOld.class.getName(), Settings.AppAndNotificationDashboardActivity.class.getName(), Settings.DisplaySettingsActivity.class.getName(), Settings.SoundSettingsActivity.class.getName(), diff --git a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java index d56a402fe9b..af00dc6088c 100644 --- a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java +++ b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java @@ -23,7 +23,7 @@ import com.android.settings.accounts.AccountDetailDashboardFragment; import com.android.settings.accounts.UserAndAccountDashboardFragment; import com.android.settings.applications.AppAndNotificationDashboardFragment; import com.android.settings.applications.DefaultAppSettings; -import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment; +import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragmentOld; import com.android.settings.development.DevelopmentSettingsDashboardFragment; import com.android.settings.deviceinfo.StorageDashboardFragment; import com.android.settings.fuelgauge.PowerUsageSummary; @@ -59,7 +59,8 @@ public class DashboardFragmentRegistry { PARENT_TO_CATEGORY_KEY_MAP = new ArrayMap<>(); PARENT_TO_CATEGORY_KEY_MAP.put( NetworkDashboardFragment.class.getName(), CategoryKey.CATEGORY_NETWORK); - PARENT_TO_CATEGORY_KEY_MAP.put(ConnectedDeviceDashboardFragment.class.getName(), + //TODO(b/69471219): update ConnectedDeviceDashboardFragment once new feature is done. + PARENT_TO_CATEGORY_KEY_MAP.put(ConnectedDeviceDashboardFragmentOld.class.getName(), CategoryKey.CATEGORY_DEVICE); PARENT_TO_CATEGORY_KEY_MAP.put(AppAndNotificationDashboardFragment.class.getName(), CategoryKey.CATEGORY_APPS); diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java index 5bad8073ada..7512c1311ab 100644 --- a/src/com/android/settings/search/SearchIndexableResources.java +++ b/src/com/android/settings/search/SearchIndexableResources.java @@ -34,6 +34,7 @@ import com.android.settings.backup.BackupSettingsActivity; import com.android.settings.backup.BackupSettingsFragment; import com.android.settings.bluetooth.BluetoothSettings; import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment; +import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragmentOld; import com.android.settings.datausage.DataUsageMeteredSettings; import com.android.settings.datausage.DataUsageSummary; import com.android.settings.deletionhelper.AutomaticStorageManagerSettings; @@ -154,6 +155,7 @@ public final class SearchIndexableResources { addIndex(ResetDashboardFragment.class); addIndex(StorageDashboardFragment.class); addIndex(ConnectedDeviceDashboardFragment.class); + addIndex(ConnectedDeviceDashboardFragmentOld.class); addIndex(EnterprisePrivacySettings.class); addIndex(PaymentSettings.class); addIndex(TextToSpeechSettings.class); diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java similarity index 97% rename from tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java rename to tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java index 4cb853eb820..de83f5e21ac 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java @@ -51,7 +51,7 @@ import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) -public class ConnectedDeviceDashboardFragmentTest { +public class ConnectedDeviceDashboardFragment2Test { @Mock(answer = Answers.RETURNS_DEEP_STUBS) Context mContext; @@ -61,7 +61,7 @@ public class ConnectedDeviceDashboardFragmentTest { private FakeFeatureFactory mFeatureFactory; private SmsMirroringFeatureProvider mFeatureProvider; - private ConnectedDeviceDashboardFragment mFragment; + private ConnectedDeviceDashboardFragmentOld mFragment; private TestSmsMirroringPreferenceController mSmsMirroringPreferenceController; private static final class TestSmsMirroringPreferenceController @@ -86,7 +86,7 @@ public class ConnectedDeviceDashboardFragmentTest { mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); mFeatureProvider = mFeatureFactory.smsMirroringFeatureProvider; - mFragment = new ConnectedDeviceDashboardFragment(); + mFragment = new ConnectedDeviceDashboardFragmentOld(); when(mContext.getPackageManager()).thenReturn(mManager); mSmsMirroringPreferenceController = new TestSmsMirroringPreferenceController(mContext);