Created
September 3, 2010 22:21
-
-
Save davejohnson/564658 to your computer and use it in GitHub Desktop.
phonegap-android-plugin-java-example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example; | |
import java.io.BufferedInputStream; | |
import java.io.DataInputStream; | |
import java.io.File; | |
import java.io.FileOutputStream; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.net.MalformedURLException; | |
import java.net.URL; | |
import java.security.MessageDigest; | |
import java.security.NoSuchAlgorithmException; | |
import org.json.JSONArray; | |
import org.json.JSONException; | |
import android.content.Context; | |
import android.webkit.WebView; | |
import com.phonegap.api.Command; | |
import com.phonegap.api.CommandResult; | |
public final class URLCache implements Command { | |
private Context ctx; | |
public void setContext(Context ctx) { | |
this.ctx = ctx; | |
} | |
public void setView(WebView arg0) { | |
// TODO Auto-generated method stub | |
} | |
public CommandResult execute(String action, JSONArray args) { | |
CommandResult.Status status = CommandResult.Status.OK; | |
String result = ""; | |
String uri = null; | |
String fileName = ""; | |
try { | |
uri = args.getString(0); | |
fileName = md5(uri); | |
} catch (JSONException e1) { | |
status = CommandResult.Status.JSONEXCEPTION; | |
result = "{ message: 'JSONException', status: "+status.ordinal()+" }"; | |
} | |
if (uri != null && action.equals("getCachedPathForURI") && args.length() == 1) | |
{ | |
// First check if the file exists already | |
String fileDir = ctx.getFilesDir().getAbsolutePath(); | |
String filePath = fileDir + "/" + fileName; | |
File f = new File(filePath); | |
if (f.exists()) { | |
result = "{ file: '"+filePath+"', status: 0 }"; | |
} else { | |
URL u; | |
InputStream is = null; | |
DataInputStream dis; | |
FileOutputStream out = null; | |
byte[] buffer = new byte[1024]; | |
int length = -1; | |
try { | |
u = new URL(uri); | |
is = u.openStream(); // throws an IOException | |
dis = new DataInputStream(new BufferedInputStream(is)); | |
out = ctx.openFileOutput(fileName, Context.MODE_PRIVATE); | |
while ((length = dis.read(buffer)) != -1) { | |
out.write(buffer, 0, length); | |
} | |
out.flush(); | |
result = "{ file: '"+fileName+"', status: 0 }"; | |
} catch (MalformedURLException e) { | |
status = CommandResult.Status.MALFORMEDURLEXCEPTION; | |
result = "{ message: 'MalformedURLException', status: "+status.ordinal()+" }"; | |
} catch (IOException e) { | |
status = CommandResult.Status.IOEXCEPTION; | |
result = "{ message: 'IOException', status: "+status.ordinal()+" }"; | |
} finally { | |
try { | |
is.close(); | |
out.close(); | |
} catch (IOException e) { | |
status = CommandResult.Status.IOEXCEPTION; | |
result = "{ message: 'IOException', status: "+status.ordinal()+" }"; | |
} | |
} | |
} | |
} else { | |
status = CommandResult.Status.INVALIDACTION; | |
result = "{ message: 'InvalidAction', status: "+status.ordinal()+" }"; | |
} | |
return new CommandResult(status, result); | |
} | |
public String md5(String s) { | |
try { | |
// Create MD5 Hash | |
MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); | |
digest.update(s.getBytes()); | |
byte messageDigest[] = digest.digest(); | |
// Create Hex String | |
StringBuffer hexString = new StringBuffer(); | |
for (int i=0; i<messageDigest.length; i++) | |
hexString.append(Integer.toHexString(0xFF & messageDigest[i])); | |
return hexString.toString(); | |
} catch (NoSuchAlgorithmException e) { | |
e.printStackTrace(); | |
} | |
return ""; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment