Merge "Don\'t show MIDI USB option if not supported"
am: c2a9cd03f7
* commit 'c2a9cd03f71b3b6b0af2f6faaf877fd9c75dd9fe':
Don't show MIDI USB option if not supported
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b003e39..3d538a1 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -671,7 +671,6 @@
android:excludeFromRecents="true">
<intent-filter android:priority="1">
<action android:name="com.android.settings.USER_DICTIONARY_INSERT" />
- <action android:name="com.android.settings.USER_DICTIONARY_EDIT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
@@ -1736,27 +1735,6 @@
<activity android:name=".AppPicker" android:label="@string/select_application"
android:theme="@android:style/Theme.Material.Light.Dialog" />
- <activity android:name="Settings$UsbSettingsActivity"
- android:label="@string/storage_title_usb"
- android:taskAffinity="com.android.settings"
- android:parentActivityName="Settings$StorageSettingsActivity">
- <intent-filter android:priority="1">
- <action android:name="android.settings.STORAGE_USB_SETTINGS" />
- <action android:name="com.android.settings.STORAGE_USB_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.deviceinfo.UsbSettings" />
- <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
- android:resource="@id/storage_settings" />
- <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
- </activity>
-
<!-- Keep compatibility with old shortcuts. -->
<activity-alias android:name="UsbSettings"
android:exported="true"
diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/ApnSettings.java
index 3b3ce2f..fdc0914 100644
--- a/src/com/android/settings/ApnSettings.java
+++ b/src/com/android/settings/ApnSettings.java
@@ -114,6 +114,7 @@
private boolean mUnavailable;
private boolean mHideImsApn;
+ private boolean mAllowAddingApns;
private final BroadcastReceiver mMobileStateReceiver = new BroadcastReceiver() {
@Override
@@ -171,6 +172,7 @@
getSystemService(Context.CARRIER_CONFIG_SERVICE);
PersistableBundle b = configManager.getConfig();
mHideImsApn = b.getBoolean(CarrierConfigManager.KEY_HIDE_IMS_APN_BOOL);
+ mAllowAddingApns = b.getBoolean(CarrierConfigManager.KEY_ALLOW_ADDING_APNS_BOOL);
}
@Override
@@ -235,16 +237,16 @@
final String mccmnc = mSubscriptionInfo == null ? ""
: tm.getSimOperator(mSubscriptionInfo.getSubscriptionId());
Log.d(TAG, "mccmnc = " + mccmnc);
- String where = "numeric=\""
- + mccmnc
- + "\" AND NOT (type='ia' AND (apn=\"\" OR apn IS NULL))";
+ StringBuilder where = new StringBuilder("numeric=\"" + mccmnc +
+ "\" AND NOT (type='ia' AND (apn=\"\" OR apn IS NULL)) AND user_visible!=0");
+
if (mHideImsApn) {
- where = where + " AND NOT (type='ims')";
+ where.append(" AND NOT (type='ims')");
}
Cursor cursor = getContentResolver().query(Telephony.Carriers.CONTENT_URI, new String[] {
- "_id", "name", "apn", "type", "mvno_type", "mvno_match_data"}, where, null,
- Telephony.Carriers.DEFAULT_SORT_ORDER);
+ "_id", "name", "apn", "type", "mvno_type", "mvno_match_data"}, where.toString(),
+ null, Telephony.Carriers.DEFAULT_SORT_ORDER);
if (cursor != null) {
IccRecords r = null;
@@ -326,10 +328,12 @@
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (!mUnavailable) {
- menu.add(0, MENU_NEW, 0,
- getResources().getString(R.string.menu_new))
- .setIcon(android.R.drawable.ic_menu_add)
- .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+ if (mAllowAddingApns) {
+ menu.add(0, MENU_NEW, 0,
+ getResources().getString(R.string.menu_new))
+ .setIcon(android.R.drawable.ic_menu_add)
+ .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+ }
menu.add(0, MENU_RESTORE, 0,
getResources().getString(R.string.menu_restore))
.setIcon(android.R.drawable.ic_menu_upload);
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index 387331b..f00d821 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -1164,6 +1164,7 @@
mCycleAdapter.clear();
final Context context = mCycleSpinner.getContext();
+ NetworkStatsHistory.Entry entry = null;
long historyStart = Long.MAX_VALUE;
long historyEnd = Long.MIN_VALUE;
@@ -1186,9 +1187,20 @@
final long cycleStart = computeLastCycleBoundary(cycleEnd, policy);
Log.d(TAG, "generating cs=" + cycleStart + " to ce=" + cycleEnd + " waiting for hs="
+ historyStart);
- mCycleAdapter.add(new CycleItem(context, cycleStart, cycleEnd));
+
+ final boolean includeCycle;
+ if (mChartData != null) {
+ entry = mChartData.network.getValues(cycleStart, cycleEnd, entry);
+ includeCycle = (entry.rxBytes + entry.txBytes) > 0;
+ } else {
+ includeCycle = true;
+ }
+
+ if (includeCycle) {
+ mCycleAdapter.add(new CycleItem(context, cycleStart, cycleEnd));
+ hasCycles = true;
+ }
cycleEnd = cycleStart;
- hasCycles = true;
}
// one last cycle entry to modify policy cycle day
@@ -1200,7 +1212,18 @@
long cycleEnd = historyEnd;
while (cycleEnd > historyStart) {
final long cycleStart = cycleEnd - (DateUtils.WEEK_IN_MILLIS * 4);
- mCycleAdapter.add(new CycleItem(context, cycleStart, cycleEnd));
+
+ final boolean includeCycle;
+ if (mChartData != null) {
+ entry = mChartData.network.getValues(cycleStart, cycleEnd, entry);
+ includeCycle = (entry.rxBytes + entry.txBytes) > 0;
+ } else {
+ includeCycle = true;
+ }
+
+ if (includeCycle) {
+ mCycleAdapter.add(new CycleItem(context, cycleStart, cycleEnd));
+ }
cycleEnd = cycleStart;
}
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 7a6f165..ed1a970 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -1077,9 +1077,9 @@
boolean hasPreferred = hasPreferredActivities(pm, packageName)
|| hasUsbDefaults(usbManager, packageName);
int status = pm.getIntentVerificationStatus(packageName, UserHandle.myUserId());
+ // consider a visible current link-handling state to be any explicitly designated behavior
boolean hasDomainURLsPreference =
- (status == PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS) ||
- (status == PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER);
+ status != PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
return context.getString(hasPreferred || hasDomainURLsPreference
? R.string.launch_defaults_some
: R.string.launch_defaults_none);
diff --git a/src/com/android/settings/applications/AppLaunchSettings.java b/src/com/android/settings/applications/AppLaunchSettings.java
index c885b02..6c2f241 100644
--- a/src/com/android/settings/applications/AppLaunchSettings.java
+++ b/src/com/android/settings/applications/AppLaunchSettings.java
@@ -17,14 +17,16 @@
package com.android.settings.applications;
import android.app.AlertDialog;
+import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.IntentFilterVerificationInfo;
import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.net.Uri;
import android.os.Bundle;
import android.os.UserHandle;
import android.preference.Preference;
-import android.preference.SwitchPreference;
import android.util.ArraySet;
import android.util.Log;
import android.view.View;
@@ -52,8 +54,17 @@
private static final String KEY_SUPPORTED_DOMAIN_URLS = "app_launch_supported_domain_urls";
private static final String KEY_CLEAR_DEFAULTS = "app_launch_clear_defaults";
+ private static final Intent sBrowserIntent;
+ static {
+ sBrowserIntent = new Intent()
+ .setAction(Intent.ACTION_VIEW)
+ .addCategory(Intent.CATEGORY_BROWSABLE)
+ .setData(Uri.parse("http:"));
+ }
+
private PackageManager mPm;
+ private boolean mIsBrowser;
private boolean mHasDomainUrls;
private DropDownPreference mAppLinkState;
private AppDomainsPreference mAppDomainUrls;
@@ -64,62 +75,91 @@
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.installed_app_launch_settings);
+ mAppDomainUrls = (AppDomainsPreference) findPreference(KEY_SUPPORTED_DOMAIN_URLS);
+ mClearDefaultsPreference = (ClearDefaultsPreference) findPreference(KEY_CLEAR_DEFAULTS);
+ mAppLinkState = (DropDownPreference) findPreference(KEY_APP_LINK_STATE);
mPm = getActivity().getPackageManager();
+ mIsBrowser = isBrowserApp(mPackageName);
mHasDomainUrls =
(mAppEntry.info.privateFlags & ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS) != 0;
- List<IntentFilterVerificationInfo> iviList = mPm.getIntentFilterVerifications(mPackageName);
- List<IntentFilter> filters = mPm.getAllIntentFilters(mPackageName);
-
- mAppDomainUrls = (AppDomainsPreference) findPreference(KEY_SUPPORTED_DOMAIN_URLS);
- CharSequence[] entries = getEntries(mPackageName, iviList, filters);
- mAppDomainUrls.setTitles(entries);
- mAppDomainUrls.setValues(new int[entries.length]);
-
- mClearDefaultsPreference = (ClearDefaultsPreference) findPreference(KEY_CLEAR_DEFAULTS);
-
+ if (!mIsBrowser) {
+ List<IntentFilterVerificationInfo> iviList = mPm.getIntentFilterVerifications(mPackageName);
+ List<IntentFilter> filters = mPm.getAllIntentFilters(mPackageName);
+ CharSequence[] entries = getEntries(mPackageName, iviList, filters);
+ mAppDomainUrls.setTitles(entries);
+ mAppDomainUrls.setValues(new int[entries.length]);
+ }
buildStateDropDown();
}
+ // An app is a "browser" if it has an activity resolution that wound up
+ // marked with the 'handleAllWebDataURI' flag.
+ private boolean isBrowserApp(String packageName) {
+ sBrowserIntent.setPackage(packageName);
+ List<ResolveInfo> list = mPm.queryIntentActivitiesAsUser(sBrowserIntent,
+ PackageManager.MATCH_ALL, UserHandle.myUserId());
+ final int count = list.size();
+ for (int i = 0; i < count; i++) {
+ ResolveInfo info = list.get(i);
+ if (info.activityInfo != null && info.handleAllWebDataURI) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private void buildStateDropDown() {
- mAppLinkState = (DropDownPreference) findPreference(KEY_APP_LINK_STATE);
+ if (mIsBrowser) {
+ // Browsers don't show the app-link prefs
+ mAppLinkState.setShouldDisableView(true);
+ mAppLinkState.setEnabled(false);
+ mAppDomainUrls.setShouldDisableView(true);
+ mAppDomainUrls.setEnabled(false);
+ } else {
+ // Designed order of states in the dropdown:
+ //
+ // * always
+ // * ask
+ // * never
+ mAppLinkState.addItem(R.string.app_link_open_always,
+ INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS);
+ mAppLinkState.addItem(R.string.app_link_open_ask,
+ INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK);
+ mAppLinkState.addItem(R.string.app_link_open_never,
+ INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER);
- // Designed order of states in the dropdown:
- //
- // * always
- // * ask
- // * never
- mAppLinkState.addItem(R.string.app_link_open_always,
- INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS);
- mAppLinkState.addItem(R.string.app_link_open_ask,
- INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK);
- mAppLinkState.addItem(R.string.app_link_open_never,
- INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER);
+ mAppLinkState.setEnabled(mHasDomainUrls);
+ if (mHasDomainUrls) {
+ // Present 'undefined' as 'ask' because the OS treats them identically for
+ // purposes of the UI (and does the right thing around pending domain
+ // verifications that might arrive after the user chooses 'ask' in this UI).
+ final int state = mPm.getIntentVerificationStatus(mPackageName, UserHandle.myUserId());
+ mAppLinkState.setSelectedValue(
+ (state == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED)
+ ? INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK
+ : state);
- mAppLinkState.setEnabled(mHasDomainUrls);
- if (mHasDomainUrls) {
- // Present 'undefined' as 'ask' because the OS treats them identically for
- // purposes of the UI (and does the right thing around pending domain
- // verifications that might arrive after the user chooses 'ask' in this UI).
- final int state = mPm.getIntentVerificationStatus(mPackageName, UserHandle.myUserId());
- mAppLinkState.setSelectedValue(
- (state == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED)
- ? INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK
- : state);
-
- // Set the callback only after setting the initial selected item
- mAppLinkState.setCallback(new Callback() {
- @Override
- public boolean onItemSelected(int pos, Object value) {
- return updateAppLinkState((Integer) value);
- }
- });
+ // Set the callback only after setting the initial selected item
+ mAppLinkState.setCallback(new Callback() {
+ @Override
+ public boolean onItemSelected(int pos, Object value) {
+ return updateAppLinkState((Integer) value);
+ }
+ });
+ }
}
}
private boolean updateAppLinkState(final int newState) {
+ if (mIsBrowser) {
+ // We shouldn't get into this state, but if we do make sure
+ // not to cause any permanent mayhem.
+ return false;
+ }
+
final int userId = UserHandle.myUserId();
final int priorState = mPm.getIntentVerificationStatus(mPackageName, userId);
diff --git a/src/com/android/settings/applications/ClearDefaultsPreference.java b/src/com/android/settings/applications/ClearDefaultsPreference.java
index 8be4be0..bcb6a8a 100644
--- a/src/com/android/settings/applications/ClearDefaultsPreference.java
+++ b/src/com/android/settings/applications/ClearDefaultsPreference.java
@@ -93,9 +93,13 @@
@Override
public void onClick(View v) {
if (mUsbManager != null) {
+ final int userId = UserHandle.myUserId();
mPm.clearPackagePreferredActivities(mPackageName);
+ if (isDefaultBrowser(mPackageName)) {
+ mPm.setDefaultBrowserPackageName(null, userId);
+ }
try {
- mUsbManager.clearDefaults(mPackageName, UserHandle.myUserId());
+ mUsbManager.clearDefaults(mPackageName, userId);
} catch (RemoteException e) {
Log.e(TAG, "mUsbManager.clearDefaults", e);
}
@@ -122,6 +126,7 @@
TextView autoLaunchView = (TextView) mRootView.findViewById(R.id.auto_launch);
boolean autoLaunchEnabled = Utils.hasPreferredActivities(mPm, mPackageName)
+ || isDefaultBrowser(mPackageName)
|| Utils.hasUsbDefaults(mUsbManager, mPackageName);
if (!autoLaunchEnabled && !hasBindAppWidgetPermission) {
resetLaunchDefaultsUi(autoLaunchView);
@@ -165,6 +170,11 @@
return true;
}
+ private boolean isDefaultBrowser(String packageName) {
+ final String defaultBrowser = mPm.getDefaultBrowserPackageName(UserHandle.myUserId());
+ return packageName.equals(defaultBrowser);
+ }
+
private void resetLaunchDefaultsUi(TextView autoLaunchView) {
autoLaunchView.setText(R.string.auto_launch_disable_text);
// Disable clear activities button
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index a6b35df..824cd18 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -704,6 +704,10 @@
* @see android.view.View.OnClickListener#onClick(android.view.View)
*/
public void onClick(View v) {
+ if (mAppEntry == null) {
+ setIntentAndFinish(true, true);
+ return;
+ }
String packageName = mAppEntry.info.packageName;
if(v == mUninstallButton) {
if ((mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
@@ -961,7 +965,6 @@
mPermissionReceiver = null;
final Resources res = getResources();
CharSequence summary = null;
- boolean enabled = false;
if (counts != null) {
int totalCount = counts[1];
int additionalCounts = counts[2];
@@ -970,8 +973,6 @@
summary = res.getString(
R.string.runtime_permissions_summary_no_permissions_requested);
} else {
- enabled = true;
-
final ArrayList<CharSequence> list = new ArrayList(Arrays.asList(groupLabels));
if (additionalCounts > 0) {
// N additional permissions.
@@ -988,7 +989,6 @@
}
}
mPermissionsPreference.setSummary(summary);
- mPermissionsPreference.setEnabled(enabled);
}
};
}
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingRequest.java b/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
index 5b06661..ba1d918 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
@@ -65,8 +65,10 @@
PowerManager powerManager =
(PowerManager)context.getSystemService(Context.POWER_SERVICE);
String deviceAddress = device != null ? device.getAddress() : null;
- if (powerManager.isScreenOn() &&
- LocalBluetoothPreferences.shouldShowDialogInForeground(context, deviceAddress)) {
+ String deviceName = device != null ? device.getName() : null;
+ boolean shouldShowDialog= LocalBluetoothPreferences.shouldShowDialogInForeground(
+ context, deviceAddress, deviceName);
+ if (powerManager.isInteractive() && shouldShowDialog) {
// Since the screen is on and the BT-related activity is in the foreground,
// just open the dialog
context.startActivity(pairingIntent);
diff --git a/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java b/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
index 074e0bd..fc6b876 100644
--- a/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
+++ b/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
@@ -107,6 +107,7 @@
connectionAccessIntent.putExtra(BluetoothDevice.EXTRA_CLASS_NAME, mReturnClass);
String deviceAddress = mDevice != null ? mDevice.getAddress() : null;
+ String deviceName = mDevice != null ? mDevice.getName() : null;
String title = null;
String message = null;
PowerManager powerManager =
@@ -114,7 +115,7 @@
if (powerManager.isScreenOn()
&& LocalBluetoothPreferences.shouldShowDialogInForeground(
- context, deviceAddress)) {
+ context, deviceAddress, deviceName)) {
context.startActivity(connectionAccessIntent);
} else {
// Acquire wakelock so that LCD comes up since screen is off
@@ -134,27 +135,27 @@
deleteIntent.putExtra(BluetoothDevice.EXTRA_CONNECTION_ACCESS_RESULT,
BluetoothDevice.CONNECTION_ACCESS_NO);
deleteIntent.putExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE, mRequestType);
- String deviceName = mDevice != null ? mDevice.getAliasName() : null;
+ String deviceAlias = mDevice != null ? mDevice.getAliasName() : null;
switch (mRequestType) {
case BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS:
title = context.getString(R.string.bluetooth_phonebook_request);
message = context.getString(R.string.bluetooth_pb_acceptance_dialog_text,
- deviceName, deviceName);
+ deviceAlias, deviceAlias);
break;
case BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS:
title = context.getString(R.string.bluetooth_map_request);
message = context.getString(R.string.bluetooth_map_acceptance_dialog_text,
- deviceName, deviceName);
+ deviceAlias, deviceAlias);
break;
case BluetoothDevice.REQUEST_TYPE_SIM_ACCESS:
title = context.getString(R.string.bluetooth_sap_request);
message = context.getString(R.string.bluetooth_sap_acceptance_dialog_text,
- deviceName, deviceName);
+ deviceAlias, deviceAlias);
break;
default:
title = context.getString(R.string.bluetooth_connection_permission_request);
message = context.getString(R.string.bluetooth_connection_dialog_text,
- deviceName, deviceName);
+ deviceAlias, deviceAlias);
break;
}
Notification notification = new Notification.Builder(context)
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothPreferences.java b/src/com/android/settings/bluetooth/LocalBluetoothPreferences.java
index 9f2553f..401b13c 100644
--- a/src/com/android/settings/bluetooth/LocalBluetoothPreferences.java
+++ b/src/com/android/settings/bluetooth/LocalBluetoothPreferences.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
+import android.text.TextUtils;
import android.util.Log;
import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
@@ -62,10 +63,10 @@
}
static boolean shouldShowDialogInForeground(Context context,
- String deviceAddress) {
+ String deviceAddress, String deviceName) {
LocalBluetoothManager manager = Utils.getLocalBtManager(context);
if (manager == null) {
- if(DEBUG) Log.v(TAG, "manager == null - do not show dialog.");
+ if (DEBUG) Log.v(TAG, "manager == null - do not show dialog.");
return false;
}
@@ -115,6 +116,18 @@
}
}
}
+
+
+ if (!TextUtils.isEmpty(deviceName)) {
+ // If the device is a custom BT keyboard specifically for this device
+ String packagedKeyboardName = context.getString(
+ com.android.internal.R.string.config_packagedKeyboardName);
+ if (deviceName.equals(packagedKeyboardName)) {
+ if (DEBUG) Log.v(TAG, "showing dialog for packaged keyboard");
+ return true;
+ }
+ }
+
if (DEBUG) Log.v(TAG, "Found no reason to show the dialog - do not show dialog.");
return false;
}
diff --git a/src/com/android/settings/deviceinfo/Status.java b/src/com/android/settings/deviceinfo/Status.java
index b86f9c6..b52a0ad 100644
--- a/src/com/android/settings/deviceinfo/Status.java
+++ b/src/com/android/settings/deviceinfo/Status.java
@@ -205,8 +205,10 @@
removePreferenceFromScreen(KEY_SERIAL_NUMBER);
}
- //Remove SimStatus and Imei for Secondary user as it access Phone b/19165700
- if (UserHandle.myUserId() != UserHandle.USER_OWNER) {
+ // Remove SimStatus and Imei for Secondary user as it access Phone b/19165700
+ // Also remove on Wi-Fi only devices.
+ if (UserHandle.myUserId() != UserHandle.USER_OWNER
+ || Utils.isWifiOnly(this)) {
removePreferenceFromScreen(KEY_SIM_STATUS);
removePreferenceFromScreen(KEY_IMEI_INFO);
}
diff --git a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
index 6f89ff5..6f73ecd 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
@@ -137,6 +137,10 @@
@Override
protected void onPostExecute(Exception e) {
final StorageWizardFormatProgress activity = mActivity;
+ if (activity.isDestroyed()) {
+ return;
+ }
+
if (e != null) {
Log.e(TAG, "Failed to partition", e);
Toast.makeText(activity, e.getMessage(), Toast.LENGTH_LONG).show();
diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java
index 2901673..587f41c 100644
--- a/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java
+++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java
@@ -56,7 +56,10 @@
// The following will get the EXTRA_WORD and EXTRA_LOCALE fields that are in the intent.
// We do need to add the action by hand, because UserDictionaryAddWordContents expects
// it to be in the bundle, in the EXTRA_MODE key.
- final Bundle args = intent.getExtras();
+ Bundle args = intent.getExtras();
+ if (args == null) {
+ args = new Bundle();
+ }
args.putInt(UserDictionaryAddWordContents.EXTRA_MODE, mode);
if (null != savedInstanceState) {
@@ -74,6 +77,7 @@
private void reportBackToCaller(final int resultCode, final Bundle result) {
final Intent senderIntent = getIntent();
+ if (senderIntent.getExtras() == null) return;
final Object listener = senderIntent.getExtras().get("listener");
if (!(listener instanceof Messenger)) return; // This will work if listener is null too.
final Messenger messenger = (Messenger)listener;
diff --git a/src/com/android/settings/vpn2/ConfigDialogFragment.java b/src/com/android/settings/vpn2/ConfigDialogFragment.java
index 80f9fcd..a6189a9 100644
--- a/src/com/android/settings/vpn2/ConfigDialogFragment.java
+++ b/src/com/android/settings/vpn2/ConfigDialogFragment.java
@@ -16,6 +16,8 @@
package com.android.settings.vpn2;
+import java.util.Arrays;
+
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
@@ -123,7 +125,18 @@
disconnect(profile);
// Delete from KeyStore
- KeyStore.getInstance().delete(Credentials.VPN + profile.key, KeyStore.UID_SELF);
+ KeyStore keyStore = KeyStore.getInstance();
+ keyStore.delete(Credentials.VPN + profile.key, KeyStore.UID_SELF);
+
+ // If this was the current lockdown VPN, clear it.
+ if (Arrays.equals(profile.key.getBytes(), keyStore.get(Credentials.LOCKDOWN_VPN))) {
+ keyStore.delete(Credentials.LOCKDOWN_VPN);
+ try {
+ mService.updateLockdownVpn();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to clear lockdown VPN configuration");
+ }
+ }
}
dismiss();
}
diff --git a/src/com/android/settings/widget/ChartDataUsageView.java b/src/com/android/settings/widget/ChartDataUsageView.java
index cc9acd6..6fb805b 100644
--- a/src/com/android/settings/widget/ChartDataUsageView.java
+++ b/src/com/android/settings/widget/ChartDataUsageView.java
@@ -22,6 +22,7 @@
import android.content.res.Resources;
import android.net.NetworkPolicy;
import android.net.NetworkStatsHistory;
+import android.net.TrafficStats;
import android.os.Handler;
import android.os.Message;
import android.text.Spannable;
@@ -33,6 +34,7 @@
import android.text.format.Time;
import android.util.AttributeSet;
import android.util.Log;
+import android.util.MathUtils;
import android.view.MotionEvent;
import android.view.View;
@@ -535,6 +537,7 @@
@Override
public long buildLabel(Resources res, SpannableStringBuilder builder, long value) {
+ value = MathUtils.constrain(value, 0, TrafficStats.TB_IN_BYTES);
final BytesResult result = Formatter.formatBytes(res, value,
Formatter.FLAG_SHORTER | Formatter.FLAG_CALCULATE_ROUNDED);
setText(builder, sSpanSize, result.value, "^1");