/* * Copyright (C) 2015-2017 Emanuel Moecklin * * 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.onegravity.rteditor.demo; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.widget.Toast; import com.onegravity.rteditor.utils.Helper; import com.onegravity.rteditor.utils.io.IOUtils; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; public class FileHelper { private static final String[][] PICK_DIRECTORY_INTENTS = { {"org.openintents.action.PICK_DIRECTORY", "file://"}, // OI File Manager (maybe others) {"com.estrongs.action.PICK_DIRECTORY", "file://"}, // ES File Explorer {Intent.ACTION_PICK, "folder://"}, // Blackmoon File Browser (maybe others) {"com.androidworkz.action.PICK_DIRECTORY", "file://"}, }; /** * Tries to open a known file browsers to pick a directory. * * @return True if a filebrowser has been found (the result will be in the onActivityResult), False otherwise */ public static boolean pickDirectory(Activity activity, File startPath, int requestCode) { PackageManager packageMgr = activity.getPackageManager(); for (String[] intent : PICK_DIRECTORY_INTENTS) { String intentAction = intent[0]; String uriPrefix = intent[1]; Intent startIntent = new Intent(intentAction) .putExtra("org.openintents.extra.TITLE", activity.getString(R.string.save_as)) .setData(Uri.parse(uriPrefix + startPath.getPath())); try { if (startIntent.resolveActivity(packageMgr) != null) { activity.startActivityForResult(startIntent, requestCode); return true; } } catch (ActivityNotFoundException e) { showNoFilePickerError(activity, e); } } return false; } public static boolean pickFile(Activity activity, int requestCode) { try { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("file/*"); activity.startActivityForResult(intent, requestCode); return true; } catch (ActivityNotFoundException e) { showNoFilePickerError(activity, e); } return false; } private static void showNoFilePickerError(Context context, Exception e) { String msg = context.getString(R.string.no_file_picker, e.getMessage()); Toast.makeText(context, msg , Toast.LENGTH_LONG).show(); } public static String save(Context context, File outFile, String html) { Reader in = null; Writer out = null; try { in = new StringReader(html); out = new FileWriter(outFile); IOUtils.copy(in, out); return outFile.getAbsolutePath(); } catch (IOException ioe) { String toastMsg = context.getString(R.string.save_as_failure, ioe.getMessage()); Toast.makeText(context, toastMsg, Toast.LENGTH_LONG).show(); } finally { Helper.closeQuietly(in); Helper.closeQuietly(out); } return null; } public static String load(Context context, String filePath) { File inFile = new File(filePath); Reader in = null; Writer out = null; try { in = new FileReader(inFile); out = new StringWriter(); IOUtils.copy(in, out); return out.toString(); } catch (IOException ioe) { String toastMsg = context.getString(R.string.load_failure_2, ioe.getMessage()); Toast.makeText(context, toastMsg, Toast.LENGTH_LONG).show(); } finally { Helper.closeQuietly(in); Helper.closeQuietly(out); } return null; } }