package com.samsung.sprc.fileselector; import java.io.File; import android.app.AlertDialog; import android.content.Context; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Toast; /** * This Listener handles Save or Load button clicks. */ public class SaveLoadClickListener implements OnClickListener { /** Performed operation. */ private final FileOperation mOperation; /** FileSelector in which you used SaveLoadClickListener */ private final FileSelector mFileSelector; private final Context mContext; /** * @param operation * Performed operation. * @param fileSelector * The FileSeletor which used this Listener. * @param context * context. */ public SaveLoadClickListener(final FileOperation operation, final FileSelector fileSelector, final Context context) { mOperation = operation; mFileSelector = fileSelector; mContext = context; } @Override public void onClick(final View view) { final String text = mFileSelector.getSelectedFileName(); if (checkFileName(text)) { String filePath; if(text.charAt(0) == File.separatorChar) { // Don't add current location path if filename is an absolute path filePath = text; } else { filePath = mFileSelector.getCurrentLocation().getAbsolutePath() + File.separator + text; } final File file = new File(filePath); if(file.isDirectory()) { String newPath; try { newPath = file.getCanonicalPath(); } catch (Exception e) { android.util.Log.w("FileSelector", "Exception getting canonical path", e); newPath = filePath; } mFileSelector.changeDirectory(newPath); return; } int messageText = 0; String extraText = null; // Check file access rights. switch (mOperation) { case SAVE: if (file.exists() && !file.canWrite()) { messageText = R.string.fs_cannotSaveFileMessage; break; } if (!file.exists()) { try { file.createNewFile(); } catch (Exception e) { messageText = R.string.fs_cannotSaveFileMessage; extraText = e.getMessage(); } finally { file.delete(); } break; } break; case LOAD: if (!file.exists()) { messageText = R.string.fs_missingFile; } else if (!file.canRead()) { messageText = R.string.fs_accessDenied; } break; } if (messageText != 0) { // Access denied. final Toast toast = Toast.makeText(mContext, mContext.getResources().getString(messageText) + (extraText == null ? "" : ": " + extraText), Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } else { // Access granted. mFileSelector.mOnHandleFileListener.handleFile(filePath); mFileSelector.dismiss(); } } } /** * Check if file name is correct, e.g. if it isn't empty. * * @return False, if file name is empty true otherwise. */ boolean checkFileName(String text) { if (text.length() == 0) { final AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle(R.string.fs_information); builder.setMessage(R.string.fs_fileNameFirstMessage); builder.setNeutralButton(R.string.fs_okButtonText, null); builder.show(); return false; } return true; } }