Add a Default phone app setting under wireless settings, and also a dialog activity that allows a user to confirm the selection of an application as a default phone app. Bug: 6948882 Bug: 15021725 Change-Id: I2c1473feba20da01b14fbd30dbecc01be560479d
602 lines
26 KiB
Java
602 lines
26 KiB
Java
/*
|
|
* Copyright (C) 2009 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;
|
|
|
|
|
|
import android.app.Activity;
|
|
import android.app.AlertDialog;
|
|
import android.app.Dialog;
|
|
import android.app.admin.DevicePolicyManager;
|
|
import android.content.ComponentName;
|
|
import android.content.Context;
|
|
import android.content.DialogInterface;
|
|
import android.content.Intent;
|
|
import android.content.pm.PackageManager;
|
|
import android.content.res.Resources;
|
|
import android.net.ConnectivityManager;
|
|
import android.net.NetworkInfo;
|
|
import android.nfc.NfcAdapter;
|
|
import android.nfc.NfcManager;
|
|
import android.os.Bundle;
|
|
import android.os.SystemProperties;
|
|
import android.os.UserHandle;
|
|
import android.os.UserManager;
|
|
import android.preference.CheckBoxPreference;
|
|
import android.preference.Preference;
|
|
import android.preference.Preference.OnPreferenceChangeListener;
|
|
import android.preference.PreferenceScreen;
|
|
import android.provider.SearchIndexableResource;
|
|
import android.provider.Settings;
|
|
import android.telecomm.PhoneApplication;
|
|
import android.telephony.TelephonyManager;
|
|
import android.text.TextUtils;
|
|
import android.util.Log;
|
|
|
|
import com.android.internal.telephony.SmsApplication;
|
|
import com.android.internal.telephony.SmsApplication.SmsApplicationData;
|
|
import com.android.internal.telephony.TelephonyIntents;
|
|
import com.android.internal.telephony.TelephonyProperties;
|
|
import com.android.settings.nfc.NfcEnabler;
|
|
import com.android.settings.search.BaseSearchIndexProvider;
|
|
import com.android.settings.search.Indexable;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Collection;
|
|
import java.util.List;
|
|
|
|
public class WirelessSettings extends RestrictedSettingsFragment
|
|
implements OnPreferenceChangeListener, Indexable {
|
|
private static final String TAG = "WirelessSettings";
|
|
|
|
private static final String KEY_TOGGLE_AIRPLANE = "toggle_airplane";
|
|
private static final String KEY_TOGGLE_NFC = "toggle_nfc";
|
|
private static final String KEY_WIMAX_SETTINGS = "wimax_settings";
|
|
private static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings";
|
|
private static final String KEY_VPN_SETTINGS = "vpn_settings";
|
|
private static final String KEY_TETHER_SETTINGS = "tether_settings";
|
|
private static final String KEY_PROXY_SETTINGS = "proxy_settings";
|
|
private static final String KEY_MOBILE_NETWORK_SETTINGS = "mobile_network_settings";
|
|
private static final String KEY_MANAGE_MOBILE_PLAN = "manage_mobile_plan";
|
|
private static final String KEY_SMS_APPLICATION = "sms_application";
|
|
private static final String KEY_TOGGLE_NSD = "toggle_nsd"; //network service discovery
|
|
private static final String KEY_CELL_BROADCAST_SETTINGS = "cell_broadcast_settings";
|
|
private static final String KEY_PHONE_APPLICATION = "phone_application";
|
|
|
|
public static final String EXIT_ECM_RESULT = "exit_ecm_result";
|
|
public static final int REQUEST_CODE_EXIT_ECM = 1;
|
|
|
|
private AirplaneModeEnabler mAirplaneModeEnabler;
|
|
private CheckBoxPreference mAirplaneModePreference;
|
|
private NfcEnabler mNfcEnabler;
|
|
private NfcAdapter mNfcAdapter;
|
|
private NsdEnabler mNsdEnabler;
|
|
|
|
private ConnectivityManager mCm;
|
|
private TelephonyManager mTm;
|
|
private PackageManager mPm;
|
|
private UserManager mUm;
|
|
|
|
private static final int MANAGE_MOBILE_PLAN_DIALOG_ID = 1;
|
|
private static final String SAVED_MANAGE_MOBILE_PLAN_MSG = "mManageMobilePlanMessage";
|
|
|
|
private AppListPreference mSmsApplicationPreference;
|
|
private AppListPreference mDialerApplicationPreference;
|
|
|
|
public WirelessSettings() {
|
|
super(null);
|
|
}
|
|
/**
|
|
* Invoked on each preference click in this hierarchy, overrides
|
|
* PreferenceFragment's implementation. Used to make sure we track the
|
|
* preference click events.
|
|
*/
|
|
@Override
|
|
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
|
|
if (ensurePinRestrictedPreference(preference)) {
|
|
return true;
|
|
}
|
|
log("onPreferenceTreeClick: preference=" + preference);
|
|
if (preference == mAirplaneModePreference && Boolean.parseBoolean(
|
|
SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) {
|
|
// In ECM mode launch ECM app dialog
|
|
startActivityForResult(
|
|
new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null),
|
|
REQUEST_CODE_EXIT_ECM);
|
|
return true;
|
|
} else if (preference == findPreference(KEY_MANAGE_MOBILE_PLAN)) {
|
|
onManageMobilePlanClick();
|
|
}
|
|
// Let the intents be launched by the Preference manager
|
|
return super.onPreferenceTreeClick(preferenceScreen, preference);
|
|
}
|
|
|
|
private String mManageMobilePlanMessage;
|
|
private static final String CONNECTED_TO_PROVISIONING_NETWORK_ACTION
|
|
= "com.android.server.connectivityservice.CONNECTED_TO_PROVISIONING_NETWORK_ACTION";
|
|
public void onManageMobilePlanClick() {
|
|
log("onManageMobilePlanClick:");
|
|
mManageMobilePlanMessage = null;
|
|
Resources resources = getActivity().getResources();
|
|
|
|
NetworkInfo ni = mCm.getProvisioningOrActiveNetworkInfo();
|
|
if (mTm.hasIccCard() && (ni != null)) {
|
|
// Check for carrier apps that can handle provisioning first
|
|
Intent provisioningIntent = new Intent(TelephonyIntents.ACTION_CARRIER_SETUP);
|
|
provisioningIntent.addCategory(TelephonyIntents.CATEGORY_MCCMNC_PREFIX
|
|
+ mTm.getSimOperator());
|
|
if (mPm.resolveActivity(provisioningIntent, 0 /* flags */) != null) {
|
|
startActivity(provisioningIntent);
|
|
return;
|
|
}
|
|
|
|
// Get provisioning URL
|
|
String url = mCm.getMobileProvisioningUrl();
|
|
if (!TextUtils.isEmpty(url)) {
|
|
Intent intent = new Intent(CONNECTED_TO_PROVISIONING_NETWORK_ACTION);
|
|
intent.putExtra("EXTRA_URL", url);
|
|
Context context = getActivity().getBaseContext();
|
|
context.sendBroadcast(intent);
|
|
mManageMobilePlanMessage = null;
|
|
} else {
|
|
// No provisioning URL
|
|
String operatorName = mTm.getSimOperatorName();
|
|
if (TextUtils.isEmpty(operatorName)) {
|
|
// Use NetworkOperatorName as second choice in case there is no
|
|
// SPN (Service Provider Name on the SIM). Such as with T-mobile.
|
|
operatorName = mTm.getNetworkOperatorName();
|
|
if (TextUtils.isEmpty(operatorName)) {
|
|
mManageMobilePlanMessage = resources.getString(
|
|
R.string.mobile_unknown_sim_operator);
|
|
} else {
|
|
mManageMobilePlanMessage = resources.getString(
|
|
R.string.mobile_no_provisioning_url, operatorName);
|
|
}
|
|
} else {
|
|
mManageMobilePlanMessage = resources.getString(
|
|
R.string.mobile_no_provisioning_url, operatorName);
|
|
}
|
|
}
|
|
} else if (mTm.hasIccCard() == false) {
|
|
// No sim card
|
|
mManageMobilePlanMessage = resources.getString(R.string.mobile_insert_sim_card);
|
|
} else {
|
|
// NetworkInfo is null, there is no connection
|
|
mManageMobilePlanMessage = resources.getString(R.string.mobile_connect_to_internet);
|
|
}
|
|
if (!TextUtils.isEmpty(mManageMobilePlanMessage)) {
|
|
log("onManageMobilePlanClick: message=" + mManageMobilePlanMessage);
|
|
showDialog(MANAGE_MOBILE_PLAN_DIALOG_ID);
|
|
}
|
|
}
|
|
|
|
private void initSmsApplicationSetting() {
|
|
log("initSmsApplicationSetting:");
|
|
Collection<SmsApplicationData> smsApplications =
|
|
SmsApplication.getApplicationCollection(getActivity());
|
|
|
|
// If the list is empty the dialog will be empty, but we will not crash.
|
|
int count = smsApplications.size();
|
|
String[] packageNames = new String[count];
|
|
int i = 0;
|
|
for (SmsApplicationData smsApplicationData : smsApplications) {
|
|
packageNames[i] = smsApplicationData.mPackageName;
|
|
i++;
|
|
}
|
|
String defaultPackageName = null;
|
|
ComponentName appName = SmsApplication.getDefaultSmsApplication(getActivity(), true);
|
|
if (appName != null) {
|
|
defaultPackageName = appName.getPackageName();
|
|
}
|
|
mSmsApplicationPreference.setPackageNames(packageNames, defaultPackageName);
|
|
}
|
|
|
|
private void initDialerApplicationSetting() {
|
|
log("initDialerApplicationSetting:");
|
|
final List<ComponentName> dialers =
|
|
PhoneApplication.getInstalledPhoneApplications(getActivity());
|
|
|
|
final int count = dialers.size();
|
|
final String[] packageNames = new String[count];
|
|
for (int i = 0; i < count; i++) {
|
|
packageNames[i] = dialers.get(i).getPackageName();
|
|
}
|
|
String defaultPackageName = null;
|
|
final ComponentName appName = PhoneApplication.getDefaultPhoneApplication(getActivity());
|
|
if (appName != null) {
|
|
defaultPackageName = appName.getPackageName();
|
|
}
|
|
mDialerApplicationPreference.setPackageNames(packageNames, defaultPackageName);
|
|
}
|
|
|
|
@Override
|
|
public Dialog onCreateDialog(int dialogId) {
|
|
log("onCreateDialog: dialogId=" + dialogId);
|
|
switch (dialogId) {
|
|
case MANAGE_MOBILE_PLAN_DIALOG_ID:
|
|
return new AlertDialog.Builder(getActivity())
|
|
.setMessage(mManageMobilePlanMessage)
|
|
.setCancelable(false)
|
|
.setPositiveButton(com.android.internal.R.string.ok,
|
|
new DialogInterface.OnClickListener() {
|
|
@Override
|
|
public void onClick(DialogInterface dialog, int id) {
|
|
log("MANAGE_MOBILE_PLAN_DIALOG.onClickListener id=" + id);
|
|
mManageMobilePlanMessage = null;
|
|
}
|
|
})
|
|
.create();
|
|
}
|
|
return super.onCreateDialog(dialogId);
|
|
}
|
|
|
|
private void log(String s) {
|
|
Log.d(TAG, s);
|
|
}
|
|
|
|
public static boolean isRadioAllowed(Context context, String type) {
|
|
if (!AirplaneModeEnabler.isAirplaneModeOn(context)) {
|
|
return true;
|
|
}
|
|
// Here we use the same logic in onCreate().
|
|
String toggleable = Settings.Global.getString(context.getContentResolver(),
|
|
Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
|
|
return toggleable != null && toggleable.contains(type);
|
|
}
|
|
|
|
private boolean isSmsSupported() {
|
|
// Some tablet has sim card but could not do telephony operations. Skip those.
|
|
return mTm.isSmsCapable();
|
|
}
|
|
|
|
private boolean isVoiceCapable() {
|
|
return mTm.isVoiceCapable();
|
|
}
|
|
|
|
@Override
|
|
public void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
if (savedInstanceState != null) {
|
|
mManageMobilePlanMessage = savedInstanceState.getString(SAVED_MANAGE_MOBILE_PLAN_MSG);
|
|
}
|
|
log("onCreate: mManageMobilePlanMessage=" + mManageMobilePlanMessage);
|
|
|
|
mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
mTm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
|
|
mPm = getPackageManager();
|
|
mUm = (UserManager) getSystemService(Context.USER_SERVICE);
|
|
|
|
addPreferencesFromResource(R.xml.wireless_settings);
|
|
|
|
final boolean isSecondaryUser = UserHandle.myUserId() != UserHandle.USER_OWNER;
|
|
|
|
final Activity activity = getActivity();
|
|
mAirplaneModePreference = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE);
|
|
CheckBoxPreference nfc = (CheckBoxPreference) findPreference(KEY_TOGGLE_NFC);
|
|
PreferenceScreen androidBeam = (PreferenceScreen) findPreference(KEY_ANDROID_BEAM_SETTINGS);
|
|
CheckBoxPreference nsd = (CheckBoxPreference) findPreference(KEY_TOGGLE_NSD);
|
|
|
|
mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference);
|
|
mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam);
|
|
|
|
mSmsApplicationPreference = (AppListPreference) findPreference(KEY_SMS_APPLICATION);
|
|
mSmsApplicationPreference.setOnPreferenceChangeListener(this);
|
|
initSmsApplicationSetting();
|
|
|
|
mDialerApplicationPreference = (AppListPreference) findPreference(KEY_PHONE_APPLICATION);
|
|
mDialerApplicationPreference.setOnPreferenceChangeListener(this);
|
|
initDialerApplicationSetting();
|
|
|
|
// Remove NSD checkbox by default
|
|
getPreferenceScreen().removePreference(nsd);
|
|
//mNsdEnabler = new NsdEnabler(activity, nsd);
|
|
|
|
String toggleable = Settings.Global.getString(activity.getContentResolver(),
|
|
Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
|
|
|
|
//enable/disable wimax depending on the value in config.xml
|
|
final boolean isWimaxEnabled = !isSecondaryUser && this.getResources().getBoolean(
|
|
com.android.internal.R.bool.config_wimaxEnabled);
|
|
if (!isWimaxEnabled) {
|
|
PreferenceScreen root = getPreferenceScreen();
|
|
Preference ps = (Preference) findPreference(KEY_WIMAX_SETTINGS);
|
|
if (ps != null) root.removePreference(ps);
|
|
} else {
|
|
if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_WIMAX )
|
|
&& isWimaxEnabled) {
|
|
Preference ps = (Preference) findPreference(KEY_WIMAX_SETTINGS);
|
|
ps.setDependency(KEY_TOGGLE_AIRPLANE);
|
|
}
|
|
}
|
|
protectByRestrictions(KEY_WIMAX_SETTINGS);
|
|
|
|
// Manually set dependencies for Wifi when not toggleable.
|
|
if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_WIFI)) {
|
|
findPreference(KEY_VPN_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE);
|
|
}
|
|
// Disable VPN.
|
|
if (isSecondaryUser || mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN)) {
|
|
removePreference(KEY_VPN_SETTINGS);
|
|
}
|
|
|
|
// Manually set dependencies for Bluetooth when not toggleable.
|
|
if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_BLUETOOTH)) {
|
|
// No bluetooth-dependent items in the list. Code kept in case one is added later.
|
|
}
|
|
|
|
// Manually set dependencies for NFC when not toggleable.
|
|
if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_NFC)) {
|
|
findPreference(KEY_TOGGLE_NFC).setDependency(KEY_TOGGLE_AIRPLANE);
|
|
findPreference(KEY_ANDROID_BEAM_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE);
|
|
}
|
|
|
|
// Remove NFC if not available
|
|
mNfcAdapter = NfcAdapter.getDefaultAdapter(activity);
|
|
if (mNfcAdapter == null) {
|
|
getPreferenceScreen().removePreference(nfc);
|
|
getPreferenceScreen().removePreference(androidBeam);
|
|
mNfcEnabler = null;
|
|
}
|
|
|
|
// Remove Mobile Network Settings and Manage Mobile Plan for secondary users,
|
|
// if it's a wifi-only device, or if the settings are restricted.
|
|
if (isSecondaryUser || Utils.isWifiOnly(getActivity())
|
|
|| mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)) {
|
|
removePreference(KEY_MOBILE_NETWORK_SETTINGS);
|
|
removePreference(KEY_MANAGE_MOBILE_PLAN);
|
|
}
|
|
// Remove Mobile Network Settings and Manage Mobile Plan
|
|
// if config_show_mobile_plan sets false.
|
|
final boolean isMobilePlanEnabled = this.getResources().getBoolean(
|
|
R.bool.config_show_mobile_plan);
|
|
if (!isMobilePlanEnabled) {
|
|
Preference pref = findPreference(KEY_MANAGE_MOBILE_PLAN);
|
|
if (pref != null) {
|
|
removePreference(KEY_MANAGE_MOBILE_PLAN);
|
|
}
|
|
}
|
|
|
|
// Remove SMS Application if the device does not support SMS
|
|
if (!isSmsSupported()) {
|
|
removePreference(KEY_SMS_APPLICATION);
|
|
}
|
|
|
|
// Remove Dialer setting if the device does not support voice
|
|
if (!isVoiceCapable()) {
|
|
removePreference(KEY_PHONE_APPLICATION);
|
|
}
|
|
|
|
// Remove Airplane Mode settings if it's a stationary device such as a TV.
|
|
if (mPm.hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
|
|
removePreference(KEY_TOGGLE_AIRPLANE);
|
|
}
|
|
|
|
// Enable Proxy selector settings if allowed.
|
|
Preference mGlobalProxy = findPreference(KEY_PROXY_SETTINGS);
|
|
final DevicePolicyManager mDPM = (DevicePolicyManager)
|
|
activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
|
|
// proxy UI disabled until we have better app support
|
|
getPreferenceScreen().removePreference(mGlobalProxy);
|
|
mGlobalProxy.setEnabled(mDPM.getGlobalProxyAdmin() == null);
|
|
|
|
// Disable Tethering if it's not allowed or if it's a wifi-only device
|
|
final ConnectivityManager cm =
|
|
(ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
if (isSecondaryUser || !cm.isTetheringSupported()
|
|
|| mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_TETHERING)) {
|
|
getPreferenceScreen().removePreference(findPreference(KEY_TETHER_SETTINGS));
|
|
} else {
|
|
Preference p = findPreference(KEY_TETHER_SETTINGS);
|
|
p.setTitle(Utils.getTetheringLabel(cm));
|
|
}
|
|
|
|
// Enable link to CMAS app settings depending on the value in config.xml.
|
|
boolean isCellBroadcastAppLinkEnabled = this.getResources().getBoolean(
|
|
com.android.internal.R.bool.config_cellBroadcastAppLinks);
|
|
try {
|
|
if (isCellBroadcastAppLinkEnabled) {
|
|
if (mPm.getApplicationEnabledSetting("com.android.cellbroadcastreceiver")
|
|
== PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
|
|
isCellBroadcastAppLinkEnabled = false; // CMAS app disabled
|
|
}
|
|
}
|
|
} catch (IllegalArgumentException ignored) {
|
|
isCellBroadcastAppLinkEnabled = false; // CMAS app not installed
|
|
}
|
|
if (isSecondaryUser || !isCellBroadcastAppLinkEnabled
|
|
|| mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_CELL_BROADCASTS)) {
|
|
PreferenceScreen root = getPreferenceScreen();
|
|
Preference ps = findPreference(KEY_CELL_BROADCAST_SETTINGS);
|
|
if (ps != null) root.removePreference(ps);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onStart() {
|
|
super.onStart();
|
|
|
|
initSmsApplicationSetting();
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
|
|
mAirplaneModeEnabler.resume();
|
|
if (mNfcEnabler != null) {
|
|
mNfcEnabler.resume();
|
|
}
|
|
if (mNsdEnabler != null) {
|
|
mNsdEnabler.resume();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onSaveInstanceState(Bundle outState) {
|
|
super.onSaveInstanceState(outState);
|
|
|
|
if (!TextUtils.isEmpty(mManageMobilePlanMessage)) {
|
|
outState.putString(SAVED_MANAGE_MOBILE_PLAN_MSG, mManageMobilePlanMessage);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onPause() {
|
|
super.onPause();
|
|
|
|
mAirplaneModeEnabler.pause();
|
|
if (mNfcEnabler != null) {
|
|
mNfcEnabler.pause();
|
|
}
|
|
if (mNsdEnabler != null) {
|
|
mNsdEnabler.pause();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
if (requestCode == REQUEST_CODE_EXIT_ECM) {
|
|
Boolean isChoiceYes = data.getBooleanExtra(EXIT_ECM_RESULT, false);
|
|
// Set Airplane mode based on the return value and checkbox state
|
|
mAirplaneModeEnabler.setAirplaneModeInECM(isChoiceYes,
|
|
mAirplaneModePreference.isChecked());
|
|
}
|
|
super.onActivityResult(requestCode, resultCode, data);
|
|
}
|
|
|
|
@Override
|
|
protected int getHelpResource() {
|
|
return R.string.help_url_more_networks;
|
|
}
|
|
|
|
@Override
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
if (preference == mSmsApplicationPreference && newValue != null) {
|
|
SmsApplication.setDefaultApplication(newValue.toString(), getActivity());
|
|
return true;
|
|
} else if (preference == mDialerApplicationPreference && newValue != null) {
|
|
PhoneApplication.setDefaultPhoneApplication(newValue.toString(), getActivity());
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* For Search.
|
|
*/
|
|
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
|
new BaseSearchIndexProvider() {
|
|
@Override
|
|
public List<SearchIndexableResource> getXmlResourcesToIndex(
|
|
Context context, boolean enabled) {
|
|
SearchIndexableResource sir = new SearchIndexableResource(context);
|
|
sir.xmlResId = R.xml.wireless_settings;
|
|
return Arrays.asList(sir);
|
|
}
|
|
|
|
@Override
|
|
public List<String> getNonIndexableKeys(Context context) {
|
|
final ArrayList<String> result = new ArrayList<String>();
|
|
|
|
result.add(KEY_TOGGLE_NSD);
|
|
|
|
final boolean isSecondaryUser = UserHandle.myUserId() != UserHandle.USER_OWNER;
|
|
final boolean isWimaxEnabled = !isSecondaryUser && context.getResources().getBoolean(
|
|
com.android.internal.R.bool.config_wimaxEnabled);
|
|
if (!isWimaxEnabled) {
|
|
result.add(KEY_WIMAX_SETTINGS);
|
|
}
|
|
|
|
if (isSecondaryUser) { // Disable VPN
|
|
result.add(KEY_VPN_SETTINGS);
|
|
}
|
|
|
|
// Remove NFC if not available
|
|
final NfcManager manager = (NfcManager) context.getSystemService(Context.NFC_SERVICE);
|
|
if (manager != null) {
|
|
NfcAdapter adapter = manager.getDefaultAdapter();
|
|
if (adapter == null) {
|
|
result.add(KEY_TOGGLE_NFC);
|
|
result.add(KEY_ANDROID_BEAM_SETTINGS);
|
|
}
|
|
}
|
|
|
|
// Remove Mobile Network Settings and Manage Mobile Plan if it's a wifi-only device.
|
|
if (isSecondaryUser || Utils.isWifiOnly(context)) {
|
|
result.add(KEY_MOBILE_NETWORK_SETTINGS);
|
|
result.add(KEY_MANAGE_MOBILE_PLAN);
|
|
}
|
|
|
|
// Remove Mobile Network Settings and Manage Mobile Plan
|
|
// if config_show_mobile_plan sets false.
|
|
final boolean isMobilePlanEnabled = context.getResources().getBoolean(
|
|
R.bool.config_show_mobile_plan);
|
|
if (!isMobilePlanEnabled) {
|
|
result.add(KEY_MANAGE_MOBILE_PLAN);
|
|
}
|
|
|
|
// Remove SMS Application if the device does not support SMS
|
|
final TelephonyManager tm =
|
|
(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
|
if (!tm.isSmsCapable()) {
|
|
result.add(KEY_SMS_APPLICATION);
|
|
}
|
|
|
|
// Remove Phone Application if the device is not voice capable
|
|
if (!tm.isVoiceCapable()) {
|
|
result.add(KEY_PHONE_APPLICATION);
|
|
}
|
|
|
|
final PackageManager pm = context.getPackageManager();
|
|
|
|
// Remove Airplane Mode settings if it's a stationary device such as a TV.
|
|
if (pm.hasSystemFeature(PackageManager.FEATURE_TELEVISION)) {
|
|
result.add(KEY_TOGGLE_AIRPLANE);
|
|
}
|
|
|
|
// proxy UI disabled until we have better app support
|
|
result.add(KEY_PROXY_SETTINGS);
|
|
|
|
// Disable Tethering if it's not allowed or if it's a wifi-only device
|
|
final ConnectivityManager cm = (ConnectivityManager) context.getSystemService(
|
|
Context.CONNECTIVITY_SERVICE);
|
|
if (isSecondaryUser || !cm.isTetheringSupported()) {
|
|
result.add(KEY_TETHER_SETTINGS);
|
|
}
|
|
|
|
// Enable link to CMAS app settings depending on the value in config.xml.
|
|
boolean isCellBroadcastAppLinkEnabled = context.getResources().getBoolean(
|
|
com.android.internal.R.bool.config_cellBroadcastAppLinks);
|
|
try {
|
|
if (isCellBroadcastAppLinkEnabled) {
|
|
if (pm.getApplicationEnabledSetting("com.android.cellbroadcastreceiver")
|
|
== PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
|
|
isCellBroadcastAppLinkEnabled = false; // CMAS app disabled
|
|
}
|
|
}
|
|
} catch (IllegalArgumentException ignored) {
|
|
isCellBroadcastAppLinkEnabled = false; // CMAS app not installed
|
|
}
|
|
if (isSecondaryUser || !isCellBroadcastAppLinkEnabled) {
|
|
result.add(KEY_CELL_BROADCAST_SETTINGS);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
};
|
|
}
|