diff options
-rw-r--r-- | AndroidManifest.xml | 7 | ||||
-rw-r--r-- | res/menu/storage.xml | 21 | ||||
-rw-r--r-- | res/menu/storage_volume.xml | 3 | ||||
-rw-r--r-- | res/values/arrays.xml | 8 | ||||
-rw-r--r-- | res/values/strings.xml | 23 | ||||
-rw-r--r-- | src/com/android/settings/DevelopmentSettings.java | 2 | ||||
-rw-r--r-- | src/com/android/settings/SettingsActivity.java | 2 | ||||
-rw-r--r-- | src/com/android/settings/deviceinfo/PrivateVolumeSettings.java | 8 | ||||
-rw-r--r-- | src/com/android/settings/deviceinfo/StorageSettings.java | 23 | ||||
-rw-r--r-- | src/com/android/settings/deviceinfo/UsbModeChooserActivity.java | 105 | ||||
-rw-r--r-- | src/com/android/settings/deviceinfo/UsbSettings.java | 182 | ||||
-rw-r--r-- | src/com/android/settings/search/Ranking.java | 2 | ||||
-rw-r--r-- | src/com/android/settings/search/SearchIndexableResources.java | 8 |
13 files changed, 142 insertions, 252 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c006ce3..2bba142 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1786,6 +1786,13 @@ </intent-filter> </activity> + <activity android:name=".deviceinfo.UsbModeChooserActivity" + android:excludeFromRecents="true" + android:exported="true" + android:permission="android.permission.MANAGE_USB" + android:theme="@style/Transparent"> + </activity> + <activity android:name=".bluetooth.RequestPermissionHelperActivity" android:label="@string/bluetooth_pairing_request" android:excludeFromRecents="true" diff --git a/res/menu/storage.xml b/res/menu/storage.xml deleted file mode 100644 index 2e4c660..0000000 --- a/res/menu/storage.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- 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. ---> - -<menu xmlns:android="http://schemas.android.com/apk/res/android"> - <item - android:id="@+id/storage_usb" - android:title="@string/storage_menu_usb" /> -</menu> diff --git a/res/menu/storage_volume.xml b/res/menu/storage_volume.xml index b461f46..efa468c 100644 --- a/res/menu/storage_volume.xml +++ b/res/menu/storage_volume.xml @@ -30,7 +30,4 @@ <item android:id="@+id/storage_migrate" android:title="@string/storage_menu_migrate" /> - <item - android:id="@+id/storage_usb" - android:title="@string/storage_menu_usb" /> </menu> diff --git a/res/values/arrays.xml b/res/values/arrays.xml index d556b1b..1af15f9 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -1365,4 +1365,12 @@ <item>0</item> </string-array> + <!-- These values must match up with the code in UsbModeChooserActivity.java. --> + <string-array name="usb_available_functions"> + <item>@string/usb_use_charging_only</item> + <item>@string/usb_use_file_transfers</item> + <item>@string/usb_use_photo_transfers</item> + <item>@string/usb_use_MIDI</item> + </string-array> + </resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index 53df0ef..08e6c23 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2293,8 +2293,6 @@ <string name="storage_menu_migrate">Migrate data</string> <!-- Storage setting. Menu option for forgetting a storage device [CHAR LIMIT=30]--> <string name="storage_menu_forget">Forget</string> - <!-- Storage setting. Menu option for USB transfer settings [CHAR LIMIT=30]--> - <string name="storage_menu_usb">USB computer connection</string> <!-- Storage setting. Title for USB transfer settings [CHAR LIMIT=30]--> <string name="storage_title_usb">USB computer connection</string> @@ -6601,4 +6599,25 @@ <!-- Description of how many more permissions to view on next page [CHAR LIMIT=30] --> <string name="additional_permissions_more"><xliff:g id="count" example="2">%1$d</xliff:g> more</string> + <!-- One of the choices in a dialog (with title defined in usb_use) that lets the user + select what the USB connection for this device should be used for. This choice + is for charging only. --> + <string name="usb_use_charging_only">Charging only</string> + <!-- One of the choices in a dialog (with title defined in usb_use) that lets the user + select what the USB connection for this device should be used for. This choice + is for transferring files via MTP. --> + <string name="usb_use_file_transfers">Transfer files (MTP)</string> + <!-- One of the choices in a dialog (with title defined in usb_use) that lets the user + select what the USB connection for this device should be used for. This choice + is for transferring photos via PTP. --> + <string name="usb_use_photo_transfers">Transfer photos (PTP)</string> + <!-- One of the choices in a dialog (with title defined in usb_use) that lets the user + select what the USB connection for this device should be used for. This choice + is for entering MIDI mode. --> + <string name="usb_use_MIDI">MIDI</string> + <!-- The title used in a dialog which lets the user select what the USB connection + for this device should be used for. Choices are usb_use_charging_only, + usb_use_file_transfer, use_use_photo_transfer, and usb_use_MIDI --> + <string name="usb_use">Use USB for</string> + </resources> diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index 314e70a..23191ad 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -1274,7 +1274,7 @@ public class DevelopmentSettings extends SettingsPreferenceFragment private void writeUsbConfigurationOption(Object newValue) { UsbManager manager = (UsbManager)getActivity().getSystemService(Context.USB_SERVICE); - manager.setCurrentFunction(newValue.toString(), false); + manager.setCurrentFunction(newValue.toString()); } private void updateCpuUsageOptions() { diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index aa492f3..7ce581f 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -87,7 +87,6 @@ import com.android.settings.deviceinfo.PrivateVolumeForget; import com.android.settings.deviceinfo.PrivateVolumeSettings; import com.android.settings.deviceinfo.PublicVolumeSettings; import com.android.settings.deviceinfo.StorageSettings; -import com.android.settings.deviceinfo.UsbSettings; import com.android.settings.fuelgauge.BatterySaverSettings; import com.android.settings.fuelgauge.PowerUsageDetail; import com.android.settings.fuelgauge.PowerUsageSummary; @@ -318,7 +317,6 @@ public class SettingsActivity extends Activity PrivateVolumeSettings.class.getName(), PublicVolumeSettings.class.getName(), DevelopmentSettings.class.getName(), - UsbSettings.class.getName(), AndroidBeam.class.getName(), WifiDisplaySettings.class.getName(), PowerUsageSummary.class.getName(), diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java index e5f50dd..7cefe4a 100644 --- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java +++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java @@ -273,7 +273,6 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment { final MenuItem unmount = menu.findItem(R.id.storage_unmount); final MenuItem format = menu.findItem(R.id.storage_format); final MenuItem migrate = menu.findItem(R.id.storage_migrate); - final MenuItem usb = menu.findItem(R.id.storage_usb); // Actions live in menu for non-internal private volumes; they're shown // as preference items for public volumes. @@ -293,9 +292,6 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment { final VolumeInfo privateVol = getActivity().getPackageManager() .getPrimaryStorageCurrentVolume(); migrate.setVisible(!Objects.equals(mVolume, privateVol)); - - // TODO: show usb if we jumped past first screen - usb.setVisible(false); } @Override @@ -324,10 +320,6 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment { intent.putExtra(VolumeInfo.EXTRA_VOLUME_ID, mVolume.getId()); startActivity(intent); return true; - case R.id.storage_usb: - startFragment(this, UsbSettings.class.getCanonicalName(), - R.string.storage_title_usb, 0, null); - return true; } return super.onOptionsItemSelected(item); } diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java index 4c03d8f..b5b3841 100644 --- a/src/com/android/settings/deviceinfo/StorageSettings.java +++ b/src/com/android/settings/deviceinfo/StorageSettings.java @@ -149,29 +149,6 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index } @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.storage, menu); - } - - @Override - public void onPrepareOptionsMenu(Menu menu) { - final MenuItem usb = menu.findItem(R.id.storage_usb); - - usb.setVisible(!mUserManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.storage_usb: - startFragment(this, UsbSettings.class.getCanonicalName(), - R.string.storage_title_usb, 0, null); - return true; - } - return super.onOptionsItemSelected(item); - } - - @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference pref) { final String volId = pref.getKey(); final VolumeInfo vol = mStorageManager.findVolumeById(volId); diff --git a/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java b/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java new file mode 100644 index 0000000..76b2fd1 --- /dev/null +++ b/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2015 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.deviceinfo; + +import android.annotation.Nullable; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.hardware.usb.UsbManager; +import android.os.Bundle; +import android.util.Log; +import com.android.settings.R; + +/** + * UI for the USB chooser dialog. + * + * TODO: Don't show some UI elements if UserManager.DISALLOW_USB_FILE_TRANSFER is disabled. + */ +public class UsbModeChooserActivity extends Activity { + + private UsbManager mUsbManager; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE); + final AlertDialog levelDialog; + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.usb_use); + builder.setSingleChoiceItems(R.array.usb_available_functions, getCurrentFunction(), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + setCurrentFunction(which); + dialog.dismiss(); + UsbModeChooserActivity.this.finish(); + } + }); + builder.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + UsbModeChooserActivity.this.finish(); + } + }); + builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + UsbModeChooserActivity.this.finish(); + } + }); + levelDialog = builder.create(); + levelDialog.show(); + } + + /* + * If you change the numbers here, you also need to change R.array.usb_available_functions + * so that everything matches. + */ + private int getCurrentFunction() { + if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MTP)) { + return 1; + } else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_PTP)) { + return 2; + } else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MIDI)) { + return 3; + } + return 0; + } + + /* + * If you change the numbers here, you also need to change R.array.usb_available_functions + * so that everything matches. + */ + private void setCurrentFunction(int which) { + switch (which) { + case 0: + mUsbManager.setCurrentFunction("none"); + break; + case 1: + mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MTP); + break; + case 2: + mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_PTP); + break; + case 3: + mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MIDI); + break; + } + } +} diff --git a/src/com/android/settings/deviceinfo/UsbSettings.java b/src/com/android/settings/deviceinfo/UsbSettings.java deleted file mode 100644 index d8a675c..0000000 --- a/src/com/android/settings/deviceinfo/UsbSettings.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (C) 2011 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.deviceinfo; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.hardware.usb.UsbManager; -import android.os.Bundle; -import android.os.UserManager; -import android.preference.CheckBoxPreference; -import android.preference.Preference; -import android.preference.PreferenceScreen; -import android.util.Log; - -import com.android.internal.logging.MetricsLogger; -import com.android.settings.R; -import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.Utils; - -/** - * USB storage settings. - */ -public class UsbSettings extends SettingsPreferenceFragment { - - private static final String TAG = "UsbSettings"; - - private static final String KEY_MTP = "usb_mtp"; - private static final String KEY_PTP = "usb_ptp"; - private static final String KEY_MIDI = "usb_midi"; - - private UsbManager mUsbManager; - private CheckBoxPreference mMtp; - private CheckBoxPreference mPtp; - private CheckBoxPreference mMidi; - 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()); - } - }; - - private PreferenceScreen createPreferenceHierarchy() { - PreferenceScreen root = getPreferenceScreen(); - if (root != null) { - root.removeAll(); - } - addPreferencesFromResource(R.xml.usb_settings); - root = getPreferenceScreen(); - - mMtp = (CheckBoxPreference)root.findPreference(KEY_MTP); - mPtp = (CheckBoxPreference)root.findPreference(KEY_PTP); - mMidi = (CheckBoxPreference)root.findPreference(KEY_MIDI); - - UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); - if (um.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)) { - mMtp.setEnabled(false); - mPtp.setEnabled(false); - } - - return root; - } - - @Override - protected int getMetricsCategory() { - return MetricsLogger.DEVICEINFO_USB; - } - - @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); - mUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE); - } - - @Override - public void onPause() { - super.onPause(); - getActivity().unregisterReceiver(mStateReceiver); - } - - @Override - public void onResume() { - super.onResume(); - - // Make sure we reload the preference hierarchy since some of these settings - // depend on others... - createPreferenceHierarchy(); - - // ACTION_USB_STATE is sticky so this will call updateToggles - getActivity().registerReceiver(mStateReceiver, - new IntentFilter(UsbManager.ACTION_USB_STATE)); - } - - private void updateToggles(String function) { - if (UsbManager.USB_FUNCTION_MTP.equals(function)) { - mMtp.setChecked(true); - mPtp.setChecked(false); - mMidi.setChecked(false); - } else if (UsbManager.USB_FUNCTION_PTP.equals(function)) { - mMtp.setChecked(false); - mPtp.setChecked(true); - mMidi.setChecked(false); - } else if (UsbManager.USB_FUNCTION_MIDI.equals(function)) { - mMtp.setChecked(false); - mPtp.setChecked(false); - mMidi.setChecked(true); - } else { - mMtp.setChecked(false); - mPtp.setChecked(false); - mMidi.setChecked(false); - } - UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); - if (um.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)) { - Log.e(TAG, "USB is locked down"); - mMtp.setEnabled(false); - mPtp.setEnabled(false); - mMidi.setEnabled(true); - } else 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); - mMidi.setEnabled(true); - } else { - Log.e(TAG, "USB Accessory Mode"); - mMtp.setEnabled(false); - mPtp.setEnabled(false); - mMidi.setEnabled(false); - } - } - - @Override - public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { - - // Don't allow any changes to take effect as the USB host will be disconnected, killing - // the monkeys - if (Utils.isMonkeyRunning()) { - return true; - } - // If this user is disallowed from using USB, don't handle their attempts to change the - // setting. - UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); - if (um.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)) { - return true; - } - - String function = "none"; - if (preference == mMtp && mMtp.isChecked()) { - function = UsbManager.USB_FUNCTION_MTP; - } else if (preference == mPtp && mPtp.isChecked()) { - function = UsbManager.USB_FUNCTION_PTP; - } else if (preference == mMidi && mMidi.isChecked()) { - function = UsbManager.USB_FUNCTION_MIDI; - } - - mUsbManager.setCurrentFunction(function, true); - updateToggles(function); - - return true; - } -} diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java index e1eec5f..93e0948 100644 --- a/src/com/android/settings/search/Ranking.java +++ b/src/com/android/settings/search/Ranking.java @@ -34,7 +34,6 @@ import com.android.settings.applications.AdvancedAppSettings; import com.android.settings.applications.ManageDefaultApps; import com.android.settings.bluetooth.BluetoothSettings; import com.android.settings.deviceinfo.StorageSettings; -import com.android.settings.deviceinfo.UsbSettings; import com.android.settings.fuelgauge.BatterySaverSettings; import com.android.settings.fuelgauge.PowerUsageSummary; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; @@ -131,7 +130,6 @@ public final class Ranking { // Storage sRankMap.put(StorageSettings.class.getName(), RANK_STORAGE); - sRankMap.put(UsbSettings.class.getName(), RANK_STORAGE); // Battery sRankMap.put(PowerUsageSummary.class.getName(), RANK_POWER_USAGE); diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java index a3d2ddc..4d28d4a 100644 --- a/src/com/android/settings/search/SearchIndexableResources.java +++ b/src/com/android/settings/search/SearchIndexableResources.java @@ -36,7 +36,6 @@ import com.android.settings.applications.AdvancedAppSettings; import com.android.settings.applications.ManageDefaultApps; import com.android.settings.bluetooth.BluetoothSettings; import com.android.settings.deviceinfo.StorageSettings; -import com.android.settings.deviceinfo.UsbSettings; import com.android.settings.fuelgauge.BatterySaverSettings; import com.android.settings.fuelgauge.PowerUsageSummary; import com.android.settings.inputmethod.InputMethodAndLanguageSettings; @@ -178,13 +177,6 @@ public final class SearchIndexableResources { StorageSettings.class.getName(), R.drawable.ic_settings_storage)); - sResMap.put(UsbSettings.class.getName(), - new SearchIndexableResource( - Ranking.getRankForClassName(UsbSettings.class.getName()), - R.xml.usb_settings, - UsbSettings.class.getName(), - R.drawable.ic_settings_storage)); - sResMap.put(PowerUsageSummary.class.getName(), new SearchIndexableResource( Ranking.getRankForClassName(PowerUsageSummary.class.getName()), |