/* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.privatespace.autolock; import android.app.settings.SettingsEnums; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.provider.Settings; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.privatespace.PrivateSpaceMaintainer; import com.android.settings.widget.RadioButtonPickerFragment; import com.android.settingslib.widget.CandidateInfo; import com.android.settingslib.widget.TopIntroPreference; import java.util.ArrayList; import java.util.List; public class AutoLockSettingsFragment extends RadioButtonPickerFragment { private static final String TAG = "PSAutoLockSetting"; private static final String AUTOLOCK_METRIC_KEY = "private_space_autolock_mode"; private PrivateSpaceMaintainer mPrivateSpaceMaintainer; private CharSequence[] mAutoLockRadioOptions; private CharSequence[] mAutoLockRadioValues; @Override public void onCreate(@NonNull Bundle icicle) { if (android.os.Flags.allowPrivateProfile() && android.multiuser.Flags.supportAutolockForPrivateSpace() && android.multiuser.Flags.enablePrivateSpaceFeatures()) { super.onCreate(icicle); } } @Override public void onStart() { super.onStart(); if (mPrivateSpaceMaintainer.isPrivateSpaceLocked()) { finish(); } } @Override public void onAttach(@NonNull Context context) { super.onAttach(context); mPrivateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(context); mAutoLockRadioOptions = context.getResources().getStringArray(R.array.private_space_auto_lock_options); mAutoLockRadioValues = context.getResources() .getStringArray(R.array.private_space_auto_lock_options_values); } @Override protected void addStaticPreferences(PreferenceScreen screen) { final TopIntroPreference introPreference = new TopIntroPreference(screen.getContext()); introPreference.setTitle(R.string.private_space_auto_lock_page_summary); screen.addPreference(introPreference); } @Override public int getMetricsCategory() { return SettingsEnums.PRIVATE_SPACE_SETTINGS; } @Override protected int getPreferenceScreenResId() { return R.xml.private_space_auto_lock_settings; } @Override protected List getCandidates() { final List candidates = new ArrayList<>(); if (mAutoLockRadioValues != null) { for (int i = 0; i < mAutoLockRadioValues.length; ++i) { candidates.add( new AutoLockCandidateInfo( mAutoLockRadioOptions[i], mAutoLockRadioValues[i].toString())); } } else { Log.e(TAG, "Autolock options do not exist."); } return candidates; } @Override protected String getDefaultKey() { return Integer.toString(mPrivateSpaceMaintainer.getPrivateSpaceAutoLockSetting()); } @Override protected boolean setDefaultKey(String key) { try { @Settings.Secure.PrivateSpaceAutoLockOption final int value = Integer.parseInt(key); mPrivateSpaceMaintainer.setPrivateSpaceAutoLockSetting(value); mMetricsFeatureProvider.action( mMetricsFeatureProvider.getAttribution(getActivity()), SettingsEnums.ACTION_SET_PRIVATE_SPACE_AUTOLOCK, getMetricsCategory(), AUTOLOCK_METRIC_KEY, value /* value */); } catch (NumberFormatException e) { Log.e(TAG, "could not persist screen timeout setting", e); } return true; } private static class AutoLockCandidateInfo extends CandidateInfo { private final CharSequence mLabel; private final String mKey; AutoLockCandidateInfo(CharSequence label, String key) { super(true); mLabel = label; mKey = key; } @NonNull @Override public CharSequence loadLabel() { return mLabel; } @Nullable @Override public Drawable loadIcon() { return null; } @NonNull @Override public String getKey() { return mKey; } } }