1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.contacts.util; 18 19 import android.app.backup.BackupManager; 20 import android.content.Context; 21 import android.content.SharedPreferences; 22 23 import com.android.contacts.model.SimCard; 24 25 import java.util.ArrayList; 26 import java.util.Collection; 27 import java.util.Collections; 28 import java.util.HashSet; 29 import java.util.List; 30 import java.util.Set; 31 32 public class SharedPreferenceUtil { 33 34 public static final String PREFERENCE_KEY_ACCOUNT_SYNC_OFF_DISMISSES = 35 "num-of-dismisses-account-sync-off"; 36 37 public static final String PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES = 38 "num-of-dismisses-auto-sync-off"; 39 40 public static final String PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED = 41 "hamburgerPromoDisplayed"; 42 43 public static final String PREFERENCE_KEY_HAMBURGER_MENU_CLICKED = 44 "hamburgerMenuClicked"; 45 46 public static final String PREFERENCE_KEY_HAMBURGER_PROMO_TRIGGER_ACTION_HAPPENED = 47 "hamburgerPromoTriggerActionHappened"; 48 49 private static final String PREFERENCE_KEY_IMPORTED_SIM_CARDS = 50 "importedSimCards"; 51 52 private static final String PREFERENCE_KEY_DISMISSED_SIM_CARDS = 53 "dismissedSimCards"; 54 55 private static final String PREFERENCE_KEY_RESTORED_DEVICES = 56 "restoredDevices"; 57 58 private static final String PREFERENCE_KEY_DISMISSED_DEVICES = 59 "dismissedDevices"; 60 61 public static final String PREFERENCE_WELCOME_CARD_DISMISSED = 62 "welcome-reminder-card-dismissed"; 63 getHamburgerPromoDisplayedBefore(Context context)64 public static boolean getHamburgerPromoDisplayedBefore(Context context) { 65 return getSharedPreferences(context) 66 .getBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED, false); 67 } 68 setHamburgerPromoDisplayedBefore(Context context)69 public static void setHamburgerPromoDisplayedBefore(Context context) { 70 getSharedPreferences(context).edit() 71 .putBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED, true) 72 .apply(); 73 new BackupManager(context).dataChanged(); 74 } 75 getHamburgerMenuClickedBefore(Context context)76 public static boolean getHamburgerMenuClickedBefore(Context context) { 77 return getSharedPreferences(context) 78 .getBoolean(PREFERENCE_KEY_HAMBURGER_MENU_CLICKED, false); 79 } 80 setHamburgerMenuClickedBefore(Context context)81 public static void setHamburgerMenuClickedBefore(Context context) { 82 getSharedPreferences(context).edit() 83 .putBoolean(PREFERENCE_KEY_HAMBURGER_MENU_CLICKED, true) 84 .apply(); 85 new BackupManager(context).dataChanged(); 86 } 87 getHamburgerPromoTriggerActionHappenedBefore(Context context)88 public static boolean getHamburgerPromoTriggerActionHappenedBefore(Context context) { 89 return getSharedPreferences(context) 90 .getBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_TRIGGER_ACTION_HAPPENED, false); 91 } 92 setHamburgerPromoTriggerActionHappenedBefore(Context context)93 public static void setHamburgerPromoTriggerActionHappenedBefore(Context context) { 94 getSharedPreferences(context).edit() 95 .putBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_TRIGGER_ACTION_HAPPENED, true) 96 .apply(); 97 new BackupManager(context).dataChanged(); 98 } 99 100 /** 101 * Show hamburger promo if: 102 * 1) Hamburger menu is never clicked before 103 * 2) Hamburger menu promo is never displayed before 104 * 3) There is at least one available user action 105 * (for now, available user actions to trigger to displayed hamburger promo are: 106 * a: QuickContact UI back to PeopleActivity 107 * b: Search action back to PeopleActivity) 108 */ getShouldShowHamburgerPromo(Context context)109 public static boolean getShouldShowHamburgerPromo(Context context) { 110 return !getHamburgerMenuClickedBefore(context) 111 && getHamburgerPromoTriggerActionHappenedBefore(context) 112 && !getHamburgerPromoDisplayedBefore(context); 113 } 114 getSharedPreferences(Context context)115 protected static SharedPreferences getSharedPreferences(Context context) { 116 return context.getSharedPreferences(getSharedPreferencesFilename(context), 117 Context.MODE_PRIVATE); 118 } 119 getSharedPreferencesFilename(Context context)120 public static String getSharedPreferencesFilename(Context context) { 121 return context.getPackageName(); 122 } 123 getNumOfDismissesForAutoSyncOff(Context context)124 public static int getNumOfDismissesForAutoSyncOff(Context context) { 125 return getSharedPreferences(context).getInt(PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, 0); 126 } 127 resetNumOfDismissesForAutoSyncOff(Context context)128 public static void resetNumOfDismissesForAutoSyncOff(Context context) { 129 final int value = getSharedPreferences(context).getInt( 130 PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, 0); 131 if (value != 0) { 132 getSharedPreferences(context).edit() 133 .putInt(PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, 0).apply(); 134 } 135 } 136 incNumOfDismissesForAutoSyncOff(Context context)137 public static void incNumOfDismissesForAutoSyncOff(Context context) { 138 final int value = getSharedPreferences(context).getInt( 139 PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, 0); 140 getSharedPreferences(context).edit() 141 .putInt(PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, value + 1).apply(); 142 } 143 buildSharedPrefsName(String accountName)144 private static String buildSharedPrefsName(String accountName) { 145 return accountName + "-" + PREFERENCE_KEY_ACCOUNT_SYNC_OFF_DISMISSES; 146 } 147 getNumOfDismissesforAccountSyncOff(Context context, String accountName)148 public static int getNumOfDismissesforAccountSyncOff(Context context, String accountName) { 149 return getSharedPreferences(context).getInt(buildSharedPrefsName(accountName), 0); 150 } 151 resetNumOfDismissesForAccountSyncOff(Context context, String accountName)152 public static void resetNumOfDismissesForAccountSyncOff(Context context, String accountName) { 153 final int value = getSharedPreferences(context).getInt( 154 buildSharedPrefsName(accountName), 0); 155 if (value != 0) { 156 getSharedPreferences(context).edit() 157 .putInt(buildSharedPrefsName(accountName), 0).apply(); 158 } 159 } 160 incNumOfDismissesForAccountSyncOff(Context context, String accountName)161 public static void incNumOfDismissesForAccountSyncOff(Context context, String accountName) { 162 final int value = getSharedPreferences(context).getInt( 163 buildSharedPrefsName(accountName), 0); 164 getSharedPreferences(context).edit() 165 .putInt(buildSharedPrefsName(accountName), value + 1).apply(); 166 } 167 persistSimStates(Context context, Collection<SimCard> sims)168 public static void persistSimStates(Context context, Collection<SimCard> sims) { 169 final Set<String> imported = new HashSet<>(getImportedSims(context)); 170 final Set<String> dismissed = new HashSet<>(getDismissedSims(context)); 171 for (SimCard sim : sims) { 172 final String id = sim.getSimId(); 173 if (id == null) { 174 continue; 175 } 176 if (sim.isImported()) { 177 imported.add(id); 178 } else { 179 imported.remove(id); 180 } 181 if (sim.isDismissed()) { 182 dismissed.add(id); 183 } else { 184 dismissed.remove(id); 185 } 186 } 187 getSharedPreferences(context).edit() 188 .putStringSet(PREFERENCE_KEY_IMPORTED_SIM_CARDS, imported) 189 .putStringSet(PREFERENCE_KEY_DISMISSED_SIM_CARDS, dismissed) 190 .apply(); 191 } 192 restoreSimStates(Context context, List<SimCard> sims)193 public static List<SimCard> restoreSimStates(Context context, List<SimCard> sims) { 194 final Set<String> imported = getImportedSims(context); 195 final Set<String> dismissed = getDismissedSims(context); 196 List<SimCard> result = new ArrayList<>(); 197 for (SimCard sim : sims) { 198 result.add(sim.withImportAndDismissStates(imported.contains(sim.getSimId()), 199 dismissed.contains(sim.getSimId()))); 200 } 201 return result; 202 } 203 getImportedSims(Context context)204 private static Set<String> getImportedSims(Context context) { 205 return getSharedPreferences(context) 206 .getStringSet(PREFERENCE_KEY_IMPORTED_SIM_CARDS, Collections.<String>emptySet()); 207 } 208 getDismissedSims(Context context)209 private static Set<String> getDismissedSims(Context context) { 210 return getSharedPreferences(context) 211 .getStringSet(PREFERENCE_KEY_DISMISSED_SIM_CARDS, Collections.<String>emptySet()); 212 } 213 getRestoredDevices(Context context)214 public static Set<String> getRestoredDevices(Context context) { 215 return getSharedPreferences(context) 216 .getStringSet(PREFERENCE_KEY_RESTORED_DEVICES, Collections.<String>emptySet()); 217 } 218 getDismissedDevices(Context context)219 public static Set<String> getDismissedDevices(Context context) { 220 return getSharedPreferences(context) 221 .getStringSet(PREFERENCE_KEY_DISMISSED_DEVICES, Collections.<String>emptySet()); 222 } 223 addRestoredDevice(Context context, String deviceId)224 public static void addRestoredDevice(Context context, String deviceId) { 225 final Set<String> restoredDevices = new HashSet<>(getRestoredDevices(context)); 226 restoredDevices.add(deviceId); 227 getSharedPreferences(context).edit() 228 .putStringSet(PREFERENCE_KEY_RESTORED_DEVICES, restoredDevices) 229 .apply(); 230 } 231 addDismissedDevice(Context context, String deviceId)232 public static void addDismissedDevice(Context context, String deviceId) { 233 final Set<String> dismissedDevices = new HashSet<>(getDismissedDevices(context)); 234 dismissedDevices.add(deviceId); 235 getSharedPreferences(context).edit() 236 .putStringSet(PREFERENCE_KEY_DISMISSED_DEVICES, dismissedDevices) 237 .commit(); 238 } 239 removeDismissedDevice(Context context, String deviceId)240 public static void removeDismissedDevice(Context context, String deviceId) { 241 final Set<String> dismissedDevices = new HashSet<>(getDismissedDevices(context)); 242 dismissedDevices.remove(deviceId); 243 getSharedPreferences(context).edit() 244 .putStringSet(PREFERENCE_KEY_DISMISSED_DEVICES, dismissedDevices) 245 .commit(); 246 } 247 isWelcomeCardDismissed(Context context)248 public static boolean isWelcomeCardDismissed(Context context) { 249 return getSharedPreferences(context).getBoolean(PREFERENCE_WELCOME_CARD_DISMISSED, 250 false); 251 } 252 setWelcomeCardDismissed(Context context, boolean isDismissed)253 public static void setWelcomeCardDismissed(Context context, boolean isDismissed) { 254 getSharedPreferences(context).edit().putBoolean(PREFERENCE_WELCOME_CARD_DISMISSED, 255 isDismissed).apply(); 256 new BackupManager(context).dataChanged(); 257 } 258 clear(Context context)259 public static void clear(Context context) { 260 getSharedPreferences(context).edit().clear().commit(); 261 new BackupManager(context).dataChanged(); 262 } 263 } 264