blob: 0e89366fbcce969e1685d80c1887b6553f0506af [file] [log] [blame]
/*
* 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.VisibleForTesting;
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;
}
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<String, NotificationInfo> getLocaleNotificationInfoMap() {
Gson gson = new Gson();
Map<String, String> map = (Map<String, String>) getSharedPreferences(mContext).getAll();
Map<String, NotificationInfo> 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();
}
}