/* * Copyright (c) 2011 yang hui <yanghui1986527@gmail.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License v2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 021110-1307, USA. */ package com.hd.explorer; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.ActivityNotFoundException; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources.NotFoundException; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.preference.PreferenceManager; import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageButton; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.google.ads.AdRequest; import com.google.ads.AdView; import com.hd.Constant; /** * * ClassName:HDExplorerActivity * Reason: The Main Activity of The Explorer * * @author yang hui * @version * @since Ver 1.1 * @Date 2011 2011-11-29 00:39:13 * * @see */ public class HDExplorerActivity extends Activity implements OnItemClickListener{ private static final String TAG = "HDExplorer"; //Boolean Flags private boolean misFullScreen = true; //Dialogs ID private final int FOLDER_CREATE =0; private final int FILE_RENAME =1; private final int FILE_DETAILS =2; private final int FILE_DELETE = 3; //the data source List<File> mfiles = null; List<File> mbackwardfiles = null; List<File> mforwardfiles = null; //BaseAdapter HDBaseAdapter madapter = null; //String private String mSDCardPath = null; private String mRootPath = null; //String private File mCurrentPathFile = null; private File mRenameFile = null; private File mDetailFile = null; private File mDeleteFile = null; //admob view private AdView adView; //cut and copy private File mCutOrCopyFile = null; private int mAction = ACTION_NONE; private boolean misShowHiddenFiles = false; private static final int ACTION_NONE = 0; private static final int ACTION_CUT = 1; private static final int ACTION_COPY = 2; private static final int REQ_SYSTEM_SETTINGS = 0; //ImageButton ImageButton mpaste = null; ImageButton mhome = null; ImageButton mupward = null; ImageButton mbackward = null; ImageButton mforward = null; ImageButton mrefresh = null; ImageButton mviewmode = null; //ListView ListView mListView = null; //GridView GridView mGridView = null; //TextView TextView mEmptyView = null; /** * * onCreate: Called when the activity is first created. * * @param savedInstanceState The struct to save the data. * @return * @throws */ @Override public void onCreate(Bundle savedInstanceState) { Log.i(TAG,"onCreate"); super.onCreate(savedInstanceState); if(misFullScreen){ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } setContentView(R.layout.main); checkEnvironment(); initToolbar(); init(); loadAdView(); } /** * * checkEnvironment: Check the SDCard and the Root Path * * @param * @return * @throws */ private void checkEnvironment() { File f = null; boolean sdCardExist = Environment.getExternalStorageState() .equals(Environment.MEDIA_MOUNTED); //判断sd卡是否存在 if (sdCardExist) { f = Environment.getExternalStorageDirectory();//获取sd卡目录 if (f != null) { mSDCardPath = f.getAbsolutePath(); } f = Environment.getRootDirectory();//获取根目录 if (f != null) { mRootPath = f.getAbsolutePath(); } } } public void swapViewMode(){ switch (madapter.getViewMode()) { case HDBaseAdapter.VIEWMODE_LIST: setViewMode(HDBaseAdapter.VIEWMODE_ICON); mviewmode.setBackgroundResource(R.drawable.icon_toolbar_list); break; case HDBaseAdapter.VIEWMODE_ICON: setViewMode(HDBaseAdapter.VIEWMODE_LIST); mviewmode.setBackgroundResource(R.drawable.icon_toolbar_icons); break; default: break; } } public void setViewMode(int viewmode){ switch (viewmode) { case HDBaseAdapter.VIEWMODE_LIST: madapter.setViewMode(HDBaseAdapter.VIEWMODE_LIST); mListView.setAdapter(madapter); mGridView.setAdapter(null); madapter.notifyDataSetChanged(); break; case HDBaseAdapter.VIEWMODE_ICON: madapter.setViewMode(HDBaseAdapter.VIEWMODE_ICON); mListView.setAdapter(null); mGridView.setAdapter(madapter); madapter.notifyDataSetChanged(); break; default: break; } } /** * * init: Init the Toolbar * * @param * @return * @throws */ private void initToolbar() { mpaste = (ImageButton) findViewById(R.id.paste); mpaste.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { paste(); mpaste.setVisibility(View.GONE); } }); mhome = (ImageButton) findViewById(R.id.home); mhome.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { File sdf = new File(mSDCardPath); open(sdf,false); mbackwardfiles.clear(); mforwardfiles.clear(); } }); mupward = (ImageButton) findViewById(R.id.upward); mupward.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { upward(); } }); mbackward = (ImageButton) findViewById(R.id.backward); mbackward.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { backward(); } }); mforward = (ImageButton) findViewById(R.id.forward); mforward.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { forward(); } }); mrefresh = (ImageButton) findViewById(R.id.refresh); mrefresh.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { refresh(); } }); mviewmode = (ImageButton) findViewById(R.id.viewmode); mviewmode.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { swapViewMode(); } }); } /** * * init: Init the data * * @param * @return * @throws */ public void init(){ Log.i(TAG,"init"); // adView = new AdView(this, AdSize.BANNER, getString(R.string.MY_AD_UNIT_ID)); mEmptyView=(TextView)findViewById(R.id.empty); mListView=(ListView)findViewById(R.id.listview); registerForContextMenu(mListView); mListView.setOnItemClickListener(this); mListView.setEmptyView(mEmptyView); mGridView = (GridView)findViewById(R.id.gridview); registerForContextMenu(mGridView); mGridView.setOnItemClickListener(this); mGridView.setEmptyView(mEmptyView); mfiles = new ArrayList<File>(); mbackwardfiles = new ArrayList<File>(); mforwardfiles = new ArrayList<File>(); madapter = new HDBaseAdapter(this,mfiles); //mListView.setAdapter(madapter); //mGridView.setAdapter(madapter); setViewMode(HDBaseAdapter.VIEWMODE_LIST); File sdf = new File(mSDCardPath); loadSettings(); open(sdf,false); } /** * * loadAdView: Load AdView * * @param * @return * @throws */ private void loadAdView() { // Look up the AdView as a resource and load a request. adView = (AdView)this.findViewById(R.id.adView); if (adView != null) { adView.loadAd(new AdRequest()); } } /** * * addItem: add an object * * @param item An object which will be added. * @return * @throws */ private void addItem(File f) { Log.i(TAG,"addItem"); mfiles.add(f); madapter.notifyDataSetChanged(); } /** * * addItem: delete an object * * @param item An object which will be deleted. * @return * @throws */ private void deleteItem(File f) { Log.i(TAG,"deleteItem"); mfiles.remove(f); madapter.notifyDataSetChanged(); } /** * * addItem: delete All object * * @param * @return * @throws */ private void deleteAllItems() { Log.i(TAG,"deleteAllItems"); mfiles.clear(); madapter.notifyDataSetChanged(); } /** * * addItem: open a file * * @param filename The name of the file which will be opened. * @return * @throws */ private void open(File f ,boolean misAddToBackWardFiles){ Log.i(TAG,"open"); if(f == null) return; if(!f.exists()) return; if(!f.canRead()) return; if(f.isFile()){ try { Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_VIEW); String type = Constant.getMIMEType(f); intent.setDataAndType(Uri.fromFile(f), type); startActivity(intent); } catch (ActivityNotFoundException e) { e.printStackTrace(); } }else if(f.isDirectory()){ deleteAllItems(); mCurrentPathFile = f; setTitle(mCurrentPathFile.getAbsolutePath()); if (misAddToBackWardFiles) { mbackwardfiles.add(mCurrentPathFile.getParentFile()); } File[] files = f.listFiles(); // 排序 Arrays.sort(files, new FileComparator()); for(File file:files){ if(!misShowHiddenFiles && file.isHidden()){ continue; } addItem(file); } } } private void openwith(File f){ Log.i(TAG,"open"); if(!f.exists()) return; if(!f.canRead()) return; if(f.isDirectory()) { open(f, true); return; } if(f.isFile()){ try { Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_VIEW); String type = Constant.getMIMEType(f); intent.setDataAndType(Uri.fromFile(f), type); startActivity(intent); } catch (ActivityNotFoundException e) { e.printStackTrace(); } } } /** 复制文件 **/ public boolean copyFile(File src, File tar) throws Exception { if (src.isFile()) { InputStream is = new FileInputStream(src); OutputStream op = new FileOutputStream(tar); BufferedInputStream bis = new BufferedInputStream(is); BufferedOutputStream bos = new BufferedOutputStream(op); byte[] bt = new byte[1024 * 8]; int len = bis.read(bt); while (len != -1) { bos.write(bt, 0, len); len = bis.read(bt); } bis.close(); bos.close(); } if (src.isDirectory()) { File[] f = src.listFiles(); tar.mkdir(); for (int i = 0; i < f.length; i++) { copyFile(f[i].getAbsoluteFile(), new File(tar.getAbsoluteFile() + File.separator + f[i].getName())); } } return true; } /** 移动文件 **/ public boolean moveFile(File src, File tar) throws Exception { if (copyFile(src, tar)) { deleteFile(src); return true; } return false; } /** 删除文件 **/ public void deleteFile(File f) { if (f.isDirectory()) { File[] files = f.listFiles(); if (files != null && files.length > 0) { for (int i = 0; i < files.length; ++i) { deleteFile(files[i]); } } } f.delete(); } private void copy(File f){ mAction = ACTION_COPY; mCutOrCopyFile = f; if (mCutOrCopyFile != null) { mpaste.setVisibility(View.VISIBLE); } } private void cut(File f){ mAction = ACTION_CUT; mCutOrCopyFile = f; if (mCutOrCopyFile != null) { mpaste.setVisibility(View.VISIBLE); } } private void paste(){ switch (mAction) { case ACTION_COPY: if((mCutOrCopyFile != null) && (mCurrentPathFile != null)) { String destname = combineFilename(mCutOrCopyFile, mCurrentPathFile); File src = mCutOrCopyFile; File dest = new File(destname); boolean misFileExist = checkFileExist(dest); if(misFileExist){ //该文件已经存在 }else{ try { copyFile(src, dest); addItem(dest); } catch (Exception e) { e.printStackTrace(); } } } break; case ACTION_CUT: if((mCutOrCopyFile != null) && (mCurrentPathFile != null)) { String destname = combineFilename(mCutOrCopyFile, mCurrentPathFile); File src = mCutOrCopyFile; File dest = new File(destname); boolean misFileExist = checkFileExist(dest); if(misFileExist){ //该文件已经存在 }else{ try { moveFile(src, dest); addItem(dest); deleteItem(src); mCutOrCopyFile = null; } catch (Exception e) { e.printStackTrace(); } } } break; default: break; } } private void rename(File f){ mRenameFile = f; showDialog(FILE_RENAME); } private void showdetails(File f){ mDetailFile = f; showDialog(FILE_DETAILS); } private static long exitTime = 0; public void upward(){ if((mCurrentPathFile.getAbsolutePath()).equals(mSDCardPath)) { if((System.currentTimeMillis()-exitTime) > 2000){ Toast.makeText(this, R.string.toast_exit_tips, Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else{ finish(); System.exit(0); } } else{ File f = mCurrentPathFile; if (!mCurrentPathFile.getAbsolutePath().equals(mRootPath)) { open(f.getParentFile(),true); } } } public void backward(){ if (mbackwardfiles.size() > 0) { File backpathFile = mbackwardfiles.get(mbackwardfiles.size()-1); open(backpathFile, false); mforwardfiles.add(backpathFile); mbackwardfiles.remove(mbackwardfiles.size()-1); } } public void forward(){ if (mforwardfiles.size() > 0) { File forwardpathFile = mforwardfiles.get(mforwardfiles.size()-1); open(forwardpathFile, true); mbackwardfiles.add(forwardpathFile); mforwardfiles.remove(mforwardfiles.size()-1); } } public void refresh(){ if (mCurrentPathFile != null) { open(mCurrentPathFile,false); } } private void createFolder(File newFile){ if (newFile.exists()) { //Toast.makeText(activity, R.string.file_exists, Toast.LENGTH_SHORT).show(); } else { try { if (newFile.mkdir()) { // hander.sendEmptyMessage(0); // 成功 addItem(newFile); } else { // Toast.makeText(activity, R.string.file_create_fail, Toast.LENGTH_SHORT) // .show(); } } catch (Exception ex) { //Toast.makeText(activity, ex.getLocalizedMessage(), Toast.LENGTH_SHORT) // .show(); } } } public boolean checkFileExist(File f){ boolean ret = false; File[] files = mCurrentPathFile.listFiles(); for(File file:files){ if((f.getName()).equals(file.getName())){ ret = true; break; } } return ret; } public String combineFilename(File src,File dest){ String destname = null; if (src == null || dest == null || !dest.isDirectory()) { return destname; } destname = dest.getAbsolutePath()+"/"+src.getName(); return destname; } /** * <b>loadSettings</b><br/> * 读取Preference值,并加载设置参数。<br/> * * @param 无 * @return 设置成功,返回true,否则返回false。 */ public boolean loadSettings(){ Log.i(TAG, "loadSettings"); boolean ret = true; try { String key_showhidden = getResources().getString(R.string.preference_showhidden_key); boolean default_value_showhidden = Boolean.parseBoolean(getResources().getString(R.string.preference_showhidden_default_value)); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); misShowHiddenFiles = settings.getBoolean(key_showhidden, default_value_showhidden); } catch (NotFoundException e) { ret = false; e.printStackTrace(); }catch (ClassCastException e) { ret = false; e.printStackTrace(); } return ret; } /** * * onActivityResult: onActivityResult * * @param requestCode The value of requestCode * @param resultCode The value of resultCode * @param data The data from the last Activity * @return * @throws */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.i(TAG,"onActivityResult"); super.onActivityResult(requestCode, resultCode, data); if(requestCode == REQ_SYSTEM_SETTINGS) { loadSettings(); open(mCurrentPathFile,false); } } /** * * onConfigurationChanged: onConfigurationChanged * * @param newConfig Configuration * @return * @throws */ @Override public void onConfigurationChanged(Configuration newConfig) { Log.i(TAG,"onActivityResult"); try { super.onConfigurationChanged(newConfig); if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { } } catch (Exception e) { } } /** * * onDestroy: onDestroy * * @param * @return * @throws */ @Override protected void onDestroy() { Log.i(TAG,"onDestroy"); super.onDestroy(); } /** * * onNewIntent: onNewIntent * * @param * @return * @throws */ @Override protected void onNewIntent(Intent intent) { Log.i(TAG,"onNewIntent"); super.onNewIntent(intent); } /** * * onPause: onPause * * @param * @return * @throws */ @Override protected void onPause() { Log.i(TAG,"onPause"); super.onPause(); } /** * * onRestart: onRestart * * @param * @return * @throws */ @Override protected void onRestart() { Log.i(TAG,"onRestart"); super.onRestart(); } /** * * onResume: onResume * * @param * @return * @throws */ @Override protected void onResume() { Log.i(TAG,"onResume"); super.onResume(); } /** * * onStart: onStart * * @param * @return * @throws */ @Override protected void onStart() { Log.i(TAG,"onStart"); super.onStart(); } /** * * onStop: onStop * * @param * @return * @throws */ @Override protected void onStop() { Log.i(TAG,"onStop"); super.onStop(); } /** * * onKeyDown: KeyEvent * * @param keyCode The value of keyCode * @param event KeyEvent * @return boolean True if the KeyEvent has been dealt with, otherwise false. * @throws */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.i(TAG,"onKeyDown"); switch (keyCode) { case KeyEvent.KEYCODE_BACK: upward(); return true; //break; default: break; } return super.onKeyDown(keyCode, event); } /** * <b>onCreateContextMenu</b><br/> * 长按文件管理器中的文件,弹出上下文菜单 * * @param menu 上下文菜单 * @param v 正在被创建的菜单视图 * @param menuInfo 上下文菜单信息 * @return 无 * @exception 无 */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context, menu); AdapterView.AdapterContextMenuInfo info = null; try { info = (AdapterView.AdapterContextMenuInfo) menuInfo; } catch (ClassCastException e) { Log.e(TAG, "bad menuInfo", e); return; } File mselectedFile = madapter.getItem(info.position); if(mselectedFile != null) { menu.setHeaderTitle(mselectedFile.getName()); } } /** * <b>onContextItemSelected</b><br/> * 点击上下文菜单选项时的事件处理 * * @param item 被点击的菜单项 * @return true,表示事件已经处理;false,表示未处理。 * @exception 无 */ public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); File f = madapter.getItem(info.position); if(f == null) return false; switch (item.getItemId()) { // case R.id.open: // open(f,true); // return true; case R.id.openwith: openwith(f); return true; case R.id.copy: copy(f); return true; case R.id.cut: cut(f); return true; // case R.id.paste: // paste(); // return true; case R.id.rename: rename(f); return true; case R.id.delete: // deleteFile(f); // deleteItem(f); mDeleteFile = f; showDialog(FILE_DELETE); return true; case R.id.attribute: showdetails(f); return true; default: return super.onContextItemSelected(item); } } @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { File mselectedFile = madapter.getItem(position); if(mselectedFile != null) open(mselectedFile,true); } /** * * onCreateDialog: Create All The Dialogs. * * @param id The id of the dialog which should be created * @return Dialog The dialog which has been created. * @throws */ @Override protected Dialog onCreateDialog(int id) { Log.i(TAG,"onCreateDialog"); switch (id) { case FOLDER_CREATE: AlertDialog.Builder mcreatedialog = new AlertDialog.Builder(this); View layout = LayoutInflater.from(this).inflate(R.layout.file_create, null); final EditText text = (EditText) layout.findViewById(R.id.file_name); mcreatedialog.setTitle(R.string.dialog_create_folder_title); mcreatedialog.setView(layout); mcreatedialog.setPositiveButton(R.string.button_text_yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String newName = text.getText().toString().trim(); if (newName.length() == 0) { //Toast.makeText(this, R.string.file_namecannotempty, Toast.LENGTH_SHORT) // .show(); return; } String fullFileName = mCurrentPathFile+"/"+newName; File newFile = new File(fullFileName); createFolder(newFile); } }); mcreatedialog.setNegativeButton(R.string.button_text_no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); return mcreatedialog.create(); case FILE_RENAME: if (mRenameFile == null) { return null; } AlertDialog.Builder mrenamedialog = new AlertDialog.Builder(this); View renamelayout = LayoutInflater.from(this).inflate(R.layout.file_rename, null); final EditText renametext = (EditText) renamelayout.findViewById(R.id.file_name); renametext.setText(mRenameFile.getName()); mrenamedialog.setTitle(R.string.dialog_file_rename_title); mrenamedialog.setView(renamelayout); mrenamedialog.setPositiveButton(R.string.button_text_yes, new OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { String path = mRenameFile.getParentFile().getPath(); String newName = renametext.getText().toString().trim(); if (newName.equalsIgnoreCase(mRenameFile.getName())) { return; } if (newName.length() == 0) { //Toast.makeText(activity, R.string.file_namecannotempty, Toast.LENGTH_SHORT) // .show(); return; } String fullFileName = path+"/"+ newName; File newFile = new File(fullFileName); if (newFile.exists()) { //Toast.makeText(activity, R.string.file_exists, Toast.LENGTH_SHORT).show(); } else { try { if (mRenameFile.renameTo(newFile)) { //hander.sendEmptyMessage(0); // 成功 deleteItem(mRenameFile); addItem(newFile); mRenameFile = null; } else { //Toast.makeText(activity, R.string.file_rename_fail, Toast.LENGTH_SHORT) // .show(); } } catch (Exception ex) { //Toast.makeText(activity, ex.getLocalizedMessage(), Toast.LENGTH_SHORT) // .show(); } } } }).setNegativeButton(R.string.button_text_no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); return mrenamedialog.create(); case FILE_DETAILS: if (mDetailFile == null) { return null; } AlertDialog.Builder mdetaildialog = new AlertDialog.Builder(this); View detaillayout = LayoutInflater.from(this).inflate(R.layout.file_info, null); ((TextView) detaillayout.findViewById(R.id.file_name)).setText(mDetailFile.getName()); ((TextView) detaillayout.findViewById(R.id.file_lastmodified)).setText(getFileTime(mDetailFile.lastModified())); ((TextView) detaillayout.findViewById(R.id.file_size)) .setText(getFileSize(mDetailFile.length())); mdetaildialog.setTitle(R.string.dialog_file_details_title); mdetaildialog.setView(detaillayout); mdetaildialog.setPositiveButton(R.string.button_text_yes, new OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { mDetailFile = null; dialoginterface.cancel(); } }); return mdetaildialog.create(); case FILE_DELETE: if (mDeleteFile == null) { return null; } String message = getString(R.string.dialog_file_delete_message); message = String.format(message, mDeleteFile.getName()); AlertDialog.Builder mdeletedialog = new AlertDialog.Builder(this); mdeletedialog.setTitle(R.string.dialog_file_delete_title); mdeletedialog.setMessage(message); mdeletedialog.setPositiveButton(R.string.button_text_yes, new OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { deleteFile(mDeleteFile); deleteItem(mDeleteFile); mDeleteFile = null; } }).setNegativeButton(R.string.button_text_no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); return mdeletedialog.create(); default: break; } return super.onCreateDialog(id); } public String getFileTime(long filetime) { SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss"); String ftime = formatter.format(new Date(filetime)); return ftime; } public String getFileSize(long filesize) { DecimalFormat df = new DecimalFormat("#.00"); StringBuffer mstrbuf = new StringBuffer(); if (filesize < 1024) { mstrbuf.append(filesize); mstrbuf.append(" B"); } else if (filesize < 1048576) { mstrbuf.append(df.format((double)filesize / 1024)); mstrbuf.append(" K"); } else if (filesize < 1073741824) { mstrbuf.append(df.format((double)filesize / 1048576)); mstrbuf.append(" M"); } else { mstrbuf.append(df.format((double)filesize / 1073741824)); mstrbuf.append(" G"); } df = null; return mstrbuf.toString(); } /** * * onPrepareDialog: Update the Dialogs if needed. * * @param id The id of the dialog which should be updated. * @param Dialog The dialog which should be updated. * @throws */ @Override protected void onPrepareDialog(int id, Dialog dialog) { Log.i(TAG,"onPrepareDialog"); switch (id) { case FOLDER_CREATE: break; case FILE_RENAME: if (mRenameFile == null) { return ; } AlertDialog mrenamedialog = (AlertDialog)dialog; EditText renametext = (EditText) mrenamedialog.findViewById(R.id.file_name); renametext.setText(mRenameFile.getName()); break; case FILE_DETAILS: if (mDetailFile == null) { return ; } AlertDialog mdetaildialog = (AlertDialog)dialog; ((TextView) mdetaildialog.findViewById(R.id.file_name)).setText(mDetailFile.getName()); ((TextView) mdetaildialog.findViewById(R.id.file_lastmodified)).setText(getFileTime(mDetailFile.lastModified())); ((TextView) mdetaildialog.findViewById(R.id.file_size)) .setText(getFileSize(mDetailFile.length())); break; case FILE_DELETE: if (mDeleteFile == null) { return; } String message = getString(R.string.dialog_file_delete_message); message = String.format(message, mDeleteFile.getName()); AlertDialog mdeletedialog = (AlertDialog)dialog; mdeletedialog.setMessage(message); break; default: break; } super.onPrepareDialog(id, dialog); } /** * * onCreateOptionsMenu: Create the Menu if needed. * * @param menu The Menu which should be created. * @throws */ @Override public boolean onCreateOptionsMenu(Menu menu) { Log.i(TAG,"onCreateOptionsMenu"); super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options, menu); return true; } /** * * onPrepareOptionsMenu: Update the OptionsMenu if needed. * * @param menu The Menu which should be updated. * @throws */ @Override public boolean onPrepareOptionsMenu(Menu menu) { Log.i(TAG,"onPrepareOptionsMenu"); return true; } /** * * onOptionsItemSelected: Update the Dialogs if needed. * * @param item The menu which is selected. * @return true if the event has been dealt with,otherwise false. * @throws */ @Override public boolean onOptionsItemSelected(MenuItem item) { Log.i(TAG,"onOptionsItemSelected"); switch(item.getItemId()) { case R.id.new_folder: showDialog(FOLDER_CREATE); return true; case R.id.settings: startActivityForResult(new Intent(HDExplorerActivity.this, HDPreferenceActivity.class), REQ_SYSTEM_SETTINGS); return true; default: break; } return false; } }