/*
* Copyright (c) 2014-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.stetho.inspector.domstorage;
import android.content.Context;
import org.json.JSONArray;
import org.json.JSONException;
import javax.annotation.Nullable;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SharedPreferencesHelper {
private static final String PREFS_SUFFIX = ".xml";
private SharedPreferencesHelper() {
}
public static List<String> getSharedPreferenceTags(Context context) {
ArrayList<String> tags = new ArrayList<String>();
String rootPath = context.getApplicationInfo().dataDir + "/shared_prefs";
File root = new File(rootPath);
if (root.exists()) {
for (File file : root.listFiles()) {
String fileName = file.getName();
if (fileName.endsWith(PREFS_SUFFIX)) {
tags.add(fileName.substring(0, fileName.length() - PREFS_SUFFIX.length()));
}
}
}
Collections.sort(tags);
return tags;
}
public static String valueToString(Object value) {
if (value != null) {
if (value instanceof Set) {
JSONArray array = new JSONArray();
for (String entry : (Set<String>)value) {
array.put(entry);
}
return array.toString();
} else {
return value.toString();
}
} else {
return null;
}
}
@Nullable
public static Object valueFromString(String newValue, Object existingValue)
throws IllegalArgumentException {
if (existingValue instanceof Integer) {
return Integer.parseInt(newValue);
} else if (existingValue instanceof Long) {
return Long.parseLong(newValue);
} else if (existingValue instanceof Float) {
return Float.parseFloat(newValue);
} else if (existingValue instanceof Boolean) {
return parseBoolean(newValue);
} else if (existingValue instanceof String) {
return newValue;
} else if (existingValue instanceof Set) {
try {
JSONArray obj = new JSONArray(newValue);
int objN = obj.length();
HashSet<String> set = new HashSet<String>(objN);
for (int i = 0; i < objN; i++) {
set.add(obj.getString(i));
}
return set;
} catch (JSONException e) {
throw new IllegalArgumentException(e);
}
} else {
throw new IllegalArgumentException(
"Unsupported type: " + existingValue.getClass().getName());
}
}
private static Boolean parseBoolean(String s) throws IllegalArgumentException {
if ("1".equals(s) || "true".equalsIgnoreCase(s)) {
return Boolean.TRUE;
} else if ("0".equals(s) || "false".equalsIgnoreCase(s)) {
return Boolean.FALSE;
}
throw new IllegalArgumentException("Expected boolean, got " + s);
}
}