support e-mail attachments too for plugin installation

This commit is contained in:
Philipp Schaefer 2014-02-13 00:19:37 +01:00
parent b9499e2d1b
commit e46372a775
3 changed files with 28 additions and 12 deletions

View File

@ -3,6 +3,7 @@ package com.cradle.iitc_mobile;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.ContentResolver;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
@ -87,6 +88,7 @@ public class IITC_FileManager {
// get a list of key-value // get a list of key-value
final String[] attributes = header.split(" +"); final String[] attributes = header.split(" +");
// add default values // add default values
map.put("id", "unknown");
map.put("version", "not found"); map.put("version", "not found");
map.put("name", "unknown"); map.put("name", "unknown");
map.put("description", ""); map.put("description", "");
@ -94,6 +96,9 @@ public class IITC_FileManager {
// add parsed values // add parsed values
for (int i = 0; i < attributes.length; i++) { for (int i = 0; i < attributes.length; i++) {
// search for attributes and use the value // search for attributes and use the value
if (attributes[i].equals("@id")) {
map.put("id", attributes[i + 1]);
}
if (attributes[i].equals("@version")) { if (attributes[i].equals("@version")) {
map.put("version", attributes[i + 1]); map.put("version", attributes[i + 1]);
} }
@ -240,7 +245,7 @@ public class IITC_FileManager {
return EMPTY; return EMPTY;
} }
public void installPlugin(final String uri, final boolean invalidateHeaders) { public void installPlugin(final Uri uri, final boolean invalidateHeaders) {
if (uri != null) { if (uri != null) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mActivity); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mActivity);
@ -274,15 +279,27 @@ public class IITC_FileManager {
} }
} }
private void copyPlugin(final String uri, final boolean invalidateHeaders) { private void copyPlugin(final Uri uri, final boolean invalidateHeaders) {
Thread thread = new Thread(new Runnable() { Thread thread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
try { try {
final URL url = new URL(uri); final String url = uri.toString();
final URLConnection conn = url.openConnection(); String fileName = url.substring( url.lastIndexOf('/')+1, url.length() );
final String fileName = uri.substring( uri.lastIndexOf('/')+1, uri.length() ); // we need 2 stream since an inputStream is useless after read once
final InputStream is = conn.getInputStream(); // we read it twice because we first need the script ID for the fileName and
// afterwards reading it again while copying
InputStream is, isCopy;
if (uri.getScheme().contains("http")) {
URLConnection conn = new URL(url).openConnection();
URLConnection connCopy = new URL(url).openConnection();
is = conn.getInputStream();
isCopy = connCopy.getInputStream();
} else {
is = mActivity.getContentResolver().openInputStream(uri);
isCopy = mActivity.getContentResolver().openInputStream(uri);
}
fileName = getScriptInfo(isCopy).get("id") + ".user.js";
// create IITCm external plugins directory if it doesn't already exist // create IITCm external plugins directory if it doesn't already exist
final File pluginsDirectory = new File(PLUGINS_PATH); final File pluginsDirectory = new File(PLUGINS_PATH);
pluginsDirectory.mkdirs(); pluginsDirectory.mkdirs();

View File

@ -229,11 +229,10 @@ public class IITC_Mobile extends Activity
} }
} }
if (uri.getPath().endsWith(".user.js")) { if (uri.getPath().endsWith(".user.js") || intent.getType().contains("javascript")) {
final Intent prefIntent = new Intent(this, IITC_PluginPreferenceActivity.class); final Intent prefIntent = new Intent(this, IITC_PluginPreferenceActivity.class);
prefIntent.putExtra("url", uri.toString()); prefIntent.setDataAndType(uri, intent.getType());
startActivity(prefIntent); startActivity(prefIntent);
// TODO receive intent, start dialog if user want to install $plugin, reload IITC
} }
} }

View File

@ -4,6 +4,7 @@ import android.content.ActivityNotFoundException;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.AssetManager; import android.content.res.AssetManager;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceActivity; import android.preference.PreferenceActivity;
import android.text.TextUtils; import android.text.TextUtils;
@ -88,7 +89,7 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity {
mFileManager = new IITC_FileManager(this); mFileManager = new IITC_FileManager(this);
final String uri = getIntent().getStringExtra("url"); final Uri uri = getIntent().getData();
if (uri != null) { if (uri != null) {
mFileManager.installPlugin(uri, true); mFileManager.installPlugin(uri, true);
} }
@ -152,8 +153,7 @@ public class IITC_PluginPreferenceActivity extends PreferenceActivity {
switch(requestCode) { switch(requestCode) {
case COPY_PLUGIN_REQUEST: case COPY_PLUGIN_REQUEST:
if (data != null && data.getData() != null) { if (data != null && data.getData() != null) {
String filePath = data.getData().getPath(); mFileManager.installPlugin(data.getData(), true);
mFileManager.installPlugin("file://" + filePath, true);
return; return;
} }
break; break;