package com.ijoomer.common.classes; import android.content.Context; import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RadioGroup; import com.ijoomer.customviews.IjoomerButton; import com.ijoomer.customviews.IjoomerEditText; import com.ijoomer.customviews.IjoomerTextView; import com.ijoomer.src.R; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * This Class Contains All Method Related To IjoomerFileChooserActivity. * * @author tasol * */ public class IjoomerFileChooserActivity extends IjoomerSuperMaster { private LinearLayout lnrCreateFolder; private ListView lstFileChooser; private IjoomerButton btnSaveOrOpen; private IjoomerEditText edtFilePath; private IjoomerButton btnCreate; private IjoomerEditText edtFolderName; private ImageView btnMakeFolder; protected File mDirectory; protected ArrayList<File> mFiles; protected FilePickerListAdapter mAdapter; protected String[] acceptedFileExtensions; private String finalFilePath = ""; protected boolean mShowHiddenFiles = false; private boolean IN_ISOPENFILE = false; /** * The file path */ public final static String EXTRA_FILE_PATH = "file_path"; /** * Sets whether hidden files should be visible in the list or not */ public final static String EXTRA_SHOW_HIDDEN_FILES = "show_hidden_files"; /** * The allowed file extensions in an ArrayList of Strings */ public final static String EXTRA_ACCEPTED_FILE_EXTENSIONS = "accepted_file_extensions"; /** * The initial directory which will be used if no directory has been sent * with the intent */ private static String DEFAULT_INITIAL_DIRECTORY = "/mnt/sdcard/download"; /** * Override method */ @Override public int setLayoutId() { return R.layout.ijoomer_file_chooser; } @Override public void initComponents() { DEFAULT_INITIAL_DIRECTORY = getSmartApplication().readSharedPreferences().getString(SP_DEFAULT_DOWNLOAD_LOCATION, ""); if (DEFAULT_INITIAL_DIRECTORY.length() <= 0) { DEFAULT_INITIAL_DIRECTORY = "/mnt/sdcard/download"; } lstFileChooser = (ListView) findViewById(R.id.lstFileChooser); btnSaveOrOpen = (IjoomerButton) findViewById(R.id.btnSaveOrOpen); btnMakeFolder = (ImageView) findViewById(R.id.btnMakeFolder); edtFilePath = (IjoomerEditText) findViewById(R.id.edtFilePath); edtFilePath.setClickable(false); edtFilePath.setFocusableInTouchMode(false); edtFilePath.setFocusable(false); edtFolderName = (IjoomerEditText) findViewById(R.id.edtFolderName); lnrCreateFolder = (LinearLayout) findViewById(R.id.lnrCreateFolder); btnCreate = (IjoomerButton) findViewById(R.id.btnCreate); mDirectory = new File(DEFAULT_INITIAL_DIRECTORY); IN_ISOPENFILE = getIntent().getBooleanExtra("IN_ISOPENFILE", false); // Initialize the ArrayList mFiles = new ArrayList<File>(); // Initialize the extensions array to allow any file extensions acceptedFileExtensions = new String[] {}; // Get intent extras if (getIntent().hasExtra(EXTRA_FILE_PATH)) { mDirectory = new File(getIntent().getStringExtra(EXTRA_FILE_PATH)); } if (getIntent().hasExtra(EXTRA_SHOW_HIDDEN_FILES)) { mShowHiddenFiles = getIntent().getBooleanExtra(EXTRA_SHOW_HIDDEN_FILES, false); } if (getIntent().hasExtra(EXTRA_ACCEPTED_FILE_EXTENSIONS)) { ArrayList<String> collection = getIntent().getStringArrayListExtra(EXTRA_ACCEPTED_FILE_EXTENSIONS); acceptedFileExtensions = (String[]) collection.toArray(new String[collection.size()]); } finalFilePath = mDirectory.getAbsolutePath(); } @Override public void prepareViews() { // Set the ListAdapter mAdapter = new FilePickerListAdapter(this, mFiles); lstFileChooser.setAdapter(mAdapter); edtFilePath.setText(finalFilePath); } @Override protected void onResume() { refreshFilesList(); super.onResume(); } @Override public void setActionListeners() { btnSaveOrOpen.setOnClickListener(new OnClickListener() { @Override public void onClick(View paramView) { if (!IN_ISOPENFILE && mDirectory.canWrite()) { getSmartApplication().writeSharedPreferences(SP_DEFAULT_DOWNLOAD_LOCATION, mDirectory.getAbsolutePath()); Intent extra = new Intent(); finalFilePath = finalFilePath + "/"; extra.putExtra("IN_PATH", finalFilePath); setResult(RESULT_OK, extra); finish(); } else if (IN_ISOPENFILE && mDirectory.canRead()) { getSmartApplication().writeSharedPreferences(SP_DEFAULT_DOWNLOAD_LOCATION, mDirectory.getAbsolutePath()); Intent extra = new Intent(); extra.putExtra("IN_PATH", finalFilePath); setResult(RESULT_OK, extra); finish(); } else { ting(getString(R.string.code705)); } } }); btnMakeFolder.setOnClickListener(new OnClickListener() { @Override public void onClick(View paramView) { if (mDirectory.canWrite()) { if (lnrCreateFolder.getVisibility() == View.GONE) { lnrCreateFolder.setVisibility(View.VISIBLE); edtFolderName.setText(null); edtFolderName.setError(null); } else { lnrCreateFolder.setVisibility(View.GONE); } } else { ting(getString(R.string.code705)); } } }); btnCreate.setOnClickListener(new OnClickListener() { @Override public void onClick(View paramView) { if (edtFolderName.getText().toString().trim().length() <= 0) { edtFolderName.setError(getString(R.string.validation_value_required)); } else { File wallpaperDirectory = new File(mDirectory.getAbsolutePath() + "/" + edtFolderName.getText().toString() + "/"); wallpaperDirectory.mkdirs(); refreshFilesList(); lnrCreateFolder.setVisibility(View.GONE); } } }); lstFileChooser.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> l, View v, int position, long id) { File newFile = (File) l.getItemAtPosition(position); if (newFile.isFile()) { if (IN_ISOPENFILE) { finalFilePath = newFile.getAbsolutePath(); edtFilePath.setText(finalFilePath); } } else { mDirectory = newFile; finalFilePath = newFile.getAbsolutePath(); edtFilePath.setText(finalFilePath); refreshFilesList(); } } }); } @Override public void onBackPressed() { if (lnrCreateFolder.getVisibility() == View.VISIBLE) { lnrCreateFolder.setVisibility(View.GONE); return; } if (mDirectory.getParentFile() != null) { if ((IN_ISOPENFILE && mDirectory.getParentFile().canRead()) || (!IN_ISOPENFILE && mDirectory.getParentFile().canWrite())) { mDirectory = mDirectory.getParentFile(); finalFilePath = mDirectory.getAbsolutePath(); edtFilePath.setText(finalFilePath); refreshFilesList(); return; } } super.onBackPressed(); } @Override public int setTabBarDividerResId() { return 0; } @Override public int setTabItemLayoutId() { return 0; } @Override public String[] setTabItemNames() { return null; } @Override public int[] setTabItemOffDrawables() { return null; } @Override public int[] setTabItemOnDrawables() { return null; } @Override public int[] setTabItemPressDrawables() { return null; } @Override public void onCheckedChanged(RadioGroup paramRadioGroup, int paramInt) { } @Override public int setFooterLayoutId() { return 0; } @Override public int setHeaderLayoutId() { return 0; } @Override public View setLayoutView() { return null; } /** * Class methods */ /** * Updates the list view to the current directory */ private void refreshFilesList() { if (mDirectory.canWrite()) { btnMakeFolder.setVisibility(View.VISIBLE); } else { btnMakeFolder.setVisibility(View.GONE); } // Clear the files ArrayList mFiles.clear(); // Set the extension file filter ExtensionFilenameFilter filter = new ExtensionFilenameFilter(acceptedFileExtensions); // Get the files in the directory File[] files = mDirectory.listFiles(filter); if (files != null && files.length > 0) { for (File f : files) { if (f.isHidden() && !mShowHiddenFiles) { // Don't add the file continue; } // Add the file the ArrayAdapter mFiles.add(f); } Collections.sort(mFiles, new FileComparator()); } mAdapter.notifyDataSetChanged(); } /** * List adapter */ private class FilePickerListAdapter extends ArrayAdapter<File> { private List<File> mObjects; public FilePickerListAdapter(Context context, List<File> objects) { super(context, R.layout.ijoomer_filechooser_list_item, android.R.id.text1, objects); mObjects = objects; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = null; if (convertView == null) { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); row = inflater.inflate(R.layout.ijoomer_filechooser_list_item, parent, false); } else { row = convertView; } File object = mObjects.get(position); ImageView imageView = (ImageView) row.findViewById(R.id.file_picker_image); IjoomerTextView IjoomerTextView = (IjoomerTextView) row.findViewById(R.id.file_picker_text); // Set single line IjoomerTextView.setSingleLine(true); IjoomerTextView.setText(object.getName()); if (object.isFile()) { // Show the file icon imageView.setImageResource(R.drawable.file); } else { // Show the folder icon imageView.setImageResource(R.drawable.folder); } return row; } } /** * Inner class */ private class FileComparator implements Comparator<File> { @Override public int compare(File f1, File f2) { if (f1 == f2) { return 0; } if (f1.isDirectory() && f2.isFile()) { // Show directories above files return -1; } if (f1.isFile() && f2.isDirectory()) { // Show files below directories return 1; } // Sort the directories alphabetically return f1.getName().compareToIgnoreCase(f2.getName()); } } private class ExtensionFilenameFilter implements FilenameFilter { private String[] mExtensions; public ExtensionFilenameFilter(String[] extensions) { super(); mExtensions = extensions; } @Override public boolean accept(File dir, String filename) { if (new File(dir, filename).isDirectory()) { return true; } if (mExtensions != null && mExtensions.length > 0) { int size = mExtensions.length; for (int i = 0; i < size; i++) { if (filename.endsWith(mExtensions[i])) { return true; } } return false; } return true; } } }