/* * Copyright 2010 Kevin Gaudin * * 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 kidozen.client.crash.collector; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; import java.util.Map; import java.util.TreeMap; import kidozen.client.crash.CrashReporter; /** * Collects the content (key/value pairs) of SharedPreferences, from the * application default preferences or any other preferences asked by the * application developer. */ final class SharedPreferencesCollector { /** * Collects all key/value pairs in SharedPreferences and writes them in a * result String. The application default SharedPreferences are always * collected, and the developer can provide additional SharedPreferences * names in the {@link ReportsCrashes#additionalSharedPreferences()} * configuration item. * * * * @param context * the application context. * @return A readable formatted String containing all key/value pairs. */ public static String collect(Context context) { final StringBuilder result = new StringBuilder(); final Map<String, SharedPreferences> shrdPrefs = new TreeMap<String, SharedPreferences>(); shrdPrefs.put("default", PreferenceManager.getDefaultSharedPreferences(context)); final String[] shrdPrefsIds = CrashReporter.getConfig().additionalSharedPreferences(); if (shrdPrefsIds != null) { for (final String shrdPrefId : shrdPrefsIds) { shrdPrefs.put(shrdPrefId, context.getSharedPreferences(shrdPrefId, Context.MODE_PRIVATE)); } } for (final String prefsId : shrdPrefs.keySet()) { final SharedPreferences prefs = shrdPrefs.get(prefsId); if (prefs != null) { final Map<String, ?> kv = prefs.getAll(); if (kv != null && kv.size() > 0) { for (final String key : kv.keySet()) { if (!filteredKey(key)) { if (kv.get(key) != null) { result.append(prefsId).append('.').append(key).append('=').append(kv.get(key).toString()).append("\n"); } else { result.append(prefsId).append('.').append(key).append('=').append("null\n"); } } } } else { result.append(prefsId).append('=').append("empty\n"); } } else { result.append("null\n"); } result.append('\n'); } return result.toString(); } /** * Checks if the key matches one of the patterns provided by the developer * to exclude some preferences from reports. * * @param key * the name of the preference to be checked * @return true if the key has to be excluded from reports. */ private static boolean filteredKey(String key) { for (String regex : CrashReporter.getConfig().excludeMatchingSharedPreferencesKeys()) { if(key.matches(regex)) { return true; } } return false; } }