/* * Copyright (C) 2019-2022 The CherishOS Projects * * 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.cherish.settings.fragments; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.BitmapDrawable; import android.os.UserHandle; import android.os.ParcelFileDescriptor; import com.cherish.settings.fragments.UdfpsIconPicker; import android.text.TextUtils; import android.app.WallpaperManager; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.hardware.fingerprint.FingerprintManager; import android.net.Uri; import android.os.Bundle; import android.os.UserHandle; import android.provider.Settings; import androidx.preference.ListPreference; import androidx.preference.Preference.OnPreferenceChangeListener; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceFragment; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; import com.cherish.settings.preferences.SystemSettingSwitchPreference; import com.android.internal.logging.nano.MetricsProto; import com.android.internal.util.cherish.CherishUtils; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.search.SearchIndexable; import java.io.FileDescriptor; import java.util.Arrays; @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC) public class Udfps extends SettingsPreferenceFragment implements Preference.OnPreferenceChangeListener { private static final String UDFPS_CUSTOMIZATION = "udfps_customization"; private static final String CUSTOM_FOD_ICON_KEY = "custom_fp_icon_enabled"; private static final String CUSTOM_FP_FILE_SELECT = "custom_fp_file_select"; private static final int REQUEST_PICK_IMAGE = 0; private PreferenceCategory mUdfpsCustomization; private Preference mCustomFPImage; private SystemSettingSwitchPreference mCustomFodIcon; private Preference mUdfpsIconPicker; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.cherish_settings_udfps); final PreferenceScreen prefSet = getPreferenceScreen(); Resources resources = getResources(); final boolean udfpsResPkgInstalled = CherishUtils.isPackageInstalled(getContext(), "com.cherish.udfps.resources"); mUdfpsCustomization = (PreferenceCategory) findPreference(UDFPS_CUSTOMIZATION); if (!udfpsResPkgInstalled) { prefSet.removePreference(mUdfpsCustomization); } mUdfpsIconPicker = (Preference) prefSet.findPreference("udfps_icon_picker"); mCustomFPImage = findPreference(CUSTOM_FP_FILE_SELECT); final String customIconURI = Settings.System.getString(getContext().getContentResolver(), Settings.System.OMNI_CUSTOM_FP_ICON); if (!TextUtils.isEmpty(customIconURI)) { setPickerIcon(customIconURI); } mCustomFodIcon = (SystemSettingSwitchPreference) findPreference(CUSTOM_FOD_ICON_KEY); boolean val = Settings.System.getIntForUser(getActivity().getContentResolver(), Settings.System.OMNI_CUSTOM_FP_ICON_ENABLED, 0, UserHandle.USER_CURRENT) == 1; mCustomFodIcon.setOnPreferenceChangeListener(this); if (val) { mUdfpsIconPicker.setEnabled(false); } else { mUdfpsIconPicker.setEnabled(true); } } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { ContentResolver resolver = getActivity().getContentResolver(); if (preference == mCustomFodIcon) { boolean val = (Boolean) newValue; Settings.System.putIntForUser(getActivity().getContentResolver(), Settings.System.OMNI_CUSTOM_FP_ICON_ENABLED, val ? 1 : 0, UserHandle.USER_CURRENT); if (val) { mUdfpsIconPicker.setEnabled(false); } else { mUdfpsIconPicker.setEnabled(true); } return true; } return false; } @Override public boolean onPreferenceTreeClick(Preference preference) { if (preference == mCustomFPImage) { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent, REQUEST_PICK_IMAGE); return true; } return super.onPreferenceTreeClick(preference); } @Override public void onActivityResult(int requestCode, int resultCode, Intent result) { if (requestCode == REQUEST_PICK_IMAGE && resultCode == Activity.RESULT_OK) { Uri uri = null; if (result != null) { uri = result.getData(); setPickerIcon(uri.toString()); Settings.System.putString(getContentResolver(), Settings.System.OMNI_CUSTOM_FP_ICON, uri.toString()); } } else if (requestCode == REQUEST_PICK_IMAGE && resultCode == Activity.RESULT_CANCELED) { mCustomFPImage.setIcon(new ColorDrawable(Color.TRANSPARENT)); Settings.System.putString(getContentResolver(), Settings.System.OMNI_CUSTOM_FP_ICON, ""); } } private void setPickerIcon(String uri) { try { ParcelFileDescriptor parcelFileDescriptor = getContext().getContentResolver().openFileDescriptor(Uri.parse(uri), "r"); FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor); parcelFileDescriptor.close(); Drawable d = new BitmapDrawable(getResources(), image); mCustomFPImage.setIcon(d); } catch (Exception e) {} } @Override public int getMetricsCategory() { return MetricsProto.MetricsEvent.CHERISH_SETTINGS; } /** * For Search. */ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider(R.xml.cherish_settings_udfps); }