MediaFormat.java revision 47d380f1e6c823cea444004cb799d4c791145cc6
1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 19afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.widget.LockPatternUtils; 20afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.Activity; 22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.AlertDialog; 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.IMountService; 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.ServiceManager; 28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.SystemProperties; 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Environment; 30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.TextUtils; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.Log; 32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.LayoutInflater; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.View; 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.Button; 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Confirm and execute a format of the sdcard. 38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Multiple confirmations are required: first, a general "are you sure 39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you want to do this?" prompt, followed by a keyguard pattern trace if the user 40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * has defined one, followed by a final strongly-worded "THIS WILL ERASE EVERYTHING 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * ON THE SD CARD" prompt. If at any time the phone is allowed to go to sleep, is 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * locked, et cetera, then the confirmation sequence is abandoned. 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpublic class MediaFormat extends Activity { 45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 46afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int KEYGUARD_REQUEST = 55; 47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private LayoutInflater mInflater; 49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private LockPatternUtils mLockUtils; 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private View mInitialView; 52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Button mInitiateButton; 53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private View mFinalView; 55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Button mFinalButton; 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 5750cb76f58554dbccc51a754a73abef2debd8b721Ying Wang /** 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * The user has gone through the multiple confirmation, so now we go ahead 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * and invoke the Mount Service to format the SD card. 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Button.OnClickListener mFinalClickListener = new Button.OnClickListener() { 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onClick(View v) { 6350cb76f58554dbccc51a754a73abef2debd8b721Ying Wang 64a718832e28095219a897c6e95e903c1a3fe57c12Ying Wang if (Utils.isMonkeyRunning()) { 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return; 66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project IMountService service = 68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project IMountService.Stub.asInterface(ServiceManager.getService("mount")); 69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (service != null) { 70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project try { 7133b0202273269c35906d4080a7ef656a180d6f1cSan Mehat service.formatVolume(Environment.getExternalStorageDirectory().toString()); 72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } catch (android.os.RemoteException e) { 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Intentionally blank - there's nothing we can do here 74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Log.w("MediaFormat", "Unable to invoke IMountService.formatMedia()"); 75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Log.w("MediaFormat", "Unable to locate IMountService"); 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project finish(); 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Keyguard validation is run using the standard {@link ConfirmLockPattern} 85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * component as a subactivity 86afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void runKeyguardConfirmation() { 88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final Intent intent = new Intent(); 89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project intent.setClassName("com.android.settings", 90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project "com.android.settings.ConfirmLockPattern"); 91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // supply header and footer text in the intent 92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project intent.putExtra(ConfirmLockPattern.HEADER_TEXT, 93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project getText(R.string.media_format_gesture_prompt)); 94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project intent.putExtra(ConfirmLockPattern.FOOTER_TEXT, 95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project getText(R.string.media_format_gesture_explanation)); 96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project startActivityForResult(intent, KEYGUARD_REQUEST); 97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 99afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onActivityResult(int requestCode, int resultCode, Intent data) { 101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onActivityResult(requestCode, resultCode, data); 102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (requestCode != KEYGUARD_REQUEST) { 104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return; 105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // If the user entered a valid keyguard trace, present the final 108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // confirmation prompt; otherwise, go back to the initial state. 109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (resultCode == Activity.RESULT_OK) { 110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project establishFinalConfirmationState(); 111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 112afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project establishInitialState(); 113afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 114afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 115afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * If the user clicks to begin the reset sequence, we next require a 118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * keyguard confirmation if the user has currently enabled one. If there 119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * is no keyguard available, we simply go to the final confirmation prompt. 120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 121afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Button.OnClickListener mInitiateListener = new Button.OnClickListener() { 122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onClick(View v) { 123afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (mLockUtils.isLockPatternEnabled()) { 124afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project runKeyguardConfirmation(); 125afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 126afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project establishFinalConfirmationState(); 127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Configure the UI for the final confirmation interaction 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void establishFinalConfirmationState() { 135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (mFinalView == null) { 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mFinalView = mInflater.inflate(R.layout.media_format_final, null); 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mFinalButton = 138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project (Button) mFinalView.findViewById(R.id.execute_media_format); 139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mFinalButton.setOnClickListener(mFinalClickListener); 140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project setContentView(mFinalView); 143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * In its initial state, the activity presents a button for the user to 147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * click in order to initiate a confirmation sequence. This method is 148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * called from various other points in the code to reset the activity to 149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * this base state. 15047d380f1e6c823cea444004cb799d4c791145cc6Jim Miller * 151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * <p>Reinflating views from resources is expensive and prevents us from 152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * caching widget pointers, so we use a single-inflate pattern: we lazy- 153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * inflate each view, caching all of the widget pointers we'll need at the 154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * time, then simply reuse the inflated views directly whenever we need 155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * to change contents. 156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void establishInitialState() { 158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (mInitialView == null) { 159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mInitialView = mInflater.inflate(R.layout.media_format_primary, null); 160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mInitiateButton = 161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project (Button) mInitialView.findViewById(R.id.initiate_media_format); 162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mInitiateButton.setOnClickListener(mInitiateListener); 163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 165afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project setContentView(mInitialView); 166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 168afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onCreate(Bundle savedState) { 170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(savedState); 171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mInitialView = null; 173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mFinalView = null; 174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mInflater = LayoutInflater.from(this); 17547d380f1e6c823cea444004cb799d4c791145cc6Jim Miller mLockUtils = new LockPatternUtils(this); 176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project establishInitialState(); 178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 180afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** Abandon all progress through the confirmation sequence by returning 181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * to the initial view any time the activity is interrupted (e.g. by 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * idle timeout). 183afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onPause() { 186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onPause(); 187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project establishInitialState(); 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 192