package no.ntnu.item.csv; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutionException; import no.ntnu.item.csv.capability.Capability; import no.ntnu.item.csv.credentials.DisplayCapability; import no.ntnu.item.csv.csvobject.CSVFolder; import no.ntnu.item.csv.exception.FailedToVerifySignatureException; import no.ntnu.item.csv.exception.NoSuchAliasException; import no.ntnu.item.csv.exception.RemoteFileDoesNotExistException; import no.ntnu.item.csv.exception.ServerCommunicationException; import no.ntnu.item.csv.guiutils.BrowseList; import no.ntnu.item.csv.workers.AddToShareTask; import no.ntnu.item.csv.workers.CreateFolderTask; import no.ntnu.item.csv.workers.DownloadTask; import no.ntnu.item.csv.workers.UnlinkObjectTask; import no.ntnu.item.csv.workers.UploadTask; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; public class RemoteBrowseActivity extends ListActivity { public static final int MENU_UPLOAD_FILE = 1; public static final int MENU_CREATE_FOLDER = 2; public static final int MENU_SHOW_CAPABILITY = 3; public static final int CONTEXTMENU_DOWNLOAD_FILE = 3; public static final int CONTEXTMENU_SHARE_OBJECT = 1; public static final int CONTEXTMENU_UNLINK = 2; private static Map<String, Capability> files; private CreateFolderTask newFolderTask; private final String NEW_SHARE_ACTION = "Share with new user"; private final int REQUEST_NEWUSERSHARE = 0; private final String REQUEST_RESULT_FOLDERALIAS = "folderalias"; private String contextMenusAreStupidAliasHolder = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerForContextMenu(getListView()); doBrowsing(); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; LinearLayout ll = (LinearLayout) info.targetView; String clicked_alias = ((TextView) ll.getChildAt(1)).getText() .toString(); Capability cap = CSVActivity.fm.getCurrentFolder().getContents() .get(clicked_alias); menu.setHeaderTitle("Actions"); if (cap.isFile()) { menu.add(0, CONTEXTMENU_DOWNLOAD_FILE, 0, "Download File"); } menu.add(0, CONTEXTMENU_UNLINK, 0, "Unlink"); Menu sub = menu.addSubMenu("Share with..."); for (String alias : CSVActivity.fm.getShareFolder().getContents() .keySet()) { sub.add(0, CONTEXTMENU_SHARE_OBJECT, 0, alias); } sub.add(0, CONTEXTMENU_SHARE_OBJECT, 0, this.NEW_SHARE_ACTION); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item .getMenuInfo(); String menu_element = item.getTitle().toString(); if (info != null) { LinearLayout ll = (LinearLayout) info.targetView; String alias = ((TextView) ll.getChildAt(1)).getText().toString(); this.contextMenusAreStupidAliasHolder = alias; } switch (item.getItemId()) { case CONTEXTMENU_DOWNLOAD_FILE: new DownloadTask(RemoteBrowseActivity.this) .execute(this.contextMenusAreStupidAliasHolder); return true; case CONTEXTMENU_UNLINK: UnlinkObjectTask uot = new UnlinkObjectTask(this); uot.execute(this.contextMenusAreStupidAliasHolder); return true; case CONTEXTMENU_SHARE_OBJECT: if (menu_element.equals(this.NEW_SHARE_ACTION)) { Intent intent = new Intent(RemoteBrowseActivity.this, CreateShareActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); intent.putExtra(REQUEST_RESULT_FOLDERALIAS, this.contextMenusAreStupidAliasHolder); startActivityForResult(intent, REQUEST_NEWUSERSHARE); } else { AddToShareTask atst = new AddToShareTask(this); atst.execute(menu_element, this.contextMenusAreStupidAliasHolder); this.contextMenusAreStupidAliasHolder = null; } default: break; } return super.onContextItemSelected(item); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, MENU_UPLOAD_FILE, 0, "Upload File"); menu.add(0, MENU_CREATE_FOLDER, 0, "Create Folder"); menu.add(0, MENU_SHOW_CAPABILITY, 0, "Show cap"); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent = new Intent(); switch (item.getItemId()) { case MENU_CREATE_FOLDER: this.newFolderTask = new CreateFolderTask(this); this.newFolderTask.execute(); intent.setClass(this, NewFolderActivity.class); startActivityForResult(intent, MENU_CREATE_FOLDER); return true; case MENU_UPLOAD_FILE: intent.setClass(this, LocalBrowseActivity.class); startActivityForResult(intent, MENU_UPLOAD_FILE); return true; case MENU_SHOW_CAPABILITY: DisplayCapability.displayCapability(this, CSVActivity.fm.getCurrentFolder().getCapability()).show(); intent = null; return true; } return super.onOptionsItemSelected(item); } public void doBrowsing() { files = new HashMap<String, Capability>(); files.putAll(CSVActivity.fm.getCurrentFolder().getContents()); files.put("..", null); BrowseList bl = new BrowseList(files); SimpleAdapter sa = new SimpleAdapter(this, bl.getList(), R.layout.filelist, new String[] { "ICON", "TEXT" }, new int[] { R.id.browse_icon, R.id.browse_text }); setListAdapter(sa); ListView lv = getListView(); lv.setTextFilterEnabled(true); lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { LinearLayout ll = (LinearLayout) view; TextView tmp = (TextView) ll.getChildAt(1); String alias = tmp.getText().toString(); Capability cap = files.get(alias); if (alias.equals("..") || cap.isFolder()) { try { CSVActivity.fm.cd(alias); doBrowsing(); } catch (NoSuchAliasException e) { e.printStackTrace(); } catch (ServerCommunicationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RemoteFileDoesNotExistException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FailedToVerifySignatureException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { new DownloadTask(RemoteBrowseActivity.this).execute(alias); } } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case MENU_UPLOAD_FILE: new UploadTask(this).execute(data.getStringExtra("FILEPATH")); break; case MENU_CREATE_FOLDER: String alias = data .getStringExtra(NewFolderActivity.NEW_FOLDER); try { CSVFolder folder = this.newFolderTask.get(); CreateFolderTask cft = new CreateFolderTask(this, CSVActivity.fm.getCurrentFolder(), folder); cft.execute(alias); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } case REQUEST_NEWUSERSHARE: String folderalias = data .getStringExtra(REQUEST_RESULT_FOLDERALIAS); String user = data .getStringExtra(CreateShareActivity.REQUEST_RESULT_USERALIAS); if (folderalias != null && user != null) { AddToShareTask atst = new AddToShareTask(this); atst.execute(user, folderalias); } default: ; } } } }