/* * 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.localepicker; import android.content.Context; import android.content.SharedPreferences; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import com.android.settingslib.datastore.SharedPreferencesStorage; import com.google.gson.Gson; import java.util.HashMap; import java.util.Map; /** * A data manager that manages the {@link SharedPreferences} for the locale notification * information. */ public class LocaleNotificationDataManager { public static final String LOCALE_NOTIFICATION = "locale_notification"; private Context mContext; /** * Constructor * * @param context The context */ public LocaleNotificationDataManager(Context context) { this.mContext = context; } /** Returns the underlying {@link SharedPreferences} storage. */ @NonNull public static SharedPreferencesStorage getSharedPreferencesStorage(@NonNull Context context) { return new SharedPreferencesStorage(context, LOCALE_NOTIFICATION, Context.MODE_PRIVATE); } private static SharedPreferences getSharedPreferences(Context context) { return context.getSharedPreferences(LOCALE_NOTIFICATION, Context.MODE_PRIVATE); } /** * Adds one entry with the corresponding locale and {@link NotificationInfo} to the * {@link SharedPreferences}. * * @param locale A locale which the application sets to * @param info The notification metadata */ public void putNotificationInfo(String locale, NotificationInfo info) { Gson gson = new Gson(); String json = gson.toJson(info); SharedPreferences.Editor editor = getSharedPreferences(mContext).edit(); editor.putString(locale, json); editor.apply(); } /** * Removes one entry with the corresponding locale from the {@link SharedPreferences}. * * @param locale A locale which the application sets to */ public void removeNotificationInfo(String locale) { SharedPreferences.Editor editor = getSharedPreferences(mContext).edit(); editor.remove(locale); editor.apply(); } /** * Gets the {@link NotificationInfo} with the associated locale from the * {@link SharedPreferences}. * * @param locale A locale which the application sets to * @return {@link NotificationInfo} */ public NotificationInfo getNotificationInfo(String locale) { Gson gson = new Gson(); String json = getSharedPreferences(mContext).getString(locale, ""); return json.isEmpty() ? null : gson.fromJson(json, NotificationInfo.class); } /** * Gets the locale notification map. * * @return A map which maps the locale to the corresponding {@link NotificationInfo} */ public Map getLocaleNotificationInfoMap() { Gson gson = new Gson(); Map map = (Map) getSharedPreferences(mContext).getAll(); Map result = new HashMap<>(map.size()); map.forEach((key, value) -> { result.put(key, gson.fromJson(value, NotificationInfo.class)); }); return result; } /** * Clears the locale notification map. */ @VisibleForTesting void clearLocaleNotificationMap() { getSharedPreferences(mContext).edit().clear().apply(); } }