diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-10-08 22:11:24 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-10-08 22:11:24 +0000 |
commit | 95d282273489c306597b8f5a96aeb323491bc3ed (patch) | |
tree | bf3f3c877efdb2db2ad14e19517cc60d85912de6 /src/com/android/settings/search | |
parent | 1980b16cb3fe7b559acce250b247f0b81e0b03df (diff) | |
parent | 6632529ba11050ba90b613e88c313e9dcfad82a0 (diff) | |
download | packages_apps_Settings-95d282273489c306597b8f5a96aeb323491bc3ed.tar.gz packages_apps_Settings-95d282273489c306597b8f5a96aeb323491bc3ed.tar.bz2 packages_apps_Settings-95d282273489c306597b8f5a96aeb323491bc3ed.zip |
Merge "Remove DeviceIndex feature/service."
Diffstat (limited to 'src/com/android/settings/search')
3 files changed, 0 insertions, 362 deletions
diff --git a/src/com/android/settings/search/DeviceIndexFeatureProvider.java b/src/com/android/settings/search/DeviceIndexFeatureProvider.java deleted file mode 100644 index f777f710fe..0000000000 --- a/src/com/android/settings/search/DeviceIndexFeatureProvider.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2018 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.settings.search; - -import static com.android.settings.slices.SliceDeepLinkSpringBoard.INTENT; -import static com.android.settings.slices.SliceDeepLinkSpringBoard.SETTINGS; - -import android.app.job.JobInfo; -import android.app.job.JobScheduler; -import android.content.ComponentName; -import android.content.Context; -import android.content.pm.PackageManager; -import android.content.pm.ServiceInfo; -import android.net.Uri; -import android.os.Binder; -import android.os.Build; -import android.provider.Settings; -import android.text.TextUtils; -import android.util.Log; - -import com.android.settings.R; -import com.android.settings.Utils; -import com.android.settings.slices.SettingsSliceProvider; - -import java.util.List; -import java.util.Locale; - -public interface DeviceIndexFeatureProvider { - - String TAG = "DeviceIndex"; - - String INDEX_VERSION = "settings:index_version"; - String INDEX_LANGUAGE = "settings:language"; - - // Increment when new items are added to ensure they get pushed to the device index. - String VERSION = Build.FINGERPRINT; - - // When the device language changes, re-index so Slices trigger in device language. - Locale LANGUAGE = Locale.getDefault(); - - default boolean isIndexingEnabled() { - return false; - } - - void index(Context context, CharSequence title, Uri sliceUri, Uri launchUri, - List<String> keywords); - - void clearIndex(Context context); - - default void updateIndex(Context context, boolean force) { - if (!isIndexingEnabled()) { - Log.i(TAG, "Skipping: device index is not enabled"); - return; - } - - if (!Utils.isDeviceProvisioned(context)) { - Log.w(TAG, "Skipping: device is not provisioned"); - return; - } - - final ComponentName jobComponent = new ComponentName(context.getPackageName(), - DeviceIndexUpdateJobService.class.getName()); - - try { - final int callerUid = Binder.getCallingUid(); - final ServiceInfo si = context.getPackageManager().getServiceInfo(jobComponent, - PackageManager.MATCH_DIRECT_BOOT_AWARE - | PackageManager.MATCH_DIRECT_BOOT_UNAWARE); - if (si == null) { - Log.w(TAG, "Skipping: No such service " + jobComponent); - return; - } - if (si.applicationInfo.uid != callerUid) { - Log.w(TAG, "Skipping: Uid cannot schedule DeviceIndexUpdate: " + callerUid); - return; - } - } catch (PackageManager.NameNotFoundException e) { - Log.w(TAG, "Skipping: error finding DeviceIndexUpdateJobService from packageManager"); - return; - } - - if (!force && skipIndex(context)) { - Log.i(TAG, "Skipping: already indexed."); - // No need to update. - return; - } - - // Prevent scheduling multiple jobs - setIndexState(context); - - final int jobId = context.getResources().getInteger(R.integer.device_index_update); - // Schedule a job so that we know it'll be able to complete, but try to run as - // soon as possible. - context.getSystemService(JobScheduler.class).schedule( - new JobInfo.Builder(jobId, jobComponent) - .setPersisted(false) - .setMinimumLatency(1000) - .setOverrideDeadline(1) - .build()); - - } - - static Uri createDeepLink(String s) { - return new Uri.Builder().scheme(SETTINGS) - .authority(SettingsSliceProvider.SLICE_AUTHORITY) - .appendQueryParameter(INTENT, s) - .build(); - } - - static boolean skipIndex(Context context) { - final boolean isSameVersion = TextUtils.equals( - Settings.Secure.getString(context.getContentResolver(), INDEX_VERSION), VERSION); - final boolean isSameLanguage = TextUtils.equals( - Settings.Secure.getString(context.getContentResolver(), INDEX_LANGUAGE), - LANGUAGE.toString()); - return isSameLanguage && isSameVersion; - } - - static void setIndexState(Context context) { - Settings.Secure.putString(context.getContentResolver(), INDEX_VERSION, VERSION); - Settings.Secure.putString(context.getContentResolver(), INDEX_LANGUAGE, - LANGUAGE.toString()); - } -} diff --git a/src/com/android/settings/search/DeviceIndexFeatureProviderImpl.java b/src/com/android/settings/search/DeviceIndexFeatureProviderImpl.java deleted file mode 100644 index 8fd1606452..0000000000 --- a/src/com/android/settings/search/DeviceIndexFeatureProviderImpl.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2018 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.settings.search; - -import android.content.Context; -import android.net.Uri; - -import java.util.List; - -public class DeviceIndexFeatureProviderImpl implements DeviceIndexFeatureProvider { - - @Override - public void index(Context context, CharSequence title, Uri sliceUri, Uri launchUri, - List<String> keywords) { - // Not enabled by default. - } - - @Override - public void clearIndex(Context context) { - // Not enabled by default. - } -} diff --git a/src/com/android/settings/search/DeviceIndexUpdateJobService.java b/src/com/android/settings/search/DeviceIndexUpdateJobService.java deleted file mode 100644 index 1f7ee31e6f..0000000000 --- a/src/com/android/settings/search/DeviceIndexUpdateJobService.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (C) 2018 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.settings.search; - -import static android.app.slice.Slice.HINT_LARGE; -import static android.app.slice.Slice.HINT_TITLE; -import static android.app.slice.SliceItem.FORMAT_TEXT; - -import static com.android.settings.search.DeviceIndexFeatureProvider.createDeepLink; - -import android.app.job.JobParameters; -import android.app.job.JobService; -import android.content.ContentResolver; -import android.content.Intent; -import android.net.Uri; -import android.net.Uri.Builder; -import android.provider.SettingsSlicesContract; -import android.util.Log; - -import androidx.annotation.VisibleForTesting; -import androidx.slice.Slice; -import androidx.slice.SliceItem; -import androidx.slice.SliceMetadata; -import androidx.slice.SliceViewManager; -import androidx.slice.SliceViewManager.SliceCallback; -import androidx.slice.core.SliceQuery; -import androidx.slice.widget.ListContent; -import androidx.slice.widget.SliceContent; - -import com.android.settings.overlay.FeatureFactory; -import com.android.settings.slices.SettingsSliceProvider; -import com.android.settings.slices.SliceDeepLinkSpringBoard; - -import java.util.Collection; -import java.util.concurrent.CountDownLatch; - -public class DeviceIndexUpdateJobService extends JobService { - - private static final String TAG = "DeviceIndexUpdate"; - private static final boolean DEBUG = false; - @VisibleForTesting - protected boolean mRunningJob; - - @Override - public boolean onStartJob(JobParameters params) { - if (DEBUG) Log.d(TAG, "onStartJob"); - if (!mRunningJob) { - mRunningJob = true; - Thread thread = new Thread(() -> updateIndex(params)); - thread.setPriority(Thread.MIN_PRIORITY); - thread.start(); - } - return true; - } - - @Override - public boolean onStopJob(JobParameters params) { - if (DEBUG) Log.d(TAG, "onStopJob " + mRunningJob); - if (mRunningJob) { - mRunningJob = false; - return true; - } - return false; - } - - @VisibleForTesting - protected void updateIndex(JobParameters params) { - if (DEBUG) { - Log.d(TAG, "Starting index"); - } - final DeviceIndexFeatureProvider indexProvider = FeatureFactory.getFactory(this) - .getDeviceIndexFeatureProvider(); - final SliceViewManager manager = getSliceViewManager(); - final Uri baseUri = new Builder() - .scheme(ContentResolver.SCHEME_CONTENT) - .authority(SettingsSliceProvider.SLICE_AUTHORITY) - .build(); - final Uri platformBaseUri = new Builder() - .scheme(ContentResolver.SCHEME_CONTENT) - .authority(SettingsSlicesContract.AUTHORITY) - .build(); - final Collection<Uri> slices = manager.getSliceDescendants(baseUri); - slices.addAll(manager.getSliceDescendants(platformBaseUri)); - - if (DEBUG) { - Log.d(TAG, "Indexing " + slices.size() + " slices"); - } - - indexProvider.clearIndex(this /* context */); - - for (Uri slice : slices) { - if (!mRunningJob) { - return; - } - Slice loadedSlice = bindSliceSynchronous(manager, slice); - // TODO: Get Title APIs on SliceMetadata and use that. - SliceMetadata metaData = getMetadata(loadedSlice); - CharSequence title = findTitle(loadedSlice, metaData); - if (title != null) { - if (DEBUG) { - Log.d(TAG, "Indexing: " + slice + " " + title + " " + loadedSlice); - } - indexProvider.index(this, title, slice, createDeepLink( - new Intent(SliceDeepLinkSpringBoard.ACTION_VIEW_SLICE) - .setPackage(getPackageName()) - .putExtra(SliceDeepLinkSpringBoard.EXTRA_SLICE, slice.toString()) - .toUri(Intent.URI_ANDROID_APP_SCHEME)), - metaData.getSliceKeywords()); - } - } - if (DEBUG) { - Log.d(TAG, "Done indexing"); - } - jobFinished(params, false); - } - - protected SliceViewManager getSliceViewManager() { - return SliceViewManager.getInstance(this); - } - - protected SliceMetadata getMetadata(Slice loadedSlice) { - return SliceMetadata.from(this, loadedSlice); - } - - protected CharSequence findTitle(Slice loadedSlice, SliceMetadata metaData) { - ListContent content = new ListContent(null, loadedSlice); - SliceContent headerItem = content.getHeader(); - if (headerItem == null) { - if (content.getRowItems().size() != 0) { - headerItem = content.getRowItems().get(0); - } else { - return null; - } - } - // Look for a title, then large text, then any text at all. - SliceItem title = SliceQuery.find(headerItem.getSliceItem(), FORMAT_TEXT, HINT_TITLE, null); - if (title != null) { - return title.getText(); - } - title = SliceQuery.find(headerItem.getSliceItem(), FORMAT_TEXT, HINT_LARGE, null); - if (title != null) { - return title.getText(); - } - title = SliceQuery.find(headerItem.getSliceItem(), FORMAT_TEXT); - if (title != null) { - return title.getText(); - } - return null; - } - - protected Slice bindSliceSynchronous(SliceViewManager manager, Uri slice) { - final Slice[] returnSlice = new Slice[1]; - CountDownLatch latch = new CountDownLatch(1); - SliceCallback callback = new SliceCallback() { - @Override - public void onSliceUpdated(Slice s) { - try { - SliceMetadata m = SliceMetadata.from(DeviceIndexUpdateJobService.this, s); - if (m.getLoadingState() == SliceMetadata.LOADED_ALL) { - returnSlice[0] = s; - latch.countDown(); - manager.unregisterSliceCallback(slice, this); - } - } catch (Exception e) { - Log.w(TAG, slice + " cannot be indexed", e); - returnSlice[0] = s; - } - } - }; - // Register a callback until we get a loaded slice. - manager.registerSliceCallback(slice, callback); - // Trigger the first bind in case no loading is needed. - callback.onSliceUpdated(manager.bindSlice(slice)); - try { - latch.await(); - } catch (InterruptedException e) { - } - return returnSlice[0]; - } -} |