Merge "Support the about device warning message for tablets"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 09ddde9..024c377 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -4849,7 +4849,7 @@
         </activity>
 
         <activity android:name="Settings$FactoryResetActivity"
-                  android:permission="android.permission.BACKUP"
+                  android:permission="android.permission.MASTER_CLEAR"
                   android:label="@string/main_clear_title"
                   android:exported="true"
                   android:theme="@style/SudThemeGlif.Light">
diff --git a/res/raw/gesture_ambient_wake_screen.mp4 b/res/raw/gesture_ambient_wake_screen.mp4
deleted file mode 100644
index e69de29..0000000
--- a/res/raw/gesture_ambient_wake_screen.mp4
+++ /dev/null
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6cfcca9..3ba3fb9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11995,7 +11995,7 @@
     <!-- Developer settings: Title for force enabling Notes role. [CHAR LIMIT=50]-->
     <string name="enable_notes_role_title">Force enable Notes role</string>
     <!-- Developer settings: Summary for disabling phantom process monitoring. [CHAR LIMIT=NONE]-->
-    <string name="enable_notes_role_summary">Enable note-taking system integrations via the Notes role. If the Notes role is already enabled, does nothing.</string>
+    <string name="enable_notes_role_summary">Enable note-taking system integrations via the Notes role. If the Notes role is already enabled, does nothing. Requires reboot.</string>
 
 
     <!-- BT LE Audio Device: Media Broadcast -->
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index a2195df..370b17a 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -63,6 +63,7 @@
 import android.os.Binder;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Environment;
 import android.os.IBinder;
 import android.os.INetworkManagementService;
 import android.os.RemoteException;
@@ -97,7 +98,6 @@
 import androidx.annotation.ColorInt;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.annotation.StringRes;
 import androidx.annotation.VisibleForTesting;
 import androidx.core.graphics.drawable.IconCompat;
 import androidx.core.graphics.drawable.RoundedBitmapDrawable;
@@ -1309,4 +1309,15 @@
                 com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser);
         return dreamsSupported && (!dreamsOnlyEnabledForDockUser || canCurrentUserDream(context));
     }
+
+    /**
+     * Get private total size directly.
+     * Referred from StorageManager
+     */
+    public static long getPrimaryStorageSize() {
+        // TODO(b/288103116): remove this method once support by StorageManager.
+        return Environment.getDataDirectory().getTotalSpace()
+                + Environment.getRootDirectory().getTotalSpace();
+    }
+
 }
diff --git a/src/com/android/settings/aware/AwareFeatureProvider.java b/src/com/android/settings/aware/AwareFeatureProvider.java
deleted file mode 100644
index a4e9c0c..0000000
--- a/src/com/android/settings/aware/AwareFeatureProvider.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2019 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.aware;
-
-import android.content.Context;
-
-import androidx.fragment.app.Fragment;
-
-public interface AwareFeatureProvider {
-    /** Returns true if the aware sensor is supported. */
-    boolean isSupported(Context context);
-
-    /** Returns true if the aware feature is enabled. */
-    boolean isEnabled(Context context);
-
-    /** Show information dialog. */
-    void showRestrictionDialog(Fragment parent);
-
-    /** Return Quick Gestures Summary. */
-    CharSequence getGestureSummary(Context context, boolean sensorSupported,
-            boolean assistGestureEnabled, boolean assistGestureSilenceEnabled);
-}
diff --git a/src/com/android/settings/aware/AwareFeatureProviderImpl.java b/src/com/android/settings/aware/AwareFeatureProviderImpl.java
deleted file mode 100644
index 6f80d8a..0000000
--- a/src/com/android/settings/aware/AwareFeatureProviderImpl.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2019 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.aware;
-
-import android.content.Context;
-
-import androidx.fragment.app.Fragment;
-
-public class AwareFeatureProviderImpl implements AwareFeatureProvider {
-    @Override
-    public boolean isSupported(Context context) {
-        return false;
-    }
-
-    @Override
-    public boolean isEnabled(Context context) {
-        return false;
-    }
-
-    @Override
-    public void showRestrictionDialog(Fragment parent) {
-    }
-
-    @Override
-    public CharSequence getGestureSummary(Context context, boolean sensorSupported,
-            boolean assistGestureEnabled, boolean assistGestureSilenceEnabled) {
-        return null;
-    }
-}
diff --git a/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingUdfpsFragment.java b/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingUdfpsFragment.java
deleted file mode 100644
index b5fe609..0000000
--- a/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingUdfpsFragment.java
+++ /dev/null
@@ -1,622 +0,0 @@
-/*
- * 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.biometrics2.ui.view;
-
-import static android.hardware.fingerprint.FingerprintManager.ENROLL_ENROLL;
-
-import android.annotation.RawRes;
-import android.app.Activity;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.hardware.fingerprint.FingerprintManager;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.DisplayMetrics;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.Surface;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-
-import androidx.activity.OnBackPressedCallback;
-import androidx.annotation.NonNull;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentActivity;
-import androidx.lifecycle.Observer;
-import androidx.lifecycle.ViewModelProvider;
-
-import com.android.settings.R;
-import com.android.settings.biometrics.BiometricUtils;
-import com.android.settings.biometrics.fingerprint.FingerprintErrorDialog;
-import com.android.settings.biometrics2.ui.model.EnrollmentProgress;
-import com.android.settings.biometrics2.ui.model.EnrollmentStatusMessage;
-import com.android.settings.biometrics2.ui.viewmodel.DeviceRotationViewModel;
-import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel;
-import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollProgressViewModel;
-import com.android.settings.biometrics2.ui.widget.UdfpsEnrollView;
-import com.android.settingslib.display.DisplayDensityUtils;
-
-import com.airbnb.lottie.LottieAnimationView;
-import com.airbnb.lottie.LottieCompositionFactory;
-
-/**
- * Fragment is used to handle enrolling process for udfps
- */
-public class FingerprintEnrollEnrollingUdfpsFragment extends Fragment {
-
-    private static final String TAG = FingerprintEnrollEnrollingUdfpsFragment.class.getSimpleName();
-
-    private static final int PROGRESS_BAR_MAX = 10000;
-
-    private static final int STAGE_UNKNOWN = -1;
-    private static final int STAGE_CENTER = 0;
-    private static final int STAGE_GUIDED = 1;
-    private static final int STAGE_FINGERTIP = 2;
-    private static final int STAGE_LEFT_EDGE = 3;
-    private static final int STAGE_RIGHT_EDGE = 4;
-
-    private FingerprintEnrollEnrollingViewModel mEnrollingViewModel;
-    private DeviceRotationViewModel mRotationViewModel;
-    private FingerprintEnrollProgressViewModel mProgressViewModel;
-
-    private LottieAnimationView mIllustrationLottie;
-    private boolean mHaveShownUdfpsTipLottie;
-    private boolean mHaveShownUdfpsLeftEdgeLottie;
-    private boolean mHaveShownUdfpsRightEdgeLottie;
-    private boolean mHaveShownUdfpsCenterLottie;
-    private boolean mHaveShownUdfpsGuideLottie;
-
-    private TextView mTitleText;
-    private TextView mSubTitleText;
-    private UdfpsEnrollView mUdfpsEnrollView;
-    private Button mSkipBtn;
-    private ImageView mIcon;
-
-    private boolean mShouldShowLottie;
-    private boolean mIsAccessibilityEnabled;
-
-    private int mRotation = -1;
-
-    private final View.OnClickListener mOnSkipClickListener = v -> {
-        mEnrollingViewModel.setOnSkipPressed();
-        cancelEnrollment();
-    };
-
-    private final Observer<EnrollmentProgress> mProgressObserver = progress -> {
-        if (progress != null) {
-            onEnrollmentProgressChange(progress);
-        }
-    };
-    private final Observer<EnrollmentStatusMessage> mHelpMessageObserver = helpMessage -> {
-        if (helpMessage != null) {
-            onEnrollmentHelp(helpMessage);
-        }
-    };
-    private final Observer<EnrollmentStatusMessage> mErrorMessageObserver = errorMessage -> {
-        if (errorMessage != null) {
-            onEnrollmentError(errorMessage);
-        }
-    };
-    private final Observer<Boolean> mAcquireObserver = isAcquiredGood -> {
-        if (isAcquiredGood != null) {
-            onAcquired(isAcquiredGood);
-        }
-    };
-    private final Observer<Integer> mPointerDownObserver = sensorId -> {
-        if (sensorId != null) {
-            onPointerDown(sensorId);
-        }
-    };
-    private final Observer<Integer> mPointerUpObserver = sensorId -> {
-        if (sensorId != null) {
-            onPointerUp(sensorId);
-        }
-    };
-
-    private final Observer<Integer> mRotationObserver = rotation -> {
-        if (rotation != null) {
-            onRotationChanged(rotation);
-        }
-    };
-
-    private final OnBackPressedCallback mOnBackPressedCallback = new OnBackPressedCallback(true) {
-        @Override
-        public void handleOnBackPressed() {
-            setEnabled(false);
-            mEnrollingViewModel.setOnBackPressed();
-            cancelEnrollment();
-        }
-    };
-
-    @Override
-    public void onAttach(@NonNull Context context) {
-        final FragmentActivity activity = getActivity();
-        final ViewModelProvider provider = new ViewModelProvider(activity);
-        mEnrollingViewModel = provider.get(FingerprintEnrollEnrollingViewModel.class);
-        mRotationViewModel = provider.get(DeviceRotationViewModel.class);
-        mProgressViewModel = provider.get(FingerprintEnrollProgressViewModel.class);
-        super.onAttach(context);
-        activity.getOnBackPressedDispatcher().addCallback(mOnBackPressedCallback);
-    }
-
-    @Override
-    public void onDetach() {
-        mOnBackPressedCallback.setEnabled(false);
-        super.onDetach();
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mIsAccessibilityEnabled = mEnrollingViewModel.isAccessibilityEnabled();
-    }
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        final RelativeLayout containView = (RelativeLayout) inflater.inflate(
-                R.layout.udfps_enroll_enrolling_v2, container, false);
-
-        final Activity activity = getActivity();
-        mIcon = containView.findViewById(R.id.sud_layout_icon);
-        mTitleText = containView.findViewById(R.id.suc_layout_title);
-        mSubTitleText = containView.findViewById(R.id.sud_layout_subtitle);
-        mSkipBtn = containView.findViewById(R.id.skip_btn);
-        mSkipBtn.setOnClickListener(mOnSkipClickListener);
-        mUdfpsEnrollView = containView.findViewById(R.id.udfps_animation_view);
-        mUdfpsEnrollView.setSensorProperties(
-                mEnrollingViewModel.getFirstFingerprintSensorPropertiesInternal());
-        mShouldShowLottie = shouldShowLottie();
-        final boolean isLandscape = BiometricUtils.isReverseLandscape(activity)
-                || BiometricUtils.isLandscape(activity);
-        updateOrientation(containView, (isLandscape
-                ? Configuration.ORIENTATION_LANDSCAPE : Configuration.ORIENTATION_PORTRAIT));
-
-        mRotation = mRotationViewModel.getLiveData().getValue();
-        configLayout(mRotation);
-        return containView;
-    }
-
-    @Override
-    public void onStart() {
-        super.onStart();
-        startEnrollment();
-        updateProgress(false /* animate */, mProgressViewModel.getProgressLiveData().getValue());
-        final EnrollmentStatusMessage msg = mProgressViewModel.getHelpMessageLiveData().getValue();
-        if (msg != null) {
-            onEnrollmentHelp(msg);
-        } else {
-            updateTitleAndDescription();
-        }
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        mRotationViewModel.getLiveData().observe(this, mRotationObserver);
-    }
-
-    @Override
-    public void onPause() {
-        mRotationViewModel.getLiveData().removeObserver(mRotationObserver);
-        super.onPause();
-    }
-
-    @Override
-    public void onStop() {
-        removeEnrollmentObservers();
-        if (!getActivity().isChangingConfigurations() && mProgressViewModel.isEnrolling()) {
-            mProgressViewModel.cancelEnrollment();
-        }
-        super.onStop();
-    }
-
-    private void removeEnrollmentObservers() {
-        preRemoveEnrollmentObservers();
-        mProgressViewModel.getErrorMessageLiveData().removeObserver(mErrorMessageObserver);
-    }
-
-    private void preRemoveEnrollmentObservers() {
-        mProgressViewModel.getProgressLiveData().removeObserver(mProgressObserver);
-        mProgressViewModel.getHelpMessageLiveData().removeObserver(mHelpMessageObserver);
-        mProgressViewModel.getAcquireLiveData().removeObserver(mAcquireObserver);
-        mProgressViewModel.getPointerDownLiveData().removeObserver(mPointerDownObserver);
-        mProgressViewModel.getPointerUpLiveData().removeObserver(mPointerUpObserver);
-    }
-
-    private void cancelEnrollment() {
-        preRemoveEnrollmentObservers();
-        mProgressViewModel.cancelEnrollment();
-    }
-
-    private void startEnrollment() {
-        final boolean startResult = mProgressViewModel.startEnrollment(ENROLL_ENROLL);
-        if (!startResult) {
-            Log.e(TAG, "startEnrollment(), failed");
-        }
-        mProgressViewModel.getProgressLiveData().observe(this, mProgressObserver);
-        mProgressViewModel.getHelpMessageLiveData().observe(this, mHelpMessageObserver);
-        mProgressViewModel.getErrorMessageLiveData().observe(this, mErrorMessageObserver);
-        mProgressViewModel.getAcquireLiveData().observe(this, mAcquireObserver);
-        mProgressViewModel.getPointerDownLiveData().observe(this, mPointerDownObserver);
-        mProgressViewModel.getPointerUpLiveData().observe(this, mPointerUpObserver);
-    }
-
-    private void updateProgress(boolean animate, @NonNull EnrollmentProgress enrollmentProgress) {
-        if (!mProgressViewModel.isEnrolling()) {
-            Log.d(TAG, "Enrollment not started yet");
-            return;
-        }
-
-        final int progress = getProgress(enrollmentProgress);
-
-        if (mProgressViewModel.getProgressLiveData().getValue().getSteps() != -1) {
-            mUdfpsEnrollView.onEnrollmentProgress(enrollmentProgress.getRemaining(),
-                    enrollmentProgress.getSteps());
-        }
-
-        if (animate) {
-            animateProgress(progress);
-        } else if (progress >= PROGRESS_BAR_MAX) {
-            mDelayedFinishRunnable.run();
-        }
-    }
-
-    private int getProgress(@NonNull EnrollmentProgress progress) {
-        if (progress.getSteps() == -1) {
-            return 0;
-        }
-        int displayProgress = Math.max(0, progress.getSteps() + 1 - progress.getRemaining());
-        return PROGRESS_BAR_MAX * displayProgress / (progress.getSteps() + 1);
-    }
-
-    private void animateProgress(int progress) {
-        // UDFPS animations are owned by SystemUI
-        if (progress >= PROGRESS_BAR_MAX) {
-            // Wait for any animations in SysUI to finish, then proceed to next page
-            getActivity().getMainThreadHandler().postDelayed(mDelayedFinishRunnable, 400L);
-        }
-    }
-
-    private void updateTitleAndDescription() {
-        switch (getCurrentStage()) {
-            case STAGE_CENTER:
-                mTitleText.setText(R.string.security_settings_fingerprint_enroll_repeat_title);
-                if (mIsAccessibilityEnabled || mIllustrationLottie == null) {
-                    mSubTitleText.setText(R.string.security_settings_udfps_enroll_start_message);
-                } else if (!mHaveShownUdfpsCenterLottie) {
-                    mHaveShownUdfpsCenterLottie = true;
-                    // Note: Update string reference when differentiate in between udfps & sfps
-                    mIllustrationLottie.setContentDescription(
-                            getString(R.string.security_settings_sfps_enroll_finger_center_title)
-                    );
-                    configureEnrollmentStage(R.raw.udfps_center_hint_lottie);
-                }
-                break;
-
-            case STAGE_GUIDED:
-                mTitleText.setText(R.string.security_settings_fingerprint_enroll_repeat_title);
-                if (mIsAccessibilityEnabled || mIllustrationLottie == null) {
-                    mSubTitleText.setText(
-                            R.string.security_settings_udfps_enroll_repeat_a11y_message);
-                } else if (!mHaveShownUdfpsGuideLottie) {
-                    mHaveShownUdfpsGuideLottie = true;
-                    mIllustrationLottie.setContentDescription(
-                            getString(R.string.security_settings_fingerprint_enroll_repeat_message)
-                    );
-                    // TODO(b/228100413) Could customize guided lottie animation
-                    configureEnrollmentStage(R.raw.udfps_center_hint_lottie);
-                }
-                break;
-            case STAGE_FINGERTIP:
-                mTitleText.setText(R.string.security_settings_udfps_enroll_fingertip_title);
-                if (!mHaveShownUdfpsTipLottie && mIllustrationLottie != null) {
-                    mHaveShownUdfpsTipLottie = true;
-                    mIllustrationLottie.setContentDescription(
-                            getString(R.string.security_settings_udfps_tip_fingerprint_help)
-                    );
-                    configureEnrollmentStage(R.raw.udfps_tip_hint_lottie);
-                }
-                break;
-            case STAGE_LEFT_EDGE:
-                mTitleText.setText(R.string.security_settings_udfps_enroll_left_edge_title);
-                if (!mHaveShownUdfpsLeftEdgeLottie && mIllustrationLottie != null) {
-                    mHaveShownUdfpsLeftEdgeLottie = true;
-                    mIllustrationLottie.setContentDescription(
-                            getString(R.string.security_settings_udfps_side_fingerprint_help)
-                    );
-                    configureEnrollmentStage(R.raw.udfps_left_edge_hint_lottie);
-                } else if (mIllustrationLottie == null) {
-                    if (isStageHalfCompleted()) {
-                        mSubTitleText.setText(
-                                R.string.security_settings_fingerprint_enroll_repeat_message);
-                    } else {
-                        mSubTitleText.setText(R.string.security_settings_udfps_enroll_edge_message);
-                    }
-                }
-                break;
-            case STAGE_RIGHT_EDGE:
-                mTitleText.setText(R.string.security_settings_udfps_enroll_right_edge_title);
-                if (!mHaveShownUdfpsRightEdgeLottie && mIllustrationLottie != null) {
-                    mHaveShownUdfpsRightEdgeLottie = true;
-                    mIllustrationLottie.setContentDescription(
-                            getString(R.string.security_settings_udfps_side_fingerprint_help)
-                    );
-                    configureEnrollmentStage(R.raw.udfps_right_edge_hint_lottie);
-
-                } else if (mIllustrationLottie == null) {
-                    if (isStageHalfCompleted()) {
-                        mSubTitleText.setText(
-                                R.string.security_settings_fingerprint_enroll_repeat_message);
-                    } else {
-                        mSubTitleText.setText(R.string.security_settings_udfps_enroll_edge_message);
-                    }
-                }
-                break;
-
-            case STAGE_UNKNOWN:
-            default:
-                mTitleText.setText(R.string.security_settings_fingerprint_enroll_udfps_title);
-                mSubTitleText.setText(R.string.security_settings_udfps_enroll_start_message);
-                final CharSequence description = getString(
-                        R.string.security_settings_udfps_enroll_a11y);
-                getActivity().setTitle(description);
-                break;
-        }
-    }
-
-    private boolean shouldShowLottie() {
-        DisplayDensityUtils displayDensity = new DisplayDensityUtils(getContext());
-        int currentDensityIndex = displayDensity.getCurrentIndexForDefaultDisplay();
-        final int currentDensity = displayDensity.getDefaultDisplayDensityValues()
-                [currentDensityIndex];
-        final int defaultDensity = displayDensity.getDefaultDensityForDefaultDisplay();
-        return defaultDensity == currentDensity;
-    }
-
-    private void updateOrientation(@NonNull RelativeLayout content, int orientation) {
-        switch (orientation) {
-            case Configuration.ORIENTATION_LANDSCAPE: {
-                mIllustrationLottie = null;
-                break;
-            }
-            case Configuration.ORIENTATION_PORTRAIT: {
-                if (mShouldShowLottie) {
-                    mIllustrationLottie = content.findViewById(R.id.illustration_lottie);
-                }
-                break;
-            }
-            default:
-                Log.e(TAG, "Error unhandled configuration change");
-                break;
-        }
-    }
-
-    private int getCurrentStage() {
-        EnrollmentProgress progressLiveData = mProgressViewModel.getProgressLiveData().getValue();
-
-        if (progressLiveData == null || progressLiveData.getSteps() == -1) {
-            return STAGE_UNKNOWN;
-        }
-
-        final int progressSteps = progressLiveData.getSteps() - progressLiveData.getRemaining();
-        if (progressSteps < getStageThresholdSteps(0)) {
-            return STAGE_CENTER;
-        } else if (progressSteps < getStageThresholdSteps(1)) {
-            return STAGE_GUIDED;
-        } else if (progressSteps < getStageThresholdSteps(2)) {
-            return STAGE_FINGERTIP;
-        } else if (progressSteps < getStageThresholdSteps(3)) {
-            return STAGE_LEFT_EDGE;
-        } else {
-            return STAGE_RIGHT_EDGE;
-        }
-    }
-
-    private boolean isStageHalfCompleted() {
-        EnrollmentProgress progressLiveData = mProgressViewModel.getProgressLiveData().getValue();
-        if (progressLiveData == null || progressLiveData.getSteps() == -1) {
-            return false;
-        }
-
-        final int progressSteps = progressLiveData.getSteps() - progressLiveData.getRemaining();
-        int prevThresholdSteps = 0;
-        for (int i = 0; i < mEnrollingViewModel.getEnrollStageCount(); i++) {
-            final int thresholdSteps = getStageThresholdSteps(i);
-            if (progressSteps >= prevThresholdSteps && progressSteps < thresholdSteps) {
-                final int adjustedProgress = progressSteps - prevThresholdSteps;
-                final int adjustedThreshold = thresholdSteps - prevThresholdSteps;
-                return adjustedProgress >= adjustedThreshold / 2;
-            }
-            prevThresholdSteps = thresholdSteps;
-        }
-
-        // After last enrollment step.
-        return true;
-    }
-
-    private int getStageThresholdSteps(int index) {
-
-        EnrollmentProgress progressLiveData = mProgressViewModel.getProgressLiveData().getValue();
-
-        if (progressLiveData == null || progressLiveData.getSteps() == -1) {
-            Log.w(TAG, "getStageThresholdSteps: Enrollment not started yet");
-            return 1;
-        }
-        return Math.round(progressLiveData.getSteps()
-                * mEnrollingViewModel.getEnrollStageThreshold(index));
-    }
-
-    private void configureEnrollmentStage(@RawRes int lottie) {
-        mSubTitleText.setText("");
-        LottieCompositionFactory.fromRawRes(getActivity(), lottie)
-                .addListener((c) -> {
-                    mIllustrationLottie.setComposition(c);
-                    mIllustrationLottie.setVisibility(View.VISIBLE);
-                    mIllustrationLottie.playAnimation();
-                });
-    }
-
-    private void onEnrollmentProgressChange(@NonNull EnrollmentProgress progress) {
-        updateProgress(true /* animate */, progress);
-
-        updateTitleAndDescription();
-
-        if (mIsAccessibilityEnabled) {
-            final int steps = progress.getSteps();
-            final int remaining = progress.getRemaining();
-            final int percent = (int) (((float) (steps - remaining) / (float) steps) * 100);
-            CharSequence announcement = getActivity().getString(
-                    R.string.security_settings_udfps_enroll_progress_a11y_message, percent);
-            mEnrollingViewModel.sendAccessibilityEvent(announcement);
-        }
-
-    }
-
-    private void onEnrollmentHelp(@NonNull EnrollmentStatusMessage helpMessage) {
-        final CharSequence helpStr = helpMessage.getStr();
-        if (!TextUtils.isEmpty(helpStr)) {
-            showError(helpStr);
-            mUdfpsEnrollView.onEnrollmentHelp();
-        }
-    }
-    private void onEnrollmentError(@NonNull EnrollmentStatusMessage errorMessage) {
-        removeEnrollmentObservers();
-
-        if (mEnrollingViewModel.getOnBackPressed()
-                && errorMessage.getMsgId() == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
-            mEnrollingViewModel.onCancelledDueToOnBackPressed();
-        } else if (mEnrollingViewModel.getOnSkipPressed()
-                && errorMessage.getMsgId() == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
-            mEnrollingViewModel.onCancelledDueToOnSkipPressed();
-        } else {
-            final int errMsgId = errorMessage.getMsgId();
-            mEnrollingViewModel.showErrorDialog(
-                    new FingerprintEnrollEnrollingViewModel.ErrorDialogData(
-                            getString(FingerprintErrorDialog.getErrorMessage(errMsgId)),
-                            getString(FingerprintErrorDialog.getErrorTitle(errMsgId)),
-                            errMsgId
-                    ));
-            mProgressViewModel.cancelEnrollment();
-        }
-    }
-
-    private void onAcquired(boolean isAcquiredGood) {
-        if (mUdfpsEnrollView != null) {
-            mUdfpsEnrollView.onAcquired(isAcquiredGood);
-        }
-    }
-
-    private void onPointerDown(int sensorId) {
-        if (mUdfpsEnrollView != null) {
-            mUdfpsEnrollView.onPointerDown(sensorId);
-        }
-    }
-
-    private void onPointerUp(int sensorId) {
-        if (mUdfpsEnrollView != null) {
-            mUdfpsEnrollView.onPointerUp(sensorId);
-        }
-    }
-
-    private void showError(CharSequence error) {
-        mTitleText.setText(error);
-        mTitleText.setContentDescription(error);
-        mSubTitleText.setContentDescription("");
-    }
-
-    private void onRotationChanged(int newRotation) {
-        if( (newRotation +2) % 4 == mRotation) {
-            mRotation = newRotation;
-            configLayout(newRotation);
-        }
-    }
-
-    private void configLayout(int newRotation) {
-        final Activity activity = getActivity();
-        if (newRotation == Surface.ROTATION_270) {
-            RelativeLayout.LayoutParams iconLP = new RelativeLayout.LayoutParams(-2, -2);
-            iconLP.addRule(RelativeLayout.ALIGN_PARENT_TOP);
-            iconLP.addRule(RelativeLayout.END_OF, R.id.udfps_animation_view);
-            iconLP.topMargin = (int) convertDpToPixel(76.64f, activity);
-            iconLP.leftMargin = (int) convertDpToPixel(151.54f, activity);
-            mIcon.setLayoutParams(iconLP);
-
-            RelativeLayout.LayoutParams titleLP = new RelativeLayout.LayoutParams(-1, -2);
-            titleLP.addRule(RelativeLayout.ALIGN_PARENT_TOP);
-            titleLP.addRule(RelativeLayout.END_OF, R.id.udfps_animation_view);
-            titleLP.topMargin = (int) convertDpToPixel(138f, activity);
-            titleLP.leftMargin = (int) convertDpToPixel(144f, activity);
-            mTitleText.setLayoutParams(titleLP);
-
-            RelativeLayout.LayoutParams subtitleLP = new RelativeLayout.LayoutParams(-1, -2);
-            subtitleLP.addRule(RelativeLayout.ALIGN_PARENT_TOP);
-            subtitleLP.addRule(RelativeLayout.END_OF, R.id.udfps_animation_view);
-            subtitleLP.topMargin = (int) convertDpToPixel(198f, activity);
-            subtitleLP.leftMargin = (int) convertDpToPixel(144f, activity);
-            mSubTitleText.setLayoutParams(subtitleLP);
-        } else if (newRotation == Surface.ROTATION_90) {
-            DisplayMetrics metrics = activity.getResources().getDisplayMetrics();
-            RelativeLayout.LayoutParams iconLP = new RelativeLayout.LayoutParams(-2, -2);
-            iconLP.addRule(RelativeLayout.ALIGN_PARENT_TOP);
-            iconLP.addRule(RelativeLayout.ALIGN_PARENT_START);
-            iconLP.topMargin = (int) convertDpToPixel(76.64f, activity);
-            iconLP.leftMargin = (int) convertDpToPixel(71.99f, activity);
-            mIcon.setLayoutParams(iconLP);
-
-            RelativeLayout.LayoutParams titleLP = new RelativeLayout.LayoutParams(
-                    metrics.widthPixels / 2, -2);
-            titleLP.addRule(RelativeLayout.ALIGN_PARENT_TOP);
-            titleLP.addRule(RelativeLayout.ALIGN_PARENT_START, R.id.udfps_animation_view);
-            titleLP.topMargin = (int) convertDpToPixel(138f, activity);
-            titleLP.leftMargin = (int) convertDpToPixel(66f, activity);
-            mTitleText.setLayoutParams(titleLP);
-
-            RelativeLayout.LayoutParams subtitleLP = new RelativeLayout.LayoutParams(
-                    metrics.widthPixels / 2, -2);
-            subtitleLP.addRule(RelativeLayout.ALIGN_PARENT_TOP);
-            subtitleLP.addRule(RelativeLayout.ALIGN_PARENT_START);
-            subtitleLP.topMargin = (int) convertDpToPixel(198f, activity);
-            subtitleLP.leftMargin = (int) convertDpToPixel(66f, activity);
-            mSubTitleText.setLayoutParams(subtitleLP);
-        }
-
-        if (newRotation == Surface.ROTATION_90 || newRotation == Surface.ROTATION_270) {
-            RelativeLayout.LayoutParams skipBtnLP =
-                    (RelativeLayout.LayoutParams) mSkipBtn.getLayoutParams();
-            skipBtnLP.topMargin = (int) convertDpToPixel(26f, activity);
-            skipBtnLP.leftMargin = (int) convertDpToPixel(54f, activity);
-            mSkipBtn.requestLayout();
-        }
-    }
-
-    private float convertDpToPixel(float dp, Context context) {
-        return dp * getDensity(context);
-    }
-
-    private float getDensity(Context context) {
-        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
-        return metrics.density;
-    }
-
-    // Give the user a chance to see progress completed before jumping to the next stage.
-    private final Runnable mDelayedFinishRunnable = () -> mEnrollingViewModel.onEnrollingDone();
-}
diff --git a/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingUdfpsFragment.kt b/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingUdfpsFragment.kt
new file mode 100644
index 0000000..a71c007
--- /dev/null
+++ b/src/com/android/settings/biometrics2/ui/view/FingerprintEnrollEnrollingUdfpsFragment.kt
@@ -0,0 +1,619 @@
+/*
+ * 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.biometrics2.ui.view
+
+import android.annotation.RawRes
+import android.content.Context
+import android.hardware.fingerprint.FingerprintManager.ENROLL_ENROLL
+import android.hardware.fingerprint.FingerprintManager.FINGERPRINT_ERROR_CANCELED
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.Surface
+import android.view.Surface.ROTATION_270
+import android.view.Surface.ROTATION_90
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.ImageView
+import android.widget.RelativeLayout
+import android.widget.TextView
+import androidx.activity.OnBackPressedCallback
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentActivity
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
+import com.airbnb.lottie.LottieAnimationView
+import com.airbnb.lottie.LottieComposition
+import com.airbnb.lottie.LottieCompositionFactory
+import com.android.settings.R
+import com.android.settings.biometrics.fingerprint.FingerprintErrorDialog
+import com.android.settings.biometrics2.ui.model.EnrollmentProgress
+import com.android.settings.biometrics2.ui.model.EnrollmentStatusMessage
+import com.android.settings.biometrics2.ui.viewmodel.DeviceRotationViewModel
+import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel
+import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollProgressViewModel
+import com.android.settings.biometrics2.ui.widget.UdfpsEnrollView
+import com.android.settingslib.display.DisplayDensityUtils
+import kotlin.math.roundToInt
+
+/**
+ * Fragment is used to handle enrolling process for udfps
+ */
+class FingerprintEnrollEnrollingUdfpsFragment : Fragment() {
+
+    private var _enrollingViewModel: FingerprintEnrollEnrollingViewModel? = null
+    private val enrollingViewModel: FingerprintEnrollEnrollingViewModel
+        get() = _enrollingViewModel!!
+
+    private var _rotationViewModel: DeviceRotationViewModel? = null
+    private val rotationViewModel: DeviceRotationViewModel
+        get() = _rotationViewModel!!
+
+    private var _progressViewModel: FingerprintEnrollProgressViewModel? = null
+    private val progressViewModel: FingerprintEnrollProgressViewModel
+        get() = _progressViewModel!!
+
+    private var illustrationLottie: LottieAnimationView? = null
+
+    private var haveShownTipLottie = false
+    private var haveShownLeftEdgeLottie = false
+    private var haveShownRightEdgeLottie = false
+    private var haveShownCenterLottie = false
+    private var haveShownGuideLottie = false
+
+    private var enrollingUdfpsView: RelativeLayout? = null
+
+    private val titleText: TextView
+        get() = enrollingUdfpsView!!.findViewById<TextView>(R.id.suc_layout_title)!!
+
+    private val subTitleText: TextView
+        get() = enrollingUdfpsView!!.findViewById<TextView>(R.id.sud_layout_subtitle)!!
+
+    private val udfpsEnrollView: UdfpsEnrollView
+        get() = enrollingUdfpsView!!.findViewById<UdfpsEnrollView>(R.id.udfps_animation_view)!!
+
+    private val skipBtn: Button
+        get() = enrollingUdfpsView!!.findViewById<Button>(R.id.skip_btn)!!
+
+    private val icon: ImageView
+        get() = enrollingUdfpsView!!.findViewById<ImageView>(R.id.sud_layout_icon)!!
+
+    private val shouldShowLottie: Boolean
+        get() {
+            val displayDensity = DisplayDensityUtils(requireContext())
+            val currentDensityIndex: Int = displayDensity.currentIndexForDefaultDisplay
+            val currentDensity: Int =
+                displayDensity.defaultDisplayDensityValues[currentDensityIndex]
+            val defaultDensity: Int = displayDensity.defaultDensityForDefaultDisplay
+            return defaultDensity == currentDensity
+        }
+
+    private val isAccessibilityEnabled
+        get() = enrollingViewModel.isAccessibilityEnabled
+
+    private var rotation = -1
+
+    private val onSkipClickListener = View.OnClickListener { _: View? ->
+        enrollingViewModel.setOnSkipPressed()
+        cancelEnrollment()
+    }
+
+    private val progressObserver: Observer<EnrollmentProgress> =
+        Observer<EnrollmentProgress> { progress: EnrollmentProgress? ->
+            progress?.let { onEnrollmentProgressChange(it) }
+        }
+
+    private val helpMessageObserver: Observer<EnrollmentStatusMessage> =
+        Observer<EnrollmentStatusMessage> { helpMessage: EnrollmentStatusMessage? ->
+            helpMessage?.let { onEnrollmentHelp(it) }
+        }
+    private val errorMessageObserver: Observer<EnrollmentStatusMessage> =
+        Observer<EnrollmentStatusMessage> { errorMessage: EnrollmentStatusMessage? ->
+            errorMessage?.let { onEnrollmentError(it) }
+        }
+
+    private val acquireObserver =
+        Observer { isAcquiredGood: Boolean? -> isAcquiredGood?.let { onAcquired(it) } }
+
+    private val pointerDownObserver =
+        Observer { sensorId: Int? -> sensorId?.let { onPointerDown(it) } }
+
+    private val pointerUpObserver =
+        Observer { sensorId: Int? -> sensorId?.let { onPointerUp(it) } }
+
+    private val rotationObserver =
+        Observer { rotation: Int? -> rotation?.let { onRotationChanged(it) } }
+
+    private val onBackPressedCallback: OnBackPressedCallback =
+        object : OnBackPressedCallback(true) {
+            override fun handleOnBackPressed() {
+                isEnabled = false
+                enrollingViewModel.setOnBackPressed()
+                cancelEnrollment()
+            }
+        }
+
+    // Give the user a chance to see progress completed before jumping to the next stage.
+    private val delayedFinishRunnable = Runnable { enrollingViewModel.onEnrollingDone() }
+
+    override fun onAttach(context: Context) {
+        ViewModelProvider(requireActivity()).let { provider ->
+            _enrollingViewModel = provider[FingerprintEnrollEnrollingViewModel::class.java]
+            _rotationViewModel = provider[DeviceRotationViewModel::class.java]
+            _progressViewModel = provider[FingerprintEnrollProgressViewModel::class.java]
+        }
+        super.onAttach(context)
+        requireActivity().onBackPressedDispatcher.addCallback(onBackPressedCallback)
+    }
+
+    override fun onDetach() {
+        onBackPressedCallback.isEnabled = false
+        super.onDetach()
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View = (inflater.inflate(
+        R.layout.udfps_enroll_enrolling_v2, container, false
+    ) as RelativeLayout).also {
+        enrollingUdfpsView = it
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        rotation = rotationViewModel.liveData.value!!
+        updateIllustrationLottie(rotation)
+
+        requireActivity().bindFingerprintEnrollEnrollingUdfpsView(
+            view = enrollingUdfpsView!!,
+            sensorProperties = enrollingViewModel.firstFingerprintSensorPropertiesInternal!!,
+            rotation = rotation,
+            onSkipClickListener = onSkipClickListener,
+        )
+    }
+
+
+    override fun onStart() {
+        super.onStart()
+        startEnrollment()
+        updateProgress(false /* animate */, progressViewModel.progressLiveData.value!!)
+        val msg: EnrollmentStatusMessage? = progressViewModel.helpMessageLiveData.value
+        if (msg != null) {
+            onEnrollmentHelp(msg)
+        } else {
+            updateTitleAndDescription()
+        }
+    }
+
+    override fun onResume() {
+        super.onResume()
+        rotationViewModel.liveData.observe(this, rotationObserver)
+    }
+
+    override fun onPause() {
+        rotationViewModel.liveData.removeObserver(rotationObserver)
+        super.onPause()
+    }
+
+    override fun onStop() {
+        removeEnrollmentObservers()
+        if (!activity!!.isChangingConfigurations && progressViewModel.isEnrolling) {
+            progressViewModel.cancelEnrollment()
+        }
+        super.onStop()
+    }
+
+    private fun removeEnrollmentObservers() {
+        preRemoveEnrollmentObservers()
+        progressViewModel.errorMessageLiveData.removeObserver(errorMessageObserver)
+    }
+
+    private fun preRemoveEnrollmentObservers() {
+        progressViewModel.progressLiveData.removeObserver(progressObserver)
+        progressViewModel.helpMessageLiveData.removeObserver(helpMessageObserver)
+        progressViewModel.acquireLiveData.removeObserver(acquireObserver)
+        progressViewModel.pointerDownLiveData.removeObserver(pointerDownObserver)
+        progressViewModel.pointerUpLiveData.removeObserver(pointerUpObserver)
+    }
+
+    private fun cancelEnrollment() {
+        preRemoveEnrollmentObservers()
+        progressViewModel.cancelEnrollment()
+    }
+
+    private fun startEnrollment() {
+        val startResult: Boolean =
+            progressViewModel.startEnrollment(ENROLL_ENROLL)
+        if (!startResult) {
+            Log.e(TAG, "startEnrollment(), failed")
+        }
+        progressViewModel.progressLiveData.observe(this, progressObserver)
+        progressViewModel.helpMessageLiveData.observe(this, helpMessageObserver)
+        progressViewModel.errorMessageLiveData.observe(this, errorMessageObserver)
+        progressViewModel.acquireLiveData.observe(this, acquireObserver)
+        progressViewModel.pointerDownLiveData.observe(this, pointerDownObserver)
+        progressViewModel.pointerUpLiveData.observe(this, pointerUpObserver)
+    }
+
+    private fun updateProgress(animate: Boolean, enrollmentProgress: EnrollmentProgress) {
+        if (!progressViewModel.isEnrolling) {
+            Log.d(TAG, "Enrollment not started yet")
+            return
+        }
+        val progress = getProgress(enrollmentProgress)
+        if (progressViewModel.progressLiveData.value!!.steps != -1) {
+            udfpsEnrollView.onEnrollmentProgress(
+                enrollmentProgress.remaining,
+                enrollmentProgress.steps
+            )
+        }
+        if (animate) {
+            animateProgress(progress)
+        } else if (progress >= PROGRESS_BAR_MAX) {
+            delayedFinishRunnable.run()
+        }
+    }
+
+    private fun getProgress(progress: EnrollmentProgress): Int {
+        if (progress.steps == -1) {
+            return 0
+        }
+        val displayProgress = 0.coerceAtLeast(progress.steps + 1 - progress.remaining)
+        return PROGRESS_BAR_MAX * displayProgress / (progress.steps + 1)
+    }
+
+    private fun animateProgress(progress: Int) {
+        // UDFPS animations are owned by SystemUI
+        if (progress >= PROGRESS_BAR_MAX) {
+            // Wait for any animations in SysUI to finish, then proceed to next page
+            activity!!.mainThreadHandler.postDelayed(delayedFinishRunnable, 400L)
+        }
+    }
+
+    private fun updateTitleAndDescription() {
+        when (currentStage) {
+            STAGE_CENTER -> {
+                titleText.setText(R.string.security_settings_fingerprint_enroll_repeat_title)
+                if (isAccessibilityEnabled || illustrationLottie == null) {
+                    subTitleText.setText(R.string.security_settings_udfps_enroll_start_message)
+                } else if (!haveShownCenterLottie) {
+                    haveShownCenterLottie = true
+                    // Note: Update string reference when differentiate in between udfps & sfps
+                    illustrationLottie!!.contentDescription = getString(R.string.security_settings_sfps_enroll_finger_center_title)
+                    configureEnrollmentStage(R.raw.udfps_center_hint_lottie)
+                }
+            }
+
+            STAGE_GUIDED -> {
+                titleText.setText(R.string.security_settings_fingerprint_enroll_repeat_title)
+                if (isAccessibilityEnabled || illustrationLottie == null) {
+                    subTitleText.setText(
+                        R.string.security_settings_udfps_enroll_repeat_a11y_message
+                    )
+                } else if (!haveShownGuideLottie) {
+                    haveShownGuideLottie = true
+                    illustrationLottie!!.contentDescription =
+                        getString(R.string.security_settings_fingerprint_enroll_repeat_message)
+                    // TODO(b/228100413) Could customize guided lottie animation
+                    configureEnrollmentStage(R.raw.udfps_center_hint_lottie)
+                }
+            }
+
+            STAGE_FINGERTIP -> {
+                titleText.setText(R.string.security_settings_udfps_enroll_fingertip_title)
+                if (!haveShownTipLottie && illustrationLottie != null) {
+                    haveShownTipLottie = true
+                    illustrationLottie!!.contentDescription =
+                        getString(R.string.security_settings_udfps_tip_fingerprint_help)
+                    configureEnrollmentStage(R.raw.udfps_tip_hint_lottie)
+                }
+            }
+
+            STAGE_LEFT_EDGE -> {
+                titleText.setText(R.string.security_settings_udfps_enroll_left_edge_title)
+                if (!haveShownLeftEdgeLottie && illustrationLottie != null) {
+                    haveShownLeftEdgeLottie = true
+                    illustrationLottie!!.contentDescription =
+                        getString(R.string.security_settings_udfps_side_fingerprint_help)
+                    configureEnrollmentStage(R.raw.udfps_left_edge_hint_lottie)
+                } else if (illustrationLottie == null) {
+                    if (isStageHalfCompleted) {
+                        subTitleText.setText(
+                            R.string.security_settings_fingerprint_enroll_repeat_message
+                        )
+                    } else {
+                        subTitleText.setText(R.string.security_settings_udfps_enroll_edge_message)
+                    }
+                }
+            }
+
+            STAGE_RIGHT_EDGE -> {
+                titleText.setText(R.string.security_settings_udfps_enroll_right_edge_title)
+                if (!haveShownRightEdgeLottie && illustrationLottie != null) {
+                    haveShownRightEdgeLottie = true
+                    illustrationLottie!!.contentDescription =
+                        getString(R.string.security_settings_udfps_side_fingerprint_help)
+                    configureEnrollmentStage(R.raw.udfps_right_edge_hint_lottie)
+                } else if (illustrationLottie == null) {
+                    if (isStageHalfCompleted) {
+                        subTitleText.setText(
+                            R.string.security_settings_fingerprint_enroll_repeat_message
+                        )
+                    } else {
+                        subTitleText.setText(R.string.security_settings_udfps_enroll_edge_message)
+                    }
+                }
+            }
+
+            STAGE_UNKNOWN -> {
+                titleText.setText(R.string.security_settings_fingerprint_enroll_udfps_title)
+                subTitleText.setText(R.string.security_settings_udfps_enroll_start_message)
+                val description: CharSequence = getString(
+                    R.string.security_settings_udfps_enroll_a11y
+                )
+                requireActivity().title = description
+            }
+
+            else -> {
+                titleText.setText(R.string.security_settings_fingerprint_enroll_udfps_title)
+                subTitleText.setText(R.string.security_settings_udfps_enroll_start_message)
+                val description: CharSequence = getString(
+                    R.string.security_settings_udfps_enroll_a11y
+                )
+                requireActivity().title = description
+            }
+        }
+    }
+
+    private fun updateIllustrationLottie(@Surface.Rotation rotation: Int) {
+        if (rotation == ROTATION_90 || rotation == ROTATION_270) {
+            illustrationLottie = null
+        } else if (shouldShowLottie) {
+            illustrationLottie =
+                enrollingUdfpsView!!.findViewById<LottieAnimationView>(R.id.illustration_lottie)
+        }
+    }
+
+    private val currentStage: Int
+        get() {
+            val progress = progressViewModel.progressLiveData.value!!
+            if (progress.steps == -1) {
+                return STAGE_UNKNOWN
+            }
+            val progressSteps: Int = progress.steps - progress.remaining
+            return if (progressSteps < getStageThresholdSteps(0)) {
+                STAGE_CENTER
+            } else if (progressSteps < getStageThresholdSteps(1)) {
+                STAGE_GUIDED
+            } else if (progressSteps < getStageThresholdSteps(2)) {
+                STAGE_FINGERTIP
+            } else if (progressSteps < getStageThresholdSteps(3)) {
+                STAGE_LEFT_EDGE
+            } else {
+                STAGE_RIGHT_EDGE
+            }
+        }
+
+    private val isStageHalfCompleted: Boolean
+        get() {
+            val progress: EnrollmentProgress = progressViewModel.progressLiveData.value!!
+            if (progress.steps == -1) {
+                return false
+            }
+            val progressSteps: Int = progress.steps - progress.remaining
+            var prevThresholdSteps = 0
+            for (i in 0 until enrollingViewModel.getEnrollStageCount()) {
+                val thresholdSteps = getStageThresholdSteps(i)
+                if (progressSteps in prevThresholdSteps until thresholdSteps) {
+                    val adjustedProgress = progressSteps - prevThresholdSteps
+                    val adjustedThreshold = thresholdSteps - prevThresholdSteps
+                    return adjustedProgress >= adjustedThreshold / 2
+                }
+                prevThresholdSteps = thresholdSteps
+            }
+
+            // After last enrollment step.
+            return true
+        }
+
+    private fun getStageThresholdSteps(index: Int): Int {
+        val progress: EnrollmentProgress = progressViewModel.progressLiveData.value!!
+        if (progress.steps == -1) {
+            Log.w(TAG, "getStageThresholdSteps: Enrollment not started yet")
+            return 1
+        }
+        return (progress.steps * enrollingViewModel.getEnrollStageThreshold(index)).roundToInt()
+    }
+
+    private fun configureEnrollmentStage(@RawRes lottie: Int) {
+        subTitleText.text = ""
+        LottieCompositionFactory.fromRawRes(activity, lottie)
+            .addListener { c: LottieComposition ->
+                illustrationLottie?.let {
+                    it.setComposition(c)
+                    it.visibility = View.VISIBLE
+                    it.playAnimation()
+                }
+            }
+    }
+
+    private fun onEnrollmentProgressChange(progress: EnrollmentProgress) {
+        updateProgress(true /* animate */, progress)
+        updateTitleAndDescription()
+        if (isAccessibilityEnabled) {
+            val steps: Int = progress.steps
+            val remaining: Int = progress.remaining
+            val percent = ((steps - remaining).toFloat() / steps.toFloat() * 100).toInt()
+            val announcement: CharSequence = activity!!.getString(
+                R.string.security_settings_udfps_enroll_progress_a11y_message, percent
+            )
+            enrollingViewModel.sendAccessibilityEvent(announcement)
+        }
+    }
+
+    private fun onEnrollmentHelp(helpMessage: EnrollmentStatusMessage) {
+        val helpStr: CharSequence = helpMessage.str
+        if (helpStr.isNotEmpty()) {
+            showError(helpStr)
+            udfpsEnrollView.onEnrollmentHelp()
+        }
+    }
+
+    private fun onEnrollmentError(errorMessage: EnrollmentStatusMessage) {
+        removeEnrollmentObservers()
+        if (enrollingViewModel.onBackPressed
+            && errorMessage.msgId == FINGERPRINT_ERROR_CANCELED
+        ) {
+            enrollingViewModel.onCancelledDueToOnBackPressed()
+        } else if (enrollingViewModel.onSkipPressed
+            && errorMessage.msgId == FINGERPRINT_ERROR_CANCELED
+        ) {
+            enrollingViewModel.onCancelledDueToOnSkipPressed()
+        } else {
+            val errMsgId: Int = errorMessage.msgId
+            enrollingViewModel.showErrorDialog(
+                FingerprintEnrollEnrollingViewModel.ErrorDialogData(
+                    getString(FingerprintErrorDialog.getErrorMessage(errMsgId)),
+                    getString(FingerprintErrorDialog.getErrorTitle(errMsgId)),
+                    errMsgId
+                )
+            )
+            progressViewModel.cancelEnrollment()
+        }
+    }
+
+    private fun onAcquired(isAcquiredGood: Boolean) {
+        udfpsEnrollView.onAcquired(isAcquiredGood)
+    }
+
+    private fun onPointerDown(sensorId: Int) {
+        udfpsEnrollView.onPointerDown(sensorId)
+    }
+
+    private fun onPointerUp(sensorId: Int) {
+        udfpsEnrollView.onPointerUp(sensorId)
+    }
+
+    private fun showError(error: CharSequence) {
+        titleText.text = error
+        titleText.contentDescription = error
+        subTitleText.contentDescription = ""
+    }
+
+    private fun onRotationChanged(newRotation: Int) {
+        if ((newRotation + 2) % 4 == rotation) {
+            rotation = newRotation
+            requireContext().configLayout(newRotation, titleText, subTitleText, icon, skipBtn)
+        }
+    }
+
+    companion object {
+        private val TAG = "FingerprintEnrollEnrollingUdfpsFragment"
+        private const val PROGRESS_BAR_MAX = 10000
+        private const val STAGE_UNKNOWN = -1
+        private const val STAGE_CENTER = 0
+        private const val STAGE_GUIDED = 1
+        private const val STAGE_FINGERTIP = 2
+        private const val STAGE_LEFT_EDGE = 3
+        private const val STAGE_RIGHT_EDGE = 4
+    }
+}
+
+
+fun FragmentActivity.bindFingerprintEnrollEnrollingUdfpsView(
+    view: RelativeLayout,
+    sensorProperties: FingerprintSensorPropertiesInternal,
+    @Surface.Rotation rotation: Int,
+    onSkipClickListener: View.OnClickListener
+) {
+    view.findViewById<UdfpsEnrollView>(R.id.udfps_animation_view)!!.setSensorProperties(
+        sensorProperties
+    )
+
+    val titleText = view.findViewById<TextView>(R.id.suc_layout_title)!!
+    val subTitleText = view.findViewById<TextView>(R.id.sud_layout_subtitle)!!
+    val icon = view.findViewById<ImageView>(R.id.sud_layout_icon)!!
+    val skipBtn = view.findViewById<Button>(R.id.skip_btn)!!.also {
+        it.setOnClickListener(onSkipClickListener)
+    }
+    configLayout(rotation, titleText, subTitleText, icon, skipBtn)
+}
+
+private fun Context.configLayout(
+    @Surface.Rotation newRotation: Int,
+    titleText: TextView,
+    subTitleText: TextView,
+    icon: ImageView,
+    skipBtn: Button
+) {
+    if (newRotation == ROTATION_270) {
+        val iconLP = RelativeLayout.LayoutParams(-2, -2)
+        iconLP.addRule(RelativeLayout.ALIGN_PARENT_TOP)
+        iconLP.addRule(RelativeLayout.END_OF, R.id.udfps_animation_view)
+        iconLP.topMargin = convertDpToPixel(76.64f)
+        iconLP.leftMargin = convertDpToPixel(151.54f)
+        icon.layoutParams = iconLP
+        val titleLP = RelativeLayout.LayoutParams(-1, -2)
+        titleLP.addRule(RelativeLayout.ALIGN_PARENT_TOP)
+        titleLP.addRule(RelativeLayout.END_OF, R.id.udfps_animation_view)
+        titleLP.topMargin = convertDpToPixel(138f)
+        titleLP.leftMargin = convertDpToPixel(144f)
+        titleText.layoutParams = titleLP
+        val subtitleLP = RelativeLayout.LayoutParams(-1, -2)
+        subtitleLP.addRule(RelativeLayout.ALIGN_PARENT_TOP)
+        subtitleLP.addRule(RelativeLayout.END_OF, R.id.udfps_animation_view)
+        subtitleLP.topMargin = convertDpToPixel(198f)
+        subtitleLP.leftMargin = convertDpToPixel(144f)
+        subTitleText.layoutParams = subtitleLP
+    } else if (newRotation == ROTATION_90) {
+        val metrics = resources.displayMetrics
+        val iconLP = RelativeLayout.LayoutParams(-2, -2)
+        iconLP.addRule(RelativeLayout.ALIGN_PARENT_TOP)
+        iconLP.addRule(RelativeLayout.ALIGN_PARENT_START)
+        iconLP.topMargin = convertDpToPixel(76.64f)
+        iconLP.leftMargin = convertDpToPixel(71.99f)
+        icon.layoutParams = iconLP
+        val titleLP = RelativeLayout.LayoutParams(
+            metrics.widthPixels / 2, -2
+        )
+        titleLP.addRule(RelativeLayout.ALIGN_PARENT_TOP)
+        titleLP.addRule(RelativeLayout.ALIGN_PARENT_START, R.id.udfps_animation_view)
+        titleLP.topMargin = convertDpToPixel(138f)
+        titleLP.leftMargin = convertDpToPixel(66f)
+        titleText.layoutParams = titleLP
+        val subtitleLP = RelativeLayout.LayoutParams(
+            metrics.widthPixels / 2, -2
+        )
+        subtitleLP.addRule(RelativeLayout.ALIGN_PARENT_TOP)
+        subtitleLP.addRule(RelativeLayout.ALIGN_PARENT_START)
+        subtitleLP.topMargin = convertDpToPixel(198f)
+        subtitleLP.leftMargin = convertDpToPixel(66f)
+        subTitleText.layoutParams = subtitleLP
+    }
+    if (newRotation == ROTATION_90 || newRotation == ROTATION_270) {
+        val skipBtnLP = skipBtn.layoutParams as RelativeLayout.LayoutParams
+        skipBtnLP.topMargin = convertDpToPixel(26f)
+        skipBtnLP.leftMargin = convertDpToPixel(54f)
+        skipBtn.requestLayout()
+    }
+}
+
+fun Context.convertDpToPixel(dp: Float): Int {
+    return (dp * resources.displayMetrics.density).toInt()
+}
diff --git a/src/com/android/settings/deviceinfo/StorageCategoryFragment.java b/src/com/android/settings/deviceinfo/StorageCategoryFragment.java
index 52f453d..d1d4cbe 100644
--- a/src/com/android/settings/deviceinfo/StorageCategoryFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageCategoryFragment.java
@@ -211,7 +211,9 @@
 
         setLoading(false /* loading */, false /* animate */);
 
-        final long privateUsedBytes = mStorageInfo.totalBytes - mStorageInfo.freeBytes;
+        // TODO(b/288103116): replace with  new API to get TotalBytes before rounding
+        //  once support by StorageManager.
+        final long privateUsedBytes = Utils.getPrimaryStorageSize() - mStorageInfo.freeBytes;
         mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo());
         mPreferenceController.setUsedSize(privateUsedBytes);
         mPreferenceController.setTotalSize(mStorageInfo.totalBytes);
diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
index f31f2be..4138057 100644
--- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
@@ -387,7 +387,9 @@
 
         setLoading(false /* loading */, false /* animate */);
 
-        final long privateUsedBytes = mStorageInfo.totalBytes - mStorageInfo.freeBytes;
+        // TODO(b/288103116): replace with  new API to get TotalBytes before rounding
+        //  once support by StorageManager.
+        final long privateUsedBytes = Utils.getPrimaryStorageSize() - mStorageInfo.freeBytes;
         mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo());
         mPreferenceController.setUsedSize(privateUsedBytes);
         mPreferenceController.setTotalSize(mStorageInfo.totalBytes);
diff --git a/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java b/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java
index e682783..43dc9dd 100644
--- a/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java
@@ -74,10 +74,14 @@
         return ThreadUtils.postOnBackgroundThread(() -> {
             final PrivateStorageInfo info = PrivateStorageInfo.getPrivateStorageInfo(
                     getStorageManagerVolumeProvider());
-            storageCacheHelper.cacheUsedSize(info.totalBytes - info.freeBytes);
+
+            // TODO(b/288103116): replace with  new API to get TotalBytes before rounding
+            //  once support by StorageManager.
+            long usedBytes = Utils.getPrimaryStorageSize() - info.freeBytes;
+            storageCacheHelper.cacheUsedSize(usedBytes);
             ThreadUtils.postOnMainThread(() -> {
                 preference.setSummary(
-                        getSummary(info.totalBytes - info.freeBytes, info.totalBytes));
+                        getSummary(usedBytes, info.totalBytes));
             });
         });
     }
diff --git a/src/com/android/settings/deviceinfo/storage/StorageUsageProgressBarPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageUsageProgressBarPreferenceController.java
index be2a64a..23559d4 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageUsageProgressBarPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageUsageProgressBarPreferenceController.java
@@ -26,6 +26,7 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.Utils;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settingslib.utils.ThreadUtils;
 import com.android.settingslib.widget.UsageProgressBarPreference;
@@ -92,7 +93,9 @@
                 if (mStorageEntry.isPrivate()) {
                     // StorageStatsManager can only query private storages.
                     mTotalBytes = mStorageStatsManager.getTotalBytes(mStorageEntry.getFsUuid());
-                    mUsedBytes = mTotalBytes
+                    // TODO(b/288103116): replace with  new API to get TotalBytes before rounding
+                    //  once support by StorageManager.
+                    mUsedBytes = Utils.getPrimaryStorageSize()
                             - mStorageStatsManager.getFreeBytes(mStorageEntry.getFsUuid());
                 } else {
                     final File rootFile = mStorageEntry.getPath();
diff --git a/src/com/android/settings/display/AlwaysOnDisplaySlice.java b/src/com/android/settings/display/AlwaysOnDisplaySlice.java
index 003c603..7a9f2f9 100644
--- a/src/com/android/settings/display/AlwaysOnDisplaySlice.java
+++ b/src/com/android/settings/display/AlwaysOnDisplaySlice.java
@@ -36,8 +36,6 @@
 
 import com.android.settings.R;
 import com.android.settings.Utils;
-import com.android.settings.aware.AwareFeatureProvider;
-import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.slices.CustomSliceRegistry;
 import com.android.settings.slices.CustomSliceable;
 
@@ -59,12 +57,10 @@
 
     private final Context mContext;
     private final AmbientDisplayConfiguration mConfig;
-    private final AwareFeatureProvider mFeatureProvider;
 
     public AlwaysOnDisplaySlice(Context context) {
         mContext = context;
         mConfig = new AmbientDisplayConfiguration(mContext);
-        mFeatureProvider = FeatureFactory.getFactory(context).getAwareFeatureProvider();
     }
 
     @Override
@@ -107,12 +103,9 @@
         final boolean isChecked = intent.getBooleanExtra(android.app.slice.Slice.EXTRA_TOGGLE_STATE,
                 false);
         final ContentResolver resolver = mContext.getContentResolver();
-        final boolean isAwareSupported = mFeatureProvider.isSupported(mContext);
-        final boolean isAwareEnabled = mFeatureProvider.isEnabled(mContext);
 
         Settings.Secure.putInt(resolver, DOZE_ALWAYS_ON, isChecked ? 1 : 0);
-        Settings.Secure.putInt(resolver, DOZE_WAKE_DISPLAY_GESTURE,
-                (isAwareEnabled && isAwareSupported && isChecked) ? 1 : 0);
+        Settings.Secure.putInt(resolver, DOZE_WAKE_DISPLAY_GESTURE, 0);
     }
 
     @Override
diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java
index d82cb10..8532b16 100644
--- a/src/com/android/settings/gestures/GestureSettings.java
+++ b/src/com/android/settings/gestures/GestureSettings.java
@@ -53,7 +53,6 @@
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
-        use(AssistGestureSettingsPreferenceController.class).setAssistOnly(false);
         use(PickupGesturePreferenceController.class).setConfig(getConfig(context));
         use(DoubleTapScreenPreferenceController.class).setConfig(getConfig(context));
     }
diff --git a/src/com/android/settings/gestures/GesturesSettingPreferenceController.java b/src/com/android/settings/gestures/GesturesSettingPreferenceController.java
index ff069ab..5428eac 100644
--- a/src/com/android/settings/gestures/GesturesSettingPreferenceController.java
+++ b/src/com/android/settings/gestures/GesturesSettingPreferenceController.java
@@ -21,26 +21,19 @@
 
 import androidx.annotation.NonNull;
 
-import com.android.settings.aware.AwareFeatureProvider;
 import com.android.settings.core.BasePreferenceController;
-import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.util.ArrayList;
 import java.util.List;
 
 public class GesturesSettingPreferenceController extends BasePreferenceController {
-    private final AssistGestureFeatureProvider mFeatureProvider;
-    private final AwareFeatureProvider mAwareFeatureProvider;
     private List<AbstractPreferenceController> mGestureControllers;
 
-    private static final String KEY_GESTURES_SETTINGS = "gesture_settings";
     private static final String FAKE_PREF_KEY = "fake_key_only_for_get_available";
 
-    public GesturesSettingPreferenceController(Context context) {
-        super(context, KEY_GESTURES_SETTINGS);
-        mFeatureProvider = FeatureFactory.getFactory(context).getAssistGestureFeatureProvider();
-        mAwareFeatureProvider = FeatureFactory.getFactory(context).getAwareFeatureProvider();
+    public GesturesSettingPreferenceController(Context context, String key) {
+        super(context, key);
     }
 
     @Override
diff --git a/src/com/android/settings/localepicker/LocaleDialogFragment.java b/src/com/android/settings/localepicker/LocaleDialogFragment.java
index ad9e10f..f54446a 100644
--- a/src/com/android/settings/localepicker/LocaleDialogFragment.java
+++ b/src/com/android/settings/localepicker/LocaleDialogFragment.java
@@ -164,15 +164,18 @@
         public void onClick(DialogInterface dialog, int which) {
             if (mDialogType == DIALOG_CONFIRM_SYSTEM_DEFAULT) {
                 int result = Activity.RESULT_CANCELED;
+                boolean changed = false;
                 if (which == DialogInterface.BUTTON_POSITIVE) {
                     result = Activity.RESULT_OK;
+                    changed = true;
                 }
                 Intent intent = new Intent();
                 Bundle bundle = new Bundle();
                 bundle.putInt(ARG_DIALOG_TYPE, DIALOG_CONFIRM_SYSTEM_DEFAULT);
                 intent.putExtras(bundle);
                 mParent.onActivityResult(DIALOG_CONFIRM_SYSTEM_DEFAULT, result, intent);
-                mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_CHANGE_LANGUAGE);
+                mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_CHANGE_LANGUAGE,
+                        changed);
             }
             mShouldKeepDialog = false;
         }
diff --git a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
index edd3026..6c254d9 100644
--- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
+++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.localepicker;
 
+import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.graphics.Canvas;
 import android.os.Bundle;
@@ -37,6 +38,7 @@
 import com.android.internal.app.LocalePicker;
 import com.android.internal.app.LocaleStore;
 import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.shortcut.ShortcutsUpdateTask;
 
 import java.text.NumberFormat;
@@ -210,6 +212,13 @@
             Log.e(TAG, String.format(Locale.US,
                     "Negative position in onItemMove %d -> %d", fromPosition, toPosition));
         }
+
+        if (fromPosition != toPosition) {
+            FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
+                    .action(mContext, SettingsEnums.ACTION_REORDER_LANGUAGE,
+                            mDragLocale.getLocale().getDisplayName() + " move to " + toPosition);
+        }
+
         notifyItemChanged(fromPosition); // to update the numbers
         notifyItemChanged(toPosition);
         notifyItemMoved(fromPosition, toPosition);
@@ -244,8 +253,13 @@
 
     void removeChecked() {
         int itemCount = mFeedItemList.size();
+        LocaleStore.LocaleInfo localeInfo;
         for (int i = itemCount - 1; i >= 0; i--) {
-            if (mFeedItemList.get(i).getChecked()) {
+            localeInfo = mFeedItemList.get(i);
+            if (localeInfo.getChecked()) {
+                FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
+                        .action(mContext, SettingsEnums.ACTION_REMOVE_LANGUAGE,
+                                localeInfo.getLocale().getDisplayName());
                 mFeedItemList.remove(i);
             }
         }
diff --git a/src/com/android/settings/localepicker/LocaleListEditor.java b/src/com/android/settings/localepicker/LocaleListEditor.java
index 3e26e9f..79e3774 100644
--- a/src/com/android/settings/localepicker/LocaleListEditor.java
+++ b/src/com/android/settings/localepicker/LocaleListEditor.java
@@ -213,9 +213,11 @@
             localeInfo = (LocaleStore.LocaleInfo) data.getSerializableExtra(INTENT_LOCALE_KEY);
             String preferencesTags = Settings.System.getString(
                     getContext().getContentResolver(), Settings.System.LOCALE_PREFERENCES);
-
-            mAdapter.addLocale(mayAppendUnicodeTags(localeInfo, preferencesTags));
+            localeInfo = mayAppendUnicodeTags(localeInfo, preferencesTags);
+            mAdapter.addLocale(localeInfo);
             updateVisibilityOfRemoveMenu();
+            mMetricsFeatureProvider.action(getContext(), SettingsEnums.ACTION_ADD_LANGUAGE,
+                    localeInfo.getLocale().getDisplayName());
         } else if (requestCode == DIALOG_CONFIRM_SYSTEM_DEFAULT) {
             localeInfo = mAdapter.getFeedItemList().get(0);
             if (resultCode == Activity.RESULT_OK) {
@@ -228,6 +230,9 @@
                     LocaleDialogFragment localeDialogFragment = LocaleDialogFragment.newInstance();
                     localeDialogFragment.setArguments(args);
                     localeDialogFragment.show(mFragmentManager, TAG_DIALOG_NOT_AVAILABLE);
+                    mMetricsFeatureProvider.action(getContext(),
+                            SettingsEnums.ACTION_NOT_SUPPORTED_SYSTEM_LANGUAGE,
+                            localeInfo.getLocale().getDisplayName());
                 }
             } else {
                 mAdapter.notifyListChanged(localeInfo);
diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java
index 2191cd2..92df1a8 100644
--- a/src/com/android/settings/overlay/FeatureFactory.java
+++ b/src/com/android/settings/overlay/FeatureFactory.java
@@ -27,7 +27,6 @@
 import com.android.settings.accessibility.AccessibilitySearchFeatureProvider;
 import com.android.settings.accounts.AccountFeatureProvider;
 import com.android.settings.applications.ApplicationFeatureProvider;
-import com.android.settings.aware.AwareFeatureProvider;
 import com.android.settings.biometrics.face.FaceFeatureProvider;
 import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider;
 import com.android.settings.bluetooth.BluetoothFeatureProvider;
@@ -176,8 +175,6 @@
      */
     public abstract BluetoothFeatureProvider getBluetoothFeatureProvider();
 
-    public abstract AwareFeatureProvider getAwareFeatureProvider();
-
     public abstract FaceFeatureProvider getFaceFeatureProvider();
 
     /**
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 60adf95..e5b3402 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -33,8 +33,6 @@
 import com.android.settings.accounts.AccountFeatureProviderImpl;
 import com.android.settings.applications.ApplicationFeatureProvider;
 import com.android.settings.applications.ApplicationFeatureProviderImpl;
-import com.android.settings.aware.AwareFeatureProvider;
-import com.android.settings.aware.AwareFeatureProviderImpl;
 import com.android.settings.biometrics.face.FaceFeatureProvider;
 import com.android.settings.biometrics.face.FaceFeatureProviderImpl;
 import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider;
@@ -109,7 +107,6 @@
     private PanelFeatureProvider mPanelFeatureProvider;
     private ContextualCardFeatureProvider mContextualCardFeatureProvider;
     private BluetoothFeatureProvider mBluetoothFeatureProvider;
-    private AwareFeatureProvider mAwareFeatureProvider;
     private FaceFeatureProvider mFaceFeatureProvider;
     private BiometricsRepositoryProvider mBiometricsRepositoryProvider;
     private WifiTrackerLibProvider mWifiTrackerLibProvider;
@@ -305,14 +302,6 @@
     }
 
     @Override
-    public AwareFeatureProvider getAwareFeatureProvider() {
-        if (mAwareFeatureProvider == null) {
-            mAwareFeatureProvider = new AwareFeatureProviderImpl();
-        }
-        return mAwareFeatureProvider;
-    }
-
-    @Override
     public FaceFeatureProvider getFaceFeatureProvider() {
         if (mFaceFeatureProvider == null) {
             mFaceFeatureProvider = new FaceFeatureProviderImpl();
diff --git a/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java b/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
index e3a8d23..2a99e99 100644
--- a/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
+++ b/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
@@ -153,7 +153,7 @@
     private void handleLanguageSelect(Preference preference) {
         String selectedLanguage = preference.getKey();
         mMetricsFeatureProvider.action(mContext,
-                SettingsEnums.ACTION_CHOOSE_LANGUAGE_FOR_NUMBERS_PREFERENCES);
+                SettingsEnums.ACTION_CHOOSE_LANGUAGE_FOR_NUMBERS_PREFERENCES, selectedLanguage);
         final Bundle extra = new Bundle();
         extra.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
                 ARG_VALUE_NUMBERING_SYSTEM_SELECT);
@@ -177,7 +177,8 @@
                         saveNumberingSystemToLocale(Locale.forLanguageTag(mSelectedLanguage),
                                 numberingSystem);
                 mMetricsFeatureProvider.action(mContext,
-                        SettingsEnums.ACTION_SET_NUMBERS_PREFERENCES);
+                        SettingsEnums.ACTION_SET_NUMBERS_PREFERENCES,
+                        updatedLocale.getDisplayName() + ": " + numberingSystem);
                 // After updated locale to framework, this fragment will recreate,
                 // so it needs to update the argument of selected language.
                 Bundle bundle = new Bundle();
diff --git a/src/com/android/settings/regionalpreferences/RegionalPreferenceListBasePreferenceController.java b/src/com/android/settings/regionalpreferences/RegionalPreferenceListBasePreferenceController.java
index 1e39fff..432ce0e 100644
--- a/src/com/android/settings/regionalpreferences/RegionalPreferenceListBasePreferenceController.java
+++ b/src/com/android/settings/regionalpreferences/RegionalPreferenceListBasePreferenceController.java
@@ -59,6 +59,8 @@
             TickButtonPreference pref = new TickButtonPreference(mContext);
             mPreferenceCategory.addPreference(pref);
             final String item = unitValues[i];
+            final String value = RegionalPreferencesDataUtils.getDefaultUnicodeExtensionData(
+                    mContext, getExtensionTypes());
             pref.setTitle(getPreferenceTitle(item));
             pref.setKey(item);
             pref.setOnPreferenceClickListener(clickedPref -> {
@@ -66,11 +68,10 @@
                 RegionalPreferencesDataUtils.savePreference(mContext, getExtensionTypes(),
                         item.equals(RegionalPreferencesDataUtils.DEFAULT_VALUE)
                                 ? null : item);
-                mMetricsFeatureProvider.action(mContext, getMetricsActionKey());
+                mMetricsFeatureProvider.action(mContext, getMetricsActionKey(),
+                        getPreferenceTitle(value) + " > " +  getPreferenceTitle(item));
                 return true;
             });
-            String value = RegionalPreferencesDataUtils.getDefaultUnicodeExtensionData(mContext,
-                    getExtensionTypes());
             pref.setSelected(!value.isEmpty() && item.equals(value));
         }
     }
diff --git a/src/com/android/settings/system/SystemDashboardFragment.java b/src/com/android/settings/system/SystemDashboardFragment.java
index eed9814..79c5b9f 100644
--- a/src/com/android/settings/system/SystemDashboardFragment.java
+++ b/src/com/android/settings/system/SystemDashboardFragment.java
@@ -20,14 +20,12 @@
 import android.os.Bundle;
 import android.provider.SearchIndexableResource;
 
-import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.search.SearchIndexable;
 
@@ -39,8 +37,6 @@
 
     private static final String TAG = "SystemDashboardFrag";
 
-    public static final String EXTRA_SHOW_AWARE_DISABLED = "show_aware_dialog_disabled";
-
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -50,17 +46,6 @@
         if (getVisiblePreferenceCount(screen) == screen.getInitialExpandedChildrenCount() + 1) {
             screen.setInitialExpandedChildrenCount(Integer.MAX_VALUE);
         }
-
-        showRestrictionDialog();
-    }
-
-    @VisibleForTesting
-    public void showRestrictionDialog() {
-        final Bundle args = getArguments();
-        if (args != null && args.getBoolean(EXTRA_SHOW_AWARE_DISABLED, false)) {
-            FeatureFactory.getFactory(getContext()).getAwareFeatureProvider()
-                    .showRestrictionDialog(this);
-        }
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/aware/AwareFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/aware/AwareFeatureProviderImplTest.java
deleted file mode 100644
index 570f326..0000000
--- a/tests/robotests/src/com/android/settings/aware/AwareFeatureProviderImplTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2019 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.aware;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.content.Context;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class AwareFeatureProviderImplTest {
-    private Context mContext;
-    private AwareFeatureProviderImpl mImpl;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mImpl = new AwareFeatureProviderImpl();
-    }
-
-    @Test
-    public void isSupported_shouldReturnFalse() {
-        assertThat(mImpl.isSupported(mContext)).isFalse();
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdaterTest.java
index 1b2ef9a..8d96c72 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdaterTest.java
@@ -82,8 +82,7 @@
 
     @Test
     public void initUsbPreference_preferenceInit() {
-        when(mDevicePolicyManager.isUsbDataSignalingEnabledForUser(
-                UserHandle.myUserId())).thenReturn(true);
+        when(mDevicePolicyManager.isUsbDataSignalingEnabled()).thenReturn(true);
 
         mDeviceUpdater.initUsbPreference(mContext);
 
diff --git a/tests/robotests/src/com/android/settings/development/DefaultUsbConfigurationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/DefaultUsbConfigurationPreferenceControllerTest.java
index a386473..d14e1d8 100644
--- a/tests/robotests/src/com/android/settings/development/DefaultUsbConfigurationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/DefaultUsbConfigurationPreferenceControllerTest.java
@@ -71,8 +71,7 @@
 
     @Test
     public void updateState_usbDataSignalingEnabled_shouldNotDisablePreference() {
-        when(mDevicePolicyManager.isUsbDataSignalingEnabledForUser(
-                UserHandle.myUserId())).thenReturn(true);
+        when(mDevicePolicyManager.isUsbDataSignalingEnabled()).thenReturn(true);
         when(mDevicePolicyManager.getProfileOwner()).thenReturn(TEST_COMPONENT_NAME);
 
         mController.updateState(mPreference);
@@ -82,8 +81,7 @@
 
     @Test
     public void updateState_usbDataSignalingDisabled_shouldDisablePreference() {
-        when(mDevicePolicyManager.isUsbDataSignalingEnabledForUser(
-                UserHandle.myUserId())).thenReturn(false);
+        when(mDevicePolicyManager.isUsbDataSignalingEnabled()).thenReturn(false);
         when(mDevicePolicyManager.getProfileOwner()).thenReturn(TEST_COMPONENT_NAME);
 
         mController.updateState(mPreference);
@@ -94,8 +92,7 @@
 
     @Test
     public void onDeveloperOptionsSwitchEnabled_usbEnabled_shouldNotDisablePreference() {
-        when(mDevicePolicyManager.isUsbDataSignalingEnabledForUser(
-                UserHandle.myUserId())).thenReturn(true);
+        when(mDevicePolicyManager.isUsbDataSignalingEnabled()).thenReturn(true);
         when(mDevicePolicyManager.getProfileOwner()).thenReturn(TEST_COMPONENT_NAME);
 
         mController.onDeveloperOptionsSwitchEnabled();
@@ -105,8 +102,7 @@
 
     @Test
     public void onDeveloperOptionsSwitchEnabled_usbDisabled_shouldDisablePreference() {
-        when(mDevicePolicyManager.isUsbDataSignalingEnabledForUser(
-                UserHandle.myUserId())).thenReturn(false);
+        when(mDevicePolicyManager.isUsbDataSignalingEnabled()).thenReturn(false);
         when(mDevicePolicyManager.getProfileOwner()).thenReturn(TEST_COMPONENT_NAME);
 
         mController.onDeveloperOptionsSwitchEnabled();
diff --git a/tests/robotests/src/com/android/settings/development/UsbAudioRoutingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/UsbAudioRoutingPreferenceControllerTest.java
index 69d2c99..cb0ba88 100644
--- a/tests/robotests/src/com/android/settings/development/UsbAudioRoutingPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/UsbAudioRoutingPreferenceControllerTest.java
@@ -75,8 +75,7 @@
 
     @Test
     public void updateState_usbAudioRoutingEnabled_shouldCheckedPreference() {
-        when(mDevicePolicyManager.isUsbDataSignalingEnabledForUser(
-                UserHandle.myUserId())).thenReturn(true);
+        when(mDevicePolicyManager.isUsbDataSignalingEnabled()).thenReturn(true);
         when(mDevicePolicyManager.getProfileOwner()).thenReturn(TEST_COMPONENT_NAME);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.USB_AUDIO_AUTOMATIC_ROUTING_DISABLED,
@@ -89,8 +88,7 @@
 
     @Test
     public void updateState_usbAudioRoutingDisabled_shouldUncheckedPreference() {
-        when(mDevicePolicyManager.isUsbDataSignalingEnabledForUser(
-                UserHandle.myUserId())).thenReturn(true);
+        when(mDevicePolicyManager.isUsbDataSignalingEnabled()).thenReturn(true);
         when(mDevicePolicyManager.getProfileOwner()).thenReturn(TEST_COMPONENT_NAME);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.USB_AUDIO_AUTOMATIC_ROUTING_DISABLED,
@@ -103,8 +101,7 @@
 
     @Test
     public void updateState_usbDataSignalingDisabled_shouldDisablePreference() {
-        when(mDevicePolicyManager.isUsbDataSignalingEnabledForUser(
-                UserHandle.myUserId())).thenReturn(false);
+        when(mDevicePolicyManager.isUsbDataSignalingEnabled()).thenReturn(false);
         when(mDevicePolicyManager.getProfileOwner()).thenReturn(TEST_COMPONENT_NAME);
 
         mController.updateState(mPreference);
@@ -150,8 +147,7 @@
 
     @Test
     public void onDeveloperOptionsSwitchEnabled_usbEnabled_shouldNotDisablePreference() {
-        when(mDevicePolicyManager.isUsbDataSignalingEnabledForUser(
-                UserHandle.myUserId())).thenReturn(true);
+        when(mDevicePolicyManager.isUsbDataSignalingEnabled()).thenReturn(true);
         when(mDevicePolicyManager.getProfileOwner()).thenReturn(TEST_COMPONENT_NAME);
 
         mController.onDeveloperOptionsSwitchEnabled();
@@ -161,8 +157,7 @@
 
     @Test
     public void onDeveloperOptionsSwitchEnabled_usbDisabled_shouldDisablePreference() {
-        when(mDevicePolicyManager.isUsbDataSignalingEnabledForUser(
-                UserHandle.myUserId())).thenReturn(false);
+        when(mDevicePolicyManager.isUsbDataSignalingEnabled()).thenReturn(false);
         when(mDevicePolicyManager.getProfileOwner()).thenReturn(TEST_COMPONENT_NAME);
 
         mController.onDeveloperOptionsSwitchEnabled();
diff --git a/tests/robotests/src/com/android/settings/display/AlwaysOnDisplaySliceTest.java b/tests/robotests/src/com/android/settings/display/AlwaysOnDisplaySliceTest.java
index 217f921..74e0d78 100644
--- a/tests/robotests/src/com/android/settings/display/AlwaysOnDisplaySliceTest.java
+++ b/tests/robotests/src/com/android/settings/display/AlwaysOnDisplaySliceTest.java
@@ -37,9 +37,7 @@
 import androidx.slice.widget.SliceLiveData;
 
 import com.android.settings.R;
-import com.android.settings.aware.AwareFeatureProvider;
 import com.android.settings.slices.CustomSliceRegistry;
-import com.android.settings.testutils.FakeFeatureFactory;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -55,8 +53,6 @@
 
     private Context mContext;
     private AlwaysOnDisplaySlice mSlice;
-    private FakeFeatureFactory mFeatureFactory;
-    private AwareFeatureProvider mFeatureProvider;
 
     @Mock
     private AmbientDisplayConfiguration mConfig;
@@ -65,8 +61,6 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
-        mFeatureFactory = FakeFeatureFactory.setupForTest();
-        mFeatureProvider = mFeatureFactory.getAwareFeatureProvider();
 
         // Set-up specs for SliceMetadata.
         SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
@@ -116,11 +110,9 @@
     }
 
     @Test
-    public void onNotifyChange_toggleOn_awareNotSupported_enableAoD() {
+    public void onNotifyChange_toggleOn_enableAoD() {
         final Intent intent = new Intent();
         intent.putExtra(android.app.slice.Slice.EXTRA_TOGGLE_STATE, true);
-        when(mFeatureProvider.isEnabled(mContext)).thenReturn(false);
-        when(mFeatureProvider.isSupported(mContext)).thenReturn(false);
 
         mSlice.onNotifyChange(intent);
 
@@ -128,32 +120,4 @@
         assertThat(Settings.Secure.getInt(resolver, DOZE_ALWAYS_ON, 0)).isEqualTo(1);
         assertThat(Settings.Secure.getInt(resolver, DOZE_WAKE_DISPLAY_GESTURE, 0)).isEqualTo(0);
     }
-
-    @Test
-    public void onNotifyChange_toggleOn_awareDisabled_enableAoD() {
-        final Intent intent = new Intent();
-        intent.putExtra(android.app.slice.Slice.EXTRA_TOGGLE_STATE, true);
-        when(mFeatureProvider.isEnabled(mContext)).thenReturn(false);
-        when(mFeatureProvider.isSupported(mContext)).thenReturn(true);
-
-        mSlice.onNotifyChange(intent);
-
-        final ContentResolver resolver = mContext.getContentResolver();
-        assertThat(Settings.Secure.getInt(resolver, DOZE_ALWAYS_ON, 0)).isEqualTo(1);
-        assertThat(Settings.Secure.getInt(resolver, DOZE_WAKE_DISPLAY_GESTURE, 0)).isEqualTo(0);
-    }
-
-    @Test
-    public void onNotifyChange_toggleOn_awareSupported_enableAoD() {
-        final Intent intent = new Intent();
-        intent.putExtra(android.app.slice.Slice.EXTRA_TOGGLE_STATE, true);
-        when(mFeatureProvider.isEnabled(mContext)).thenReturn(true);
-        when(mFeatureProvider.isSupported(mContext)).thenReturn(true);
-
-        mSlice.onNotifyChange(intent);
-
-        final ContentResolver resolver = mContext.getContentResolver();
-        assertThat(Settings.Secure.getInt(resolver, DOZE_ALWAYS_ON, 0)).isEqualTo(1);
-        assertThat(Settings.Secure.getInt(resolver, DOZE_WAKE_DISPLAY_GESTURE, 0)).isEqualTo(1);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/GesturesSettingsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/GesturesSettingsPreferenceControllerTest.java
index fc0f45c..32dd7af 100644
--- a/tests/robotests/src/com/android/settings/gestures/GesturesSettingsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/GesturesSettingsPreferenceControllerTest.java
@@ -57,7 +57,7 @@
         doReturn(mock(DevicePolicyManager.class)).when(mActivity)
                 .getSystemService(Context.DEVICE_POLICY_SERVICE);
         FakeFeatureFactory.setupForTest();
-        mController = new GesturesSettingPreferenceController(mActivity);
+        mController = new GesturesSettingPreferenceController(mActivity, "test_key");
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java
index baa4690..e504cd6 100644
--- a/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java
@@ -18,17 +18,11 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
-import android.os.Bundle;
 
-import com.android.settings.aware.AwareFeatureProvider;
-import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.XmlTestUtils;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
 import com.android.settings.testutils.shadow.ShadowUserManager;
@@ -75,27 +69,4 @@
 
         assertThat(keys).containsAtLeastElementsIn(niks);
     }
-
-    @Test
-    public void showRestrictionDialog_hasValidExtra_shouldShowDialog() {
-        final AwareFeatureProvider mProvider =
-                FakeFeatureFactory.setupForTest().mAwareFeatureProvider;
-        final Bundle bundle = new Bundle();
-        bundle.putBoolean(SystemDashboardFragment.EXTRA_SHOW_AWARE_DISABLED, true);
-        when(mFragment.getArguments()).thenReturn(bundle);
-
-        mFragment.showRestrictionDialog();
-
-        verify(mProvider).showRestrictionDialog(any());
-    }
-
-    @Test
-    public void showRestrictionDialog_hasInvalidExtra_shouldNotShowDialog() {
-        final AwareFeatureProvider mProvider =
-                FakeFeatureFactory.setupForTest().mAwareFeatureProvider;
-
-        mFragment.showRestrictionDialog();
-
-        verify(mProvider, never()).showRestrictionDialog(any());
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
index fcb01b4..e3af34b 100644
--- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -25,7 +25,6 @@
 import com.android.settings.accessibility.AccessibilitySearchFeatureProvider;
 import com.android.settings.accounts.AccountFeatureProvider;
 import com.android.settings.applications.ApplicationFeatureProvider;
-import com.android.settings.aware.AwareFeatureProvider;
 import com.android.settings.biometrics.face.FaceFeatureProvider;
 import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider;
 import com.android.settings.bluetooth.BluetoothFeatureProvider;
@@ -81,7 +80,6 @@
     public final AssistGestureFeatureProvider assistGestureFeatureProvider;
     public final AccountFeatureProvider mAccountFeatureProvider;
     public final BluetoothFeatureProvider mBluetoothFeatureProvider;
-    public final AwareFeatureProvider mAwareFeatureProvider;
     public final FaceFeatureProvider mFaceFeatureProvider;
     public final BiometricsRepositoryProvider mBiometricsRepositoryProvider;
 
@@ -140,7 +138,6 @@
         mContextualCardFeatureProvider = mock(ContextualCardFeatureProvider.class);
         panelFeatureProvider = mock(PanelFeatureProvider.class);
         mBluetoothFeatureProvider = mock(BluetoothFeatureProvider.class);
-        mAwareFeatureProvider = mock(AwareFeatureProvider.class);
         mFaceFeatureProvider = mock(FaceFeatureProvider.class);
         mBiometricsRepositoryProvider = mock(BiometricsRepositoryProvider.class);
         wifiTrackerLibProvider = mock(WifiTrackerLibProvider.class);
@@ -258,11 +255,6 @@
     }
 
     @Override
-    public AwareFeatureProvider getAwareFeatureProvider() {
-        return mAwareFeatureProvider;
-    }
-
-    @Override
     public FaceFeatureProvider getFaceFeatureProvider() {
         return mFaceFeatureProvider;
     }
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 68078f8..36013d2 100644
--- a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
+++ b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
@@ -21,7 +21,6 @@
 import com.android.settings.accessibility.AccessibilitySearchFeatureProvider
 import com.android.settings.accounts.AccountFeatureProvider
 import com.android.settings.applications.ApplicationFeatureProvider
-import com.android.settings.aware.AwareFeatureProvider
 import com.android.settings.biometrics.face.FaceFeatureProvider
 import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider
 import com.android.settings.bluetooth.BluetoothFeatureProvider
@@ -147,10 +146,6 @@
         TODO("Not yet implemented")
     }
 
-    override fun getAwareFeatureProvider(): AwareFeatureProvider {
-        TODO("Not yet implemented")
-    }
-
     override fun getFaceFeatureProvider(): FaceFeatureProvider {
         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 7a49865..d52085d 100644
--- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -23,7 +23,6 @@
 import com.android.settings.accessibility.AccessibilitySearchFeatureProvider;
 import com.android.settings.accounts.AccountFeatureProvider;
 import com.android.settings.applications.ApplicationFeatureProvider;
-import com.android.settings.aware.AwareFeatureProvider;
 import com.android.settings.biometrics.face.FaceFeatureProvider;
 import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider;
 import com.android.settings.bluetooth.BluetoothFeatureProvider;
@@ -76,7 +75,6 @@
     public final AssistGestureFeatureProvider assistGestureFeatureProvider;
     public final AccountFeatureProvider mAccountFeatureProvider;
     public final BluetoothFeatureProvider mBluetoothFeatureProvider;
-    public final AwareFeatureProvider mAwareFeatureProvider;
     public final FaceFeatureProvider mFaceFeatureProvider;
     public final BiometricsRepositoryProvider mBiometricsRepositoryProvider;
 
@@ -126,7 +124,6 @@
         mContextualCardFeatureProvider = mock(ContextualCardFeatureProvider.class);
         panelFeatureProvider = mock(PanelFeatureProvider.class);
         mBluetoothFeatureProvider = mock(BluetoothFeatureProvider.class);
-        mAwareFeatureProvider = mock(AwareFeatureProvider.class);
         mFaceFeatureProvider = mock(FaceFeatureProvider.class);
         mBiometricsRepositoryProvider = mock(BiometricsRepositoryProvider.class);
         wifiTrackerLibProvider = mock(WifiTrackerLibProvider.class);
@@ -244,11 +241,6 @@
     }
 
     @Override
-    public AwareFeatureProvider getAwareFeatureProvider() {
-        return mAwareFeatureProvider;
-    }
-
-    @Override
     public FaceFeatureProvider getFaceFeatureProvider() {
         return mFaceFeatureProvider;
     }