Loading src/android/Options.java +171 −7 Changes for src/android/Options.java: 171 added lines, 7 removed lines. Original line number Diff line number Diff line Loading @@ -21,8 +21,11 @@ package de.appplant.cordova.plugin.localnotification; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Calendar; Loading @@ -42,12 +45,13 @@ import android.media.RingtoneManager; import android.net.Uri; import android.os.StrictMode; import android.os.StrictMode.ThreadPolicy; import android.util.Log; /** * Class that helps to store the options that can be specified per alarm. */ public class Options { static protected final String STORAGE_FOLDER = "/localnotification"; private JSONObject options = new JSONObject(); private String packageName = null; private long interval = 0; Loading Loading @@ -160,7 +164,7 @@ public class Options { return RingtoneManager.getDefaultUri(soundId); } catch (Exception e) { return Uri.parse(sound); return getURIfromPath(sound); } } Loading @@ -176,7 +180,7 @@ public class Options { if (icon.startsWith("http")) { bmp = getIconFromURL(icon); } else if (icon.startsWith("file://")) { } else if (icon.startsWith("file://") || (icon.startsWith("res"))) { bmp = getIconFromURI(icon); } Loading Loading @@ -352,13 +356,11 @@ public class Options { * The corresponding bitmap */ private Bitmap getIconFromURI (String src) { AssetManager assets = LocalNotification.context.getAssets(); Bitmap bmp = null; Uri uri = getURIfromPath(src); try { String path = src.replace("file:/", "www"); InputStream input = assets.open(path); InputStream input = LocalNotification.activity.getContentResolver().openInputStream(uri); bmp = BitmapFactory.decodeStream(input); } catch (IOException e) { e.printStackTrace(); Loading @@ -366,4 +368,166 @@ public class Options { return bmp; } /** * The URI for a path. * * @param path The given path * * @return The URI pointing to the given path */ private Uri getURIfromPath(String path){ if (path.startsWith("res:")) { return getUriForResourcePath(path); } else if (path.startsWith("file:///")) { return getUriForAbsolutePath(path); } else if (path.startsWith("file://")) { return getUriForAssetPath(path); } return Uri.parse(path); } /** * The URI for a file. * * @param path * The given absolute path * * @return The URI pointing to the given path */ private Uri getUriForAbsolutePath(String path) { String absPath = path.replaceFirst("file://", ""); File file = new File(absPath); if (!file.exists()) { Log.e("LocalNotifocation", "File not found: " + file.getAbsolutePath()); } return Uri.fromFile(file); } /** * The URI for an asset. * * @param path * The given asset path * * @return The URI pointing to the given path */ private Uri getUriForAssetPath(String path) { String resPath = path.replaceFirst("file:/", "www"); String fileName = resPath.substring(resPath.lastIndexOf('/') + 1); File dir = LocalNotification.activity.getExternalCacheDir(); if (dir == null) { Log.e("LocalNotifocation", "Missing external cache dir"); return Uri.EMPTY; } String storage = dir.toString() + STORAGE_FOLDER; File file = new File(storage, fileName); new File(storage).mkdir(); try { AssetManager assets = LocalNotification.activity.getAssets(); FileOutputStream outStream = new FileOutputStream(file); InputStream inputStream = assets.open(resPath); copyFile(inputStream, outStream); outStream.flush(); outStream.close(); } catch (Exception e) { Log.e("LocalNotifocation", "File not found: assets/" + resPath); e.printStackTrace(); } return Uri.fromFile(file); } /** * The URI for a resource. * * @param path * The given relative path * * @return The URI pointing to the given path */ private Uri getUriForResourcePath(String path) { String resPath = path.replaceFirst("res://", ""); String fileName = resPath.substring(resPath.lastIndexOf('/') + 1); String resName = fileName.substring(0, fileName.lastIndexOf('.')); String extension = resPath.substring(resPath.lastIndexOf('.')); File dir = LocalNotification.activity.getExternalCacheDir(); if (dir == null) { Log.e("LocalNotifocation", "Missing external cache dir"); return Uri.EMPTY; } String storage = dir.toString() + STORAGE_FOLDER; int resId = getResId(resPath); File file = new File(storage, resName + extension); if (resId == 0) { Log.e("LocalNotifocation", "File not found: " + resPath); } new File(storage).mkdir(); try { Resources res = LocalNotification.activity.getResources(); FileOutputStream outStream = new FileOutputStream(file); InputStream inputStream = res.openRawResource(resId); copyFile(inputStream, outStream); outStream.flush(); outStream.close(); } catch (Exception e) { e.printStackTrace(); } return Uri.fromFile(file); } /** * Writes an InputStream to an OutputStream * * @param in * The input stream * @param out * The output stream */ private void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; while ((read = in.read(buffer)) != -1) { out.write(buffer, 0, read); } } /** * @return The resource ID for the given resource. */ private int getResId(String resPath) { Resources res = LocalNotification.activity.getResources(); int resId; String pkgName = getPackageName(); String dirName = "drawable"; String fileName = resPath; if (resPath.contains("/")) { dirName = resPath.substring(0, resPath.lastIndexOf('/')); fileName = resPath.substring(resPath.lastIndexOf('/') + 1); } String resName = fileName.substring(0, fileName.lastIndexOf('.')); resId = res.getIdentifier(resName, dirName, pkgName); if (resId == 0) { resId = res.getIdentifier(resName, "drawable", pkgName); } return resId; } /** * The name for the package. * * @return The package name */ private String getPackageName() { return LocalNotification.activity.getPackageName(); } /** * Shows the behavior of notifications when the application is in foreground * * */ public boolean getForegroundMode(){ return options.optBoolean("foregroundMode",false); } } Loading
src/android/Options.java +171 −7 Changes for src/android/Options.java: 171 added lines, 7 removed lines. Original line number Diff line number Diff line Loading @@ -21,8 +21,11 @@ package de.appplant.cordova.plugin.localnotification; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Calendar; Loading @@ -42,12 +45,13 @@ import android.media.RingtoneManager; import android.net.Uri; import android.os.StrictMode; import android.os.StrictMode.ThreadPolicy; import android.util.Log; /** * Class that helps to store the options that can be specified per alarm. */ public class Options { static protected final String STORAGE_FOLDER = "/localnotification"; private JSONObject options = new JSONObject(); private String packageName = null; private long interval = 0; Loading Loading @@ -160,7 +164,7 @@ public class Options { return RingtoneManager.getDefaultUri(soundId); } catch (Exception e) { return Uri.parse(sound); return getURIfromPath(sound); } } Loading @@ -176,7 +180,7 @@ public class Options { if (icon.startsWith("http")) { bmp = getIconFromURL(icon); } else if (icon.startsWith("file://")) { } else if (icon.startsWith("file://") || (icon.startsWith("res"))) { bmp = getIconFromURI(icon); } Loading Loading @@ -352,13 +356,11 @@ public class Options { * The corresponding bitmap */ private Bitmap getIconFromURI (String src) { AssetManager assets = LocalNotification.context.getAssets(); Bitmap bmp = null; Uri uri = getURIfromPath(src); try { String path = src.replace("file:/", "www"); InputStream input = assets.open(path); InputStream input = LocalNotification.activity.getContentResolver().openInputStream(uri); bmp = BitmapFactory.decodeStream(input); } catch (IOException e) { e.printStackTrace(); Loading @@ -366,4 +368,166 @@ public class Options { return bmp; } /** * The URI for a path. * * @param path The given path * * @return The URI pointing to the given path */ private Uri getURIfromPath(String path){ if (path.startsWith("res:")) { return getUriForResourcePath(path); } else if (path.startsWith("file:///")) { return getUriForAbsolutePath(path); } else if (path.startsWith("file://")) { return getUriForAssetPath(path); } return Uri.parse(path); } /** * The URI for a file. * * @param path * The given absolute path * * @return The URI pointing to the given path */ private Uri getUriForAbsolutePath(String path) { String absPath = path.replaceFirst("file://", ""); File file = new File(absPath); if (!file.exists()) { Log.e("LocalNotifocation", "File not found: " + file.getAbsolutePath()); } return Uri.fromFile(file); } /** * The URI for an asset. * * @param path * The given asset path * * @return The URI pointing to the given path */ private Uri getUriForAssetPath(String path) { String resPath = path.replaceFirst("file:/", "www"); String fileName = resPath.substring(resPath.lastIndexOf('/') + 1); File dir = LocalNotification.activity.getExternalCacheDir(); if (dir == null) { Log.e("LocalNotifocation", "Missing external cache dir"); return Uri.EMPTY; } String storage = dir.toString() + STORAGE_FOLDER; File file = new File(storage, fileName); new File(storage).mkdir(); try { AssetManager assets = LocalNotification.activity.getAssets(); FileOutputStream outStream = new FileOutputStream(file); InputStream inputStream = assets.open(resPath); copyFile(inputStream, outStream); outStream.flush(); outStream.close(); } catch (Exception e) { Log.e("LocalNotifocation", "File not found: assets/" + resPath); e.printStackTrace(); } return Uri.fromFile(file); } /** * The URI for a resource. * * @param path * The given relative path * * @return The URI pointing to the given path */ private Uri getUriForResourcePath(String path) { String resPath = path.replaceFirst("res://", ""); String fileName = resPath.substring(resPath.lastIndexOf('/') + 1); String resName = fileName.substring(0, fileName.lastIndexOf('.')); String extension = resPath.substring(resPath.lastIndexOf('.')); File dir = LocalNotification.activity.getExternalCacheDir(); if (dir == null) { Log.e("LocalNotifocation", "Missing external cache dir"); return Uri.EMPTY; } String storage = dir.toString() + STORAGE_FOLDER; int resId = getResId(resPath); File file = new File(storage, resName + extension); if (resId == 0) { Log.e("LocalNotifocation", "File not found: " + resPath); } new File(storage).mkdir(); try { Resources res = LocalNotification.activity.getResources(); FileOutputStream outStream = new FileOutputStream(file); InputStream inputStream = res.openRawResource(resId); copyFile(inputStream, outStream); outStream.flush(); outStream.close(); } catch (Exception e) { e.printStackTrace(); } return Uri.fromFile(file); } /** * Writes an InputStream to an OutputStream * * @param in * The input stream * @param out * The output stream */ private void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; while ((read = in.read(buffer)) != -1) { out.write(buffer, 0, read); } } /** * @return The resource ID for the given resource. */ private int getResId(String resPath) { Resources res = LocalNotification.activity.getResources(); int resId; String pkgName = getPackageName(); String dirName = "drawable"; String fileName = resPath; if (resPath.contains("/")) { dirName = resPath.substring(0, resPath.lastIndexOf('/')); fileName = resPath.substring(resPath.lastIndexOf('/') + 1); } String resName = fileName.substring(0, fileName.lastIndexOf('.')); resId = res.getIdentifier(resName, dirName, pkgName); if (resId == 0) { resId = res.getIdentifier(resName, "drawable", pkgName); } return resId; } /** * The name for the package. * * @return The package name */ private String getPackageName() { return LocalNotification.activity.getPackageName(); } /** * Shows the behavior of notifications when the application is in foreground * * */ public boolean getForegroundMode(){ return options.optBoolean("foregroundMode",false); } }