package org.openintents.filemanager.lists; import java.io.File; import org.openintents.filemanager.FileManagerProvider; import org.openintents.filemanager.PreferenceActivity; import org.openintents.filemanager.R; import org.openintents.filemanager.files.FileHolder; import org.openintents.filemanager.view.PickBar; import org.openintents.filemanager.view.PickBar.OnPickRequestedListener; import org.openintents.intents.FileManagerIntents; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ListView; import android.widget.Toast; import android.widget.ViewFlipper; public class PickFileListFragment extends SimpleFileListFragment{ private PickBar mPickBar; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setLongClickMenus(R.menu.context_pick, R.menu.multiselect); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.filelist_pick, null); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ViewFlipper modeSelector = (ViewFlipper) view.findViewById(R.id.modeSelector); // Folder init if(getArguments().getBoolean(FileManagerIntents.EXTRA_DIRECTORIES_ONLY)){ modeSelector.setDisplayedChild(0); Button button = (Button) view.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { pickFileOrFolder(new File(getPath()), false); } }); if(getArguments().containsKey(FileManagerIntents.EXTRA_BUTTON_TEXT)){ button.setText(getArguments().getString(FileManagerIntents.EXTRA_BUTTON_TEXT)); } } // Files init else { modeSelector.setDisplayedChild(1); mPickBar = (PickBar) view.findViewById(R.id.pickBar); mPickBar.setButtonText(getArguments().getString(FileManagerIntents.EXTRA_BUTTON_TEXT)); mPickBar.setText(getFilename()); // TODO make file visible, i.e. scroll to item mPickBar.setOnPickRequestedListener(new OnPickRequestedListener() { @Override public void pickRequested(String filename) { if(filename.trim().length() == 0) { Toast.makeText(getActivity(), R.string.choose_filename, Toast.LENGTH_SHORT).show(); return; } // Pick pickFileOrFolder(new File(getPath() + (getPath().endsWith("/") ? "" : "/") + filename), getArguments().getBoolean(FileManagerIntents.EXTRA_IS_GET_CONTENT_INITIATED, false)); } }); } } @Override public void onListItemClick(ListView l, View v, int position, long id) { FileHolder item = (FileHolder) mAdapter.getItem(position); if(item.getFile().isFile()) mPickBar.setText(item.getName()); else super.onListItemClick(l, v, position, id); } /** * Act upon picking. * @param selection A {@link File} representing the user's selection. * @param getContentInitiated Whether the fragment was called through a GET_CONTENT intent on the IntentFilterActivity. We have to know this so that result is correctly formatted. */ private void pickFileOrFolder(File selection, boolean getContentInitiated){ Intent intent = new Intent(); intent.putExtras(getArguments()); PreferenceActivity.setDefaultPickFilePath(getActivity(), selection.getParent() != null ? selection.getParent() : "/"); if(getContentInitiated) intent.setData(Uri.parse(FileManagerProvider.FILE_PROVIDER_PREFIX + selection)); else intent.setData(Uri.fromFile(selection)); getActivity().setResult(Activity.RESULT_OK, intent); getActivity().finish(); } }