268 lines
8.3 KiB
Java
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();
|
|
}
|
|
});
|
|
}
|
|
}
|