diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 3c635eb5197..dba61d66443 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2438,7 +2438,7 @@ + android:value="com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureSettings" /> + android:value="com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureDetails" /> + settings:controller="com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureDetailPreferenceController" /> - + + android:fragment="com.android.settings.datausage.UnrestrictedDataAccess" + settings:controller="com.android.settings.applications.specialaccess.DataSaverController" /> diff --git a/res/xml/picture_in_picture_settings.xml b/res/xml/picture_in_picture_settings.xml index b7091df374d..35839cdc148 100644 --- a/res/xml/picture_in_picture_settings.xml +++ b/res/xml/picture_in_picture_settings.xml @@ -17,4 +17,7 @@ + xmlns:settings="http://schemas.android.com/apk/res-auto" + android:key="picture_in_picture_screen" + android:title="@string/picture_in_picture_title" + settings:controller="com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureScreenPreferenceController" /> diff --git a/res/xml/premium_sms_settings.xml b/res/xml/premium_sms_settings.xml index 7bcf11e4661..17d12978b2d 100644 --- a/res/xml/premium_sms_settings.xml +++ b/res/xml/premium_sms_settings.xml @@ -17,4 +17,7 @@ + xmlns:settings="http://schemas.android.com/apk/res-auto" + android:key="premium_sms_screen" + android:title="@string/premium_sms_access" + settings:controller="com.android.settings.applications.specialaccess.premiumsms.PremiumSmsScreenPreferenceController" /> diff --git a/res/xml/special_access.xml b/res/xml/special_access.xml index 574686ad759..552f0fc585e 100644 --- a/res/xml/special_access.xml +++ b/res/xml/special_access.xml @@ -73,15 +73,15 @@ + settings:controller="com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureController" /> + android:fragment="com.android.settings.applications.specialaccess.premiumsms.PremiumSmsAccess" + settings:controller="com.android.settings.applications.specialaccess.premiumsms.PremiumSmsController" /> diff --git a/res/xml/zen_access_settings.xml b/res/xml/zen_access_settings.xml index 35cfdb8e70b..48dc1af2136 100644 --- a/res/xml/zen_access_settings.xml +++ b/res/xml/zen_access_settings.xml @@ -17,4 +17,5 @@ diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java index ae40d67717f..80f01fc2f11 100755 --- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java +++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java @@ -44,6 +44,8 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.applications.manageapplications.ManageApplications; +import com.android.settings.applications.specialaccess.pictureinpicture + .PictureInPictureDetailPreferenceController; import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; import com.android.settingslib.RestrictedLockUtils; @@ -281,7 +283,7 @@ public class AppInfoDashboardFragment extends DashboardFragment mAppEntry = appEntry; } - PackageInfo getPackageInfo() { + public PackageInfo getPackageInfo() { return mPackageInfo; } diff --git a/src/com/android/settings/applications/specialaccess/DataSaverController.java b/src/com/android/settings/applications/specialaccess/DataSaverController.java index 56687d7aa4f..c169d7fc891 100644 --- a/src/com/android/settings/applications/specialaccess/DataSaverController.java +++ b/src/com/android/settings/applications/specialaccess/DataSaverController.java @@ -31,7 +31,7 @@ public class DataSaverController extends BasePreferenceController { @AvailabilityStatus public int getAvailabilityStatus() { return mContext.getResources().getBoolean(R.bool.config_show_data_saver) - ? AVAILABLE + ? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE; } } \ No newline at end of file diff --git a/src/com/android/settings/applications/specialaccess/ZenAccessController.java b/src/com/android/settings/applications/specialaccess/ZenAccessController.java index 41344a3ebad..ada5d9d6db7 100644 --- a/src/com/android/settings/applications/specialaccess/ZenAccessController.java +++ b/src/com/android/settings/applications/specialaccess/ZenAccessController.java @@ -30,7 +30,7 @@ public class ZenAccessController extends BasePreferenceController { @Override public int getAvailabilityStatus() { return !ActivityManager.isLowRamDeviceStatic() - ? AVAILABLE + ? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE; } } diff --git a/src/com/android/settings/applications/specialaccess/PictureInPictureController.java b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureController.java similarity index 90% rename from src/com/android/settings/applications/specialaccess/PictureInPictureController.java rename to src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureController.java index 6666605c1cc..714b662a7b8 100644 --- a/src/com/android/settings/applications/specialaccess/PictureInPictureController.java +++ b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.applications.specialaccess; +package com.android.settings.applications.specialaccess.pictureinpicture; import android.app.ActivityManager; import android.content.Context; @@ -30,7 +30,7 @@ public class PictureInPictureController extends BasePreferenceController { @Override public int getAvailabilityStatus() { return !ActivityManager.isLowRamDeviceStatic() - ? AVAILABLE + ? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE; } } diff --git a/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailPreferenceController.java similarity index 93% rename from src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java rename to src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailPreferenceController.java index 75582cbc157..a2ece7212dc 100644 --- a/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceController.java +++ b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailPreferenceController.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * 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. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.applications.appinfo; +package com.android.settings.applications.specialaccess.pictureinpicture; import android.content.Context; import android.content.pm.PackageInfo; @@ -23,6 +23,7 @@ import android.os.UserHandle; import android.util.Log; import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.applications.appinfo.AppInfoPreferenceControllerBase; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; diff --git a/src/com/android/settings/applications/appinfo/PictureInPictureDetails.java b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetails.java similarity index 98% rename from src/com/android/settings/applications/appinfo/PictureInPictureDetails.java rename to src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetails.java index 4f7dd9a8302..120a318c2c2 100644 --- a/src/com/android/settings/applications/appinfo/PictureInPictureDetails.java +++ b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetails.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.settings.applications.appinfo; +package com.android.settings.applications.specialaccess.pictureinpicture; import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.MODE_ERRORED; diff --git a/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureScreenPreferenceController.java b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureScreenPreferenceController.java new file mode 100644 index 00000000000..def600848da --- /dev/null +++ b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureScreenPreferenceController.java @@ -0,0 +1,37 @@ +/* + * 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.applications.specialaccess.pictureinpicture; + +import android.app.ActivityManager; +import android.content.Context; + +import com.android.settings.core.BasePreferenceController; + +public class PictureInPictureScreenPreferenceController extends BasePreferenceController { + + public PictureInPictureScreenPreferenceController(Context context, + String preferenceKey) { + super(context, preferenceKey); + } + + @Override + public int getAvailabilityStatus() { + return !ActivityManager.isLowRamDeviceStatic() + ? AVAILABLE + : UNSUPPORTED_ON_DEVICE; + } +} diff --git a/src/com/android/settings/applications/appinfo/PictureInPictureSettings.java b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettings.java similarity index 86% rename from src/com/android/settings/applications/appinfo/PictureInPictureSettings.java rename to src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettings.java index df961834d9d..e380bb5d22f 100644 --- a/src/com/android/settings/applications/appinfo/PictureInPictureSettings.java +++ b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettings.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.settings.applications.appinfo; +package com.android.settings.applications.specialaccess.pictureinpicture; import static android.content.pm.PackageManager.GET_ACTIVITIES; @@ -27,6 +27,7 @@ import android.content.pm.UserInfo; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; +import android.provider.SearchIndexableResource; import android.util.IconDrawableFactory; import android.util.Pair; import android.view.View; @@ -35,8 +36,11 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.applications.AppInfoBase; -import com.android.settings.notification.EmptyTextSettings; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.search.Indexable; import com.android.settings.widget.AppPreference; +import com.android.settings.widget.EmptyTextSettings; +import com.android.settingslib.search.SearchIndexable; import java.text.Collator; import java.util.ArrayList; @@ -48,11 +52,12 @@ import androidx.preference.Preference; import androidx.preference.Preference.OnPreferenceClickListener; import androidx.preference.PreferenceScreen; +@SearchIndexable public class PictureInPictureSettings extends EmptyTextSettings { - private static final String TAG = PictureInPictureSettings.class.getSimpleName(); @VisibleForTesting static final List IGNORE_PACKAGE_LIST = new ArrayList<>(); + static { IGNORE_PACKAGE_LIST.add("com.android.systemui"); } @@ -72,9 +77,9 @@ public class PictureInPictureSettings extends EmptyTextSettings { public final int compare(Pair a, Pair b) { - CharSequence sa = a.first.loadLabel(mPm); + CharSequence sa = a.first.loadLabel(mPm); if (sa == null) sa = a.first.name; - CharSequence sb = b.first.loadLabel(mPm); + CharSequence sb = b.first.loadLabel(mPm); if (sb == null) sb = b.first.name; int nameCmp = mCollator.compare(sa.toString(), sb.toString()); if (nameCmp != 0) { @@ -92,7 +97,7 @@ public class PictureInPictureSettings extends EmptyTextSettings { /** * @return true if the package has any activities that declare that they support - * picture-in-picture. + * picture-in-picture. */ public static boolean checkPackageHasPictureInPictureActivities(String packageName, @@ -192,7 +197,7 @@ public class PictureInPictureSettings extends EmptyTextSettings { /** * @return the list of applications for the given user and all their profiles that have - * activities which support PiP. + * activities which support PiP. */ ArrayList> collectPipApps(int userId) { final ArrayList> pipApps = new ArrayList<>(); @@ -213,4 +218,18 @@ public class PictureInPictureSettings extends EmptyTextSettings { } return pipApps; } + + public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex(Context context, + boolean enabled) { + final ArrayList result = new ArrayList<>(); + + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.picture_in_picture_settings; + result.add(sir); + return result; + } + }; } diff --git a/src/com/android/settings/applications/PremiumSmsAccess.java b/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsAccess.java similarity index 82% rename from src/com/android/settings/applications/PremiumSmsAccess.java rename to src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsAccess.java index ab54c455fde..dd940db492a 100644 --- a/src/com/android/settings/applications/PremiumSmsAccess.java +++ b/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsAccess.java @@ -1,23 +1,26 @@ /* * Copyright (C) 2016 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 + * 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. + * 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.applications; +package com.android.settings.applications.specialaccess.premiumsms; import android.annotation.Nullable; import android.app.Application; import android.content.Context; import android.os.Bundle; +import android.provider.SearchIndexableResource; import android.view.View; import com.android.internal.annotations.VisibleForTesting; @@ -25,16 +28,21 @@ import com.android.internal.logging.nano.MetricsProto; import com.android.internal.telephony.SmsUsageMonitor; import com.android.settings.R; import com.android.settings.applications.AppStateBaseBridge.Callback; +import com.android.settings.applications.AppStateSmsPremBridge; import com.android.settings.applications.AppStateSmsPremBridge.SmsState; -import com.android.settings.notification.EmptyTextSettings; import com.android.settings.overlay.FeatureFactory; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.search.Indexable; +import com.android.settings.widget.EmptyTextSettings; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.Callbacks; import com.android.settingslib.applications.ApplicationsState.Session; +import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.widget.FooterPreference; import java.util.ArrayList; +import java.util.List; import androidx.preference.DropDownPreference; import androidx.preference.Preference; @@ -42,7 +50,9 @@ import androidx.preference.Preference.OnPreferenceChangeListener; import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceViewHolder; -public class PremiumSmsAccess extends EmptyTextSettings implements Callback, Callbacks, OnPreferenceChangeListener { +@SearchIndexable +public class PremiumSmsAccess extends EmptyTextSettings + implements Callback, Callbacks, OnPreferenceChangeListener { private ApplicationsState mApplicationsState; private AppStateSmsPremBridge mSmsBackend; @@ -233,4 +243,18 @@ public class PremiumSmsAccess extends EmptyTextSettings implements Callback, Cal super.onBindViewHolder(holder); } } + + public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex(Context context, + boolean enabled) { + final ArrayList result = new ArrayList<>(); + + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.premium_sms_settings; + result.add(sir); + return result; + } + }; } diff --git a/src/com/android/settings/applications/specialaccess/PremiumSmsController.java b/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsController.java similarity index 90% rename from src/com/android/settings/applications/specialaccess/PremiumSmsController.java rename to src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsController.java index 0e8c198f3b2..158fe3cfd41 100644 --- a/src/com/android/settings/applications/specialaccess/PremiumSmsController.java +++ b/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.applications.specialaccess; +package com.android.settings.applications.specialaccess.premiumsms; import android.content.Context; @@ -30,7 +30,7 @@ public class PremiumSmsController extends BasePreferenceController { @AvailabilityStatus public int getAvailabilityStatus() { return mContext.getResources().getBoolean(R.bool.config_show_premium_sms) - ? AVAILABLE + ? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE; } } \ No newline at end of file diff --git a/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceController.java b/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceController.java new file mode 100644 index 00000000000..582e75ea5d7 --- /dev/null +++ b/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceController.java @@ -0,0 +1,36 @@ +/* + * 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.applications.specialaccess.premiumsms; + +import android.content.Context; + +import com.android.settings.R; +import com.android.settings.core.BasePreferenceController; + +public class PremiumSmsScreenPreferenceController extends BasePreferenceController { + + public PremiumSmsScreenPreferenceController(Context context, String preferenceKey) { + super(context, preferenceKey); + } + + @AvailabilityStatus + public int getAvailabilityStatus() { + return mContext.getResources().getBoolean(R.bool.config_show_premium_sms) + ? AVAILABLE + : UNSUPPORTED_ON_DEVICE; + } +} diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index 64afd942406..a325c4c4f3e 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -42,14 +42,14 @@ import com.android.settings.applications.VrListenerSettings; import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.applications.appinfo.DrawOverlayDetails; import com.android.settings.applications.appinfo.ExternalSourcesDetails; -import com.android.settings.applications.appinfo.PictureInPictureDetails; -import com.android.settings.applications.appinfo.PictureInPictureSettings; import com.android.settings.applications.appinfo.WriteSettingsDetails; import com.android.settings.applications.appops.BackgroundCheckSummary; import com.android.settings.applications.assist.ManageAssist; import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.applications.managedomainurls.ManageDomainUrls; import com.android.settings.applications.specialaccess.deviceadmin.DeviceAdminSettings; +import com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureDetails; +import com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureSettings; import com.android.settings.backup.PrivacySettings; import com.android.settings.backup.ToggleBackupSettingFragment; import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment; diff --git a/src/com/android/settings/datausage/DataSaverSummary.java b/src/com/android/settings/datausage/DataSaverSummary.java index 6482f87182a..97334aa529a 100644 --- a/src/com/android/settings/datausage/DataSaverSummary.java +++ b/src/com/android/settings/datausage/DataSaverSummary.java @@ -15,7 +15,10 @@ package com.android.settings.datausage; import android.app.Application; +import android.content.Context; import android.os.Bundle; +import android.provider.SearchIndexableResource; +import android.telephony.SubscriptionManager; import android.widget.Switch; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; @@ -24,17 +27,22 @@ import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.applications.AppStateBaseBridge.Callback; import com.android.settings.datausage.DataSaverBackend.Listener; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.search.Indexable; import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SwitchBar.OnSwitchChangeListener; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.Callbacks; import com.android.settingslib.applications.ApplicationsState.Session; +import com.android.settingslib.search.SearchIndexable; import java.util.ArrayList; +import java.util.List; import androidx.preference.Preference; +@SearchIndexable public class DataSaverSummary extends SettingsPreferenceFragment implements OnSwitchChangeListener, Listener, Callback, Callbacks { @@ -94,7 +102,7 @@ public class DataSaverSummary extends SettingsPreferenceFragment @Override public void onSwitchChanged(Switch switchView, boolean isChecked) { - synchronized(this) { + synchronized (this) { if (mSwitching) { return; } @@ -115,7 +123,7 @@ public class DataSaverSummary extends SettingsPreferenceFragment @Override public void onDataSaverChanged(boolean isDataSaving) { - synchronized(this) { + synchronized (this) { mSwitchBar.setChecked(isDataSaving); mSwitching = false; } @@ -190,4 +198,25 @@ public class DataSaverSummary extends SettingsPreferenceFragment public void onLoadEntriesCompleted() { } + + public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex(Context context, + boolean enabled) { + final ArrayList result = new ArrayList<>(); + + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.data_saver; + result.add(sir); + return result; + } + + @Override + protected boolean isPageSearchEnabled(Context context) { + return DataUsageUtils.hasMobileData(context) + && DataUsageUtils.getDefaultSubscriptionId(context) + != SubscriptionManager.INVALID_SUBSCRIPTION_ID; + } + }; } diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java index 58a5a8f1f95..ee8a6c8eafb 100644 --- a/src/com/android/settings/datausage/DataUsageSummary.java +++ b/src/com/android/settings/datausage/DataUsageSummary.java @@ -51,8 +51,7 @@ import androidx.preference.PreferenceScreen; * Settings preference fragment that displays data usage summary. */ @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC) -public class DataUsageSummary extends DataUsageBaseFragment implements Indexable, - DataUsageEditController { +public class DataUsageSummary extends DataUsageBaseFragment implements DataUsageEditController { private static final String TAG = "DataUsageSummary"; @@ -379,6 +378,9 @@ public class DataUsageSummary extends DataUsageBaseFragment implements Indexable // This title is named Wifi, and will confuse users. keys.add(KEY_WIFI_USAGE_TITLE); + // Duplicate entry for "Data saver" + keys.add(KEY_RESTRICT_BACKGROUND); + return keys; } }; diff --git a/src/com/android/settings/datausage/UnrestrictedDataAccess.java b/src/com/android/settings/datausage/UnrestrictedDataAccess.java index 17fb67e5eff..b8d47b1a543 100644 --- a/src/com/android/settings/datausage/UnrestrictedDataAccess.java +++ b/src/com/android/settings/datausage/UnrestrictedDataAccess.java @@ -16,6 +16,7 @@ package com.android.settings.datausage; import android.content.Context; import android.os.Bundle; +import android.provider.SearchIndexableResource; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -24,9 +25,16 @@ import android.view.View; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.search.Indexable; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppFilter; +import com.android.settingslib.search.SearchIndexable; +import java.util.ArrayList; +import java.util.List; + +@SearchIndexable public class UnrestrictedDataAccess extends DashboardFragment { private static final String TAG = "UnrestrictedDataAccess"; @@ -108,4 +116,18 @@ public class UnrestrictedDataAccess extends DashboardFragment { protected int getPreferenceScreenResId() { return R.xml.unrestricted_data_access_settings; } + + public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex(Context context, + boolean enabled) { + final ArrayList result = new ArrayList<>(); + + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.unrestricted_data_access_settings; + result.add(sir); + return result; + } + }; } diff --git a/src/com/android/settings/datausage/UnrestrictedDataAccessPreferenceController.java b/src/com/android/settings/datausage/UnrestrictedDataAccessPreferenceController.java index dc6b7feb4af..4a2307f28fe 100644 --- a/src/com/android/settings/datausage/UnrestrictedDataAccessPreferenceController.java +++ b/src/com/android/settings/datausage/UnrestrictedDataAccessPreferenceController.java @@ -21,6 +21,7 @@ import android.os.UserHandle; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.settings.R; import com.android.settings.applications.AppStateBaseBridge; import com.android.settings.core.BasePreferenceController; import com.android.settings.dashboard.DashboardFragment; @@ -83,7 +84,9 @@ public class UnrestrictedDataAccessPreferenceController extends BasePreferenceCo @Override public int getAvailabilityStatus() { - return AVAILABLE; + return mContext.getResources().getBoolean(R.bool.config_show_data_saver) + ? AVAILABLE_UNSEARCHABLE + : UNSUPPORTED_ON_DEVICE; } @Override diff --git a/src/com/android/settings/notification/ZenAccessSettings.java b/src/com/android/settings/notification/ZenAccessSettings.java index 8c69f63c190..1dbd295bdf1 100644 --- a/src/com/android/settings/notification/ZenAccessSettings.java +++ b/src/com/android/settings/notification/ZenAccessSettings.java @@ -36,6 +36,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.RemoteException; +import android.provider.SearchIndexableResource; import android.provider.Settings.Secure; import android.text.TextUtils; import android.util.ArraySet; @@ -47,7 +48,11 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.overlay.FeatureFactory; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.search.Indexable; import com.android.settings.widget.AppSwitchPreference; +import com.android.settings.widget.EmptyTextSettings; +import com.android.settingslib.search.SearchIndexable; import java.util.ArrayList; import java.util.Collections; @@ -58,6 +63,7 @@ import androidx.preference.Preference.OnPreferenceChangeListener; import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; +@SearchIndexable public class ZenAccessSettings extends EmptyTextSettings { private final String TAG = "ZenAccessSettings"; @@ -336,4 +342,18 @@ public class ZenAccessSettings extends EmptyTextSettings { .create(); } } + + public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex(Context context, + boolean enabled) { + final ArrayList result = new ArrayList<>(); + + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.zen_access_settings; + result.add(sir); + return result; + } + }; } diff --git a/src/com/android/settings/utils/ManagedServiceSettings.java b/src/com/android/settings/utils/ManagedServiceSettings.java index 83443333d4d..7a78fc94426 100644 --- a/src/com/android/settings/utils/ManagedServiceSettings.java +++ b/src/com/android/settings/utils/ManagedServiceSettings.java @@ -38,8 +38,8 @@ import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; -import com.android.settings.notification.EmptyTextSettings; import com.android.settings.widget.AppSwitchPreference; +import com.android.settings.widget.EmptyTextSettings; import com.android.settingslib.applications.ServiceListing; import java.util.List; diff --git a/src/com/android/settings/notification/EmptyTextSettings.java b/src/com/android/settings/widget/EmptyTextSettings.java similarity index 97% rename from src/com/android/settings/notification/EmptyTextSettings.java rename to src/com/android/settings/widget/EmptyTextSettings.java index 4ac3d52d1d5..24f0a821f4b 100644 --- a/src/com/android/settings/notification/EmptyTextSettings.java +++ b/src/com/android/settings/widget/EmptyTextSettings.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.notification; +package com.android.settings.widget; import android.annotation.Nullable; import android.os.Bundle; diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider index dfa4fba7f16..c3cb8971b6c 100644 --- a/tests/robotests/assets/grandfather_not_implementing_index_provider +++ b/tests/robotests/assets/grandfather_not_implementing_index_provider @@ -13,18 +13,16 @@ com.android.settings.accounts.ManagedProfileSettings com.android.settings.applications.appinfo.AppInfoDashboardFragment com.android.settings.applications.appinfo.DrawOverlayDetails com.android.settings.applications.appinfo.ExternalSourcesDetails -com.android.settings.applications.appinfo.PictureInPictureDetails -com.android.settings.applications.appinfo.PictureInPictureSettings com.android.settings.applications.appinfo.WriteSettingsDetails com.android.settings.applications.AppLaunchSettings com.android.settings.applications.AppStorageSettings com.android.settings.applications.ConfirmConvertToFbe com.android.settings.applications.DirectoryAccessDetails -com.android.settings.applications.PremiumSmsAccess com.android.settings.applications.ProcessStatsDetail com.android.settings.applications.ProcessStatsSummary com.android.settings.applications.ProcessStatsUi com.android.settings.applications.RunningServices +com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureDetails com.android.settings.applications.UsageAccessDetails com.android.settings.applications.VrListenerSettings com.android.settings.backup.ToggleBackupSettingFragment @@ -34,9 +32,7 @@ com.android.settings.bluetooth.BluetoothPairingDetail com.android.settings.bluetooth.DevicePickerFragment com.android.settings.datausage.AppDataUsage com.android.settings.datausage.BillingCycleSettings -com.android.settings.datausage.DataSaverSummary com.android.settings.datausage.DataUsageList -com.android.settings.datausage.UnrestrictedDataAccess com.android.settings.datetime.timezone.TimeZoneSettings com.android.settings.development.featureflags.FeatureFlagsDashboard com.android.settings.development.qstile.DevelopmentTileConfigFragment @@ -67,7 +63,6 @@ com.android.settings.notification.ChannelNotificationSettings com.android.settings.notification.NotificationAccessSettings com.android.settings.notification.NotificationStation com.android.settings.notification.RedactionInterstitial$RedactionInterstitialFragment -com.android.settings.notification.ZenAccessSettings com.android.settings.notification.ZenModeEventRuleSettings com.android.settings.notification.ZenModeScheduleRuleSettings com.android.settings.password.ChooseLockGeneric$ChooseLockGenericFragment diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailPreferenceControllerTest.java similarity index 95% rename from tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java rename to tests/robotests/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailPreferenceControllerTest.java index 802bf7b2482..8355d788988 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailPreferenceControllerTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.applications.appinfo; +package com.android.settings.applications.specialaccess.pictureinpicture; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.doReturn; @@ -25,6 +25,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import com.android.settings.R; +import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.core.BasePreferenceController; import com.android.settings.testutils.SettingsRobolectricTestRunner; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailsTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailsTest.java similarity index 97% rename from tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailsTest.java rename to tests/robotests/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailsTest.java index b804b228ea8..eb96d9406fa 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureDetailsTest.java +++ b/tests/robotests/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailsTest.java @@ -11,10 +11,10 @@ * 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 + * limitations under the License. */ -package com.android.settings.applications.appinfo; +package com.android.settings.applications.specialaccess.pictureinpicture; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.nullable; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureSettingsTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettingsTest.java similarity index 98% rename from tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureSettingsTest.java rename to tests/robotests/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettingsTest.java index eb982070174..1d1be504051 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/PictureInPictureSettingsTest.java +++ b/tests/robotests/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureSettingsTest.java @@ -11,10 +11,10 @@ * 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 + * limitations under the License. */ -package com.android.settings.applications.appinfo; +package com.android.settings.applications.specialaccess.pictureinpicture; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyInt; diff --git a/tests/robotests/src/com/android/settings/applications/PremiumSmsAccessTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsAccessTest.java similarity index 93% rename from tests/robotests/src/com/android/settings/applications/PremiumSmsAccessTest.java rename to tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsAccessTest.java index e9cb6debf76..ff4ac9f954f 100644 --- a/tests/robotests/src/com/android/settings/applications/PremiumSmsAccessTest.java +++ b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsAccessTest.java @@ -11,10 +11,10 @@ * 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 + * limitations under the License. */ -package com.android.settings.applications; +package com.android.settings.applications.specialaccess.premiumsms; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.eq; @@ -24,6 +24,7 @@ import android.content.Context; import com.android.internal.logging.nano.MetricsProto; import com.android.internal.telephony.SmsUsageMonitor; +import com.android.settings.applications.specialaccess.premiumsms.PremiumSmsAccess; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/PremiumSmsControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsControllerTest.java similarity index 80% rename from tests/robotests/src/com/android/settings/applications/specialaccess/PremiumSmsControllerTest.java rename to tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsControllerTest.java index 8f16da7022e..35a93c1a9b6 100644 --- a/tests/robotests/src/com/android/settings/applications/specialaccess/PremiumSmsControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsControllerTest.java @@ -14,8 +14,9 @@ * limitations under the License. */ -package com.android.settings.applications.specialaccess; +package com.android.settings.applications.specialaccess.premiumsms; +import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; @@ -44,13 +45,13 @@ public class PremiumSmsControllerTest { } @Test - public void testPremiumSms_byDefault_shouldBeShown() { - assertThat(mController.isAvailable()).isTrue(); + public void getAvailability_byDefault_shouldBeShown() { + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE_UNSEARCHABLE); } @Test @Config(qualifiers = "mcc999") - public void testPremiumSms_ifDisabled_shouldNotBeShown() { + public void getAvailability_disabled_returnUnavailable() { assertThat(mController.isAvailable()).isFalse(); } } diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceControllerTest.java new file mode 100644 index 00000000000..29ab15be0c1 --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/specialaccess/premiumsms/PremiumSmsScreenPreferenceControllerTest.java @@ -0,0 +1,57 @@ +/* + * 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.applications.specialaccess.premiumsms; + +import static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.spy; + +import android.content.Context; + +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +public class PremiumSmsScreenPreferenceControllerTest { + + private Context mContext; + private PremiumSmsScreenPreferenceController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application.getApplicationContext()); + mController = new PremiumSmsScreenPreferenceController(mContext, "key"); + } + + @Test + public void getAvailability_byDefault_shouldBeShown() { + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); + } + + @Test + @Config(qualifiers = "mcc999") + public void getAvailability_disabled_returnUnavailable() { + assertThat(mController.isAvailable()).isFalse(); + } +}