1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.privatespace;
18 
19 import android.app.settings.SettingsEnums;
20 import android.os.Bundle;
21 import android.view.LayoutInflater;
22 import android.view.View;
23 import android.view.ViewGroup;
24 import android.view.accessibility.AccessibilityNodeInfo;
25 
26 import androidx.annotation.NonNull;
27 import androidx.preference.Preference;
28 import androidx.preference.PreferenceGroup;
29 import androidx.preference.PreferenceScreen;
30 
31 import com.android.settings.R;
32 import com.android.settings.dashboard.DashboardFragment;
33 import com.android.settingslib.widget.IllustrationPreference;
34 
35 public class HidePrivateSpaceSettings extends DashboardFragment {
36     private static final String TAG = "HidePrivateSpaceSettings";
37     private static final int IMPORTANT_FOR_ACCESSIBILITY_ITEM_COUNT = 5;
38     private static final String PRIVATE_SPACE_HIDE_ILLUSTRATION_KEY =
39             "private_space_hide_illustration";
40 
41     @Override
onCreate(Bundle icicle)42     public void onCreate(Bundle icicle) {
43         if (android.os.Flags.allowPrivateProfile()
44                 && android.multiuser.Flags.enablePrivateSpaceFeatures()) {
45             super.onCreate(icicle);
46         }
47     }
48 
49     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)50     public View onCreateView(LayoutInflater inflater, ViewGroup container,
51             Bundle savedInstanceState) {
52         View root = super.onCreateView(inflater, container, savedInstanceState);
53         PreferenceScreen preferenceScreen = getPreferenceScreen();
54         final int itemCount =  countPreferencesRecursive(preferenceScreen);
55         root.setAccessibilityDelegate(
56                 new View.AccessibilityDelegate() {
57                     @Override
58                     public void onInitializeAccessibilityNodeInfo(
59                             @NonNull View host, @NonNull AccessibilityNodeInfo info) {
60                         super.onInitializeAccessibilityNodeInfo(host, info);
61                         //TODO(b/346712220)  - Replace the hardcoded accessibility count with
62                         //value computed from xml Preference
63                         info.setCollectionInfo(
64                                 new AccessibilityNodeInfo.CollectionInfo.Builder()
65                                         .setRowCount(itemCount)
66                                         .setColumnCount(1)
67                                         .setItemCount(itemCount)
68                                         .setImportantForAccessibilityItemCount(
69                                                 IMPORTANT_FOR_ACCESSIBILITY_ITEM_COUNT)
70                                         .build()
71                         );
72                     }
73                 });
74         return  root;
75     }
76 
77     @Override
onStart()78     public void onStart() {
79         super.onStart();
80         if (PrivateSpaceMaintainer.getInstance(getContext()).isPrivateSpaceLocked()) {
81             finish();
82         }
83     }
84 
85     @Override
onResume()86     public void onResume() {
87         super.onResume();
88         final IllustrationPreference illustrationPreference =
89                 getPreferenceScreen().findPreference(PRIVATE_SPACE_HIDE_ILLUSTRATION_KEY);
90         illustrationPreference.applyDynamicColor();
91     }
92 
93     @Override
getMetricsCategory()94     public int getMetricsCategory() {
95         return SettingsEnums.PRIVATE_SPACE_SETTINGS;
96     }
97 
98     @Override
getPreferenceScreenResId()99     protected int getPreferenceScreenResId() {
100         return R.xml.private_space_hide_locked;
101     }
102 
103     @Override
getLogTag()104     protected String getLogTag() {
105         return TAG;
106     }
107 
countPreferencesRecursive(PreferenceGroup preferenceGroup)108     private int countPreferencesRecursive(PreferenceGroup preferenceGroup) {
109         int count = preferenceGroup.getPreferenceCount();
110         for (int i = 0; i < preferenceGroup.getPreferenceCount(); i++) {
111             Preference preference = preferenceGroup.getPreference(i);
112             if (preference instanceof PreferenceGroup) {
113                 count += countPreferencesRecursive((PreferenceGroup) preference);
114             }
115         }
116         return count;
117     }
118 }
119