package de.theknut.xposedgelsettings.contentprovider;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.support.annotation.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import de.theknut.xposedgelsettings.hooks.Common;
/**
* Created by Alexander Schulz on 22.11.2015.
*/
public class XGELSContentProvider extends ContentProvider {
SharedPreferences sharedPrefs;
@Override
public boolean onCreate() {
sharedPrefs = getContext().getSharedPreferences(Common.PREFERENCES_NAME, Context.MODE_WORLD_READABLE);
return true;
}
@Nullable
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
if (uri.getPath().equals(Common.URI_SETTINGS_BASE.getPath())) {
MatrixCursor cursor = new MatrixCursor(new String[]{"value"});
Object pref = sharedPrefs.getAll().get(uri.getQuery());
if (pref instanceof HashSet) {
for (String value : ((HashSet<String>) pref)) {
cursor.addRow(new Object[]{value});
}
}
return cursor;
}
return null;
}
@Nullable
@Override
public String getType(Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(Uri uri, ContentValues values) {
update(uri, values, null, null);
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
sharedPrefs.edit().remove(selection).apply();
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
if (uri.getPath().equals(Common.URI_SETTINGS_BASE.getPath())) {
sharedPrefs.edit().remove(uri.getQuery()).commit();
if (values.getAsString("type").equals(ArrayList.class.toString())) {
Set set = new HashSet(Arrays.asList(values.getAsString("value").replace("[", "").replace("]", "").replace(" ", "").split(",")));
sharedPrefs.edit().putStringSet(uri.getQuery(), set).commit();
}
}
return 0;
}
}