diff --git a/src/com/android/settings/connecteddevice/fastpair/FastPairDeviceUpdater.java b/src/com/android/settings/connecteddevice/fastpair/FastPairDeviceUpdater.java new file mode 100644 index 00000000000..b975b9e9d7c --- /dev/null +++ b/src/com/android/settings/connecteddevice/fastpair/FastPairDeviceUpdater.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2023 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.fastpair; + +import android.annotation.NonNull; +import android.content.Context; + +/** + * Updates the Fast Pair devices. It notifies the upper level whether to add/remove the + * preference through {@link DevicePreferenceCallback} + */ +public interface FastPairDeviceUpdater { + + /** + * Registers the Fast Pair event callback and update the list + */ + default void registerCallback() { + } + + /** + * Unregisters the Fast Pair event callback + */ + default void unregisterCallback() { + } + + /** + * Forces to update the list of Fast Pair devices + */ + default void forceUpdate() { + } + + /** + * Sets the context to generate the {@link Preference}, so it could get the correct theme. + */ + default void setPreferenceContext(@NonNull Context preferenceContext) { + } +} + diff --git a/src/com/android/settings/connecteddevice/fastpair/FastPairFeatureProvider.java b/src/com/android/settings/connecteddevice/fastpair/FastPairFeatureProvider.java new file mode 100644 index 00000000000..4673e7b6426 --- /dev/null +++ b/src/com/android/settings/connecteddevice/fastpair/FastPairFeatureProvider.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2023 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.fastpair; + +import android.content.Context; + +import com.android.settings.connecteddevice.DevicePreferenceCallback; + +/** + * Feature provider for the Fast Pair device updater. + */ +public interface FastPairFeatureProvider { + /** + * Returns the FastPairDeviceUpdater of the account associated Fast Pair device + */ + FastPairDeviceUpdater getFastPairDeviceUpdater( + Context context, DevicePreferenceCallback devicePreferenceCallback); +} diff --git a/src/com/android/settings/connecteddevice/fastpair/FastPairFeatureProviderImpl.java b/src/com/android/settings/connecteddevice/fastpair/FastPairFeatureProviderImpl.java new file mode 100644 index 00000000000..ef6f3b55536 --- /dev/null +++ b/src/com/android/settings/connecteddevice/fastpair/FastPairFeatureProviderImpl.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2023 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.fastpair; + +import android.content.Context; + +import com.android.settings.connecteddevice.DevicePreferenceCallback; + +/** + * Default implementation for {@link FastPairFeatureProvider} + */ +public class FastPairFeatureProviderImpl implements FastPairFeatureProvider { + @Override + public FastPairDeviceUpdater getFastPairDeviceUpdater( + Context context, DevicePreferenceCallback devicePreferenceCallback) { + return new FastPairDeviceUpdater() { + }; + } +} diff --git a/src/com/android/settings/overlay/FeatureFactory.kt b/src/com/android/settings/overlay/FeatureFactory.kt index bda0e178efb..7645076f288 100644 --- a/src/com/android/settings/overlay/FeatureFactory.kt +++ b/src/com/android/settings/overlay/FeatureFactory.kt @@ -23,8 +23,8 @@ import com.android.settings.applications.ApplicationFeatureProvider import com.android.settings.biometrics.face.FaceFeatureProvider import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider import com.android.settings.bluetooth.BluetoothFeatureProvider +import com.android.settings.connecteddevice.fastpair.FastPairFeatureProvider import com.android.settings.connecteddevice.stylus.StylusFeatureProvider -import com.android.settings.onboarding.OnboardingFeatureProvider import com.android.settings.dashboard.DashboardFeatureProvider import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider @@ -35,6 +35,7 @@ import com.android.settings.fuelgauge.PowerUsageFeatureProvider import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider import com.android.settings.localepicker.LocaleFeatureProvider +import com.android.settings.onboarding.OnboardingFeatureProvider import com.android.settings.overlay.FeatureFactory.Companion.setFactory import com.android.settings.panel.PanelFeatureProvider import com.android.settings.search.SearchFeatureProvider @@ -155,6 +156,11 @@ abstract class FeatureFactory { */ open val onboardingFeatureProvider: OnboardingFeatureProvider? = null + /** + * Gets implementation for Fast Pair device updater provider. + */ + abstract val fastPairFeatureProvider: FastPairFeatureProvider + companion object { private var _factory: FeatureFactory? = null diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.kt b/src/com/android/settings/overlay/FeatureFactoryImpl.kt index 2f0fe8b3d52..0afe9f473be 100644 --- a/src/com/android/settings/overlay/FeatureFactoryImpl.kt +++ b/src/com/android/settings/overlay/FeatureFactoryImpl.kt @@ -33,6 +33,8 @@ import com.android.settings.biometrics2.factory.BiometricsRepositoryProviderImpl import com.android.settings.bluetooth.BluetoothFeatureProvider import com.android.settings.bluetooth.BluetoothFeatureProviderImpl import com.android.settings.connecteddevice.dock.DockUpdaterFeatureProviderImpl +import com.android.settings.connecteddevice.fastpair.FastPairFeatureProvider +import com.android.settings.connecteddevice.fastpair.FastPairFeatureProviderImpl import com.android.settings.connecteddevice.stylus.StylusFeatureProvider import com.android.settings.connecteddevice.stylus.StylusFeatureProviderImpl import com.android.settings.core.instrumentation.SettingsMetricsFeatureProvider @@ -172,4 +174,8 @@ open class FeatureFactoryImpl : FeatureFactory() { override val stylusFeatureProvider: StylusFeatureProvider by lazy { StylusFeatureProviderImpl() } + + override val fastPairFeatureProvider: FastPairFeatureProvider by lazy { + FastPairFeatureProviderImpl() + } } diff --git a/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java index c8db62f877c..52a5f24cf44 100644 --- a/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java +++ b/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java @@ -26,6 +26,7 @@ import com.android.settings.applications.ApplicationFeatureProvider; import com.android.settings.biometrics.face.FaceFeatureProvider; import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider; import com.android.settings.bluetooth.BluetoothFeatureProvider; +import com.android.settings.connecteddevice.fastpair.FastPairFeatureProvider; import com.android.settings.connecteddevice.stylus.StylusFeatureProvider; import com.android.settings.dashboard.DashboardFeatureProvider; import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; @@ -95,6 +96,7 @@ public class FakeFeatureFactory extends FeatureFactory { public KeyboardSettingsFeatureProvider mKeyboardSettingsFeatureProvider; public StylusFeatureProvider mStylusFeatureProvider; public OnboardingFeatureProvider mOnboardingFeatureProvider; + public FastPairFeatureProvider mFastPairFeatureProvider; /** * Call this in {@code @Before} method of the test class to use fake factory. @@ -140,6 +142,7 @@ public class FakeFeatureFactory extends FeatureFactory { mKeyboardSettingsFeatureProvider = mock(KeyboardSettingsFeatureProvider.class); mStylusFeatureProvider = mock(StylusFeatureProvider.class); mOnboardingFeatureProvider = mock(OnboardingFeatureProvider.class); + mFastPairFeatureProvider = mock(FastPairFeatureProvider.class); } @Override @@ -307,4 +310,10 @@ public class FakeFeatureFactory extends FeatureFactory { public OnboardingFeatureProvider getOnboardingFeatureProvider() { return mOnboardingFeatureProvider; } + + @Override + public FastPairFeatureProvider getFastPairFeatureProvider() { + return mFastPairFeatureProvider; + } } + diff --git a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt index e5e49906921..95f25adc999 100644 --- a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt +++ b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt @@ -24,6 +24,7 @@ import com.android.settings.applications.ApplicationFeatureProvider import com.android.settings.biometrics.face.FaceFeatureProvider import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider import com.android.settings.bluetooth.BluetoothFeatureProvider +import com.android.settings.connecteddevice.fastpair.FastPairFeatureProvider import com.android.settings.connecteddevice.stylus.StylusFeatureProvider import com.android.settings.dashboard.DashboardFeatureProvider import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider @@ -137,4 +138,6 @@ class FakeFeatureFactory : FeatureFactory() { get() = TODO("Not yet implemented") override val stylusFeatureProvider: StylusFeatureProvider get() = TODO("Not yet implemented") + override val fastPairFeatureProvider: FastPairFeatureProvider + get() = TODO("Not yet implemented") } diff --git a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java index 05ed6628969..a3a92a30b70 100644 --- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java +++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java @@ -23,10 +23,10 @@ import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider; import com.android.settings.accessibility.AccessibilitySearchFeatureProvider; import com.android.settings.accounts.AccountFeatureProvider; import com.android.settings.applications.ApplicationFeatureProvider; -import com.android.settings.onboarding.OnboardingFeatureProvider; import com.android.settings.biometrics.face.FaceFeatureProvider; import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider; import com.android.settings.bluetooth.BluetoothFeatureProvider; +import com.android.settings.connecteddevice.fastpair.FastPairFeatureProvider; import com.android.settings.connecteddevice.stylus.StylusFeatureProvider; import com.android.settings.dashboard.DashboardFeatureProvider; import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; @@ -39,6 +39,7 @@ import com.android.settings.fuelgauge.PowerUsageFeatureProvider; import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider; import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider; import com.android.settings.localepicker.LocaleFeatureProvider; +import com.android.settings.onboarding.OnboardingFeatureProvider; import com.android.settings.overlay.DockUpdaterFeatureProvider; import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.SupportFeatureProvider; @@ -94,6 +95,7 @@ public class FakeFeatureFactory extends FeatureFactory { public KeyboardSettingsFeatureProvider mKeyboardSettingsFeatureProvider; public StylusFeatureProvider mStylusFeatureProvider; public OnboardingFeatureProvider mOnboardingFeatureProvider; + public FastPairFeatureProvider mFastPairFeatureProvider; /** * Call this in {@code @Before} method of the test class to use fake factory. @@ -104,9 +106,9 @@ public class FakeFeatureFactory extends FeatureFactory { return factory; } - /** - * FeatureFactory constructor. - */ + /** + * FeatureFactory constructor. + */ public FakeFeatureFactory() { supportFeatureProvider = mock(SupportFeatureProvider.class); metricsFeatureProvider = mock(MetricsFeatureProvider.class); @@ -139,6 +141,7 @@ public class FakeFeatureFactory extends FeatureFactory { mKeyboardSettingsFeatureProvider = mock(KeyboardSettingsFeatureProvider.class); mStylusFeatureProvider = mock(StylusFeatureProvider.class); mOnboardingFeatureProvider = mock(OnboardingFeatureProvider.class); + mFastPairFeatureProvider = mock(FastPairFeatureProvider.class); } @Override @@ -306,4 +309,9 @@ public class FakeFeatureFactory extends FeatureFactory { public OnboardingFeatureProvider getOnboardingFeatureProvider() { return mOnboardingFeatureProvider; } + + @Override + public FastPairFeatureProvider getFastPairFeatureProvider() { + return mFastPairFeatureProvider; + } }