Merge "Fix memory leak in ApnSettings-activity"
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index c6fc4d4..3f5b978 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -771,6 +771,7 @@
<string name="sd_format" product="default" msgid="2576054280507119870">"格式化 SD 卡"</string>
<string name="sd_format_summary" product="nosdcard" msgid="6331905044907914603">"清除内部 USB 存储设备中的全部数据,例如音乐和照片"</string>
<string name="sd_format_summary" product="default" msgid="212703692181793109">"清除 SD 卡中的全部数据,例如音乐和照片"</string>
+ <string name="mtp_ptp_mode_summary">正在使用媒体设备(MTP)或相机(PTP)传输模式</string>
<string name="read_only" msgid="6702420168629076340">" (只读)"</string>
<string name="dlg_confirm_unmount_title" product="nosdcard" msgid="3077285629197874055">"要卸载 USB 存储设备吗?"</string>
<string name="dlg_confirm_unmount_title" product="default" msgid="3634502237262534381">"要卸载 SD 卡吗?"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5a774f0..e9121fc 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1433,6 +1433,8 @@
<string name="wifi_p2p_menu_rename">Rename device</string>
<!-- Title for available p2p devices -->
<string name="wifi_p2p_peer_devices">Peer devices</string>
+ <!-- Title for remembered p2p groups -->
+ <string name="wifi_p2p_remembered_groups">Remembered groups</string>
<!-- Toast text for a failed connection initiation -->
<string name="wifi_p2p_failed_connect_message">Couldn\'t connect.</string>
<!-- Message text for failure to rename -->
@@ -1447,6 +1449,10 @@
<string name="wifi_p2p_cancel_connect_title">Cancel invitation?</string>
<!-- Message text for disconnection from one device-->
<string name="wifi_p2p_cancel_connect_message">Do you want to cancel invitation to connect with <xliff:g id="peer_name">%1$s</xliff:g>?</string>
+ <!-- Title for delete group dialog -->
+ <string name="wifi_p2p_delete_group_title">Delete group?</string>
+ <!-- Message text for remembered group deletion-->
+ <string name="wifi_p2p_delete_group_message">Do you want to delete the group <xliff:g id="group_name">%1$s</xliff:g>?</string>
<!-- Wifi AP settings-->
<!-- Label for wifi tether checkbox. Toggles Access Point on/off -->
@@ -1898,6 +1904,10 @@
<!-- SD card & phone storage settings item title that will result in the phone unmounting the SD card. [CHAR LIMIT=80] -->
<string name="sd_format_summary" product="default">Erases all data on the SD card, such as music and photos</string>
<!-- SD card status when it is mounted as read only. Will be appended to size, starts with an unbreakable space -->
+
+ <!-- SD card & phone storage settings item summary that will result in the phone connected to PC and MTP/PTP enabled. [CHAR LIMIT=80] -->
+ <string name="mtp_ptp_mode_summary">MTP or PTP function is active</string>
+
<string name="read_only">\u0020(Read-only)</string>
<!-- SD card eject confirmation dialog title [CHAR LIMIT=25] -->
<string name="dlg_confirm_unmount_title" product="nosdcard">Unmount USB storage?</string>
diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java
index 6167f78..8cb04cc 100644
--- a/src/com/android/settings/AccessibilitySettings.java
+++ b/src/com/android/settings/AccessibilitySettings.java
@@ -179,9 +179,9 @@
super.onResume();
loadInstalledServices();
updateAllPreferences();
- if (mServicesCategory.getPreference(0) == mNoServicesMessagePreference) {
- offerInstallAccessibilitySerivceOnce();
- }
+
+ offerInstallAccessibilitySerivceOnce();
+
mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false);
RotationPolicy.registerRotationPolicyListener(getActivity(),
mRotationPolicyListener);
@@ -465,6 +465,17 @@
final boolean offerInstallService = !preferences.getBoolean(
KEY_INSTALL_ACCESSIBILITY_SERVICE_OFFERED_ONCE, false);
if (offerInstallService) {
+ String screenreaderMarketLink = SystemProperties.get(
+ SYSTEM_PROPERTY_MARKET_URL,
+ DEFAULT_SCREENREADER_MARKET_LINK);
+ Uri marketUri = Uri.parse(screenreaderMarketLink);
+ Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri);
+
+ if (getPackageManager().resolveActivity(marketIntent, 0) == null) {
+ // Don't show the dialog if no market app is found/installed.
+ return;
+ }
+
preferences.edit().putBoolean(KEY_INSTALL_ACCESSIBILITY_SERVICE_OFFERED_ONCE,
true).commit();
// Notify user that they do not have any accessibility
@@ -766,7 +777,7 @@
}
return new AlertDialog.Builder(getActivity())
.setTitle(title)
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(message)
.setCancelable(true)
.setPositiveButton(android.R.string.ok, this)
diff --git a/src/com/android/settings/ApnEditor.java b/src/com/android/settings/ApnEditor.java
index bca521b..79b6d15 100644
--- a/src/com/android/settings/ApnEditor.java
+++ b/src/com/android/settings/ApnEditor.java
@@ -167,15 +167,7 @@
mProtocol.setOnPreferenceChangeListener(this);
mRoamingProtocol = (ListPreference) findPreference(KEY_ROAMING_PROTOCOL);
- // Only enable this on CDMA phones for now, since it may cause problems on other phone
- // types. (This screen is not normally accessible on CDMA phones, but is useful for
- // testing.)
- TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
- if (tm.getCurrentPhoneType() == PhoneConstants.PHONE_TYPE_CDMA) {
- mRoamingProtocol.setOnPreferenceChangeListener(this);
- } else {
- getPreferenceScreen().removePreference(mRoamingProtocol);
- }
+ mRoamingProtocol.setOnPreferenceChangeListener(this);
mCarrierEnabled = (CheckBoxPreference) findPreference(KEY_CARRIER_ENABLED);
diff --git a/src/com/android/settings/BandMode.java b/src/com/android/settings/BandMode.java
index 4c7663e..0a0f77f 100644
--- a/src/com/android/settings/BandMode.java
+++ b/src/com/android/settings/BandMode.java
@@ -207,7 +207,9 @@
Window.FEATURE_INDETERMINATE_PROGRESS,
Window.PROGRESS_VISIBILITY_OFF);
- displayBandSelectionResult(ar.exception);
+ if (!isFinishing()) {
+ displayBandSelectionResult(ar.exception);
+ }
break;
}
}
diff --git a/src/com/android/settings/CredentialStorage.java b/src/com/android/settings/CredentialStorage.java
index c12d06c..07b1776 100644
--- a/src/com/android/settings/CredentialStorage.java
+++ b/src/com/android/settings/CredentialStorage.java
@@ -235,7 +235,7 @@
private ResetDialog() {
AlertDialog dialog = new AlertDialog.Builder(CredentialStorage.this)
.setTitle(android.R.string.dialog_alert_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(R.string.credentials_reset_hint)
.setPositiveButton(android.R.string.ok, this)
.setNegativeButton(android.R.string.cancel, this)
@@ -305,7 +305,7 @@
private ConfigureKeyGuardDialog() {
AlertDialog dialog = new AlertDialog.Builder(CredentialStorage.this)
.setTitle(android.R.string.dialog_alert_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(R.string.credentials_configure_lock_screen_hint)
.setPositiveButton(android.R.string.ok, this)
.setNegativeButton(android.R.string.cancel, this)
diff --git a/src/com/android/settings/CryptKeeperSettings.java b/src/com/android/settings/CryptKeeperSettings.java
index ce3ad9d..d0043e6 100644
--- a/src/com/android/settings/CryptKeeperSettings.java
+++ b/src/com/android/settings/CryptKeeperSettings.java
@@ -91,7 +91,7 @@
// TODO replace (or follow) this dialog with an explicit launch into password UI
new AlertDialog.Builder(getActivity())
.setTitle(R.string.crypt_keeper_dialog_need_password_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(R.string.crypt_keeper_dialog_need_password_message)
.setPositiveButton(android.R.string.ok, null)
.create()
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index f5789ae..46ffe83 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -757,7 +757,7 @@
getActivity().getResources().getString(
R.string.dev_settings_warning_message))
.setTitle(R.string.dev_settings_warning_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setPositiveButton(android.R.string.yes, this)
.setNegativeButton(android.R.string.no, this)
.show();
@@ -800,7 +800,7 @@
mAdbDialog = new AlertDialog.Builder(getActivity()).setMessage(
getActivity().getResources().getString(R.string.adb_warning_message))
.setTitle(R.string.adb_warning_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setPositiveButton(android.R.string.yes, this)
.setNegativeButton(android.R.string.no, this)
.show();
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index 755be83..ab12587 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -348,7 +348,8 @@
// reset dialog state. Else inject error message and show dialog again.
Message callback = Message.obtain(mHandler, MSG_ENABLE_ICC_PIN_COMPLETE);
mPhone.getIccCard().setIccLockEnabled(mToState, mPin, callback);
-
+ // Disable the setting till the response is received.
+ mPinToggle.setEnabled(false);
}
private void iccLockChanged(boolean success) {
@@ -358,6 +359,7 @@
Toast.makeText(this, mRes.getString(R.string.sim_lock_failed), Toast.LENGTH_SHORT)
.show();
}
+ mPinToggle.setEnabled(true);
resetDialogState();
}
diff --git a/src/com/android/settings/PrivacySettings.java b/src/com/android/settings/PrivacySettings.java
index e2433bd..d936f46 100644
--- a/src/com/android/settings/PrivacySettings.java
+++ b/src/com/android/settings/PrivacySettings.java
@@ -119,7 +119,7 @@
// TODO: DialogFragment?
mConfirmDialog = new AlertDialog.Builder(getActivity()).setMessage(msg)
.setTitle(R.string.backup_erase_dialog_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setPositiveButton(android.R.string.ok, this)
.setNegativeButton(android.R.string.cancel, this)
.show();
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 77a72a7..4a79eca 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -493,8 +493,8 @@
private void setUsbTethering(boolean enabled) {
ConnectivityManager cm =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
+ mUsbTether.setChecked(false);
if (cm.setUsbTethering(enabled) != ConnectivityManager.TETHER_ERROR_NO_ERROR) {
- mUsbTether.setChecked(false);
mUsbTether.setSummary(R.string.usb_tethering_errored_subtext);
return;
}
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index d85c341..7fe3711 100644
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -815,7 +815,7 @@
case DLG_CLEAR_DATA:
return new AlertDialog.Builder(getActivity())
.setTitle(getActivity().getText(R.string.clear_data_dlg_title))
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(getActivity().getText(R.string.clear_data_dlg_text))
.setPositiveButton(R.string.dlg_ok,
new DialogInterface.OnClickListener() {
@@ -829,7 +829,7 @@
case DLG_FACTORY_RESET:
return new AlertDialog.Builder(getActivity())
.setTitle(getActivity().getText(R.string.app_factory_reset_dlg_title))
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(getActivity().getText(R.string.app_factory_reset_dlg_text))
.setPositiveButton(R.string.dlg_ok,
new DialogInterface.OnClickListener() {
@@ -843,7 +843,7 @@
case DLG_APP_NOT_FOUND:
return new AlertDialog.Builder(getActivity())
.setTitle(getActivity().getText(R.string.app_not_found_dlg_title))
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(getActivity().getText(R.string.app_not_found_dlg_title))
.setNeutralButton(getActivity().getText(R.string.dlg_ok),
new DialogInterface.OnClickListener() {
@@ -856,7 +856,7 @@
case DLG_CANNOT_CLEAR_DATA:
return new AlertDialog.Builder(getActivity())
.setTitle(getActivity().getText(R.string.clear_failed_dlg_title))
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(getActivity().getText(R.string.clear_failed_dlg_text))
.setNeutralButton(R.string.dlg_ok,
new DialogInterface.OnClickListener() {
@@ -870,7 +870,7 @@
case DLG_FORCE_STOP:
return new AlertDialog.Builder(getActivity())
.setTitle(getActivity().getText(R.string.force_stop_dlg_title))
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(getActivity().getText(R.string.force_stop_dlg_text))
.setPositiveButton(R.string.dlg_ok,
new DialogInterface.OnClickListener() {
@@ -886,14 +886,14 @@
getOwner().getMoveErrMsg(moveErrorCode));
return new AlertDialog.Builder(getActivity())
.setTitle(getActivity().getText(R.string.move_app_failed_dlg_title))
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(msg)
.setNeutralButton(R.string.dlg_ok, null)
.create();
case DLG_DISABLE:
return new AlertDialog.Builder(getActivity())
.setTitle(getActivity().getText(R.string.app_disable_dlg_title))
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(getActivity().getText(R.string.app_disable_dlg_text))
.setPositiveButton(R.string.dlg_ok,
new DialogInterface.OnClickListener() {
@@ -909,7 +909,7 @@
case DLG_DISABLE_NOTIFICATIONS:
return new AlertDialog.Builder(getActivity())
.setTitle(getActivity().getText(R.string.app_disable_notifications_dlg_title))
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(getActivity().getText(R.string.app_disable_notifications_dlg_text))
.setPositiveButton(R.string.dlg_ok,
new DialogInterface.OnClickListener() {
diff --git a/src/com/android/settings/applications/RunningServiceDetails.java b/src/com/android/settings/applications/RunningServiceDetails.java
index f91abd6..2087f21 100644
--- a/src/com/android/settings/applications/RunningServiceDetails.java
+++ b/src/com/android/settings/applications/RunningServiceDetails.java
@@ -507,7 +507,7 @@
return new AlertDialog.Builder(getActivity())
.setTitle(getActivity().getString(R.string.runningservicedetails_stop_dlg_title))
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(getActivity().getString(R.string.runningservicedetails_stop_dlg_text))
.setPositiveButton(R.string.dlg_ok,
new DialogInterface.OnClickListener() {
diff --git a/src/com/android/settings/bluetooth/Utils.java b/src/com/android/settings/bluetooth/Utils.java
index 01e72e0..fb44d5a 100755
--- a/src/com/android/settings/bluetooth/Utils.java
+++ b/src/com/android/settings/bluetooth/Utils.java
@@ -93,7 +93,7 @@
Context activity = manager.getForegroundActivity();
if(manager.isForegroundActivity()) {
new AlertDialog.Builder(activity)
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setTitle(R.string.bluetooth_error_title)
.setMessage(message)
.setPositiveButton(android.R.string.ok, null)
diff --git a/src/com/android/settings/deviceinfo/Memory.java b/src/com/android/settings/deviceinfo/Memory.java
index cb344bf..f1c7fbe 100644
--- a/src/com/android/settings/deviceinfo/Memory.java
+++ b/src/com/android/settings/deviceinfo/Memory.java
@@ -24,6 +24,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
+import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
@@ -57,14 +58,16 @@
// The mountToggle Preference that has last been clicked.
// Assumes no two successive unmount event on 2 different volumes are performed before the first
// one's preference is disabled
- private Preference mLastClickedMountToggle;
- private String mClickedMountPoint;
+ private static Preference mLastClickedMountToggle;
+ private static String mClickedMountPoint;
// Access using getMountService()
private IMountService mMountService = null;
private StorageManager mStorageManager = null;
+ private UsbManager mUsbManager = null;
+
private StorageVolumePreferenceCategory mInternalStorageVolumePreferenceCategory;
private StorageVolumePreferenceCategory[] mStorageVolumePreferenceCategories;
@@ -72,6 +75,8 @@
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ mUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE);
+
if (mStorageManager == null) {
mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
mStorageManager.registerListener(mStorageListener);
@@ -119,6 +124,10 @@
intentFilter.addDataScheme("file");
getActivity().registerReceiver(mMediaScannerReceiver, intentFilter);
+ intentFilter = new IntentFilter();
+ intentFilter.addAction(UsbManager.ACTION_USB_STATE);
+ getActivity().registerReceiver(mMediaScannerReceiver, intentFilter);
+
if (mInternalStorageVolumePreferenceCategory != null) {
mInternalStorageVolumePreferenceCategory.onResume();
}
@@ -237,9 +246,18 @@
private final BroadcastReceiver mMediaScannerReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- // mInternalStorageVolumePreferenceCategory is not affected by the media scanner
- for (int i = 0; i < mStorageVolumePreferenceCategories.length; i++) {
- mStorageVolumePreferenceCategories[i].onMediaScannerFinished();
+ String action = intent.getAction();
+ if (action.equals(UsbManager.ACTION_USB_STATE)) {
+ boolean isUsbConnected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false);
+ String usbFunction = mUsbManager.getDefaultFunction();
+ for (int i = 0; i < mStorageVolumePreferenceCategories.length; i++) {
+ mStorageVolumePreferenceCategories[i].onUsbStateChanged(isUsbConnected, usbFunction);
+ }
+ } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
+ // mInternalStorageVolumePreferenceCategory is not affected by the media scanner
+ for (int i = 0; i < mStorageVolumePreferenceCategories.length; i++) {
+ mStorageVolumePreferenceCategories[i].onMediaScannerFinished();
+ }
}
}
};
diff --git a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
index 0211c77..156184a 100644
--- a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
+++ b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
@@ -24,6 +24,7 @@
import android.content.res.Resources;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RectShape;
+import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
@@ -69,6 +70,9 @@
private boolean mAllowFormat;
+ private boolean mUsbConnected;
+ private String mUsbFunction;
+
static class CategoryInfo {
final int mTitle;
final int mColor;
@@ -305,6 +309,23 @@
removePreference(mFormatPreference);
}
}
+
+ if (mUsbConnected && (UsbManager.USB_FUNCTION_MTP.equals(mUsbFunction) ||
+ UsbManager.USB_FUNCTION_PTP.equals(mUsbFunction))) {
+ mMountTogglePreference.setEnabled(false);
+ if (Environment.MEDIA_MOUNTED.equals(state)) {
+ mMountTogglePreference.setSummary(mResources.getString(R.string.mtp_ptp_mode_summary));
+ }
+
+ if (mFormatPreference != null) {
+ mFormatPreference.setEnabled(false);
+ mFormatPreference.setSummary(mResources.getString(R.string.mtp_ptp_mode_summary));
+ }
+ } else if (mFormatPreference != null) {
+ mFormatPreference.setEnabled(true);
+ mFormatPreference.setSummary(mResources.getString(R.string.sd_format_summary));
+ }
+
}
public void updateApproximate(long totalSize, long availSize) {
@@ -376,6 +397,11 @@
measure();
}
+ public void onUsbStateChanged(boolean isUsbConnected, String usbFunction) {
+ mUsbConnected = isUsbConnected;
+ mUsbFunction = usbFunction;
+ measure();
+ }
public void onMediaScannerFinished() {
measure();
}
diff --git a/src/com/android/settings/deviceinfo/UsbSettings.java b/src/com/android/settings/deviceinfo/UsbSettings.java
index af279e8..b8290fc 100644
--- a/src/com/android/settings/deviceinfo/UsbSettings.java
+++ b/src/com/android/settings/deviceinfo/UsbSettings.java
@@ -49,9 +49,15 @@
private UsbManager mUsbManager;
private CheckBoxPreference mMtp;
private CheckBoxPreference mPtp;
+ private boolean mUsbAccessoryMode;
private final BroadcastReceiver mStateReceiver = new BroadcastReceiver() {
public void onReceive(Context content, Intent intent) {
+ String action = intent.getAction();
+ if (action.equals(UsbManager.ACTION_USB_STATE)) {
+ mUsbAccessoryMode = intent.getBooleanExtra(UsbManager.USB_FUNCTION_ACCESSORY, false);
+ Log.e(TAG, "UsbAccessoryMode " + mUsbAccessoryMode);
+ }
updateToggles(mUsbManager.getDefaultFunction());
}
};
@@ -106,6 +112,18 @@
mMtp.setChecked(false);
mPtp.setChecked(false);
}
+
+ if (!mUsbAccessoryMode) {
+ //Enable MTP and PTP switch while USB is not in Accessory Mode, otherwise disable it
+ Log.e(TAG, "USB Normal Mode");
+ mMtp.setEnabled(true);
+ mPtp.setEnabled(true);
+ } else {
+ Log.e(TAG, "USB Accessory Mode");
+ mMtp.setEnabled(false);
+ mPtp.setEnabled(false);
+ }
+
}
@Override
diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
index ea3ddf4..13f4435 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
@@ -155,7 +155,7 @@
if (mDialog == null) {
mDialog = (new AlertDialog.Builder(getActivity()))
.setTitle(android.R.string.dialog_alert_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setCancelable(true)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
diff --git a/src/com/android/settings/inputmethod/InputMethodPreference.java b/src/com/android/settings/inputmethod/InputMethodPreference.java
index f555d21..103481e 100644
--- a/src/com/android/settings/inputmethod/InputMethodPreference.java
+++ b/src/com/android/settings/inputmethod/InputMethodPreference.java
@@ -253,7 +253,7 @@
}
mDialog = (new AlertDialog.Builder(mFragment.getActivity()))
.setTitle(android.R.string.dialog_alert_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setCancelable(true)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
diff --git a/src/com/android/settings/inputmethod/SpellCheckersSettings.java b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
index d3e5181..8b1b867 100644
--- a/src/com/android/settings/inputmethod/SpellCheckersSettings.java
+++ b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
@@ -122,7 +122,7 @@
}
mDialog = (new AlertDialog.Builder(getActivity()))
.setTitle(android.R.string.dialog_alert_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setCancelable(true)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
diff --git a/src/com/android/settings/quicklaunch/QuickLaunchSettings.java b/src/com/android/settings/quicklaunch/QuickLaunchSettings.java
index 47fa34a..5654323 100644
--- a/src/com/android/settings/quicklaunch/QuickLaunchSettings.java
+++ b/src/com/android/settings/quicklaunch/QuickLaunchSettings.java
@@ -144,7 +144,7 @@
// Create the dialog for clearing a shortcut
return new AlertDialog.Builder(this)
.setTitle(getString(R.string.quick_launch_clear_dialog_title))
- .setIcon(android.R.drawable.ic_dialog_alert)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(getString(R.string.quick_launch_clear_dialog_message,
mClearDialogShortcut, mClearDialogBookmarkTitle))
.setPositiveButton(R.string.quick_launch_clear_ok_button, this)
diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java
index fbcdb4f..603d028 100644
--- a/src/com/android/settings/tts/TextToSpeechSettings.java
+++ b/src/com/android/settings/tts/TextToSpeechSettings.java
@@ -329,7 +329,7 @@
Log.i(TAG, "Displaying data alert for :" + key);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(android.R.string.dialog_alert_title);
- builder.setIcon(android.R.drawable.ic_dialog_alert);
+ builder.setIconAttribute(android.R.attr.alertDialogIcon);
builder.setMessage(getActivity().getString(
R.string.tts_engine_security_warning, mEnginesHelper.getEngineInfo(key).label));
builder.setCancelable(true);
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pPersistentGroup.java b/src/com/android/settings/wifi/p2p/WifiP2pPersistentGroup.java
new file mode 100644
index 0000000..d982653
--- /dev/null
+++ b/src/com/android/settings/wifi/p2p/WifiP2pPersistentGroup.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2012 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.wifi.p2p;
+
+import android.content.Context;
+import android.net.wifi.p2p.WifiP2pGroup;
+import android.preference.Preference;
+import android.view.View;
+
+public class WifiP2pPersistentGroup extends Preference {
+
+ public WifiP2pGroup mGroup;
+
+ public WifiP2pPersistentGroup(Context context, WifiP2pGroup group) {
+ super(context);
+ mGroup = group;
+ }
+
+ @Override
+ protected void onBindView(View view) {
+ setTitle(mGroup.getNetworkName());
+ super.onBindView(view);
+ }
+
+ int getNetworkId() {
+ return mGroup.getNetworkId();
+ }
+
+ String getGroupName() {
+ return mGroup.getNetworkName();
+ }
+}
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index 684ec30..1bb253a 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -30,8 +30,12 @@
import android.net.wifi.p2p.WifiP2pConfig;
import android.net.wifi.p2p.WifiP2pDevice;
import android.net.wifi.p2p.WifiP2pDeviceList;
+import android.net.wifi.p2p.WifiP2pGroup;
+import android.net.wifi.p2p.WifiP2pGroupList;
import android.net.wifi.p2p.WifiP2pManager;
+import android.net.wifi.p2p.WifiP2pManager.GroupInfoListener;
import android.net.wifi.p2p.WifiP2pManager.PeerListListener;
+import android.net.wifi.p2p.WifiP2pManager.PersistentGroupInfoListener;
import android.net.wifi.WpsInfo;
import android.os.Bundle;
import android.os.Handler;
@@ -62,7 +66,7 @@
* Displays Wi-fi p2p settings UI
*/
public class WifiP2pSettings extends SettingsPreferenceFragment
- implements PeerListListener {
+ implements PeerListListener, PersistentGroupInfoListener, GroupInfoListener {
private static final String TAG = "WifiP2pSettings";
private static final boolean DBG = false;
@@ -75,19 +79,24 @@
private OnClickListener mRenameListener;
private OnClickListener mDisconnectListener;
private OnClickListener mCancelConnectListener;
+ private OnClickListener mDeleteGroupListener;
private WifiP2pPeer mSelectedWifiPeer;
+ private WifiP2pPersistentGroup mSelectedGroup;
private EditText mDeviceNameText;
private boolean mWifiP2pEnabled;
private boolean mWifiP2pSearching;
private int mConnectedDevices;
+ private WifiP2pGroup mConnectedGroup;
private PreferenceGroup mPeersGroup;
+ private PreferenceGroup mPersistentGroup;
private Preference mThisDevicePref;
private static final int DIALOG_DISCONNECT = 1;
private static final int DIALOG_CANCEL_CONNECT = 2;
private static final int DIALOG_RENAME = 3;
+ private static final int DIALOG_DELETE_GROUP = 4;
private static final String SAVE_DIALOG_PEER = "PEER_STATE";
private static final String SAVE_DEVICE_NAME = "DEV_NAME";
@@ -114,6 +123,9 @@
if (mWifiP2pManager == null) return;
NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(
WifiP2pManager.EXTRA_NETWORK_INFO);
+ if (mWifiP2pManager != null) {
+ mWifiP2pManager.requestGroupInfo(mChannel, WifiP2pSettings.this);
+ }
if (networkInfo.isConnected()) {
if (DBG) Log.d(TAG, "Connected");
} else {
@@ -134,6 +146,10 @@
} else {
updateSearchMenu(false);
}
+ } else if (WifiP2pManager.WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION.equals(action)) {
+ if (mWifiP2pManager != null) {
+ mWifiP2pManager.requestPersistentGroupInfo(mChannel, WifiP2pSettings.this);
+ }
}
}
};
@@ -147,6 +163,7 @@
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_DISCOVERY_CHANGED_ACTION);
+ mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION);
final Activity activity = getActivity();
mWifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
@@ -230,6 +247,27 @@
}
};
+ //delete persistent group dialog listener
+ mDeleteGroupListener = new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (which == DialogInterface.BUTTON_POSITIVE) {
+ if (mWifiP2pManager != null) {
+ mWifiP2pManager.deletePersistentGroup(mChannel,
+ mSelectedGroup.getNetworkId(),
+ new WifiP2pManager.ActionListener() {
+ public void onSuccess() {
+ if (DBG) Log.d(TAG, " delete group success");
+ }
+ public void onFailure(int reason) {
+ if (DBG) Log.d(TAG, " delete group fail " + reason);
+ }
+ });
+ }
+ }
+ }
+ };
+
setHasOptionsMenu(true);
final PreferenceScreen preferenceScreen = getPreferenceScreen();
@@ -242,6 +280,9 @@
mPeersGroup = new PreferenceCategory(getActivity());
mPeersGroup.setTitle(R.string.wifi_p2p_peer_devices);
+ mPersistentGroup = new PreferenceCategory(getActivity());
+ mPersistentGroup.setTitle(R.string.wifi_p2p_remembered_groups);
+
super.onActivityCreated(savedInstanceState);
}
@@ -342,6 +383,9 @@
}
});
}
+ } else if (preference instanceof WifiP2pPersistentGroup) {
+ mSelectedGroup = (WifiP2pPersistentGroup) preference;
+ showDialog(DIALOG_DELETE_GROUP);
}
return super.onPreferenceTreeClick(screen, preference);
}
@@ -396,6 +440,16 @@
.setNegativeButton(getActivity().getString(R.string.dlg_cancel), null)
.create();
return dialog;
+ } else if (id == DIALOG_DELETE_GROUP) {
+ int stringId = R.string.wifi_p2p_delete_group_message;
+
+ AlertDialog dialog = new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.wifi_p2p_delete_group_title)
+ .setMessage(getActivity().getString(stringId, mSelectedGroup.getGroupName()))
+ .setPositiveButton(getActivity().getString(R.string.dlg_ok), mDeleteGroupListener)
+ .setNegativeButton(getActivity().getString(R.string.dlg_cancel), null)
+ .create();
+ return dialog;
}
return null;
}
@@ -423,6 +477,21 @@
if (DBG) Log.d(TAG, " mConnectedDevices " + mConnectedDevices);
}
+ public void onPersistentGroupInfoAvailable(WifiP2pGroupList groups) {
+ mPersistentGroup.removeAll();
+
+ for (WifiP2pGroup group: groups.getGroupList()) {
+ if (DBG) Log.d(TAG, " group " + group);
+ mPersistentGroup.addPreference(new WifiP2pPersistentGroup(getActivity(), group));
+ }
+ }
+
+ public void onGroupInfoAvailable(WifiP2pGroup group) {
+ if (DBG) Log.d(TAG, " group " + group);
+ mConnectedGroup = group;
+ updateDevicePref();
+ }
+
private void handleP2pStateChanged() {
updateSearchMenu(false);
if (mWifiP2pEnabled) {
@@ -435,6 +504,9 @@
mPeersGroup.setEnabled(true);
preferenceScreen.addPreference(mPeersGroup);
+ mPersistentGroup.setEnabled(true);
+ preferenceScreen.addPreference(mPersistentGroup);
+
/* Request latest set of peers */
mWifiP2pManager.requestPeers(mChannel, WifiP2pSettings.this);
}