package com.orgzly.android.provider.clients;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.util.LongSparseArray;
import com.orgzly.android.AppIntent;
import com.orgzly.android.Filter;
import com.orgzly.android.provider.ProviderContract;
import com.orgzly.android.widgets.ListWidgetProvider;
public class FiltersClient {
public static String SORT_ORDER = ProviderContract.Filters.Param.POSITION + ", " + ProviderContract.Filters.Param._ID;
public static CursorLoader getCursorLoader(Context context) {
return new CursorLoader(context, ProviderContract.Filters.ContentUri.filters(), null, null, null, SORT_ORDER);
}
public static Filter get(Context context, long id) {
Cursor cursor = context.getContentResolver().query(
ContentUris.withAppendedId(ProviderContract.Filters.ContentUri.filters(), id),
new String[] {
ProviderContract.Filters.Param.NAME,
ProviderContract.Filters.Param.QUERY
},
null,
null,
null);
try {
if (cursor.moveToFirst()) {
String name = cursor.getString(0);
String query = cursor.getString(1);
return new Filter(name, query);
}
} finally {
cursor.close();
}
return null;
}
/**
* Get {@link Filter} by name (case insensitive).
*
* For some time, when updating or creating a new filter, app didn't check if there are filters
* with the same name. So it's possible they exist. It's not defined which one is returned here.
*
* @return First filter that matches the name (case insensitive)
*/
public static LongSparseArray<Filter> getByNameIgnoreCase(Context context, String name) {
LongSparseArray<Filter> result = new LongSparseArray<>();
Cursor cursor = context.getContentResolver().query(
ProviderContract.Filters.ContentUri.filters(),
new String[] {
ProviderContract.Filters.Param._ID,
ProviderContract.Filters.Param.NAME,
ProviderContract.Filters.Param.QUERY
},
ProviderContract.Filters.Param.NAME + " LIKE ?",
new String[] { name },
null);
if (cursor != null) {
try {
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
long id = cursor.getLong(0);
Filter filter = new Filter(
cursor.getString(1),
cursor.getString(2));
result.put(id, filter);
}
} finally {
cursor.close();
}
}
return result;
}
/**
* Deletes filter.
*
* @param id
*/
public static void delete(Context context, long id) {
context.getContentResolver().delete(ContentUris.withAppendedId(ProviderContract.Filters.ContentUri.filters(), id), null, null);
}
public static void update(Context context, long id, Filter filter) {
ContentValues values = new ContentValues();
values.put(ProviderContract.Filters.Param.NAME, filter.getName());
values.put(ProviderContract.Filters.Param.QUERY, filter.getQuery());
context.getContentResolver().update(ContentUris.withAppendedId(ProviderContract.Filters.ContentUri.filters(), id), values, null, null);
LocalBroadcastManager.getInstance(context)
.sendBroadcast(new Intent(AppIntent.ACTION_LIST_WIDGET_UPDATE_LAYOUT));
}
public static void create(Context context, Filter filter) {
ContentValues values = new ContentValues();
values.put(ProviderContract.Filters.Param.NAME, filter.getName());
values.put(ProviderContract.Filters.Param.QUERY, filter.getQuery());
context.getContentResolver().insert(ProviderContract.Filters.ContentUri.filters(), values);
}
public static void moveUp(Context context, long id) {
context.getContentResolver().update(ProviderContract.Filters.ContentUri.filtersIdUp(id), null, null, null);
}
public static void moveDown(Context context, long id) {
context.getContentResolver().update(ProviderContract.Filters.ContentUri.filtersIdDown(id), null, null, null);
}
}