/* * (non-Javadoc) * This will check if the user is at root dir. If so, if they press back * again, it will close the app. * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent) */ @Override public boolean onKeyDown(int keycode, KeyEvent event) { String current = flmg.getCurrentDir(); if (keycode == KeyEvent.KEYCODE_SEARCH) { showDialog(SEARCH_B); return true; } else if (keycode == KeyEvent.KEYCODE_BACK && use_back_key && !current.equals("/")) { if (handler.isMultiSelected()) { table.killMultiSelect(); Toast.makeText(Main.this, "Multi-select is now off", Toast.LENGTH_SHORT).show(); } handler.updateDirectory(flmg.getPreviousDir()); path_label.setText(flmg.getCurrentDir()); return true; } else if (keycode == KeyEvent.KEYCODE_BACK && use_back_key && current.equals("/")) { Toast.makeText(Main.this, "Press back again to quit.", Toast.LENGTH_SHORT).show(); use_back_key = false; path_label.setText(flmg.getCurrentDir()); return false; } else if (keycode == KeyEvent.KEYCODE_BACK && !use_back_key && current.equals("/")) { finish(); return false; } return false; }
@Override public boolean onKeyDown(int keycode, KeyEvent event) { String current = mFileMag.getCurrentDir(); if (keycode == KeyEvent.KEYCODE_BACK && mUseBackKey && !current.equals("/")) { mHandler.updateDirectory(mFileMag.getPreviousDir()); mPathLabel.setText(mFileMag.getCurrentDir()); return true; } else if (keycode == KeyEvent.KEYCODE_BACK && mUseBackKey && current.equals("/")) { Toast.makeText(FileImportActivity.this, R.string.root_directory_tip, Toast.LENGTH_SHORT) .show(); mUseBackKey = false; mPathLabel.setText(mFileMag.getCurrentDir()); return false; } else if (keycode == KeyEvent.KEYCODE_BACK && !mUseBackKey && current.equals("/")) { finish(); return false; } return false; }
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); SharedPreferences.Editor editor = settings.edit(); boolean check; int color; /* resultCode must equal RESULT_CANCELED because the only way * out of that activity is pressing the back button on the phone * this publishes a canceled result code not an ok result code */ if (requestCode == SETTING_REQ && resultCode == RESULT_CANCELED) { // save the information we get from settings activity check = data.getBooleanExtra("HIDDEN", false); color = data.getIntExtra("COLOR", -1); editor.putBoolean(PREFS_HIDDEN, check); editor.putInt(PREFS_COLOR, color); editor.commit(); flmg.setShowHiddenFiles(check); handler.setTextColor(color); handler.updateDirectory(flmg.getNextDir(flmg.getCurrentDir(), true)); } }
@Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home || item.getItemId() == 0) { return false; } mSettings.edit().putInt(PREFS_SORT, item.getItemId()).commit(); mFileMag.setSortType(item.getItemId()); mHandler.updateDirectory(mFileMag.getNextDir(mFileMag.getCurrentDir(), true)); return true; }
/** This method, handles the button presses of the top buttons found in the Main activity. */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.home_sdcard_button: mFileMang.canMkdir = true; refreshFocus(preView, v); if (mFileMang.whichRoot() == FileManager.ROOT_SDCARD && mlistmode == TREEVIEW_MODE) { break; } mlistmode = TREEVIEW_MODE; if (multi_select_flag) { mDelegate.killMultiSelect(true); mFileMang.mHoldingFile = false; mFileMang.mAllowSelectAll = false; mInfoLabel.setText(""); mFileMang.moveOrCopyFile = false; Toast.makeText( mContext, mContext.getResources().getString(R.string.Multi_select_off), Toast.LENGTH_SHORT) .show(); } updateDirectory(mFileMang.getHomeDir(FileManager.ROOT_SDCARD)); if (mPathLabel != null) mPathLabel.setText( mFileMang.getCurrentDir().substring(5, mFileMang.getCurrentDir().length())); break; case R.id.home_usbhost_button: mFileMang.canMkdir = true; refreshFocus(preView, v); if (mFileMang.whichRoot() == FileManager.ROOT_USBHOST && mlistmode == TREEVIEW_MODE) { break; } mlistmode = TREEVIEW_MODE; if (multi_select_flag) { mDelegate.killMultiSelect(true); mFileMang.mHoldingFile = false; mFileMang.mAllowSelectAll = false; mInfoLabel.setText(""); mFileMang.moveOrCopyFile = false; Toast.makeText( mContext, mContext.getResources().getString(R.string.Multi_select_off), Toast.LENGTH_SHORT) .show(); } updateDirectory(mFileMang.getHomeDir(FileManager.ROOT_USBHOST)); if (mPathLabel != null) mPathLabel.setText( mFileMang.getCurrentDir().substring(5, mFileMang.getCurrentDir().length())); break; case R.id.home_flash_button: mFileMang.canMkdir = true; refreshFocus(preView, v); if (mFileMang.whichRoot() == FileManager.ROOT_FLASH && mlistmode == TREEVIEW_MODE) { break; } mlistmode = TREEVIEW_MODE; if (multi_select_flag) { mDelegate.killMultiSelect(true); mFileMang.mHoldingFile = false; mFileMang.mAllowSelectAll = false; mInfoLabel.setText(""); mFileMang.moveOrCopyFile = false; Toast.makeText( mContext, mContext.getResources().getString(R.string.Multi_select_off), Toast.LENGTH_SHORT) .show(); } updateDirectory(mFileMang.getHomeDir(FileManager.ROOT_FLASH)); if (mPathLabel != null) mPathLabel.setText( mFileMang.getCurrentDir().substring(5, mFileMang.getCurrentDir().length())); break; case R.id.music_button: mFileMang.canMkdir = false; mlistmode = CATALOG_MODE; if (multi_select_flag) { mDelegate.killMultiSelect(true); mFileMang.mHoldingFile = false; mFileMang.mAllowSelectAll = false; mInfoLabel.setText(""); mFileMang.moveOrCopyFile = false; Toast.makeText( mContext, mContext.getResources().getString(R.string.Multi_select_off), Toast.LENGTH_SHORT) .show(); } setFileList(mCataList.SetFileTyp(CatalogList.TYPE_MUSIC)); if (mPathLabel != null) mPathLabel.setText(mContext.getResources().getString(R.string.music)); refreshFocus(preView, v); break; case R.id.image_button: mFileMang.canMkdir = false; mlistmode = CATALOG_MODE; if (multi_select_flag) { mDelegate.killMultiSelect(true); mFileMang.mHoldingFile = false; mFileMang.mAllowSelectAll = false; mInfoLabel.setText(""); mFileMang.moveOrCopyFile = false; Toast.makeText( mContext, mContext.getResources().getString(R.string.Multi_select_off), Toast.LENGTH_SHORT) .show(); } setFileList(mCataList.SetFileTyp(CatalogList.TYPE_PICTURE)); if (mPathLabel != null) mPathLabel.setText(mContext.getResources().getString(R.string.picture)); refreshFocus(preView, v); break; case R.id.movie_button: mFileMang.canMkdir = false; mlistmode = CATALOG_MODE; if (multi_select_flag) { mDelegate.killMultiSelect(true); mFileMang.mHoldingFile = false; mFileMang.mAllowSelectAll = false; mInfoLabel.setText(""); mFileMang.moveOrCopyFile = false; Toast.makeText( mContext, mContext.getResources().getString(R.string.Multi_select_off), Toast.LENGTH_SHORT) .show(); } setFileList(mCataList.SetFileTyp(CatalogList.TYPE_MOVIE)); if (mPathLabel != null) mPathLabel.setText(mContext.getResources().getString(R.string.movie)); refreshFocus(preView, v); break; case R.id.ebook_button: mFileMang.canMkdir = false; mlistmode = CATALOG_MODE; if (multi_select_flag) { mDelegate.killMultiSelect(true); mFileMang.mHoldingFile = false; mFileMang.mAllowSelectAll = false; mInfoLabel.setText(""); mFileMang.moveOrCopyFile = false; Toast.makeText( mContext, mContext.getResources().getString(R.string.Multi_select_off), Toast.LENGTH_SHORT) .show(); } setFileList(mCataList.SetFileTyp(CatalogList.TYPE_EBOOK)); if (mPathLabel != null) mPathLabel.setText(mContext.getResources().getString(R.string.ebook)); refreshFocus(preView, v); break; case R.id.apk_button: mFileMang.canMkdir = false; mlistmode = CATALOG_MODE; if (multi_select_flag) { mDelegate.killMultiSelect(true); mFileMang.mHoldingFile = false; mFileMang.mAllowSelectAll = false; mInfoLabel.setText(""); mFileMang.moveOrCopyFile = false; Toast.makeText( mContext, mContext.getResources().getString(R.string.Multi_select_off), Toast.LENGTH_SHORT) .show(); } setFileList(mCataList.SetFileTyp(CatalogList.TYPE_APK)); if (mPathLabel != null) mPathLabel.setText(mContext.getResources().getString(R.string.apk)); refreshFocus(preView, v); break; case R.id.hidden_move: case R.id.hidden_copy: if (mMultiSelectData == null || mMultiSelectData.isEmpty()) { mDelegate.killMultiSelect(true); mFileMang.moveOrCopyFile = false; mFileMang.mAllowSelectAll = false; Toast.makeText( mContext, mContext.getResources().getString(R.string.no_select), Toast.LENGTH_SHORT) .show(); break; } mFileMang.mCopyOrMoveSize = 0; for (String s : mMultiSelectData) { System.out.println("--->" + s); mFileMang.mCopyOrMoveSize += mFileMang.getDirOrFileSize(s); } if (v.getId() == R.id.hidden_move) delete_after_copy = true; mInfoLabel.setText( mContext.getResources().getString(R.string.Holding) + " " + mMultiSelectData.size() + " " + mContext.getResources().getString(R.string.files)); mFileMang.mHoldingFile = true; mFileMang.mAllowSelectAll = false; mDelegate.killMultiSelect(false); break; case R.id.hidden_delete: /* check if user selected objects before going further */ if (!mFileMang.moveOrCopyFile) { mMultiSelectData = null; } if (mMultiSelectData == null || mMultiSelectData.isEmpty()) { mDelegate.killMultiSelect(true); mFileMang.moveOrCopyFile = false; mFileMang.mAllowSelectAll = false; Toast.makeText( mContext, mContext.getResources().getString(R.string.no_select), Toast.LENGTH_SHORT) .show(); break; } final String[] data = new String[mMultiSelectData.size()]; int at = 0; for (String string : mMultiSelectData) data[at++] = string; AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setMessage( mContext.getResources().getString(R.string.delete_msg1) + " " + data.length + " " + mContext.getResources().getString(R.string.delete_msg2)); builder.setCancelable(false); builder.setPositiveButton( mContext.getResources().getString(R.string.Delete), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { new BackgroundWork(DELETE_TYPE).execute(data); mDelegate.killMultiSelect(true); mFileMang.moveOrCopyFile = false; mFileMang.mAllowSelectAll = false; } }); builder.setNegativeButton( mContext.getResources().getString(R.string.Cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mDelegate.killMultiSelect(true); mFileMang.moveOrCopyFile = false; mFileMang.mAllowSelectAll = false; dialog.cancel(); } }); builder.create().show(); break; } }
@Override public void onListItemClick(ListView parent, View view, int position, long id) { final String item = mHandler.getData(position); final File file = new File(mFileMag.getCurrentDir() + "/" + item); String item_ext = null; try { item_ext = item.substring(item.lastIndexOf(".") + 1, item.length()); } catch (IndexOutOfBoundsException e) { item_ext = ""; } if (file.isDirectory()) { if (file.canRead()) { mHandler.updateDirectory(mFileMag.getNextDir(item, false)); mPathLabel.setText(mFileMag.getCurrentDir()); if (!mUseBackKey) mUseBackKey = true; } else { Toast.makeText(this, R.string.permission, Toast.LENGTH_SHORT).show(); } } else if (item_ext.equalsIgnoreCase("zip")) { AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle(R.string.alert); builder.setMessage(R.string.sure_this_directory); builder.setPositiveButton( R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(mContext, file.getPath(), Toast.LENGTH_SHORT).show(); UnzipNotificationCenter unzipNotificationCenter = new UnzipNotificationCenter(mContext, FileImportActivity.class); int id = unzipNotificationCenter.prepareUnzipNotification( R.drawable.unzip, R.string.start_unzip, R.string.start_unzip, R.string.unzip_tip); unzipNotificationCenter.startUnzip( id, file.getPath(), Environment.getExternalStorageDirectory() + "/" + Constants.SAVE_DIRECTORY, true); } }); builder.setNegativeButton( R.string.no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.show(); } }
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("location", mFileMag.getCurrentDir()); }
@Override protected Dialog onCreateDialog(int id) { final Dialog dialog = new Dialog(Main.this); switch (id) { case MENU_MKDIR: dialog.setContentView(R.layout.input_layout); dialog.setTitle("Create New Directory"); dialog.setCancelable(false); ImageView icon = (ImageView) dialog.findViewById(R.id.input_icon); icon.setImageResource(R.drawable.newfolder); TextView label = (TextView) dialog.findViewById(R.id.input_label); label.setText(flmg.getCurrentDir()); final EditText input = (EditText) dialog.findViewById(R.id.input_inputText); Button cancel = (Button) dialog.findViewById(R.id.input_cancel_b); Button create = (Button) dialog.findViewById(R.id.input_create_b); create.setOnClickListener( new OnClickListener() { public void onClick(View v) { if (input.getText().length() > 1) { if (flmg.createDir(flmg.getCurrentDir() + "/", input.getText().toString()) == 0) Toast.makeText( Main.this, "Folder " + input.getText().toString() + " created", Toast.LENGTH_LONG) .show(); else Toast.makeText(Main.this, "New folder was not created", Toast.LENGTH_SHORT) .show(); } dialog.dismiss(); String temp = flmg.getCurrentDir(); handler.updateDirectory(flmg.getNextDir(temp, true)); } }); cancel.setOnClickListener( new OnClickListener() { public void onClick(View v) { dialog.dismiss(); } }); break; case D_MENU_RENAME: case F_MENU_RENAME: dialog.setContentView(R.layout.input_layout); dialog.setTitle("Rename " + selected_list_item); dialog.setCancelable(false); ImageView rename_icon = (ImageView) dialog.findViewById(R.id.input_icon); rename_icon.setImageResource(R.drawable.rename); TextView rename_label = (TextView) dialog.findViewById(R.id.input_label); rename_label.setText(flmg.getCurrentDir()); final EditText rename_input = (EditText) dialog.findViewById(R.id.input_inputText); Button rename_cancel = (Button) dialog.findViewById(R.id.input_cancel_b); Button rename_create = (Button) dialog.findViewById(R.id.input_create_b); rename_create.setText("Rename"); rename_create.setOnClickListener( new OnClickListener() { public void onClick(View v) { if (rename_input.getText().length() < 1) dialog.dismiss(); if (flmg.renameTarget( flmg.getCurrentDir() + "/" + selected_list_item, rename_input.getText().toString()) == 0) { Toast.makeText( Main.this, selected_list_item + " was renamed to " + rename_input.getText().toString(), Toast.LENGTH_LONG) .show(); } else Toast.makeText( Main.this, selected_list_item + " was not renamed", Toast.LENGTH_LONG) .show(); dialog.dismiss(); String temp = flmg.getCurrentDir(); handler.updateDirectory(flmg.getNextDir(temp, true)); } }); rename_cancel.setOnClickListener( new OnClickListener() { public void onClick(View v) { dialog.dismiss(); } }); break; case SEARCH_B: case MENU_SEARCH: dialog.setContentView(R.layout.input_layout); dialog.setTitle("Search"); dialog.setCancelable(false); ImageView searchIcon = (ImageView) dialog.findViewById(R.id.input_icon); searchIcon.setImageResource(R.drawable.search); TextView search_label = (TextView) dialog.findViewById(R.id.input_label); search_label.setText("Search for a file"); final EditText search_input = (EditText) dialog.findViewById(R.id.input_inputText); Button search_button = (Button) dialog.findViewById(R.id.input_create_b); Button cancel_button = (Button) dialog.findViewById(R.id.input_cancel_b); search_button.setText("Search"); search_button.setOnClickListener( new OnClickListener() { public void onClick(View v) { String temp = search_input.getText().toString(); if (temp.length() > 0) handler.searchForFile(temp); dialog.dismiss(); } }); cancel_button.setOnClickListener( new OnClickListener() { public void onClick(View v) { dialog.dismiss(); } }); break; } return dialog; }
@Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case D_MENU_DELETE: case F_MENU_DELETE: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Warning "); builder.setIcon(R.drawable.warning); builder.setMessage( "Deleting " + selected_list_item + " cannot be undone. Are you sure you want to delete?"); builder.setCancelable(false); builder.setNegativeButton( "Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.setPositiveButton( "Delete", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { handler.deleteFile(flmg.getCurrentDir() + "/" + selected_list_item); } }); AlertDialog alert_d = builder.create(); alert_d.show(); return true; case D_MENU_RENAME: showDialog(D_MENU_RENAME); return true; case F_MENU_RENAME: showDialog(F_MENU_RENAME); return true; case F_MENU_ATTACH: File file = new File(flmg.getCurrentDir() + "/" + selected_list_item); Intent mail_int = new Intent(); mail_int.setAction(android.content.Intent.ACTION_SEND); mail_int.setType("application/mail"); mail_int.putExtra(Intent.EXTRA_BCC, ""); mail_int.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); startActivity(mail_int); return true; case F_MENU_COPY: case D_MENU_COPY: copied_target = flmg.getCurrentDir() + "/" + selected_list_item; holding_file = true; detail_label.setText("Waiting to paste file " + selected_list_item); return true; case D_MENU_PASTE: boolean multi_select = handler.hasMultiSelectData(); if (multi_select) { handler.copyFileMultiSelect(flmg.getCurrentDir() + "/" + selected_list_item); } else if (holding_file && copied_target.length() > 1) { handler.copyFile(copied_target, flmg.getCurrentDir() + "/" + selected_list_item); holding_file = false; detail_label.setText(""); } return true; case D_MENU_ZIP: String dir = flmg.getCurrentDir(); handler.zipFile(dir + "/" + selected_list_item); return true; case D_MENU_UNZIP: if (holding_zip && zipped_target.length() > 1) { String current_dir = flmg.getCurrentDir() + "/" + selected_list_item + "/"; String old_dir = zipped_target.substring(0, zipped_target.lastIndexOf("/")); String name = zipped_target.substring(zipped_target.lastIndexOf("/") + 1, zipped_target.length()); if (new File(zipped_target).canRead() && new File(current_dir).canWrite()) { handler.unZipFileToDir(name, current_dir, old_dir); path_label.setText(current_dir); } else { Toast.makeText(this, "You do not have permission to unzip " + name, Toast.LENGTH_SHORT) .show(); } } holding_zip = false; detail_label.setText(""); zipped_target = ""; return true; } return false; }
/** * To add more functionality and let the user interact with more file types, this is the function * to add the ability. * * <p>(note): this method can be done more efficiently */ @Override public void onListItemClick(ListView parent, View view, int position, long id) { final String item = handler.getData(position); boolean multiSelect = handler.isMultiSelected(); File file = new File(flmg.getCurrentDir() + "/" + item); String item_ext = null; try { item_ext = item.substring(item.lastIndexOf("."), item.length()); } catch (IndexOutOfBoundsException e) { item_ext = ""; } /* * If the user has multi-select on, we just need to record the file * not make an intent for it. */ if (multiSelect) { table.addMultiPosition(position, file.getPath()); } else { if (file.isDirectory()) { if (file.canRead()) { handler.updateDirectory(flmg.getNextDir(item, false)); path_label.setText(flmg.getCurrentDir()); /*set back button switch to true (this will be better implemented later)*/ if (!use_back_key) use_back_key = true; } else Toast.makeText(this, "Can't read folder due to permissions", Toast.LENGTH_SHORT).show(); } /*music file selected--add more audio formats*/ else if (item_ext.equalsIgnoreCase(".mp3") || item_ext.equalsIgnoreCase(".m4a")) { Intent music_int = new Intent(this, AudioPlayblack.class); music_int.putExtra("MUSIC PATH", flmg.getCurrentDir() + "/" + item); startActivity(music_int); } /*photo file selected*/ else if (item_ext.equalsIgnoreCase(".jpeg") || item_ext.equalsIgnoreCase(".jpg") || item_ext.equalsIgnoreCase(".png") || item_ext.equalsIgnoreCase(".gif") || item_ext.equalsIgnoreCase(".tiff")) { if (file.exists()) { Intent pic_int = new Intent(); pic_int.setAction(android.content.Intent.ACTION_VIEW); pic_int.setDataAndType(Uri.fromFile(file), "image/*"); startActivity(pic_int); } } /*video file selected--add more video formats*/ else if (item_ext.equalsIgnoreCase(".m4v") || item_ext.equalsIgnoreCase(".3gp") || item_ext.equalsIgnoreCase(".wmv") || item_ext.equalsIgnoreCase(".mp4") || item_ext.equalsIgnoreCase(".ogg")) { if (file.exists()) { Intent movie_int = new Intent(); movie_int.setAction(android.content.Intent.ACTION_VIEW); movie_int.setDataAndType(Uri.fromFile(file), "video/*"); startActivity(movie_int); } } /*zip and gzip file selected (gzip will be implemented soon)*/ else if (item_ext.equalsIgnoreCase(".zip")) { // || item_ext.equalsIgnoreCase(".gzip")) { AlertDialog.Builder builder = new AlertDialog.Builder(this); AlertDialog alert; zipped_target = flmg.getCurrentDir() + "/" + item; CharSequence[] option = {"Extract here", "Extract to..."}; builder.setTitle("Extract"); builder.setItems( option, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: String dir = flmg.getCurrentDir(); handler.unZipFile(item, dir + "/"); break; case 1: detail_label.setText("Holding " + item + " to extract"); holding_zip = true; break; } } }); alert = builder.create(); alert.show(); } /*pdf file selected*/ else if (item_ext.equalsIgnoreCase(".pdf")) { if (file.exists()) { Intent file_int = new Intent(); file_int.setAction(android.content.Intent.ACTION_VIEW); file_int.setDataAndType(Uri.fromFile(file), "application/pdf"); startActivity(file_int); } } /*Android application file*/ else if (item_ext.equalsIgnoreCase(".apk")) { if (file.exists()) { Intent apk_int = new Intent(); apk_int.setAction(android.content.Intent.ACTION_VIEW); apk_int.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); startActivity(apk_int); } } /* HTML file */ else if (item_ext.equalsIgnoreCase(".html")) { if (file.exists()) { Intent html_int = new Intent(); html_int.setAction(android.content.Intent.ACTION_VIEW); html_int.setDataAndType(Uri.fromFile(file), "application/htmlviewer"); try { startActivity(html_int); } catch (ActivityNotFoundException e) { Toast.makeText(this, "Sorry, couldn't find a HTML view", Toast.LENGTH_SHORT).show(); } } } } }