This is a slow, blocking call that shouldn't be made on the main thread. + */ + public static boolean isFeatureEnabled(Context context) { + try (Cursor cursor = context.getContentResolver().query( + FLAGS_URI, + null, + null, + null)) { + if (cursor == null) { + Log.w(TAG, "Cursor was null!"); + return false; + } + + final int indexOfNameColumn = cursor.getColumnIndex(NAME); + final int indexOfValueColumn = cursor.getColumnIndex(VALUE); + if (indexOfNameColumn == -1 || indexOfValueColumn == -1) { + Log.w(TAG, "Cursor doesn't contain " + NAME + " or " + VALUE + "!"); + return false; + } + + while (cursor.moveToNext()) { + final String name = cursor.getString(indexOfNameColumn); + final int value = cursor.getInt(indexOfValueColumn); + if (TextUtils.equals(ENABLED_FLAG, name)) { + Log.d(TAG, ENABLED_FLAG + "=" + value); + return value == 1; + } + } + + Log.w(TAG, "Flag with name \"" + ENABLED_FLAG + "\" not found!"); + return false; + } catch (Exception e) { + Log.e(TAG, "Exception while querying quick affordance content provider", e); + return false; + } + } + + /** + * Queries and returns a summary text for the currently-selected lock screen quick affordances. + * + *
This is a slow, blocking call that shouldn't be made on the main thread.
+ */
+ @Nullable
+ public static CharSequence getQuickAffordanceSummary(Context context) {
+ try (Cursor cursor = context.getContentResolver().query(
+ SELECTIONS_URI,
+ null,
+ null,
+ null)) {
+ if (cursor == null) {
+ Log.w(TAG, "Cursor was null!");
+ return null;
+ }
+
+ final int columnIndex = cursor.getColumnIndex(AFFORDANCE_NAME);
+ if (columnIndex == -1) {
+ Log.w(TAG, "Cursor doesn't contain \"" + AFFORDANCE_NAME + "\" column!");
+ return null;
+ }
+
+ final List