UsbSettings.java revision 6d11dc5c8c98d0a93e23d48774e863df17da01ca
1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.settings.deviceinfo; 18 19import android.content.BroadcastReceiver; 20import android.content.ContentQueryMap; 21import android.content.ContentResolver; 22import android.content.Context; 23import android.content.Intent; 24import android.content.IntentFilter; 25import android.hardware.usb.UsbManager; 26import android.os.Bundle; 27import android.os.storage.StorageManager; 28import android.os.storage.StorageVolume; 29import android.preference.CheckBoxPreference; 30import android.preference.Preference; 31import android.preference.PreferenceScreen; 32import android.provider.Settings; 33import android.util.Log; 34import android.view.Menu; 35import android.view.MenuInflater; 36import android.view.MenuItem; 37 38import com.android.settings.R; 39import com.android.settings.SettingsPreferenceFragment; 40 41import java.io.File; 42 43/** 44 * USB storage settings. 45 */ 46public class UsbSettings extends SettingsPreferenceFragment { 47 48 private static final String TAG = "UsbSettings"; 49 50 private static final String KEY_MTP = "usb_mtp"; 51 private static final String KEY_PTP = "usb_ptp"; 52 private static final String KEY_INSTALLER_CD = "usb_installer_cd"; 53 private static final int MENU_ID_INSTALLER_CD = Menu.FIRST; 54 55 private UsbManager mUsbManager; 56 private String mInstallerImagePath; 57 private CheckBoxPreference mMtp; 58 private CheckBoxPreference mPtp; 59 private MenuItem mInstallerCd; 60 61 private final BroadcastReceiver mStateReceiver = new BroadcastReceiver() { 62 public void onReceive(Context content, Intent intent) { 63 updateToggles(); 64 } 65 }; 66 67 private PreferenceScreen createPreferenceHierarchy() { 68 PreferenceScreen root = getPreferenceScreen(); 69 if (root != null) { 70 root.removeAll(); 71 } 72 addPreferencesFromResource(R.xml.usb_settings); 73 root = getPreferenceScreen(); 74 75 mMtp = (CheckBoxPreference)root.findPreference(KEY_MTP); 76 mPtp = (CheckBoxPreference)root.findPreference(KEY_PTP); 77 78 return root; 79 } 80 81 @Override 82 public void onCreate(Bundle icicle) { 83 super.onCreate(icicle); 84 mUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE); 85 mInstallerImagePath = getString(com.android.internal.R.string.config_isoImagePath); 86 if (!(new File(mInstallerImagePath)).exists()) { 87 mInstallerImagePath = null; 88 } 89 setHasOptionsMenu(mInstallerImagePath != null); 90 } 91 92 @Override 93 public void onPause() { 94 super.onPause(); 95 getActivity().unregisterReceiver(mStateReceiver); 96 } 97 98 @Override 99 public void onResume() { 100 super.onResume(); 101 102 // Make sure we reload the preference hierarchy since some of these settings 103 // depend on others... 104 createPreferenceHierarchy(); 105 106 // ACTION_USB_STATE is sticky so this will call updateToggles 107 getActivity().registerReceiver(mStateReceiver, 108 new IntentFilter(UsbManager.ACTION_USB_STATE)); 109 } 110 111 private void updateToggles() { 112 if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MTP)) { 113 mMtp.setChecked(true); 114 mPtp.setChecked(false); 115 } else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_PTP)) { 116 mMtp.setChecked(false); 117 mPtp.setChecked(true); 118 } else { 119 mMtp.setChecked(false); 120 mPtp.setChecked(false); 121 } 122 if (mInstallerCd != null) { 123 if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MASS_STORAGE)) { 124 mInstallerCd.setTitle( R.string.usb_label_installer_cd_done); 125 } else { 126 mInstallerCd.setTitle( R.string.usb_label_installer_cd); 127 } 128 } 129 } 130 131 @Override 132 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 133 Log.d(TAG, "onPreferenceTreeClick " + preference); 134 135 // temporary hack - using check boxes as radio buttons 136 // don't allow unchecking them 137 if (preference instanceof CheckBoxPreference) { 138 CheckBoxPreference checkBox = (CheckBoxPreference)preference; 139 if (!checkBox.isChecked()) { 140 checkBox.setChecked(true); 141 return true; 142 } 143 } 144 if (preference == mMtp) { 145 mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MTP, true); 146 } else if (preference == mPtp) { 147 mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_PTP, true); 148 } 149 updateToggles(); 150 return true; 151 } 152 153 @Override 154 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 155 mInstallerCd = menu.add(Menu.NONE, MENU_ID_INSTALLER_CD, 0, 156 R.string.usb_label_installer_cd); 157 mInstallerCd.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 158 } 159 160 @Override 161 public boolean onOptionsItemSelected(MenuItem item) { 162 switch (item.getItemId()) { 163 case MENU_ID_INSTALLER_CD: 164 if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MASS_STORAGE)) { 165 // Disable installer CD, return to default function. 166 mUsbManager.setCurrentFunction(null, false); 167 } else { 168 // Enable installer CD. Don't set as default function. 169 mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MASS_STORAGE, false); 170 mUsbManager.setMassStorageBackingFile(mInstallerImagePath); 171 } 172 updateToggles(); 173 return true; 174 } 175 return super.onOptionsItemSelected(item); 176 } 177} 178