summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2020-04-20 22:04:43 +0300
committerAndrew Dolgov <[email protected]>2020-04-20 22:04:43 +0300
commit9317d9f6d8fdb585950c278464eab15a1b9f1dbc (patch)
treecd880b97bcddc26a52f242523605be6580b6888f
parentd08e0fbc458ed494e2ba9830ec99e55d883ff39d (diff)
more UI work
-rw-r--r--.idea/misc.xml5
-rw-r--r--org.fox.epube/src/main/java/org/fox/epube/MainActivity.java125
-rw-r--r--org.fox.epube/src/main/res/menu/activity_main.xml75
3 files changed, 197 insertions, 8 deletions
diff --git a/.idea/misc.xml b/.idea/misc.xml
index f797995..de1caf4 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
+ <component name="EntryPointsManager">
+ <list size="1">
+ <item index="0" class="java.lang.String" itemvalue="android.webkit.JavascriptInterface" />
+ </list>
+ </component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
diff --git a/org.fox.epube/src/main/java/org/fox/epube/MainActivity.java b/org.fox.epube/src/main/java/org/fox/epube/MainActivity.java
index 85e8120..f744178 100644
--- a/org.fox.epube/src/main/java/org/fox/epube/MainActivity.java
+++ b/org.fox.epube/src/main/java/org/fox/epube/MainActivity.java
@@ -1,11 +1,14 @@
package org.fox.epube;
+import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.webkit.CookieManager;
+import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
@@ -18,15 +21,18 @@ import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private final String TAG = this.getClass().getSimpleName();
+ private final String BASE_URL = "https://fakecake.org/books";
+
private ProgressBar m_loadingBar;
private WebView m_web;
+ private Menu m_menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- getSupportActionBar().hide();
+ getSupportActionBar().setHomeButtonEnabled(true);
m_web = findViewById(R.id.webview_main);
@@ -39,10 +45,13 @@ public class MainActivity extends AppCompatActivity {
settings.setAppCachePath(getCacheDir().getAbsolutePath());
settings.setAppCacheEnabled(true);
+
m_loadingBar = findViewById(R.id.loading_progress);
m_loadingBar.setVisibility(View.VISIBLE);
m_loadingBar.setMax(100);
+ WebView.setWebContentsDebuggingEnabled(true);
+
m_web.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int progress) {
@@ -68,19 +77,51 @@ public class MainActivity extends AppCompatActivity {
CookieManager.getInstance().setAcceptCookie(true);
CookieManager.getInstance().acceptCookie();
CookieManager.getInstance().flush();
+
+ Log.d(TAG, "finished loading:" + url + " " + view.getOriginalUrl());
+
+ view.getUrl();
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
- Log.e(TAG, "Error: " + description);
+ Log.e(TAG, "Error loading URL: " + failingUrl + ": " + description);
toast(description);
}
});
- CookieManager.getInstance().setCookie("https://fakecake.org/books", "is-epube-app=true");
+ CookieManager.getInstance().setCookie(BASE_URL, "is-epube-app=true");
+ m_web.addJavascriptInterface(new WebAppInterface(this), "EpubeApp");
m_web.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
- m_web.loadUrl("https://fakecake.org/books/index.php");
+ m_web.loadUrl(BASE_URL + "/index.php");
+ }
+
+ private void onPageSwitched(MainActivity.AppPage page) {
+
+ m_menu.setGroupVisible(R.id.menu_group_library, false);
+ m_menu.setGroupVisible(R.id.menu_group_favorites, false);
+ m_menu.setGroupVisible(R.id.menu_group_offline, false);
+ m_menu.setGroupVisible(R.id.menu_group_reader, false);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(false);
+
+ Log.d(TAG, "switching to page:" + page);
+
+ if (page == AppPage.PAGE_FAVORITES) {
+ m_menu.setGroupVisible(R.id.menu_group_favorites, true);
+ getSupportActionBar().setTitle("Favorites");
+ } else if (page == AppPage.PAGE_LIBRARY) {
+ m_menu.setGroupVisible(R.id.menu_group_library, true);
+ getSupportActionBar().setTitle("The Epube");
+ } else if (page == AppPage.PAGE_OFFLINE) {
+ m_menu.setGroupVisible(R.id.menu_group_offline, true);
+ getSupportActionBar().setTitle("Local");
+ } else if (page == AppPage.PAGE_READER) {
+ m_menu.setGroupVisible(R.id.menu_group_reader, true);
+
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ }
}
public void toast(String msg) {
@@ -93,6 +134,80 @@ public class MainActivity extends AppCompatActivity {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main, menu);
+ m_menu = menu;
+
+ onPageSwitched(null);
+
return true;
}
-}
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ m_web.evaluateJavascript("save_and_close();", null);
+ return true;
+ case R.id.library_favorites:
+ m_web.loadUrl(BASE_URL + "/index.php?mode=favorites");
+ return true;
+ case R.id.library_all:
+ m_web.loadUrl(BASE_URL + "/index.php");
+ return true;
+ case R.id.library_local:
+ m_web.loadUrl(BASE_URL + "/offline.html");
+ return true;
+ case R.id.refresh_script_cache:
+ m_web.evaluateJavascript("cache_refresh(true);", null);
+ return true;
+ case R.id.favorites_download_all:
+ m_web.evaluateJavascript("offline_get_all();", null);
+ return true;
+ case R.id.offline_remove_all:
+ m_web.evaluateJavascript("offline_clear();", null);
+ return true;
+ case R.id.reader_search:
+ m_web.evaluateJavascript("$(\"#search-modal\").modal()", null);
+ return true;
+ case R.id.reader_settings:
+ m_web.evaluateJavascript("$(\"#settings-modal\").modal()", null);
+ return true;
+ case R.id.logout:
+ m_web.loadUrl(BASE_URL + "/logout.php");
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+ public enum AppPage { PAGE_LIBRARY, PAGE_FAVORITES, PAGE_OFFLINE, PAGE_READER }
+
+ class WebAppInterface {
+ private Context m_context;
+
+ WebAppInterface(Context context) {
+ m_context = context;
+ }
+
+ @JavascriptInterface
+ public void setPage(String pageString) {
+ final AppPage page = AppPage.valueOf(pageString);
+
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ onPageSwitched(page);
+ }
+ });
+ }
+
+ @JavascriptInterface
+ public void setTitle(final String title) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ getSupportActionBar().setTitle(title);
+ }
+ });
+ }
+ }
+} \ No newline at end of file
diff --git a/org.fox.epube/src/main/res/menu/activity_main.xml b/org.fox.epube/src/main/res/menu/activity_main.xml
index ce54c1c..2fe201e 100644
--- a/org.fox.epube/src/main/res/menu/activity_main.xml
+++ b/org.fox.epube/src/main/res/menu/activity_main.xml
@@ -1,6 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/test"
- android:title="TEST"/>
+
+ <group android:id="@+id/menu_group_library" >
+ <item
+ android:id="@+id/library_all"
+ android:title="All"/>
+
+ <item
+ android:id="@+id/library_favorites"
+ android:title="Favorites"/>
+
+ <item
+ android:id="@+id/library_local"
+ android:title="Local"/>
+
+ <item
+ android:id="@+id/refresh_script_cache"
+ android:title="Refresh script cache"/>
+
+ <item
+ android:id="@+id/logout"
+ android:title="Logout"/>
+ </group>
+
+ <group android:id="@+id/menu_group_favorites" >
+
+ <item
+ android:id="@+id/library_all"
+ android:title="All"/>
+
+ <item
+ android:id="@+id/library_favorites"
+ android:title="Favorites"/>
+
+ <item
+ android:id="@+id/library_local"
+ android:title="Local"/>
+
+ <item
+ android:id="@+id/favorites_download_all"
+ android:title="Download all"/>
+
+ </group>
+
+ <group android:id="@+id/menu_group_offline" >
+ <item
+ android:id="@+id/library_all"
+ android:title="All"/>
+
+ <item
+ android:id="@+id/library_favorites"
+ android:title="Favorites"/>
+
+ <item
+ android:id="@+id/library_local"
+ android:title="Local"/>
+
+ <item
+ android:id="@+id/offline_remove_all"
+ android:title="Remove all downloads"/>
+
+ </group>
+
+ <group android:id="@+id/menu_group_reader" >
+ <item
+ android:id="@+id/reader_search"
+ android:title="Search"/>
+
+ <item
+ android:id="@+id/reader_settings"
+ android:title="Settings"/>
+
+ </group>
</menu> \ No newline at end of file