package com.piusvelte.sonet.provider; import android.app.Notification; import android.appwidget.AppWidgetManager; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.provider.BaseColumns; import android.support.annotation.NonNull; import com.piusvelte.sonet.Sonet; import com.piusvelte.sonet.util.DatabaseUtils; /** * Created by bemmanuel on 3/22/15. */ public final class WidgetsSettings implements BaseColumns { public static final String VIEW = "widgets_settings"; private WidgetsSettings() { } public static Uri getContentUri(Context context) { return Uri.parse("content://" + Sonet.getAuthority(context) + "/widgets_settings"); } public static Uri getDistinctContentUri(Context context) { return Uri.parse("content://" + Sonet.getAuthority(context) + "/distinct_widgets_settings"); } public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.piusvelte.widgets_settings"; public static final Settings getSettings(@NonNull Context context) { return getSettings(context, Sonet.INVALID_ACCOUNT_ID); } public static final Settings getSettings(@NonNull Context context, long account) { return getSettings(context, AppWidgetManager.INVALID_APPWIDGET_ID, account); } public static final Settings getSettings(@NonNull Context context, int widget, long account) { Settings settings = new Settings(); // no longer supporting widget specific settings widget = AppWidgetManager.INVALID_APPWIDGET_ID; Cursor userSettings = context.getContentResolver().query(getContentUri(context), new String[] { Widgets._ID, Widgets.INTERVAL, Widgets.TIME24HR, Widgets.SOUND, Widgets.VIBRATE, Widgets.LIGHTS, Widgets.BACKGROUND_UPDATE, Widgets.INSTANT_UPLOAD }, "(" + Widgets.WIDGET + "=? or " + Widgets.WIDGET + "=?) and (" + Widgets.ACCOUNT + "=? or " + Widgets.ACCOUNT + "=?)", new String[] { Integer.toString(widget), Integer.toString(AppWidgetManager.INVALID_APPWIDGET_ID), Long.toString(account), Long.toString(Sonet.INVALID_ACCOUNT_ID) }, Widgets.WIDGET + " DESC, " + Widgets.ACCOUNT + " DESC"); if (userSettings.moveToFirst()) { settings.interval = userSettings.getInt(userSettings.getColumnIndexOrThrow(Widgets.INTERVAL)); settings.isTime24hr = userSettings.getInt(userSettings.getColumnIndexOrThrow(Widgets.TIME24HR)) != 0; settings.isBackgroundUpdate = userSettings.getInt(userSettings.getColumnIndexOrThrow(Widgets.BACKGROUND_UPDATE)) != 0; settings.isSound = userSettings.getInt(userSettings.getColumnIndexOrThrow(Widgets.SOUND)) != 0; settings.isVibrate = userSettings.getInt(userSettings.getColumnIndexOrThrow(Widgets.VIBRATE)) != 0; settings.isLights = userSettings.getInt(userSettings.getColumnIndexOrThrow(Widgets.LIGHTS)) != 0; settings.isInstantUpload = userSettings.getInt(userSettings.getColumnIndexOrThrow(Widgets.INSTANT_UPLOAD)) != 0; } userSettings.close(); return settings; } public static void createView(@NonNull SQLiteDatabase db) { String[] aliases = new String[] { "a", "b", "c" }; db.execSQL("create view if not exists " + WidgetsSettings.VIEW + " as select a." + Widgets._ID + " as " + Widgets._ID + ",a." + Widgets.WIDGET + " as " + Widgets.WIDGET + "," + DatabaseUtils.addCase(aliases, Widgets.INTERVAL, Sonet.default_interval, Widgets.INTERVAL) + "," + DatabaseUtils.addCase(aliases, Widgets.TIME24HR, 0, Widgets.TIME24HR) + ",a." + Widgets.ACCOUNT + " as " + Widgets.ACCOUNT + "," + DatabaseUtils.addCase(aliases, Widgets.BACKGROUND_UPDATE, 1, Widgets.BACKGROUND_UPDATE) + "," + DatabaseUtils.addCase(aliases, Widgets.SOUND, 0, Widgets.SOUND) + "," + DatabaseUtils.addCase(aliases, Widgets.VIBRATE, 0, Widgets.VIBRATE) + "," + DatabaseUtils.addCase(aliases, Widgets.LIGHTS, 0, Widgets.LIGHTS) + "," + DatabaseUtils.addCase(aliases, Widgets.INSTANT_UPLOAD, 0, Widgets.INSTANT_UPLOAD) + " from " + Widgets.TABLE + " a," + Widgets.TABLE + " b," + Widgets.TABLE + " c WHERE b." + Widgets.WIDGET + "=a." + Widgets.WIDGET + " and b." + Widgets.ACCOUNT + "=" + Sonet.INVALID_ACCOUNT_ID + " and c." + Widgets.WIDGET + "=" + AppWidgetManager.INVALID_APPWIDGET_ID + " and c." + Widgets.ACCOUNT + "=" + Sonet.INVALID_ACCOUNT_ID + ";"); } public static class Settings { public int interval = 3600000; public boolean isTime24hr = false; public boolean isBackgroundUpdate = true; public boolean isSound = false; public boolean isVibrate = false; public boolean isLights = false; public boolean isInstantUpload = false; public int notificationsMask() { int mask = 0; if (isSound) mask |= Notification.DEFAULT_SOUND; if (isVibrate) mask |= Notification.DEFAULT_VIBRATE; if (isLights) mask |= Notification.DEFAULT_LIGHTS; return mask; } } }