diff --git a/res/drawable/ic_error_red.xml b/res/drawable/ic_error_red.xml
new file mode 100644
index 00000000000..d17c85b08fa
--- /dev/null
+++ b/res/drawable/ic_error_red.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/res/navigation/privatespace_private_context_nav.xml b/res/layout/privatespace_account_login_error.xml
similarity index 52%
rename from res/navigation/privatespace_private_context_nav.xml
rename to res/layout/privatespace_account_login_error.xml
index 3df8fa55b8c..a38dd5048c3 100644
--- a/res/navigation/privatespace_private_context_nav.xml
+++ b/res/layout/privatespace_account_login_error.xml
@@ -1,3 +1,4 @@
+
-
-
-
+
+
diff --git a/res/navigation/privatespace_main_context_nav.xml b/res/navigation/privatespace_main_context_nav.xml
index 5b2552aece8..ffc63ec34c7 100644
--- a/res/navigation/privatespace_main_context_nav.xml
+++ b/res/navigation/privatespace_main_context_nav.xml
@@ -33,8 +33,8 @@
android:id="@+id/action_advance_profile_error"
app:destination="@id/ps_profile_error_fragment"/>
+ android:id="@+id/action_advance_login_error"
+ app:destination="@id/ps_account_error_fragment"/>
-
\ No newline at end of file
+
+
+
+
+
+
+
diff --git a/res/values/config.xml b/res/values/config.xml
index 99052ca2d7c..f50e918cc18 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -753,6 +753,9 @@
false
+
+ false
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 02b7a4c3eec..4da260ae49d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1298,6 +1298,10 @@
Done
Scroll down to access Private Space
+
+ Sign in to set up Private Space
+
+ You need to sign in to a Account to set up Private Space
You can add up to %d fingerprints
diff --git a/src/com/android/settings/overlay/FeatureFactory.kt b/src/com/android/settings/overlay/FeatureFactory.kt
index ac689d91687..bc0cf1f7908 100644
--- a/src/com/android/settings/overlay/FeatureFactory.kt
+++ b/src/com/android/settings/overlay/FeatureFactory.kt
@@ -39,6 +39,7 @@ 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.privatespace.PrivateSpaceLoginFeatureProvider
import com.android.settings.search.SearchFeatureProvider
import com.android.settings.security.SecurityFeatureProvider
import com.android.settings.security.SecuritySettingsFeatureProvider
@@ -170,6 +171,11 @@ abstract class FeatureFactory {
*/
abstract val fastPairFeatureProvider: FastPairFeatureProvider
+ /**
+ * Gets implementation for Private Space account login feature.
+ */
+ abstract val privateSpaceLoginFeatureProvider: PrivateSpaceLoginFeatureProvider
+
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 7f991b7b7d8..28dbb23b245 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.kt
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.kt
@@ -59,6 +59,8 @@ import com.android.settings.search.SearchFeatureProviderImpl
import com.android.settings.security.SecurityFeatureProviderImpl
import com.android.settings.security.SecuritySettingsFeatureProvider
import com.android.settings.security.SecuritySettingsFeatureProviderImpl
+import com.android.settings.privatespace.PrivateSpaceLoginFeatureProvider
+import com.android.settings.privatespace.PrivateSpaceLoginFeatureProviderImpl
import com.android.settings.slices.SlicesFeatureProviderImpl
import com.android.settings.users.UserFeatureProviderImpl
import com.android.settings.vpn2.AdvancedVpnFeatureProviderImpl
@@ -184,4 +186,8 @@ open class FeatureFactoryImpl : FeatureFactory() {
override val fastPairFeatureProvider: FastPairFeatureProvider by lazy {
FastPairFeatureProviderImpl()
}
+
+ override val privateSpaceLoginFeatureProvider: PrivateSpaceLoginFeatureProvider by lazy {
+ PrivateSpaceLoginFeatureProviderImpl()
+ }
}
diff --git a/src/com/android/settings/privatespace/AutoAdvanceSetupFragment.java b/src/com/android/settings/privatespace/AutoAdvanceSetupFragment.java
index 5456c01a902..3b59166c238 100644
--- a/src/com/android/settings/privatespace/AutoAdvanceSetupFragment.java
+++ b/src/com/android/settings/privatespace/AutoAdvanceSetupFragment.java
@@ -16,7 +16,8 @@
package com.android.settings.privatespace;
-import static com.android.settings.privatespace.PrivateSpaceSetupActivity.SET_LOCK_ACTION;
+import static com.android.settings.privatespace.PrivateSpaceSetupActivity.ACCOUNT_LOGIN_ACTION;
+import static com.android.settings.privatespace.PrivateSpaceSetupActivity.EXTRA_ACTION_TYPE;
import android.annotation.SuppressLint;
import android.content.Intent;
@@ -134,7 +135,8 @@ public class AutoAdvanceSetupFragment extends Fragment {
private void startActivityInPrivateUser(UserHandle userHandle) {
/* Start new activity in private profile which is needed to set private profile lock */
Intent intent = new Intent(getContext(), PrivateProfileContextHelperActivity.class);
- getActivity().startActivityForResultAsUser(intent, SET_LOCK_ACTION, userHandle);
+ intent.putExtra(EXTRA_ACTION_TYPE, ACCOUNT_LOGIN_ACTION);
+ getActivity().startActivityForResultAsUser(intent, ACCOUNT_LOGIN_ACTION, userHandle);
}
private void showPrivateSpaceErrorScreen() {
diff --git a/src/com/android/settings/privatespace/PrivateProfileContextHelperActivity.java b/src/com/android/settings/privatespace/PrivateProfileContextHelperActivity.java
index c0d762afaac..0539f60bc8e 100644
--- a/src/com/android/settings/privatespace/PrivateProfileContextHelperActivity.java
+++ b/src/com/android/settings/privatespace/PrivateProfileContextHelperActivity.java
@@ -16,27 +16,84 @@
package com.android.settings.privatespace;
+import static android.app.admin.DevicePolicyManager.ACTION_SET_NEW_PASSWORD;
+import static android.app.admin.DevicePolicyManager.EXTRA_PASSWORD_COMPLEXITY;
+import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_LOW;
+
+import static com.android.settings.privatespace.PrivateSpaceSetupActivity.ACCOUNT_LOGIN_ACTION;
+import static com.android.settings.privatespace.PrivateSpaceSetupActivity.EXTRA_ACTION_TYPE;
+import static com.android.settings.privatespace.PrivateSpaceSetupActivity.SET_LOCK_ACTION;
+
+import android.app.KeyguardManager;
+import android.content.Intent;
import android.os.Bundle;
+import androidx.activity.result.ActivityResult;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
-import androidx.navigation.fragment.NavHostFragment;
-import com.android.settings.R;
import com.android.settings.SetupWizardUtils;
+import com.android.settings.overlay.FeatureFactory;
import com.google.android.setupdesign.util.ThemeHelper;
-/** Activity that is started as private profile user that helps to set private profile lock. */
+/** Activity that is started as private profile user that helps to set private profile lock or
+ * add an account on the private profile. */
public class PrivateProfileContextHelperActivity extends FragmentActivity {
private static final String TAG = "PrivateProfileHelper";
+ private final ActivityResultLauncher mAddAccountToPrivateProfile =
+ registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
+ this::onAccountAdded);
+ private final ActivityResultLauncher mVerifyDeviceLock =
+ registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
+ this::onSetDeviceNewLock);
+
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(SetupWizardUtils.getTheme(this, getIntent()));
ThemeHelper.trySetDynamicColor(this);
super.onCreate(savedInstanceState);
- setContentView(R.layout.privatespace_setup_root);
- NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager()
- .findFragmentById(R.id.ps_nav_host_fragment);
- navHostFragment.getNavController().setGraph(R.navigation.privatespace_private_context_nav);
+ if (savedInstanceState == null) {
+ int action = getIntent().getIntExtra(EXTRA_ACTION_TYPE, -1);
+ if (action == ACCOUNT_LOGIN_ACTION) {
+ PrivateSpaceLoginFeatureProvider privateSpaceLoginFeatureProvider =
+ FeatureFactory.getFeatureFactory().getPrivateSpaceLoginFeatureProvider();
+ if (!privateSpaceLoginFeatureProvider.initiateAccountLogin(this,
+ mAddAccountToPrivateProfile)) {
+ setResult(RESULT_OK);
+ finish();
+ }
+ } else if (action == SET_LOCK_ACTION) {
+ createPrivateSpaceLock();
+ }
+ }
+ }
+
+ private void createPrivateSpaceLock() {
+ final Intent intent = new Intent(ACTION_SET_NEW_PASSWORD);
+ intent.putExtra(EXTRA_PASSWORD_COMPLEXITY, PASSWORD_COMPLEXITY_LOW);
+ mVerifyDeviceLock.launch(intent);
+ }
+
+ private void onAccountAdded(@Nullable ActivityResult result) {
+ if (result != null && result.getResultCode() == RESULT_OK) {
+ setResult(RESULT_OK);
+ } else {
+ setResult(RESULT_CANCELED);
+ }
+ finish();
+ }
+
+ private void onSetDeviceNewLock(@Nullable ActivityResult result) {
+ // TODO(b/307281644) : Verify this for biometrics and check result code after new
+ // Authentication changes are merged.
+ if (result != null && getSystemService(KeyguardManager.class).isDeviceSecure()) {
+ setResult(RESULT_OK);
+ } else {
+ setResult(RESULT_CANCELED);
+ }
+ finish();
}
}
diff --git a/src/com/android/settings/privatespace/PrivateSpaceAccountLoginError.java b/src/com/android/settings/privatespace/PrivateSpaceAccountLoginError.java
new file mode 100644
index 00000000000..2d263d7be18
--- /dev/null
+++ b/src/com/android/settings/privatespace/PrivateSpaceAccountLoginError.java
@@ -0,0 +1,85 @@
+/*
+ * 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.privatespace;
+
+import static com.android.settings.privatespace.PrivateSpaceSetupActivity.ACCOUNT_LOGIN_ACTION;
+import static com.android.settings.privatespace.PrivateSpaceSetupActivity.EXTRA_ACTION_TYPE;
+
+import android.annotation.SuppressLint;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.activity.OnBackPressedCallback;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import com.android.settings.R;
+
+import com.google.android.setupcompat.template.FooterBarMixin;
+import com.google.android.setupcompat.template.FooterButton;
+import com.google.android.setupdesign.GlifLayout;
+
+/** Fragment to display error screen if the profile is not signed in with a Google account. */
+public class PrivateSpaceAccountLoginError extends Fragment {
+ @Override
+ public View onCreateView(
+ LayoutInflater inflater,
+ @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ GlifLayout rootView =
+ (GlifLayout) inflater
+ .inflate(R.layout.privatespace_account_login_error, container, false);
+ final FooterBarMixin mixin = rootView.getMixin(FooterBarMixin.class);
+ mixin.setPrimaryButton(
+ new FooterButton.Builder(getContext())
+ .setText(R.string.privatespace_tryagain_label)
+ .setListener(nextScreen())
+ .setButtonType(FooterButton.ButtonType.NEXT)
+ .setTheme(com.google.android.setupdesign.R.style.SudGlifButton_Primary)
+ .build());
+ OnBackPressedCallback callback =
+ new OnBackPressedCallback(true /* enabled by default */) {
+ @Override
+ public void handleOnBackPressed() {
+ // Handle the back button event
+ }
+ };
+ requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
+
+ return rootView;
+ }
+
+ @SuppressLint("MissingPermission")
+ private View.OnClickListener nextScreen() {
+ return v -> {
+ PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer
+ .getInstance(getActivity());
+ UserHandle userHandle;
+ if (privateSpaceMaintainer.doesPrivateSpaceExist() && (userHandle =
+ privateSpaceMaintainer.getPrivateProfileHandle()) != null) {
+ Intent intent = new Intent(getContext(), PrivateProfileContextHelperActivity.class);
+ intent.putExtra(EXTRA_ACTION_TYPE, ACCOUNT_LOGIN_ACTION);
+ getActivity().startActivityForResultAsUser(intent, ACCOUNT_LOGIN_ACTION,
+ userHandle);
+ }
+ };
+ }
+}
diff --git a/src/com/android/settings/privatespace/PrivateSpaceLoginFeatureProvider.java b/src/com/android/settings/privatespace/PrivateSpaceLoginFeatureProvider.java
new file mode 100644
index 00000000000..76ea9acc81b
--- /dev/null
+++ b/src/com/android/settings/privatespace/PrivateSpaceLoginFeatureProvider.java
@@ -0,0 +1,30 @@
+/*
+ * 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.privatespace;
+
+import android.content.Context;
+import android.content.Intent;
+
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.annotation.NonNull;
+
+/** Feature provider for account login during Private Space setup. */
+public interface PrivateSpaceLoginFeatureProvider {
+ /** Returns true if login to an account is enabled during Private Space setup. */
+ boolean initiateAccountLogin(@NonNull Context context,
+ @NonNull ActivityResultLauncher resultLauncher);
+}
diff --git a/src/com/android/settings/privatespace/PrivateSpaceLoginFeatureProviderImpl.java b/src/com/android/settings/privatespace/PrivateSpaceLoginFeatureProviderImpl.java
new file mode 100644
index 00000000000..7fca2a482d4
--- /dev/null
+++ b/src/com/android/settings/privatespace/PrivateSpaceLoginFeatureProviderImpl.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.privatespace;
+
+import android.content.Context;
+import android.content.Intent;
+
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.annotation.NonNull;
+
+/** Stub class for Private space to not initiate account login during setup */
+public class PrivateSpaceLoginFeatureProviderImpl implements PrivateSpaceLoginFeatureProvider {
+ @Override
+ public boolean initiateAccountLogin(@NonNull Context context,
+ @NonNull ActivityResultLauncher resultLauncher) {
+ return false;
+ }
+}
diff --git a/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java b/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java
index 3d176381c6b..93dc43b9fc5 100644
--- a/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java
+++ b/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java
@@ -16,25 +16,21 @@
package com.android.settings.privatespace;
-import static android.app.Activity.RESULT_OK;
-import static android.app.admin.DevicePolicyManager.ACTION_SET_NEW_PASSWORD;
-import static android.app.admin.DevicePolicyManager.EXTRA_PASSWORD_COMPLEXITY;
-import static android.app.admin.DevicePolicyManager.PASSWORD_COMPLEXITY_LOW;
+import static com.android.settings.privatespace.PrivateSpaceSetupActivity.EXTRA_ACTION_TYPE;
+import static com.android.settings.privatespace.PrivateSpaceSetupActivity.SET_LOCK_ACTION;
-import android.app.Activity;
-import android.app.KeyguardManager;
+import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
+import android.os.UserHandle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.activity.OnBackPressedCallback;
-import androidx.activity.result.ActivityResult;
-import androidx.activity.result.ActivityResultLauncher;
-import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
+import androidx.navigation.fragment.NavHostFragment;
import com.android.settings.R;
@@ -45,9 +41,6 @@ import com.google.android.setupdesign.GlifLayout;
/** Fragment that provides an option to user to choose between the existing screen lock or set a
* separate private profile lock. */
public class PrivateSpaceSetLockFragment extends Fragment {
- private final ActivityResultLauncher mVerifyDeviceLock =
- registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
- this::onSetDeviceNewLock);
@Override
public View onCreateView(
@@ -90,11 +83,8 @@ public class PrivateSpaceSetLockFragment extends Fragment {
private View.OnClickListener onClickUse() {
return v -> {
// Simply Use default screen lock. No need to handle
- Activity activity = getActivity();
- if (activity != null) {
- activity.setResult(RESULT_OK);
- activity.finish();
- }
+ NavHostFragment.findNavController(PrivateSpaceSetLockFragment.this)
+ .navigate(R.id.action_success_fragment);
};
}
@@ -104,22 +94,17 @@ public class PrivateSpaceSetLockFragment extends Fragment {
};
}
+ @SuppressLint("MissingPermission")
private void createPrivateSpaceLock() {
- final Intent intent = new Intent(ACTION_SET_NEW_PASSWORD);
- intent.putExtra(EXTRA_PASSWORD_COMPLEXITY, PASSWORD_COMPLEXITY_LOW);
- mVerifyDeviceLock.launch(intent);
- }
-
- private void onSetDeviceNewLock(@Nullable ActivityResult result) {
- // TODO(b/307281644) : Verify this for biometrics and check result code after new
- // Authentication changes are merged.
- if (result != null) {
- Activity profileContextHelperActivity = getActivity();
- if (profileContextHelperActivity != null && profileContextHelperActivity
- .getSystemService(KeyguardManager.class).isDeviceSecure()) {
- profileContextHelperActivity.setResult(RESULT_OK);
- profileContextHelperActivity.finish();
- }
+ PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer
+ .getInstance(getActivity());
+ UserHandle userHandle;
+ if (privateSpaceMaintainer.doesPrivateSpaceExist() && (userHandle =
+ privateSpaceMaintainer.getPrivateProfileHandle()) != null) {
+ Intent intent = new Intent(getContext(), PrivateProfileContextHelperActivity.class);
+ intent.putExtra(EXTRA_ACTION_TYPE, SET_LOCK_ACTION);
+ getActivity().startActivityForResultAsUser(intent, SET_LOCK_ACTION,
+ userHandle);
}
}
}
diff --git a/src/com/android/settings/privatespace/PrivateSpaceSetupActivity.java b/src/com/android/settings/privatespace/PrivateSpaceSetupActivity.java
index 3a58e9eadeb..a5628c8257d 100644
--- a/src/com/android/settings/privatespace/PrivateSpaceSetupActivity.java
+++ b/src/com/android/settings/privatespace/PrivateSpaceSetupActivity.java
@@ -31,6 +31,8 @@ import com.google.android.setupdesign.util.ThemeHelper;
/** Activity class that helps in setting up of private space */
public class PrivateSpaceSetupActivity extends FragmentActivity {
public static final int SET_LOCK_ACTION = 1;
+ public static final int ACCOUNT_LOGIN_ACTION = 2;
+ public static final String EXTRA_ACTION_TYPE = "action_type";
private NavHostFragment mNavHostFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -46,7 +48,13 @@ public class PrivateSpaceSetupActivity extends FragmentActivity {
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == SET_LOCK_ACTION && resultCode == RESULT_OK) {
- mNavHostFragment.getNavController().navigate(R.id.action_advance_to_success);
+ mNavHostFragment.getNavController().navigate(R.id.action_success_fragment);
+ } else if (requestCode == ACCOUNT_LOGIN_ACTION) {
+ if (resultCode == RESULT_OK) {
+ mNavHostFragment.getNavController().navigate(R.id.action_set_lock_fragment);
+ } else {
+ mNavHostFragment.getNavController().navigate(R.id.action_advance_login_error);
+ }
}
super.onActivityResult(requestCode, resultCode, data);
}
diff --git a/src/com/android/settings/privatespace/SetupSuccessFragment.java b/src/com/android/settings/privatespace/SetupSuccessFragment.java
index a8ca3f135ca..b761da76dcd 100644
--- a/src/com/android/settings/privatespace/SetupSuccessFragment.java
+++ b/src/com/android/settings/privatespace/SetupSuccessFragment.java
@@ -70,7 +70,7 @@ public class SetupSuccessFragment extends Fragment {
private View.OnClickListener onClickNext() {
return v -> {
accessPrivateSpaceToast();
- // TODO: Replace with the intent to launch PS/PS Launch Settings
+ // TODO(b/306228087): Replace with the intent to launch All Apps once it is working.
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startActivity(startMain);
diff --git a/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java
index 9156cae5d8f..5a5008c26bf 100644
--- a/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java
@@ -46,6 +46,7 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settings.overlay.SupportFeatureProvider;
import com.android.settings.overlay.SurveyFeatureProvider;
import com.android.settings.panel.PanelFeatureProvider;
+import com.android.settings.privatespace.PrivateSpaceLoginFeatureProvider;
import com.android.settings.search.SearchFeatureProvider;
import com.android.settings.security.SecurityFeatureProvider;
import com.android.settings.security.SecuritySettingsFeatureProvider;
@@ -99,6 +100,7 @@ public class FakeFeatureFactory extends FeatureFactory {
public StylusFeatureProvider mStylusFeatureProvider;
public OnboardingFeatureProvider mOnboardingFeatureProvider;
public FastPairFeatureProvider mFastPairFeatureProvider;
+ public PrivateSpaceLoginFeatureProvider mPrivateSpaceLoginFeatureProvider;
/**
* Call this in {@code @Before} method of the test class to use fake factory.
@@ -146,6 +148,7 @@ public class FakeFeatureFactory extends FeatureFactory {
mStylusFeatureProvider = mock(StylusFeatureProvider.class);
mOnboardingFeatureProvider = mock(OnboardingFeatureProvider.class);
mFastPairFeatureProvider = mock(FastPairFeatureProvider.class);
+ mPrivateSpaceLoginFeatureProvider = mock(PrivateSpaceLoginFeatureProvider.class);
}
@Override
@@ -323,5 +326,10 @@ public class FakeFeatureFactory extends FeatureFactory {
public FastPairFeatureProvider getFastPairFeatureProvider() {
return mFastPairFeatureProvider;
}
+
+ @Override
+ public PrivateSpaceLoginFeatureProvider getPrivateSpaceLoginFeatureProvider() {
+ return mPrivateSpaceLoginFeatureProvider;
+ }
}
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 54299eb3802..9b098a7e5ca 100644
--- a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
+++ b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
@@ -41,6 +41,7 @@ import com.android.settings.overlay.DockUpdaterFeatureProvider
import com.android.settings.overlay.FeatureFactory
import com.android.settings.overlay.SurveyFeatureProvider
import com.android.settings.panel.PanelFeatureProvider
+import com.android.settings.privatespace.PrivateSpaceLoginFeatureProvider
import com.android.settings.search.SearchFeatureProvider
import com.android.settings.security.SecurityFeatureProvider
import com.android.settings.security.SecuritySettingsFeatureProvider
@@ -143,4 +144,6 @@ class FakeFeatureFactory : FeatureFactory() {
get() = TODO("Not yet implemented")
override val fastPairFeatureProvider: FastPairFeatureProvider
get() = TODO("Not yet implemented")
+ override val privateSpaceLoginFeatureProvider: PrivateSpaceLoginFeatureProvider
+ 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 b5062a06c56..bf2c84a5a72 100644
--- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -46,6 +46,7 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settings.overlay.SupportFeatureProvider;
import com.android.settings.overlay.SurveyFeatureProvider;
import com.android.settings.panel.PanelFeatureProvider;
+import com.android.settings.privatespace.PrivateSpaceLoginFeatureProvider;
import com.android.settings.search.SearchFeatureProvider;
import com.android.settings.security.SecurityFeatureProvider;
import com.android.settings.security.SecuritySettingsFeatureProvider;
@@ -98,6 +99,7 @@ public class FakeFeatureFactory extends FeatureFactory {
public StylusFeatureProvider mStylusFeatureProvider;
public OnboardingFeatureProvider mOnboardingFeatureProvider;
public FastPairFeatureProvider mFastPairFeatureProvider;
+ public PrivateSpaceLoginFeatureProvider mPrivateSpaceLoginFeatureProvider;
/**
* Call this in {@code @Before} method of the test class to use fake factory.
@@ -145,6 +147,7 @@ public class FakeFeatureFactory extends FeatureFactory {
mStylusFeatureProvider = mock(StylusFeatureProvider.class);
mOnboardingFeatureProvider = mock(OnboardingFeatureProvider.class);
mFastPairFeatureProvider = mock(FastPairFeatureProvider.class);
+ mPrivateSpaceLoginFeatureProvider = mock(PrivateSpaceLoginFeatureProvider.class);
}
@Override
@@ -322,4 +325,9 @@ public class FakeFeatureFactory extends FeatureFactory {
public FastPairFeatureProvider getFastPairFeatureProvider() {
return mFastPairFeatureProvider;
}
+
+ @Override
+ public PrivateSpaceLoginFeatureProvider getPrivateSpaceLoginFeatureProvider() {
+ return mPrivateSpaceLoginFeatureProvider;
+ }
}