From f609df425d61f757357856c62e6c111ac7d4a73e Mon Sep 17 00:00:00 2001
From: Fan Zhang
Date: Tue, 28 May 2019 15:40:43 -0700
Subject: [PATCH] Add interface and extend db to support storing slice uris
Bug: 126222433
Test: manual
Merged-In: Ie81e69477d297aa96a0daad02d56196c956271a3
Change-Id: Ifdae6fc47dc078ba83c211d07d6028f00f11e6f2
---
.../core/BasePreferenceController.java | 19 ++++++++++++++++++-
.../android/settings/slices/Sliceable.java | 8 ++++++++
.../slices/SlicesDatabaseAccessor.java | 4 ++--
.../settings/slices/SlicesDatabaseHelper.java | 9 ++++++++-
.../slices/SlicesDatabaseHelperTest.java | 1 +
5 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/src/com/android/settings/core/BasePreferenceController.java b/src/com/android/settings/core/BasePreferenceController.java
index 324b5097b06..a019c8d0690 100644
--- a/src/com/android/settings/core/BasePreferenceController.java
+++ b/src/com/android/settings/core/BasePreferenceController.java
@@ -14,7 +14,10 @@
package com.android.settings.core;
import android.annotation.IntDef;
+import android.content.ContentResolver;
import android.content.Context;
+import android.net.Uri;
+import android.provider.SettingsSlicesContract;
import android.text.TextUtils;
import android.util.Log;
@@ -22,6 +25,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settings.slices.SettingsSliceProvider;
import com.android.settings.slices.SliceData;
import com.android.settings.slices.Sliceable;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -156,7 +160,7 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl
}
/**
- * @return {@AvailabilityStatus} for the Setting. This status is used to determine if the
+ * @return {@link AvailabilityStatus} for the Setting. This status is used to determine if the
* Setting should be shown or disabled in Settings. Further, it can be used to produce
* appropriate error / warning Slice in the case of unavailability.
*
@@ -171,6 +175,19 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl
return mPreferenceKey;
}
+ @Override
+ public Uri getSliceUri() {
+ return new Uri.Builder()
+ .scheme(ContentResolver.SCHEME_CONTENT)
+ // Default to non-platform authority. Platform Slices will override authority
+ // accordingly.
+ .authority(SettingsSliceProvider.SLICE_AUTHORITY)
+ // Default to action based slices. Intent based slices will override accordingly.
+ .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
+ .appendPath(getPreferenceKey())
+ .build();
+ }
+
/**
* @return {@code true} when the controller can be changed on the device.
*
diff --git a/src/com/android/settings/slices/Sliceable.java b/src/com/android/settings/slices/Sliceable.java
index 04a3b503637..aab49064dbb 100644
--- a/src/com/android/settings/slices/Sliceable.java
+++ b/src/com/android/settings/slices/Sliceable.java
@@ -22,6 +22,7 @@ import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.IntentFilter;
+import android.net.Uri;
import android.widget.Toast;
import com.android.settings.R;
@@ -54,6 +55,13 @@ public interface Sliceable {
return false;
}
+ /**
+ * Returns uri for this slice (if it's a slice).
+ */
+ default Uri getSliceUri() {
+ return null;
+ }
+
/**
* @return {@code true} if the setting update asynchronously.
*
diff --git a/src/com/android/settings/slices/SlicesDatabaseAccessor.java b/src/com/android/settings/slices/SlicesDatabaseAccessor.java
index 2553a217712..8b63773eafc 100644
--- a/src/com/android/settings/slices/SlicesDatabaseAccessor.java
+++ b/src/com/android/settings/slices/SlicesDatabaseAccessor.java
@@ -53,7 +53,7 @@ public class SlicesDatabaseAccessor {
};
// Cursor value for boolean true
- private final int TRUE = 1;
+ private static final int TRUE = 1;
private final Context mContext;
private final SlicesDatabaseHelper mHelper;
@@ -151,7 +151,7 @@ public class SlicesDatabaseAccessor {
.toString();
}
- private SliceData buildSliceData(Cursor cursor, Uri uri, boolean isIntentOnly) {
+ private static SliceData buildSliceData(Cursor cursor, Uri uri, boolean isIntentOnly) {
final String key = cursor.getString(cursor.getColumnIndex(IndexColumns.KEY));
final String title = cursor.getString(cursor.getColumnIndex(IndexColumns.TITLE));
final String summary = cursor.getString(cursor.getColumnIndex(IndexColumns.SUMMARY));
diff --git a/src/com/android/settings/slices/SlicesDatabaseHelper.java b/src/com/android/settings/slices/SlicesDatabaseHelper.java
index 1f9b05e9333..a536d348ae7 100644
--- a/src/com/android/settings/slices/SlicesDatabaseHelper.java
+++ b/src/com/android/settings/slices/SlicesDatabaseHelper.java
@@ -36,7 +36,7 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "slices_index.db";
private static final String SHARED_PREFS_TAG = "slices_shared_prefs";
- private static final int DATABASE_VERSION = 5;
+ private static final int DATABASE_VERSION = 6;
public interface Tables {
String TABLE_SLICES_INDEX = "slices_index";
@@ -98,6 +98,11 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper {
* Customized subtitle if it's a unavailable slice
*/
String UNAVAILABLE_SLICE_SUBTITLE = "unavailable_slice_subtitle";
+
+ /**
+ * The uri of slice.
+ */
+ String SLICE_URI = "slice_uri";
}
private static final String CREATE_SLICES_TABLE =
@@ -105,6 +110,8 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper {
"(" +
IndexColumns.KEY +
", " +
+ IndexColumns.SLICE_URI +
+ ", " +
IndexColumns.TITLE +
", " +
IndexColumns.SUMMARY +
diff --git a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java
index 585c75d93a1..3b642209f42 100644
--- a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java
@@ -65,6 +65,7 @@ public class SlicesDatabaseHelperTest {
String[] expectedNames = {
IndexColumns.KEY,
+ IndexColumns.SLICE_URI,
IndexColumns.TITLE,
IndexColumns.SUMMARY,
IndexColumns.SCREENTITLE,