Fields Summary |
---|
private static final String | TAG |
private android.widget.Button | mMountButton |
private android.widget.Button | mUnmountButton |
private android.widget.ProgressBar | mProgressBar |
private android.widget.TextView | mBanner |
private android.widget.TextView | mMessage |
private android.widget.ImageView | mIcon |
private android.os.storage.StorageManager | mStorageManager |
private static final int | DLG_CONFIRM_KILL_STORAGE_USERS |
private static final int | DLG_ERROR_SHARING |
static final boolean | localLOGV |
private boolean | mDestroyed |
private android.os.Handler | mUIHandler |
private android.os.Handler | mAsyncStorageHandler |
private android.content.BroadcastReceiver | mUsbStateReceiverUsed to detect when the USB cable is unplugged, so we can call finish() |
private android.os.storage.StorageEventListener | mStorageListener |
Methods Summary |
---|
private void | checkStorageUsers()
mAsyncStorageHandler.post(new Runnable() {
@Override
public void run() {
checkStorageUsersAsync();
}
});
|
private void | checkStorageUsersAsync()
IMountService ims = getMountService();
if (ims == null) {
// Display error dialog
scheduleShowDialog(DLG_ERROR_SHARING);
}
String extStoragePath = Environment.getExternalStorageDirectory().toString();
boolean showDialog = false;
try {
int[] stUsers = ims.getStorageUsers(extStoragePath);
if (stUsers != null && stUsers.length > 0) {
showDialog = true;
} else {
// List of applications on sdcard.
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<ApplicationInfo> infoList = am.getRunningExternalApplications();
if (infoList != null && infoList.size() > 0) {
showDialog = true;
}
}
} catch (RemoteException e) {
// Display error dialog
scheduleShowDialog(DLG_ERROR_SHARING);
}
if (showDialog) {
// Display dialog to user
scheduleShowDialog(DLG_CONFIRM_KILL_STORAGE_USERS);
} else {
if (localLOGV) Log.i(TAG, "Enabling UMS");
switchUsbMassStorage(true);
}
|
private android.os.storage.IMountService | getMountService()
IBinder service = ServiceManager.getService("mount");
if (service != null) {
return IMountService.Stub.asInterface(service);
}
return null;
|
private void | handleUsbStateChanged(android.content.Intent intent)
boolean connected = intent.getExtras().getBoolean(UsbManager.USB_CONNECTED);
if (!connected) {
// It was disconnected from the plug, so finish
finish();
}
|
public void | onCancel(android.content.DialogInterface dialog)
finish();
|
public void | onClick(android.view.View v)
if (v == mMountButton) {
// Check for list of storage users and display dialog if needed.
checkStorageUsers();
} else if (v == mUnmountButton) {
if (localLOGV) Log.i(TAG, "Disabling UMS");
switchUsbMassStorage(false);
}
|
protected void | onCreate(android.os.Bundle savedInstanceState)
super.onCreate(savedInstanceState);
if (mStorageManager == null) {
mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
if (mStorageManager == null) {
Log.w(TAG, "Failed to get StorageManager");
}
}
mUIHandler = new Handler();
HandlerThread thr = new HandlerThread("SystemUI UsbStorageActivity");
thr.start();
mAsyncStorageHandler = new Handler(thr.getLooper());
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
if (Environment.isExternalStorageRemovable()) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}
setContentView(com.android.internal.R.layout.usb_storage_activity);
mIcon = (ImageView) findViewById(com.android.internal.R.id.icon);
mBanner = (TextView) findViewById(com.android.internal.R.id.banner);
mMessage = (TextView) findViewById(com.android.internal.R.id.message);
mMountButton = (Button) findViewById(com.android.internal.R.id.mount_button);
mMountButton.setOnClickListener(this);
mUnmountButton = (Button) findViewById(com.android.internal.R.id.unmount_button);
mUnmountButton.setOnClickListener(this);
mProgressBar = (ProgressBar) findViewById(com.android.internal.R.id.progress);
|
public android.app.Dialog | onCreateDialog(int id, android.os.Bundle args)
switch (id) {
case DLG_CONFIRM_KILL_STORAGE_USERS:
return new AlertDialog.Builder(this)
.setTitle(R.string.dlg_confirm_kill_storage_users_title)
.setPositiveButton(R.string.dlg_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
switchUsbMassStorage(true);
}})
.setNegativeButton(R.string.cancel, null)
.setMessage(R.string.dlg_confirm_kill_storage_users_text)
.setOnCancelListener(this)
.create();
case DLG_ERROR_SHARING:
return new AlertDialog.Builder(this)
.setTitle(R.string.dlg_error_title)
.setNeutralButton(R.string.dlg_ok, null)
.setMessage(R.string.usb_storage_error_message)
.setOnCancelListener(this)
.create();
}
return null;
|
protected void | onDestroy()
super.onDestroy();
mDestroyed = true;
|
protected void | onPause()
super.onPause();
unregisterReceiver(mUsbStateReceiver);
if (mStorageManager == null && mStorageListener != null) {
mStorageManager.unregisterListener(mStorageListener);
}
|
protected void | onResume()
super.onResume();
mStorageManager.registerListener(mStorageListener);
registerReceiver(mUsbStateReceiver, new IntentFilter(UsbManager.ACTION_USB_STATE));
try {
mAsyncStorageHandler.post(new Runnable() {
@Override
public void run() {
switchDisplay(mStorageManager.isUsbMassStorageEnabled());
}
});
} catch (Exception ex) {
Log.e(TAG, "Failed to read UMS enable state", ex);
}
|
private void | scheduleShowDialog(int id)
mUIHandler.post(new Runnable() {
@Override
public void run() {
if (!mDestroyed) {
removeDialog(id);
showDialog(id);
}
}
});
|
private void | switchDisplay(boolean usbStorageInUse)
mUIHandler.post(new Runnable() {
@Override
public void run() {
switchDisplayAsync(usbStorageInUse);
}
});
|
private void | switchDisplayAsync(boolean usbStorageInUse)
if (usbStorageInUse) {
mProgressBar.setVisibility(View.GONE);
mUnmountButton.setVisibility(View.VISIBLE);
mMountButton.setVisibility(View.GONE);
mIcon.setImageResource(com.android.internal.R.drawable.usb_android_connected);
mBanner.setText(com.android.internal.R.string.usb_storage_stop_title);
mMessage.setText(com.android.internal.R.string.usb_storage_stop_message);
} else {
mProgressBar.setVisibility(View.GONE);
mUnmountButton.setVisibility(View.GONE);
mMountButton.setVisibility(View.VISIBLE);
mIcon.setImageResource(com.android.internal.R.drawable.usb_android);
mBanner.setText(com.android.internal.R.string.usb_storage_title);
mMessage.setText(com.android.internal.R.string.usb_storage_message);
}
|
private void | switchUsbMassStorage(boolean on)
// things to do on the UI thread
mUIHandler.post(new Runnable() {
@Override
public void run() {
mUnmountButton.setVisibility(View.GONE);
mMountButton.setVisibility(View.GONE);
mProgressBar.setVisibility(View.VISIBLE);
// will be hidden once USB mass storage kicks in (or fails)
}
});
// things to do elsewhere
mAsyncStorageHandler.post(new Runnable() {
@Override
public void run() {
if (on) {
mStorageManager.enableUsbMassStorage();
} else {
mStorageManager.disableUsbMassStorage();
}
}
});
|