/** * This method lists files of certain directory by starting a new ListFileTask. * * @param activityName name of activity, which the ListFileTask attached to * @param path the path of certain directory * @param listener listener of the ListFileTask */ public void listFiles(String activityName, String path, OperationEventListener listener) { LogUtils.d(TAG, "listFiles,activityName = " + activityName + ",path = " + path); /*if (isBusy(activityName)) { LogUtils.d(TAG, "listFiles,task is busy. "); listener.onTaskResult(OperationEventListener.ERROR_CODE_BUSY); } else {*/ if (isBusy(activityName)) { LogUtils.d(TAG, "listFiles, cancel other background task..."); BaseAsyncTask task = getActivityInfo(activityName).getTask(); if (task != null) { task.removeListener(); task.cancel(true); } } LogUtils.d(TAG, "listFiles,do list."); FileInfoManager fileInfoManager = getActivityInfo(activityName).getFileInfoManager(); int filterType = getActivityInfo(activityName).getFilterType(); if (fileInfoManager != null) { LogUtils.d(TAG, "listFiles fiterType = " + filterType); BaseAsyncTask task = new ListFileTask(getApplicationContext(), fileInfoManager, listener, path, filterType); getActivityInfo(activityName).setTask(task); task.execute(); } // } }
/** * This method reconnects to the running task by setting a new listener to the task, when dialog * is destroyed and recreated * * @param activityName name of activity, which the task and dialog attached to * @param listener new listener for the task and dialog */ public void reconnected(String activityName, OperationEventListener listener) { LogUtils.d(TAG, "reconnected,activityName = " + activityName); BaseAsyncTask task = getActivityInfo(activityName).getTask(); if (task != null) { task.setListener(listener); } }
/** * This method removes listener from task when service disconnected. * * @param activityName name of activity, which the task attached to */ public void disconnected(String activityName) { LogUtils.d(TAG, "disconnected,activityName = " + activityName); BaseAsyncTask task = getActivityInfo(activityName).getTask(); if (task != null) { task.removeListener(); } }
/** * This method cancel certain task * * @param activityName name of activity, which the task attached to */ public void cancel(String activityName) { LogUtils.d(TAG, " cancel service,activityName = " + activityName); BaseAsyncTask task = getActivityInfo(activityName).getTask(); if (task != null) { task.cancel(true); } }
/** * This method does paste job by starting a new CutPasteFilesTask or CopyPasteFilesTask according * to parameter of type * * @param activityName name of activity, which the task and operations attached to * @param fileInfoList list of files which needs to be paste * @param dstFolder destination, which the files should be paste to * @param type indicate the previous operation is cut or copy * @param listener listener of the started task */ public void pasteFiles( String activityName, List<FileInfo> fileInfoList, String dstFolder, int type, OperationEventListener listener) { LogUtils.d(TAG, " pasteFiles Start,activityName = " + activityName); if (isBusy(activityName)) { listener.onTaskResult(OperationEventListener.ERROR_CODE_BUSY); return; } if (filterPasteList(fileInfoList, dstFolder) > 0) { listener.onTaskResult(OperationEventListener.ERROR_CODE_PASTE_TO_SUB); } FileInfoManager fileInfoManager = getActivityInfo(activityName).getFileInfoManager(); if (fileInfoManager == null) { LogUtils.w(TAG, "mFileInfoManagerMap.get FileInfoManager = null"); listener.onTaskResult(OperationEventListener.ERROR_CODE_UNKOWN); return; } BaseAsyncTask task = null; if (fileInfoList.size() > 0) { switch (type) { case FileInfoManager.PASTE_MODE_CUT: if (isCutSamePath(fileInfoList, dstFolder)) { listener.onTaskResult(OperationEventListener.ERROR_CODE_CUT_SAME_PATH); return; } task = new CutPasteFilesTask( fileInfoManager, listener, getApplicationContext(), fileInfoList, dstFolder); getActivityInfo(activityName).setTask(task); task.execute(); break; case FileInfoManager.PASTE_MODE_COPY: task = new CopyPasteFilesTask( fileInfoManager, listener, getApplicationContext(), fileInfoList, dstFolder); getActivityInfo(activityName).setTask(task); task.execute(); break; default: listener.onTaskResult(OperationEventListener.ERROR_CODE_UNKOWN); return; } } }
/** * This method gets detail information of a file (or directory) by starting a new DetailInfotask. * * @param activityName name of activity, which the task and operations attached to * @param file a certain file (or directory) * @param listener listener of the DetailInfotask */ public void getDetailInfo(String activityName, FileInfo file, OperationEventListener listener) { LogUtils.d(TAG, "getDetailInfo,activityName = " + activityName); if (isBusy(activityName)) { listener.onTaskResult(OperationEventListener.ERROR_CODE_BUSY); } else { FileInfoManager fileInfoManager = getActivityInfo(activityName).getFileInfoManager(); if (fileInfoManager != null) { BaseAsyncTask task = new DetailInfoTask(fileInfoManager, listener, file); getActivityInfo(activityName).setTask(task); task.execute(); } } }
/** * This method checks that weather the service is busy or not, which means id any task exist for * certain activity * * @param activityName name of activity, which will be checked * @return true for busy, false for not busy */ public boolean isBusy(String activityName) { boolean ret = false; FileManagerActivityInfo activityInfo = mActivityMap.get(activityName); if (activityInfo == null) { LogUtils.w(TAG, "isBusy return false,because activityInfo is null!"); return ret; } BaseAsyncTask task = activityInfo.getTask(); if (task != null) { return task.isTaskBusy(); } return false; }
/** * This method does delete job by starting a new DeleteFilesTask. * * @param activityName name of activity, which the operations attached to * @param fileInfoList list of files, which needs to be deleted * @param listener listener of the DeleteFilesTask */ public void deleteFiles( String activityName, List<FileInfo> fileInfoList, OperationEventListener listener) { LogUtils.d(TAG, " deleteFiles Start,activityName = " + activityName); if (isBusy(activityName)) { listener.onTaskResult(OperationEventListener.ERROR_CODE_BUSY); } else { FileInfoManager fileInfoManager = getActivityInfo(activityName).getFileInfoManager(); if (fileInfoManager != null) { BaseAsyncTask task = new DeleteFilesTask(fileInfoManager, listener, this, fileInfoList); getActivityInfo(activityName).setTask(task); task.execute(); } } }
/** * This method does create folder job by starting a new CreateFolderTask * * @param activityName name of activity, which the CreateFolderTask attached to * @param destFolder information of file, which needs to be created * @param listener listener of CreateFolderTask */ public void createFolder( String activityName, String destFolder, OperationEventListener listener) { LogUtils.d(TAG, " createFolder Start "); if (isBusy(activityName)) { listener.onTaskResult(OperationEventListener.ERROR_CODE_BUSY); } else { FileInfoManager fileInfoManager = getActivityInfo(activityName).getFileInfoManager(); int filterType = getActivityInfo(activityName).getFilterType(); if (fileInfoManager != null) { BaseAsyncTask task = new CreateFolderTask(fileInfoManager, listener, this, destFolder, filterType); getActivityInfo(activityName).setTask(task); task.execute(); } } }
/** * This method does rename job by starting a new RenameTask * * @param activityName name of activity, which the operations attached to * @param srcFile information of certain file, which needs to be renamed * @param dstFile information of new file after rename * @param listener listener of RenameTask */ public void rename( String activityName, FileInfo srcFile, FileInfo dstFile, OperationEventListener listener) { LogUtils.d(TAG, " rename Start,activityName = " + activityName); if (isBusy(activityName)) { listener.onTaskResult(OperationEventListener.ERROR_CODE_BUSY); } else { FileInfoManager fileInfoManager = getActivityInfo(activityName).getFileInfoManager(); int filterType = getActivityInfo(activityName).getFilterType(); if (fileInfoManager != null) { BaseAsyncTask task = new RenameTask(fileInfoManager, listener, this, srcFile, dstFile, filterType); getActivityInfo(activityName).setTask(task); task.execute(); } } }
/** * This method do search job by starting a new search task * * @param activityName name of activity which starts the search * @param searchName the search target * @param path the path to limit the search in * @param operationEvent the listener corresponds to this search task */ public void search( String activityName, String searchName, String path, OperationEventListener operationEvent) { LogUtils.d( TAG, "search, activityName = " + activityName + ",searchName = " + searchName + ",path = " + path); if (isBusy(activityName)) { cancel(activityName); // operationEvent.onTaskResult(OperationEventListener.ERROR_CODE_BUSY); } else { FileInfoManager fileInfoManager = getActivityInfo(activityName).getFileInfoManager(); if (fileInfoManager != null) { BaseAsyncTask task = new SearchTask(fileInfoManager, operationEvent, searchName, path, getContentResolver()); getActivityInfo(activityName).setTask(task); task.execute(); } } }
@Override public int onStartCommand(Intent intent, int flags, int startId) { LogUtils.d(TAG, "onStartCommand..."); super.onStartCommand(intent, flags, startId); return START_NOT_STICKY; }