/* * SPDX-FileCopyrightText: 2020, microG Project Team * SPDX-License-Identifier: Apache-2.0 */ package org.microg.gms.ui import android.content.Context import android.os.Bundle import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.preference.Preference import com.google.android.gms.R import org.microg.gms.checkin.CheckinPrefs import org.microg.gms.gcm.GcmDatabase import org.microg.gms.gcm.getGcmServiceInfo import org.microg.gms.safetynet.SafetyNetPreferences import org.microg.nlp.client.GeocodeClient import org.microg.nlp.client.LocationClient import org.microg.nlp.client.UnifiedLocationClient import org.microg.tools.ui.ResourceSettingsFragment class SettingsFragment : ResourceSettingsFragment() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { super.onCreatePreferences(savedInstanceState, rootKey) findPreference(PREF_CHECKIN)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener { findNavController().navigate(requireContext(), R.id.openCheckinSettings) true } findPreference(PREF_GCM)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener { findNavController().navigate(requireContext(), R.id.openGcmSettings) true } findPreference(PREF_SNET)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener { findNavController().navigate(requireContext(), R.id.openSafetyNetSettings) true } findPreference(PREF_UNIFIEDNLP)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener { findNavController().navigate(requireContext(), R.id.openUnifiedNlpSettings) true } findPreference(PREF_EXPOSURE)?.onPreferenceClickListener = Preference.OnPreferenceClickListener { findNavController().navigate(requireContext(), NearbyPreferencesIntegration.exposureNotificationNavigationId) true } findPreference(PREF_ABOUT)!!.onPreferenceClickListener = Preference.OnPreferenceClickListener { findNavController().navigate(requireContext(), R.id.openAbout) true } findPreference(PREF_ABOUT)!!.summary = getString(R.string.about_version_str, AboutFragment.getSelfVersion(context)) } override fun onResume() { super.onResume() val context = requireContext() lifecycleScope.launchWhenResumed { updateDetails(context) } } private suspend fun updateDetails(context: Context) { val gcmServiceInfo = getGcmServiceInfo(context) if (gcmServiceInfo.configuration.enabled) { val database = GcmDatabase(context) val regCount = database.registrationList.size database.close() findPreference(PREF_GCM)!!.summary = context.getString(R.string.service_status_enabled_short) + " - " + context.resources.getQuantityString(R.plurals.gcm_registered_apps_counter, regCount, regCount) } else { findPreference(PREF_GCM)!!.setSummary(R.string.service_status_disabled_short) } findPreference(PREF_CHECKIN)!!.setSummary(if (CheckinPrefs.isEnabled(context)) R.string.service_status_enabled_short else R.string.service_status_disabled_short) findPreference(PREF_SNET)!!.setSummary(if (SafetyNetPreferences.isEnabled(context)) R.string.service_status_enabled_short else R.string.service_status_disabled_short) val backendCount = try { LocationClient(context, lifecycle).getLocationBackends().size + GeocodeClient(context, lifecycle).getGeocodeBackends().size } catch (e: Exception) { 0 } findPreference(PREF_UNIFIEDNLP)!!.summary = context.resources.getQuantityString(R.plurals.pref_unifiednlp_summary, backendCount, backendCount) findPreference(PREF_EXPOSURE)?.isVisible = NearbyPreferencesIntegration.isAvailable findPreference(PREF_EXPOSURE)?.icon = NearbyPreferencesIntegration.getIcon(context) findPreference(PREF_EXPOSURE)?.summary = NearbyPreferencesIntegration.getExposurePreferenceSummary(context) } companion object { const val PREF_ABOUT = "pref_about" const val PREF_GCM = "pref_gcm" const val PREF_SNET = "pref_snet" const val PREF_UNIFIEDNLP = "pref_unifiednlp" const val PREF_CHECKIN = "pref_checkin" const val PREF_EXPOSURE = "pref_exposure" } init { preferencesResource = R.xml.preferences_start } }