2014-08-13 11:45:32 +02:00

268 lines
8.3 KiB
Java

package com.cradle.iitc_mobile;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.webkit.JavascriptInterface;
import android.widget.Toast;
import com.cradle.iitc_mobile.IITC_NavigationHelper.Pane;
import com.cradle.iitc_mobile.share.ShareActivity;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
// provide communication between IITC script and android app
public class IITC_JSInterface {
// context of main activity
protected final IITC_Mobile mIitc;
IITC_JSInterface(final IITC_Mobile iitc) {
mIitc = iitc;
}
// open dialog to send geo intent for navigation apps like gmaps or waze etc...
@JavascriptInterface
public void intentPosLink(
final double lat, final double lng, final int zoom, final String title, final boolean isPortal) {
mIitc.startActivity(ShareActivity.forPosition(mIitc, lat, lng, zoom, title, isPortal));
}
// share a string to the IITC share activity. only uses the share tab.
@JavascriptInterface
public void shareString(final String str) {
mIitc.startActivity(ShareActivity.forString(mIitc, str));
}
// disable javascript injection while spinner is enabled
// prevent the spinner from closing automatically
@JavascriptInterface
public void spinnerEnabled(final boolean en) {
mIitc.getWebView().disableJS(en);
}
// copy link to specific portal to android clipboard
@JavascriptInterface
public void copy(final String s) {
final ClipboardManager clipboard = (ClipboardManager) mIitc.getSystemService(Context.CLIPBOARD_SERVICE);
final ClipData clip = ClipData.newPlainText("Copied Text ", s);
clipboard.setPrimaryClip(clip);
Toast.makeText(mIitc, "copied to clipboard", Toast.LENGTH_SHORT).show();
}
@JavascriptInterface
public int getVersionCode() {
int versionCode = 0;
try {
final PackageInfo pInfo = mIitc.getPackageManager().getPackageInfo(mIitc.getPackageName(), 0);
versionCode = pInfo.versionCode;
} catch (final PackageManager.NameNotFoundException e) {
Log.w(e);
}
return versionCode;
}
@JavascriptInterface
public String getVersionName() {
String buildVersion = "unknown";
final PackageManager pm = mIitc.getPackageManager();
try {
final PackageInfo info = pm.getPackageInfo(mIitc.getPackageName(), 0);
buildVersion = info.versionName;
} catch (final PackageManager.NameNotFoundException e) {
Log.w(e);
}
return buildVersion;
}
@JavascriptInterface
public void switchToPane(final String id) {
mIitc.runOnUiThread(new Runnable() {
@Override
public void run() {
Pane pane;
try {
pane = mIitc.getNavigationHelper().getPane(id);
} catch (final IllegalArgumentException e) {
pane = Pane.MAP;
}
mIitc.setCurrentPane(pane);
}
});
}
@JavascriptInterface
public void dialogFocused(final String id) {
mIitc.setFocusedDialog(id);
}
@JavascriptInterface
public void dialogOpened(final String id, final boolean open) {
mIitc.dialogOpened(id, open);
}
@JavascriptInterface
public void bootFinished() {
Log.d("...boot finished");
mIitc.runOnUiThread(new Runnable() {
@Override
public void run() {
mIitc.setLoadingState(false);
mIitc.getMapSettings().onBootFinished();
}
});
}
// get layers and list them in a dialog
@JavascriptInterface
public void setLayers(final String base_layer, final String overlay_layer) {
mIitc.runOnUiThread(new Runnable() {
@Override
public void run() {
mIitc.getMapSettings().setLayers(base_layer, overlay_layer);
}
});
}
@JavascriptInterface
public void addPortalHighlighter(final String name) {
mIitc.runOnUiThread(new Runnable() {
@Override
public void run() {
mIitc.getMapSettings().addPortalHighlighter(name);
}
});
}
@JavascriptInterface
public void setActiveHighlighter(final String name) {
mIitc.runOnUiThread(new Runnable() {
@Override
public void run() {
mIitc.getMapSettings().setActiveHighlighter(name);
}
});
}
@JavascriptInterface
public void updateIitc(final String fileUrl) {
mIitc.runOnUiThread(new Runnable() {
@Override
public void run() {
mIitc.updateIitc(fileUrl);
}
});
}
@JavascriptInterface
public void addPane(final String name, final String label, final String icon) {
mIitc.runOnUiThread(new Runnable() {
@Override
public void run() {
mIitc.getNavigationHelper().addPane(name, label, icon);
}
});
}
// some plugins may have no specific icons...add a default icon
@JavascriptInterface
public void addPane(final String name, final String label) {
mIitc.runOnUiThread(new Runnable() {
@Override
public void run() {
mIitc.getNavigationHelper().addPane(name, label, "ic_action_new_event");
}
});
}
@JavascriptInterface
public boolean showZoom() {
final PackageManager pm = mIitc.getPackageManager();
final boolean hasMultitouch = pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH);
final boolean forcedZoom = mIitc.getPrefs().getBoolean("pref_user_zoom", false);
return forcedZoom || !hasMultitouch;
}
@JavascriptInterface
public void setFollowMode(final boolean follow) {
mIitc.runOnUiThread(new Runnable() {
@Override
public void run() {
mIitc.getUserLocation().setFollowMode(follow);
}
});
}
@JavascriptInterface
public void setProgress(final double progress) {
mIitc.runOnUiThread(new Runnable() {
@Override
public void run() {
if (progress != -1) {
// maximum for setProgress is 10,000
mIitc.setProgressBarIndeterminate(false);
mIitc.setProgress((int) Math.round(progress * 10000));
}
else {
mIitc.setProgressBarIndeterminate(true);
mIitc.setProgress(1);
}
}
});
}
@JavascriptInterface
public String getFileRequestUrlPrefix() {
return mIitc.getFileManager().getFileRequestPrefix();
}
@JavascriptInterface
public void setPermalink(final String href) {
mIitc.setPermalink(href);
}
@JavascriptInterface
public void saveFile(final String filename, final String type, final String content) {
try {
final File outFile = new File(Environment.getExternalStorageDirectory().getPath() +
"/IITC_Mobile/export/" + filename);
outFile.getParentFile().mkdirs();
final FileOutputStream outStream = new FileOutputStream(outFile);
outStream.write(content.getBytes("UTF-8"));
outStream.close();
Toast.makeText(mIitc, "File exported to " + outFile.getPath(), Toast.LENGTH_SHORT).show();
} catch (final IOException e) {
e.printStackTrace();
}
}
@JavascriptInterface
public void reloadIITC() {
mIitc.runOnUiThread(new Runnable() {
@Override
public void run() {
mIitc.reloadIITC();
}
});
}
@JavascriptInterface
public void reloadIITC(final boolean clearCache) {
mIitc.runOnUiThread(new Runnable() {
@Override
public void run() {
if (clearCache) mIitc.getWebView().clearCache(true);
mIitc.reloadIITC();
}
});
}
}