Add FeatureProvider for onboarding related settings
Add OnboardingFeatureProvider which will be used to B&R sound settings and
related tasks.
Bug: 289512753
Test: FakeFeatureFactory
Change-Id: I25e3b1f105ce0970cdf651400c153d8b4733029b
diff --git a/src/com/android/settings/core/TogglePreferenceController.java b/src/com/android/settings/core/TogglePreferenceController.java
index a6c67eb..459312a 100644
--- a/src/com/android/settings/core/TogglePreferenceController.java
+++ b/src/com/android/settings/core/TogglePreferenceController.java
@@ -21,6 +21,7 @@
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.slices.SliceData;
+import com.android.settings.onboarding.OnboardingFeatureProvider;
import com.android.settings.widget.TwoStateButtonPreference;
import com.android.settingslib.PrimarySwitchPreference;
import com.android.settingslib.core.instrumentation.SettingsJankMonitor;
@@ -84,6 +85,11 @@
FeatureFactory.getFeatureFactory().getMetricsFeatureProvider()
.logClickedPreference(preference, getMetricsCategory());
}
+ OnboardingFeatureProvider onboardingFeatureProvider =
+ FeatureFactory.getFeatureFactory().getOnboardingFeatureProvider();
+ if (onboardingFeatureProvider != null) {
+ onboardingFeatureProvider.markPreferenceHasChanged(mContext, mPreferenceKey);
+ }
return setChecked((boolean) newValue);
}
diff --git a/src/com/android/settings/onboarding/OnboardingFeatureProvider.kt b/src/com/android/settings/onboarding/OnboardingFeatureProvider.kt
new file mode 100644
index 0000000..054694f
--- /dev/null
+++ b/src/com/android/settings/onboarding/OnboardingFeatureProvider.kt
@@ -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.onboarding
+
+import android.content.Context
+
+/**
+ * Provider for Onboarding related features.
+ */
+interface OnboardingFeatureProvider {
+ /**
+ * Mark this toggle preference has been changed.
+ * Called after [TogglePreferenceController.onPreferenceChange()].
+ *
+ * @param context App context
+ * @param preferenceKey The key to distinguish which preference has been changed.
+ */
+ fun markPreferenceHasChanged(context: Context, preferenceKey: String)
+}
\ No newline at end of file
diff --git a/src/com/android/settings/overlay/FeatureFactory.kt b/src/com/android/settings/overlay/FeatureFactory.kt
index 256acf4..bda0e17 100644
--- a/src/com/android/settings/overlay/FeatureFactory.kt
+++ b/src/com/android/settings/overlay/FeatureFactory.kt
@@ -24,6 +24,7 @@
import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider
import com.android.settings.bluetooth.BluetoothFeatureProvider
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
@@ -149,6 +150,11 @@
*/
abstract val stylusFeatureProvider: StylusFeatureProvider
+ /**
+ * Retrieves implementation for TogglePreference feature.
+ */
+ open val onboardingFeatureProvider: OnboardingFeatureProvider? = null
+
companion object {
private var _factory: FeatureFactory? = null
diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
index 0d7c0b1..d586db5 100644
--- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -23,6 +23,7 @@
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;
@@ -93,6 +94,7 @@
public WifiFeatureProvider mWifiFeatureProvider;
public KeyboardSettingsFeatureProvider mKeyboardSettingsFeatureProvider;
public StylusFeatureProvider mStylusFeatureProvider;
+ public OnboardingFeatureProvider mOnboardingFeatureProvider;
/**
* Call this in {@code @Before} method of the test class to use fake factory.
@@ -137,6 +139,7 @@
mWifiFeatureProvider = mock(WifiFeatureProvider.class);
mKeyboardSettingsFeatureProvider = mock(KeyboardSettingsFeatureProvider.class);
mStylusFeatureProvider = mock(StylusFeatureProvider.class);
+ mOnboardingFeatureProvider = mock(OnboardingFeatureProvider.class);
}
@Override
@@ -299,4 +302,9 @@
public StylusFeatureProvider getStylusFeatureProvider() {
return mStylusFeatureProvider;
}
+
+ @Override
+ public OnboardingFeatureProvider getOnboardingFeatureProvider() {
+ return mOnboardingFeatureProvider;
+ }
}
diff --git a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
index 90b4efe..05ed662 100644
--- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -23,6 +23,7 @@
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;
@@ -92,6 +93,7 @@
public WifiFeatureProvider mWifiFeatureProvider;
public KeyboardSettingsFeatureProvider mKeyboardSettingsFeatureProvider;
public StylusFeatureProvider mStylusFeatureProvider;
+ public OnboardingFeatureProvider mOnboardingFeatureProvider;
/**
* Call this in {@code @Before} method of the test class to use fake factory.
@@ -136,6 +138,7 @@
mWifiFeatureProvider = mock(WifiFeatureProvider.class);
mKeyboardSettingsFeatureProvider = mock(KeyboardSettingsFeatureProvider.class);
mStylusFeatureProvider = mock(StylusFeatureProvider.class);
+ mOnboardingFeatureProvider = mock(OnboardingFeatureProvider.class);
}
@Override
@@ -298,4 +301,9 @@
public StylusFeatureProvider getStylusFeatureProvider() {
return mStylusFeatureProvider;
}
+
+ @Override
+ public OnboardingFeatureProvider getOnboardingFeatureProvider() {
+ return mOnboardingFeatureProvider;
+ }
}