blob: 7a2a2d67d1e515931b061019fe91952db8de7fd0 [file] [log] [blame]
/*
* Copyright (C) 2007 Google Inc.
*
* 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.server.status;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Environment;
import android.os.storage.StorageManager;
import android.os.storage.StorageEventListener;
import android.os.storage.StorageResultCode;
import android.os.Message;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.widget.ImageView;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View;
import android.util.Log;
/**
* This activity is shown to the user for him/her to enable USB mass storage
* on-demand (that is, when the USB cable is connected). It uses the alert
* dialog style. It will be launched from a notification.
*/
public class UsbStorageActivity extends Activity {
private static final String TAG = "UsbStorageActivity";
private Button mMountButton;
private Button mUnmountButton;
private TextView mBanner;
private TextView mMessage;
private ImageView mIcon;
private StorageManager mStorageManager = null;
/** Used to detect when the USB cable is unplugged, so we can call finish() */
private BroadcastReceiver mBatteryReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() == Intent.ACTION_BATTERY_CHANGED) {
handleBatteryChanged(intent);
}
}
};
private StorageEventListener mStorageListener = new StorageEventListener() {
@Override
public void onStorageStateChanged(String path, String oldState, String newState) {
if (newState.equals(Environment.MEDIA_SHARED)) {
switchDisplay(true);
} else {
switchDisplay(false);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (mStorageManager == null) {
mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
if (mStorageManager == null) {
Log.w(TAG, "Failed to get StorageManager");
}
mStorageManager.registerListener(mStorageListener);
}
setTitle(getString(com.android.internal.R.string.usb_storage_activity_title));
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(
new View.OnClickListener() {
public void onClick(View v) {
int rc = mStorageManager.enableUsbMassStorage();
if (rc != StorageResultCode.OperationSucceeded) {
Log.e(TAG, String.format("UMS enable failed (%d)", rc));
showSharingError();
}
}
});
mUnmountButton = (Button) findViewById(com.android.internal.R.id.unmount_button);
mUnmountButton.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
int rc = mStorageManager.disableUsbMassStorage();
if (rc != StorageResultCode.OperationSucceeded) {
Log.e(TAG, String.format("UMS disable failed (%d)", rc));
showStoppingError();
}
}
});
}
private void switchDisplay(boolean usbStorageInUse) {
if (usbStorageInUse) {
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 {
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);
}
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(mBatteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
try {
switchDisplay(mStorageManager.isUsbMassStorageEnabled());
} catch (Exception ex) {
Log.e(TAG, "Failed to read UMS enable state", ex);
}
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mBatteryReceiver);
}
private void handleBatteryChanged(Intent intent) {
int pluggedType = intent.getIntExtra("plugged", 0);
if (pluggedType == 0) {
// It was disconnected from the plug, so finish
finish();
}
}
private void showSharingError() {
Toast.makeText(this, com.android.internal.R.string.usb_storage_error_message,
Toast.LENGTH_LONG).show();
}
private void showStoppingError() {
Toast.makeText(this, com.android.internal.R.string.usb_storage_stop_error_message,
Toast.LENGTH_LONG).show();
}
}