Move Indexable to SettingsLib

- Class which implements Indexable interface can provide search
function, this interface will open to Settings and other 1p apps.

Bug: 135053028
Test: robolectric
Change-Id: I83fefc27b9e235da28cd3c597bf9b21bedf046dc
This commit is contained in:
Raff Tsai
2019-08-27 09:49:53 +08:00
parent efb5b79fcd
commit 048172698d
6 changed files with 162 additions and 7 deletions

View File

@@ -1,7 +1,9 @@
java_library {
android_library {
name: "SettingsLib-search",
host_supported: true,
srcs: ["src/**/*.java"],
sdk_version: "system_current",
min_sdk_version: "21",
}
java_plugin {
@@ -9,9 +11,11 @@ java_plugin {
processor_class: "com.android.settingslib.search.IndexableProcessor",
static_libs: [
"javapoet-prebuilt-jar",
"SettingsLib-search",
],
srcs: ["processor-src/**/*.java"],
srcs: [
"processor-src/**/*.java",
"src/com/android/settingslib/search/SearchIndexable.java"
],
java_resource_dirs: ["resources"],
}

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2019 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.settingslib.search">
</manifest>

View File

@@ -143,7 +143,7 @@ public class IndexableProcessor extends AbstractProcessor {
final TypeSpec baseClass = TypeSpec.classBuilder(CLASS_BASE)
.addModifiers(Modifier.PUBLIC)
.addSuperinterface(ClassName.get(SearchIndexableResources.class))
.addSuperinterface(ClassName.get(PACKAGE, "SearchIndexableResources"))
.addField(providers)
.addMethod(baseConstructorBuilder.build())
.addMethod(addIndex)
@@ -210,4 +210,4 @@ public class IndexableProcessor extends AbstractProcessor {
mFiler = processingEnvironment.getFiler();
mMessager = processingEnvironment.getMessager();
}
}
}

View File

@@ -0,0 +1,66 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settingslib.search;
import android.content.Context;
import android.provider.SearchIndexableResource;
import java.util.List;
/**
* Interface for classes whose instances can provide data for indexing.
*
* See {@link android.provider.SearchIndexableResource} and {@link SearchIndexableRaw}.
*/
public interface Indexable {
/**
* Interface for classes whose instances can provide data for indexing.
*/
interface SearchIndexProvider {
/**
* Return a list of references for indexing.
*
* See {@link android.provider.SearchIndexableResource}
*
* @param context the context.
* @param enabled hint telling if the data needs to be considered into the search results
* or not.
* @return a list of {@link android.provider.SearchIndexableResource} references.
* Can be null.
*/
List<SearchIndexableResource> getXmlResourcesToIndex(Context context, boolean enabled);
/**
* Return a list of raw data for indexing. See {@link SearchIndexableRaw}
*
* @param context the context.
* @param enabled hint telling if the data needs to be considered into the search results
* or not.
* @return a list of {@link SearchIndexableRaw} references. Can be null.
*/
List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled);
/**
* Return a list of data keys that cannot be indexed. See {@link SearchIndexableRaw}
*
* @param context the context.
* @return a list of {@link SearchIndexableRaw} references. Can be null.
*/
List<String> getNonIndexableKeys(Context context);
}
}

View File

@@ -0,0 +1,64 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settingslib.search;
import android.content.Context;
import android.provider.SearchIndexableData;
/**
* Indexable raw data for Search.
*
* This is the raw data used by the Indexer and should match its data model.
*
* See {@link Indexable} and {@link android.provider.SearchIndexableResource}.
*/
public class SearchIndexableRaw extends SearchIndexableData {
/**
* Title's raw data.
*/
public String title;
/**
* Summary's raw data when the data is "ON".
*/
public String summaryOn;
/**
* Summary's raw data when the data is "OFF".
*/
public String summaryOff;
/**
* Entries associated with the raw data (when the data can have several values).
*/
public String entries;
/**
* Keywords' raw data.
*/
public String keywords;
/**
* Fragment's or Activity's title associated with the raw data.
*/
public String screenTitle;
public SearchIndexableRaw(Context context) {
super(context);
}
}

View File

@@ -32,4 +32,4 @@ public interface SearchIndexableResources {
* as a device binary.
*/
void addIndex(Class indexClass);
}
}