Add a few pages to search index.

- Data saver
- A few special permission access pages
   - Picture-in-picture
   - Premium sms
   - do not disturb access
- And a unrelated cleanup: move EmptyTextFragment from
  notification/ to widget/

Bug: 70720645
Test: robotests
Change-Id: I6a87f712bf81f9fd32fa9a3826fba851ca748409
This commit is contained in:
Fan Zhang
2018-07-10 15:46:31 -07:00
parent dc313813e6
commit 4560ab7a35
34 changed files with 326 additions and 65 deletions

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -30,7 +30,7 @@ public class ZenAccessController extends BasePreferenceController {
@Override
public int getAvailabilityStatus() {
return !ActivityManager.isLowRamDeviceStatic()
? AVAILABLE
? AVAILABLE_UNSEARCHABLE
: UNSUPPORTED_ON_DEVICE;
}
}

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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<String> 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<ApplicationInfo, Integer> a,
Pair<ApplicationInfo, Integer> 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<Pair<ApplicationInfo, Integer>> collectPipApps(int userId) {
final ArrayList<Pair<ApplicationInfo, Integer>> 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<SearchIndexableResource> getXmlResourcesToIndex(Context context,
boolean enabled) {
final ArrayList<SearchIndexableResource> result = new ArrayList<>();
final SearchIndexableResource sir = new SearchIndexableResource(context);
sir.xmlResId = R.xml.picture_in_picture_settings;
result.add(sir);
return result;
}
};
}

View File

@@ -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<SearchIndexableResource> getXmlResourcesToIndex(Context context,
boolean enabled) {
final ArrayList<SearchIndexableResource> result = new ArrayList<>();
final SearchIndexableResource sir = new SearchIndexableResource(context);
sir.xmlResId = R.xml.premium_sms_settings;
result.add(sir);
return result;
}
};
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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<SearchIndexableResource> getXmlResourcesToIndex(Context context,
boolean enabled) {
final ArrayList<SearchIndexableResource> 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;
}
};
}

View File

@@ -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;
}
};

View File

@@ -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<SearchIndexableResource> getXmlResourcesToIndex(Context context,
boolean enabled) {
final ArrayList<SearchIndexableResource> result = new ArrayList<>();
final SearchIndexableResource sir = new SearchIndexableResource(context);
sir.xmlResId = R.xml.unrestricted_data_access_settings;
result.add(sir);
return result;
}
};
}

View File

@@ -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

View File

@@ -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<SearchIndexableResource> getXmlResourcesToIndex(Context context,
boolean enabled) {
final ArrayList<SearchIndexableResource> result = new ArrayList<>();
final SearchIndexableResource sir = new SearchIndexableResource(context);
sir.xmlResId = R.xml.zen_access_settings;
result.add(sir);
return result;
}
};
}

View File

@@ -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;

View File

@@ -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;