diff --git a/code/portal_highlighter.js b/code/portal_highlighter.js index e9de1edc..ee03a883 100644 --- a/code/portal_highlighter.js +++ b/code/portal_highlighter.js @@ -11,14 +11,26 @@ window.addPortalHighlighter = function(name, callback) { _highlighters = {}; } _highlighters[name] = callback; + + if (typeof android !== 'undefined' && android && android.addPortalHighlighter) + android.addPortalHighlighter(name); + if(localStorage.portal_highlighter === undefined) { _current_highlighter = name; + if (typeof android !== 'undefined' && android && android.setActiveHighlighter) + android.setActiveHighlighter(name); + localStorage.portal_highlighter = name; } portalHighlighterControl(); } window.portalHighlighterControl = function() { + if (typeof android !== 'undefined' && android && android.addPortalHighlighter) { + $('#portal_highlight_select').remove(); + return; + } + if(_highlighters !== null) { if($('#portal_highlight_select').length === 0) { $("body").append(""); @@ -46,6 +58,8 @@ window.portalHighlighterControl = function() { window.changePortalHighlights = function(name) { _current_highlighter = name; + if (typeof android !== 'undefined' && android && android.setActiveHighlighter) + android.setActiveHighlighter(name); resetHighlightedPortals(); localStorage.portal_highlighter = name; } diff --git a/mobile/src/com/cradle/iitc_mobile/ActionBarHelper.java b/mobile/src/com/cradle/iitc_mobile/ActionBarHelper.java index 912957e8..c8499b8e 100644 --- a/mobile/src/com/cradle/iitc_mobile/ActionBarHelper.java +++ b/mobile/src/com/cradle/iitc_mobile/ActionBarHelper.java @@ -1,11 +1,13 @@ package com.cradle.iitc_mobile; import android.app.ActionBar; +import android.app.ActionBar.OnNavigationListener; import android.content.SharedPreferences; import android.preference.PreferenceManager; +import android.widget.ArrayAdapter; import android.widget.Toast; -public class ActionBarHelper { +public class ActionBarHelper implements OnNavigationListener { /* * Show/hide the up arrow on the left end * getActionBar().setDisplayHomeAsUpEnabled(enabled); @@ -20,10 +22,31 @@ public class ActionBarHelper { * getActionBar().setHomeButtonEnabled(enabled); */ - private ActionBar mActionBar; - private IITC_Mobile mIitc; - private SharedPreferences mPrefs; + private class HighlighterAdapter extends ArrayAdapter { + public HighlighterAdapter() { + super(mIitc, android.R.layout.simple_list_item_1); + clear(); + } + @Override + public void add(String object) { + super.remove(object); // to avoid duplicates + super.add(object); + } + + @Override + public void clear() { + super.clear(); + add("No Highlights");// Probably must be the same as window._no_highlighter + } + } + + private IITC_Mobile mIitc; + private ActionBar mActionBar; + private SharedPreferences mPrefs; + private HighlighterAdapter mHighlighters; + + private String mActiveHighlighter = null; private boolean mDesktopMode = false; private boolean mFullscreen = false; private boolean mHideInFullscreen = false; @@ -33,58 +56,90 @@ public class ActionBarHelper { mIitc = activity; mActionBar = bar; mPrefs = PreferenceManager.getDefaultSharedPreferences(activity); + mHighlighters = new HighlighterAdapter(); mActionBar.setDisplayShowHomeEnabled(true); // show icon + mActionBar.setListNavigationCallbacks(mHighlighters, this); onPrefChanged(); // also calls updateActionBar() } private void updateActionBar() { + boolean showHighlighter = true; + if (mDesktopMode) { mActionBar.setDisplayHomeAsUpEnabled(false); // Hide "up" indicator mActionBar.setHomeButtonEnabled(false); // Make icon unclickable mActionBar.setTitle(mIitc.getString(R.string.app_name)); } else { - if (mPane != android.R.id.home) - { + if (mPane != android.R.id.home) { mActionBar.setDisplayHomeAsUpEnabled(true); // Show "up" indicator mActionBar.setHomeButtonEnabled(true);// Make icon clickable + showHighlighter = false; } - else - { + else { mActionBar.setDisplayHomeAsUpEnabled(false); // Hide "up" indicator mActionBar.setHomeButtonEnabled(false); // Make icon unclickable } mActionBar.setTitle(IITC_Mobile.PANE_TITLES.get(mPane, mIitc.getString(R.string.app_name))); } + if (mHighlighters.getCount() < 2) // there should always be "No Highlights" + showHighlighter = false; + + if (showHighlighter) { + mActionBar.setDisplayShowTitleEnabled(false); // Hide title + mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); + } else { + mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); + mActionBar.setDisplayShowTitleEnabled(true); // Show title + } if (mFullscreen && mHideInFullscreen) mActionBar.hide(); else mActionBar.show(); } - @Deprecated - public void goHome() { - switchTo(android.R.id.home); + public void addPortalHighlighter(String name) { + mHighlighters.add(name); + + if (name.equals(mActiveHighlighter)) + setActiveHighlighter(name); + + updateActionBar(); } public boolean hideInFullscreen() { return mHideInFullscreen; } + @Override + public boolean onNavigationItemSelected(int position, long itemId) { + String name = mHighlighters.getItem(position); + mIitc.getWebView().loadUrl("javascript: window.changePortalHighlights('" + name + "')"); + return true; + } + public void onPrefChanged() { mDesktopMode = mPrefs.getBoolean("pref_force_desktop", false); mHideInFullscreen = mPrefs.getBoolean("pref_fullscreen_actionbar", false); updateActionBar(); } - public void reset() - { + public void reset() { + mHighlighters.clear(); mPane = android.R.id.home; updateActionBar(); } + public void setActiveHighlighter(String name) { + int position = mHighlighters.getPosition(name); + if (position >= 0) + mActionBar.setSelectedNavigationItem(position); + + mActiveHighlighter = name; + } + public void setFullscreen(boolean fullscreen) { mFullscreen = fullscreen; if (mFullscreen && mHideInFullscreen) { diff --git a/mobile/src/com/cradle/iitc_mobile/IITC_JSInterface.java b/mobile/src/com/cradle/iitc_mobile/IITC_JSInterface.java index 66eecbad..99dc95bb 100644 --- a/mobile/src/com/cradle/iitc_mobile/IITC_JSInterface.java +++ b/mobile/src/com/cradle/iitc_mobile/IITC_JSInterface.java @@ -230,6 +230,28 @@ public class IITC_JSInterface { showMultiSelection(); } + @JavascriptInterface + public void addPortalHighlighter(final String name) { + final IITC_Mobile iitc = ((IITC_Mobile) mContext); + iitc.runOnUiThread(new Runnable() { + @Override + public void run() { + iitc.getActionBarHelper().addPortalHighlighter(name); + } + }); + } + + @JavascriptInterface + public void setActiveHighlighter(final String name) { + final IITC_Mobile iitc = ((IITC_Mobile) mContext); + iitc.runOnUiThread(new Runnable() { + @Override + public void run() { + iitc.getActionBarHelper().setActiveHighlighter(name); + } + }); + } + // show all overlay layers in a multi selection list dialog private void showMultiSelection() { // build the layer chooser dialog