summaryrefslogtreecommitdiff
path: root/org.fox.epube/src/main/java
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 /org.fox.epube/src/main/java
parentd08e0fbc458ed494e2ba9830ec99e55d883ff39d (diff)
more UI work
Diffstat (limited to 'org.fox.epube/src/main/java')
-rw-r--r--org.fox.epube/src/main/java/org/fox/epube/MainActivity.java125
1 files changed, 120 insertions, 5 deletions
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