diff --git a/quickstep/res/xml/indexable_launcher_prefs.xml b/quickstep/res/xml/indexable_launcher_prefs.xml index b4740e5b51..cb31494b2e 100644 --- a/quickstep/res/xml/indexable_launcher_prefs.xml +++ b/quickstep/res/xml/indexable_launcher_prefs.xml @@ -29,4 +29,11 @@ android:defaultValue="false" android:persistent="true" /> + + diff --git a/quickstep/src/com/android/quickstep/LauncherSearchIndexablesProvider.java b/quickstep/src/com/android/quickstep/LauncherSearchIndexablesProvider.java deleted file mode 100644 index 5d6fbe2ca6..0000000000 --- a/quickstep/src/com/android/quickstep/LauncherSearchIndexablesProvider.java +++ /dev/null @@ -1,93 +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.quickstep; - -import android.annotation.TargetApi; -import android.content.Intent; -import android.content.pm.LauncherApps; -import android.content.pm.ResolveInfo; -import android.content.res.TypedArray; -import android.content.res.XmlResourceParser; -import android.database.Cursor; -import android.database.MatrixCursor; -import android.os.Build; -import android.provider.SearchIndexablesContract.XmlResource; -import android.provider.SearchIndexablesProvider; -import android.util.Xml; - -import com.android.launcher3.R; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import java.io.IOException; - -import static android.provider.SearchIndexablesContract.INDEXABLES_RAW_COLUMNS; -import static android.provider.SearchIndexablesContract.INDEXABLES_XML_RES_COLUMNS; -import static android.provider.SearchIndexablesContract.NON_INDEXABLES_KEYS_COLUMNS; - -@TargetApi(Build.VERSION_CODES.O) -public class LauncherSearchIndexablesProvider extends SearchIndexablesProvider { - @Override - public boolean onCreate() { - return true; - } - - @Override - public Cursor queryXmlResources(String[] strings) { - MatrixCursor cursor = new MatrixCursor(INDEXABLES_XML_RES_COLUMNS); - ResolveInfo settingsActivity = getContext().getPackageManager().resolveActivity( - new Intent(Intent.ACTION_APPLICATION_PREFERENCES) - .setPackage(getContext().getPackageName()), 0); - cursor.newRow() - .add(XmlResource.COLUMN_XML_RESID, R.xml.indexable_launcher_prefs) - .add(XmlResource.COLUMN_INTENT_ACTION, Intent.ACTION_APPLICATION_PREFERENCES) - .add(XmlResource.COLUMN_INTENT_TARGET_PACKAGE, getContext().getPackageName()) - .add(XmlResource.COLUMN_INTENT_TARGET_CLASS, settingsActivity.activityInfo.name); - return cursor; - } - - @Override - public Cursor queryRawData(String[] projection) { - return new MatrixCursor(INDEXABLES_RAW_COLUMNS); - } - - @Override - public Cursor queryNonIndexableKeys(String[] projection) { - MatrixCursor cursor = new MatrixCursor(NON_INDEXABLES_KEYS_COLUMNS); - if (!getContext().getSystemService(LauncherApps.class).hasShortcutHostPermission()) { - // We are not the current launcher. Hide all preferences - try (XmlResourceParser parser = getContext().getResources() - .getXml(R.xml.indexable_launcher_prefs)) { - final int depth = parser.getDepth(); - final int[] attrs = new int[] { android.R.attr.key }; - int type; - while (((type = parser.next()) != XmlPullParser.END_TAG || - parser.getDepth() > depth) && type != XmlPullParser.END_DOCUMENT) { - if (type == XmlPullParser.START_TAG) { - TypedArray a = getContext().obtainStyledAttributes( - Xml.asAttributeSet(parser), attrs); - cursor.addRow(new String[] {a.getString(0)}); - a.recycle(); - } - } - } catch (IOException |XmlPullParserException e) { - throw new RuntimeException(e); - } - } - return cursor; - } -} diff --git a/quickstep/src/com/android/quickstep/LauncherSearchIndexablesProvider.kt b/quickstep/src/com/android/quickstep/LauncherSearchIndexablesProvider.kt new file mode 100644 index 0000000000..c1fa5776bd --- /dev/null +++ b/quickstep/src/com/android/quickstep/LauncherSearchIndexablesProvider.kt @@ -0,0 +1,117 @@ +/* + * 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.quickstep + +import android.annotation.TargetApi +import android.content.Intent +import android.content.pm.LauncherApps +import android.database.Cursor +import android.database.MatrixCursor +import android.os.Build +import android.provider.SearchIndexablesContract +import android.provider.SearchIndexablesProvider +import android.util.Xml +import androidx.core.content.withStyledAttributes +import com.android.launcher3.Flags +import com.android.launcher3.InvariantDeviceProfile +import com.android.launcher3.InvariantDeviceProfile.TYPE_TABLET +import com.android.launcher3.R +import java.io.IOException +import org.xmlpull.v1.XmlPullParser +import org.xmlpull.v1.XmlPullParserException + +@TargetApi(Build.VERSION_CODES.O) +class LauncherSearchIndexablesProvider : SearchIndexablesProvider() { + + override fun onCreate(): Boolean = true + + override fun queryXmlResources(strings: Array): Cursor { + val cursor = MatrixCursor(SearchIndexablesContract.INDEXABLES_XML_RES_COLUMNS) + val context = context ?: return cursor + val settingsActivity = + context.packageManager.resolveActivity( + Intent(Intent.ACTION_APPLICATION_PREFERENCES).setPackage(context.packageName), + 0, + ) + cursor.newRow().apply { + add( + SearchIndexablesContract.XmlResource.COLUMN_XML_RESID, + R.xml.indexable_launcher_prefs, + ) + add( + SearchIndexablesContract.XmlResource.COLUMN_INTENT_ACTION, + Intent.ACTION_APPLICATION_PREFERENCES, + ) + add( + SearchIndexablesContract.XmlResource.COLUMN_INTENT_TARGET_PACKAGE, + context.packageName, + ) + add( + SearchIndexablesContract.XmlResource.COLUMN_INTENT_TARGET_CLASS, + settingsActivity!!.activityInfo!!.name, + ) + } + + return cursor + } + + fun isDeviceTablet(): Boolean { + return InvariantDeviceProfile.INSTANCE.get(context).deviceType == TYPE_TABLET + } + + override fun queryRawData(projection: Array) = + MatrixCursor(SearchIndexablesContract.INDEXABLES_RAW_COLUMNS) + + override fun queryNonIndexableKeys(projection: Array): Cursor { + val cursor = MatrixCursor(SearchIndexablesContract.NON_INDEXABLES_KEYS_COLUMNS) + if (Flags.oneGridSpecs() && !isDeviceTablet()) { + cursor.addRow(arrayOf(ALLOW_ROTATION_KEY)) + } else { + cursor.addRow(arrayOf(FIXED_LANDSCAPE_KEY)) + } + if (!context!!.getSystemService(LauncherApps::class.java)?.hasShortcutHostPermission()!!) { + // We are not the current launcher. Hide all preferences + try { + context!!.resources!!.getXml(R.xml.indexable_launcher_prefs).use { parser -> + val depth = parser.depth + val attrs = intArrayOf(android.R.attr.key) + var type: Int = parser.next() + while ( + (type != XmlPullParser.END_TAG || parser.depth > depth) && + type != XmlPullParser.END_DOCUMENT + ) { + if (type == XmlPullParser.START_TAG) { + context?.withStyledAttributes(Xml.asAttributeSet(parser), attrs) { + cursor.addRow(arrayOf(getString(0))) + } + } + type = parser.next() + } + } + } catch (e: IOException) { + throw RuntimeException(e) + } catch (e: XmlPullParserException) { + throw RuntimeException(e) + } + } + return cursor + } + + companion object { + private const val ALLOW_ROTATION_KEY = "pref_allowRotation" + private const val FIXED_LANDSCAPE_KEY = "pref_fixed_landscape_mode" + } +} diff --git a/res/values/strings.xml b/res/values/strings.xml index ea1acffd66..57c5148717 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -337,8 +337,9 @@ Landscape mode + - Set phone into landscape mode + Set home screen into landscape mode Notification dots