Bug: 301395074 Test: atest SettingsRoboTests:com.android.settings.localepicker Change-Id: Ic771cd5146ab954c3da65748bf87cd14d30770b4
112 lines
3.6 KiB
Java
112 lines
3.6 KiB
Java
/*
|
|
* 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();
|
|
}
|
|
}
|