Allow Safety Center to render off-screen items for smoother animations
Test: manual
Bug: 240140603
Change-Id: I7bed3b4ae1ed4c61e7d77b35bed22ac99e055957
diff --git a/PermissionController/res/layout-v33/safety_center_scroll_wrapper.xml b/PermissionController/res/layout-v33/safety_center_scroll_wrapper.xml
new file mode 100644
index 0000000..449e6da
--- /dev/null
+++ b/PermissionController/res/layout-v33/safety_center_scroll_wrapper.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2022 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.
+ -->
+<androidx.core.widget.NestedScrollView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipChildren="false">
+
+ <androidx.fragment.app.FragmentContainerView
+ android:id="@+id/fragment_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+</androidx.core.widget.NestedScrollView>
\ No newline at end of file
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java
index 23f84f9..3f02eba 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java
@@ -28,12 +28,11 @@
import android.util.Log;
import androidx.annotation.RequiresApi;
-import androidx.preference.PreferenceFragmentCompat;
+import androidx.fragment.app.Fragment;
import com.android.permissioncontroller.Constants;
import com.android.permissioncontroller.PermissionControllerStatsLog;
import com.android.permissioncontroller.R;
-import com.android.permissioncontroller.permission.utils.Utils;
import com.android.settingslib.collapsingtoolbar.CollapsingToolbarBaseActivity;
/** Entry-point activity for SafetyCenter. */
@@ -51,16 +50,14 @@
if (maybeRedirectIfDisabled()) return;
- PreferenceFragmentCompat frag;
+ Fragment frag;
if (getIntent().getAction().equals(PRIVACY_CONTROLS_ACTION)) {
setTitle(R.string.privacy_controls_title);
frag = PrivacyControlsFragment.newInstance();
} else {
logPrivacySourceMetric();
setTitle(getString(R.string.safety_center_dashboard_page_title));
- frag = SafetyCenterDashboardFragment.newInstance(
- Utils.getOrGenerateSessionId(getIntent()),
- /* isQuickSettingsFragment= */ false);
+ frag = new SafetyCenterScrollWrapperFragment();
}
if (savedInstanceState == null) {
getSupportFragmentManager()
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterScrollWrapperFragment.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterScrollWrapperFragment.kt
new file mode 100644
index 0000000..beda65e
--- /dev/null
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterScrollWrapperFragment.kt
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2022 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.permissioncontroller.safetycenter.ui
+
+import android.os.Build
+import android.os.Bundle
+import androidx.annotation.RequiresApi
+import androidx.fragment.app.Fragment
+import com.android.permissioncontroller.R
+import com.android.permissioncontroller.permission.utils.Utils
+
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+internal class SafetyCenterScrollWrapperFragment : Fragment(R.layout.safety_center_scroll_wrapper) {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ if (savedInstanceState == null) {
+ childFragmentManager.beginTransaction()
+ .add(R.id.fragment_container,
+ SafetyCenterDashboardFragment.newInstance(
+ Utils.getOrGenerateSessionId(requireActivity().getIntent()),
+ /* isQuickSettingsFragment= */ false))
+ .commitNow()
+ }
+ }
+}
\ No newline at end of file