blob: 16047112e4102688de23bb1f450d3aafb97ef1e8 [file] [log] [blame]
/*
* Copyright (C) 2016 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.contacts.util;
import android.app.backup.BackupManager;
import android.content.Context;
import android.content.SharedPreferences;
import com.android.contacts.model.SimCard;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SharedPreferenceUtil {
public static final String PREFERENCE_KEY_ACCOUNT_SYNC_OFF_DISMISSES =
"num-of-dismisses-account-sync-off";
public static final String PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES =
"num-of-dismisses-auto-sync-off";
public static final String PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED =
"hamburgerPromoDisplayed";
public static final String PREFERENCE_KEY_HAMBURGER_MENU_CLICKED =
"hamburgerMenuClicked";
public static final String PREFERENCE_KEY_HAMBURGER_PROMO_TRIGGER_ACTION_HAPPENED =
"hamburgerPromoTriggerActionHappened";
private static final String PREFERENCE_KEY_IMPORTED_SIM_CARDS =
"importedSimCards";
private static final String PREFERENCE_KEY_DISMISSED_SIM_CARDS =
"dismissedSimCards";
private static final String PREFERENCE_KEY_RESTORED_DEVICES =
"restoredDevices";
private static final String PREFERENCE_KEY_DISMISSED_DEVICES =
"dismissedDevices";
public static final String PREFERENCE_WELCOME_CARD_DISMISSED =
"welcome-reminder-card-dismissed";
public static boolean getHamburgerPromoDisplayedBefore(Context context) {
return getSharedPreferences(context)
.getBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED, false);
}
public static void setHamburgerPromoDisplayedBefore(Context context) {
getSharedPreferences(context).edit()
.putBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED, true)
.apply();
new BackupManager(context).dataChanged();
}
public static boolean getHamburgerMenuClickedBefore(Context context) {
return getSharedPreferences(context)
.getBoolean(PREFERENCE_KEY_HAMBURGER_MENU_CLICKED, false);
}
public static void setHamburgerMenuClickedBefore(Context context) {
getSharedPreferences(context).edit()
.putBoolean(PREFERENCE_KEY_HAMBURGER_MENU_CLICKED, true)
.apply();
new BackupManager(context).dataChanged();
}
public static boolean getHamburgerPromoTriggerActionHappenedBefore(Context context) {
return getSharedPreferences(context)
.getBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_TRIGGER_ACTION_HAPPENED, false);
}
public static void setHamburgerPromoTriggerActionHappenedBefore(Context context) {
getSharedPreferences(context).edit()
.putBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_TRIGGER_ACTION_HAPPENED, true)
.apply();
new BackupManager(context).dataChanged();
}
/**
* Show hamburger promo if:
* 1) Hamburger menu is never clicked before
* 2) Hamburger menu promo is never displayed before
* 3) There is at least one available user action
* (for now, available user actions to trigger to displayed hamburger promo are:
* a: QuickContact UI back to PeopleActivity
* b: Search action back to PeopleActivity)
*/
public static boolean getShouldShowHamburgerPromo(Context context) {
return !getHamburgerMenuClickedBefore(context)
&& getHamburgerPromoTriggerActionHappenedBefore(context)
&& !getHamburgerPromoDisplayedBefore(context);
}
protected static SharedPreferences getSharedPreferences(Context context) {
return context.getSharedPreferences(getSharedPreferencesFilename(context),
Context.MODE_PRIVATE);
}
public static String getSharedPreferencesFilename(Context context) {
return context.getPackageName();
}
public static int getNumOfDismissesForAutoSyncOff(Context context) {
return getSharedPreferences(context).getInt(PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, 0);
}
public static void resetNumOfDismissesForAutoSyncOff(Context context) {
final int value = getSharedPreferences(context).getInt(
PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, 0);
if (value != 0) {
getSharedPreferences(context).edit()
.putInt(PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, 0).apply();
}
}
public static void incNumOfDismissesForAutoSyncOff(Context context) {
final int value = getSharedPreferences(context).getInt(
PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, 0);
getSharedPreferences(context).edit()
.putInt(PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, value + 1).apply();
}
private static String buildSharedPrefsName(String accountName) {
return accountName + "-" + PREFERENCE_KEY_ACCOUNT_SYNC_OFF_DISMISSES;
}
public static int getNumOfDismissesforAccountSyncOff(Context context, String accountName) {
return getSharedPreferences(context).getInt(buildSharedPrefsName(accountName), 0);
}
public static void resetNumOfDismissesForAccountSyncOff(Context context, String accountName) {
final int value = getSharedPreferences(context).getInt(
buildSharedPrefsName(accountName), 0);
if (value != 0) {
getSharedPreferences(context).edit()
.putInt(buildSharedPrefsName(accountName), 0).apply();
}
}
public static void incNumOfDismissesForAccountSyncOff(Context context, String accountName) {
final int value = getSharedPreferences(context).getInt(
buildSharedPrefsName(accountName), 0);
getSharedPreferences(context).edit()
.putInt(buildSharedPrefsName(accountName), value + 1).apply();
}
public static void persistSimStates(Context context, Collection<SimCard> sims) {
final Set<String> imported = new HashSet<>(getImportedSims(context));
final Set<String> dismissed = new HashSet<>(getDismissedSims(context));
for (SimCard sim : sims) {
final String id = sim.getSimId();
if (id == null) {
continue;
}
if (sim.isImported()) {
imported.add(id);
} else {
imported.remove(id);
}
if (sim.isDismissed()) {
dismissed.add(id);
} else {
dismissed.remove(id);
}
}
getSharedPreferences(context).edit()
.putStringSet(PREFERENCE_KEY_IMPORTED_SIM_CARDS, imported)
.putStringSet(PREFERENCE_KEY_DISMISSED_SIM_CARDS, dismissed)
.apply();
}
public static List<SimCard> restoreSimStates(Context context, List<SimCard> sims) {
final Set<String> imported = getImportedSims(context);
final Set<String> dismissed = getDismissedSims(context);
List<SimCard> result = new ArrayList<>();
for (SimCard sim : sims) {
result.add(sim.withImportAndDismissStates(imported.contains(sim.getSimId()),
dismissed.contains(sim.getSimId())));
}
return result;
}
private static Set<String> getImportedSims(Context context) {
return getSharedPreferences(context)
.getStringSet(PREFERENCE_KEY_IMPORTED_SIM_CARDS, Collections.<String>emptySet());
}
private static Set<String> getDismissedSims(Context context) {
return getSharedPreferences(context)
.getStringSet(PREFERENCE_KEY_DISMISSED_SIM_CARDS, Collections.<String>emptySet());
}
public static Set<String> getRestoredDevices(Context context) {
return getSharedPreferences(context)
.getStringSet(PREFERENCE_KEY_RESTORED_DEVICES, Collections.<String>emptySet());
}
public static Set<String> getDismissedDevices(Context context) {
return getSharedPreferences(context)
.getStringSet(PREFERENCE_KEY_DISMISSED_DEVICES, Collections.<String>emptySet());
}
public static void addRestoredDevice(Context context, String deviceId) {
final Set<String> restoredDevices = new HashSet<>(getRestoredDevices(context));
restoredDevices.add(deviceId);
getSharedPreferences(context).edit()
.putStringSet(PREFERENCE_KEY_RESTORED_DEVICES, restoredDevices)
.apply();
}
public static void addDismissedDevice(Context context, String deviceId) {
final Set<String> dismissedDevices = new HashSet<>(getDismissedDevices(context));
dismissedDevices.add(deviceId);
getSharedPreferences(context).edit()
.putStringSet(PREFERENCE_KEY_DISMISSED_DEVICES, dismissedDevices)
.commit();
}
public static void removeDismissedDevice(Context context, String deviceId) {
final Set<String> dismissedDevices = new HashSet<>(getDismissedDevices(context));
dismissedDevices.remove(deviceId);
getSharedPreferences(context).edit()
.putStringSet(PREFERENCE_KEY_DISMISSED_DEVICES, dismissedDevices)
.commit();
}
public static boolean isWelcomeCardDismissed(Context context) {
return getSharedPreferences(context).getBoolean(PREFERENCE_WELCOME_CARD_DISMISSED,
false);
}
public static void setWelcomeCardDismissed(Context context, boolean isDismissed) {
getSharedPreferences(context).edit().putBoolean(PREFERENCE_WELCOME_CARD_DISMISSED,
isDismissed).apply();
new BackupManager(context).dataChanged();
}
public static void clear(Context context) {
getSharedPreferences(context).edit().clear().commit();
new BackupManager(context).dataChanged();
}
}