1/*
2 * Copyright (C) 2007 Google Inc.
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.internal.app;
18
19import com.android.internal.os.storage.ExternalStorageFormatter;
20
21import android.app.AlertDialog;
22import android.content.BroadcastReceiver;
23import android.content.Context;
24import android.content.DialogInterface;
25import android.content.Intent;
26import android.content.IntentFilter;
27import android.os.Bundle;
28import android.util.Log;
29
30/**
31 * This activity is shown to the user to confirm formatting of external media.
32 * It uses the alert dialog style. It will be launched from a notification, or from settings
33 */
34public class ExternalMediaFormatActivity extends AlertActivity implements DialogInterface.OnClickListener {
35
36    private static final int POSITIVE_BUTTON = AlertDialog.BUTTON_POSITIVE;
37
38    /** Used to detect when the media state changes, in case we need to call finish() */
39    private BroadcastReceiver mStorageReceiver = new BroadcastReceiver() {
40        @Override
41        public void onReceive(Context context, Intent intent) {
42            String action = intent.getAction();
43            Log.d("ExternalMediaFormatActivity", "got action " + action);
44
45            if (action == Intent.ACTION_MEDIA_REMOVED ||
46                action == Intent.ACTION_MEDIA_CHECKING ||
47                action == Intent.ACTION_MEDIA_MOUNTED ||
48                action == Intent.ACTION_MEDIA_SHARED) {
49                finish();
50            }
51        }
52    };
53
54    @Override
55    protected void onCreate(Bundle savedInstanceState) {
56        super.onCreate(savedInstanceState);
57
58        Log.d("ExternalMediaFormatActivity", "onCreate!");
59        // Set up the "dialog"
60        final AlertController.AlertParams p = mAlertParams;
61        p.mTitle = getString(com.android.internal.R.string.extmedia_format_title);
62        p.mMessage = getString(com.android.internal.R.string.extmedia_format_message);
63        p.mPositiveButtonText = getString(com.android.internal.R.string.extmedia_format_button_format);
64        p.mPositiveButtonListener = this;
65        p.mNegativeButtonText = getString(com.android.internal.R.string.cancel);
66        p.mNegativeButtonListener = this;
67        setupAlert();
68    }
69
70    @Override
71    protected void onResume() {
72        super.onResume();
73
74        IntentFilter filter = new IntentFilter();
75        filter.addAction(Intent.ACTION_MEDIA_REMOVED);
76        filter.addAction(Intent.ACTION_MEDIA_CHECKING);
77        filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
78        filter.addAction(Intent.ACTION_MEDIA_SHARED);
79        registerReceiver(mStorageReceiver, filter);
80    }
81
82    @Override
83    protected void onPause() {
84        super.onPause();
85
86        unregisterReceiver(mStorageReceiver);
87    }
88
89    /**
90     * {@inheritDoc}
91     */
92    public void onClick(DialogInterface dialog, int which) {
93
94        if (which == POSITIVE_BUTTON) {
95            Intent intent = new Intent(ExternalStorageFormatter.FORMAT_ONLY);
96            intent.setComponent(ExternalStorageFormatter.COMPONENT_NAME);
97            startService(intent);
98        }
99
100        // No matter what, finish the activity
101        finish();
102    }
103}
104