/** * Copyright 2010 Eric Taix Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language governing permissions and limitations under the * License. */ package com.bigpupdev.synodroid.ui; import java.io.File; import java.util.Arrays; import com.bigpupdev.synodroid.R; import com.bigpupdev.synodroid.Synodroid; import com.bigpupdev.synodroid.action.AddTaskAction; import com.bigpupdev.synodroid.adapter.FileAdapter; import com.bigpupdev.synodroid.utils.FileItem; import android.content.res.Configuration; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Message; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.TextView; /** * This activity displays a help page * * @author Steve Garon (synodroid at gmail dot com) */ public class FileFragment extends SynodroidFragment { private ListView lvFiles; private TextView tvFiles; private FileAdapter faFiles; @Override public void onConfigurationChanged(Configuration newConfig) { // ignore orientation change super.onConfigurationChanged(newConfig); } /** * Activity creation */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); final Synodroid app = (Synodroid) getActivity().getApplication(); try { if (app.DEBUG) Log.v(Synodroid.DS_TAG, "FileFragment: Creating File fragment"); } catch (Exception ex) {/* DO NOTHING */} View file_layout = inflater.inflate(R.layout.file, null, false); lvFiles = (ListView) file_layout.findViewById(R.id.file_list); tvFiles = (TextView) file_layout.findViewById(R.id.file_text); View empty = file_layout.findViewById(android.R.id.empty); faFiles = new FileAdapter(getActivity()); addFilesToAdapter(Environment.getExternalStorageDirectory().getPath()); lvFiles.setAdapter(faFiles); lvFiles.setEmptyView(empty); lvFiles.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { FileItem selectedItem = (FileItem) lvFiles.getItemAtPosition(position); final File selectedFile = new File(tvFiles.getText() + "/" + selectedItem.tag); File backFile = new File(tvFiles.getText().toString()); if (!selectedFile.exists()) return; if (selectedFile.isDirectory()){ if (app.DEBUG) Log.d(Synodroid.DS_TAG, "FileFragment: Directory " + selectedFile.getAbsolutePath() + " was click. Loading the content..."); if (selectedItem.id == -1){ //Go Back String back = backFile.getAbsolutePath().substring(0, backFile.getAbsolutePath().length() - backFile.getName().length() -1); addFilesToAdapter(back); } else{ addFilesToAdapter(selectedFile.getAbsolutePath()); } } else{ if (app.DEBUG) Log.d(Synodroid.DS_TAG, "FileFragment: File " + selectedFile.getAbsolutePath() + " was click."); if (selectedFile.getName().endsWith(".torrent") || selectedFile.getName().endsWith(".nzb") ){ if (app.DEBUG) Log.d(Synodroid.DS_TAG, "FileFragment: The file is a torrent or nzb file, it will be added to the download list."); ConfirmDialog dialog = new ConfirmDialog(); Runnable ok = new Runnable(){ @Override public void run() { app.executeAsynchronousAction(FileFragment.this, new AddTaskAction(Uri.parse(selectedFile.getAbsolutePath()), false, true), true); } }; dialog.Confirm(getActivity(), getActivity().getText(R.string.confirm_download).toString(), selectedFile.getAbsolutePath(), getActivity().getText(R.string.button_cancel).toString(), getActivity().getText(R.string.button_ok).toString(), ok, ConfirmDialog.empty); } else{ if (app.DEBUG) Log.d(Synodroid.DS_TAG, "FileFragment: Unsupported file type. Do Nothing..."); } } } }); return file_layout; } public String getCurrentFolder(){ return tvFiles.getText().toString(); } public void addFilesToAdapter(String path){ faFiles.clear(); tvFiles.setText(path); File dir = new File(path); if (dir.exists()){ File[] f_list = dir.listFiles(); if (f_list == null) { return; } Arrays.sort(f_list); if (!path.equals(Environment.getExternalStorageDirectory().getPath())){ faFiles.add(new FileItem("..",R.drawable.ic_file, -1)); } //Do Directories for (File cur_file : f_list){ if (cur_file.getName().startsWith(".")) continue; if (cur_file.isDirectory()){ faFiles.add(new FileItem(cur_file.getName(),R.drawable.ic_file, 0)); } } //Do Files for (File cur_file : f_list){ if (cur_file.getName().startsWith(".")) continue; if (!cur_file.isDirectory()){ if (cur_file.getName().endsWith(".torrent") || cur_file.getName().endsWith(".nzb") ){ faFiles.add(new FileItem(cur_file.getName(),R.drawable.ic_torrent_file, 1)); } else{ faFiles.add(new FileItem(cur_file.getName(),R.drawable.ic_unknown_file, 2)); } } } } } @Override public void handleMessage(Message msgP) { // TODO Auto-generated method stub } }