Просмотр исходного кода

[add] menu
[add] star channel from menu
[bugfix] quote string parameter

isundil 8 лет назад
Родитель
Сommit
e1087b4fbb

+ 81 - 2
app/src/main/java/com/knacki/mimou/activity/MainActivity.java

@@ -1,6 +1,7 @@
 package com.knacki.mimou.activity;
 
 import android.Manifest;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -11,8 +12,11 @@ import android.os.Handler;
 import android.os.Looper;
 import android.support.annotation.NonNull;
 import android.support.v4.app.ActivityCompat;
+import android.support.v4.view.MenuCompat;
 import android.support.v7.app.AlertDialog;
 import android.support.v7.app.AppCompatActivity;
+import android.view.Menu;
+import android.view.MenuItem;
 import android.webkit.WebChromeClient;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
@@ -31,6 +35,8 @@ public class MainActivity extends AppCompatActivity {
     public final static int SMS_PERMISSION_CALLBACK = 42;
     protected WebView web;
     protected JsInterface interfaceMimouDroid;
+    protected MainActivityMenu menu;
+    protected String currentChannel = null;
     public static boolean needReload = true;
     private static Logger log = Logger.getLogger(MainActivity.class.getName());
     private JsInterface.TypedCallback<Boolean> currentCallback = null;
@@ -82,6 +88,18 @@ public class MainActivity extends AppCompatActivity {
         reload();
     }
 
+    @Override
+    public boolean onCreateOptionsMenu(Menu m) {
+        getMenuInflater().inflate(R.menu.title_opt, m);
+        menu = new MainActivityMenu(m);
+        menu.setFavoriteEnabled(false);
+        return true;
+    }
+
+    public void uiThread(Runnable e) {
+        new Handler(Looper.getMainLooper()).post(e);
+    }
+
     public void reload() {
         if (needReload && web != null) {
             if (CredentialHolder.hasCredential(this)) {
@@ -125,7 +143,7 @@ public class MainActivity extends AppCompatActivity {
     }
 
     private void runJavascript(final String js) {
-        (new Handler(Looper.getMainLooper())).post(new Runnable() {
+        uiThread(new Runnable() {
             @Override
             public void run() {
                 if (web != null)
@@ -153,6 +171,26 @@ public class MainActivity extends AppCompatActivity {
         }
     }
 
+    public void setCurrentChannel(String channelId) {
+        currentChannel = channelId;
+    }
+
+    public void setTitle(final CharSequence title, final Boolean isFavorite) {
+        uiThread(new Runnable() {
+            @Override
+            public void run() {
+                setTitle(title);
+
+                if (isFavorite == null) {
+                    menu.setFavoriteEnabled(false);
+                } else {
+                    menu.setFavoriteEnabled(true);
+                    menu.setFavorite(isFavorite);
+                }
+            }
+        });
+    }
+
     private void promptAndroidPermission() {
         ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_SMS, Manifest.permission.SEND_SMS}, SMS_PERMISSION_CALLBACK);
     }
@@ -194,8 +232,49 @@ public class MainActivity extends AppCompatActivity {
     @Override
     public void onBackPressed() {
         if (UserSettings.backShowMenu(this))
-            runJavascript(new JavascriptFunction("onNativeBackPressed"));
+            runJavascript(new JavascriptFunction("displayMenu"));
         else
             moveTaskToBack(true);
     }
+
+    class MainActivityMenu {
+        protected MenuItem favoriteButton;
+        protected MenuItem menuButton;
+        protected boolean favoriteEnabled;
+        protected boolean isFavorite;
+
+        MainActivityMenu(Menu menu) {
+            favoriteButton = menu.getItem(0);
+            menuButton = menu.getItem(1);
+
+            favoriteButton.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+                @Override
+                public boolean onMenuItemClick(MenuItem menuItem) {
+                    if (favoriteEnabled && currentChannel != null) {
+                        runJavascript(new JavascriptFunction("setChannelFavorite").addArgument(currentChannel).addArgument(!isFavorite));
+                    }
+                    return true;
+                }
+            });
+
+            menuButton.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+                @Override
+                public boolean onMenuItemClick(MenuItem menuItem) {
+                    runJavascript(new JavascriptFunction("toggleMenu"));
+                    return true;
+                }
+            });
+        }
+
+        public void setFavoriteEnabled(boolean enabled) {
+            favoriteButton.setVisible(enabled);
+            favoriteEnabled = enabled;
+        }
+
+        public void setFavorite(boolean isFav) {
+            isFavorite = isFav;
+            favoriteButton.setTitle(isFav ? "STARRED" : "NOT STARRED");
+            //favoriteButton.setIcon(MainActivity.this.getDrawable(R.drawable.favorite));
+        }
+    }
 }

+ 1 - 1
app/src/main/java/com/knacki/mimou/bridge/JavascriptFunction.java

@@ -27,7 +27,7 @@ public class JavascriptFunction {
         if (!immutable) {
             if (!firstArg)
                 fncStr.append(',');
-            fncStr.append(escapeStr(arg));
+            fncStr.append('"').append(escapeStr(arg)).append('"');
             firstArg = false;
         }
         return this;

+ 12 - 2
app/src/main/java/com/knacki/mimou/bridge/JsInterface.java

@@ -41,11 +41,11 @@ public class JsInterface {
     }
 
     @JavascriptInterface
-    public void readSmsPermission(final String fncName) {
+    public void readSmsPermission() {
         mainActivity.requestSmsPermission(new TypedCallback<Boolean>() {
             @Override
             public void onResult(Boolean result) {
-                mainActivity.runJavascript(new JavascriptFunction(fncName).addArgument(result));
+                mainActivity.runJavascript(new JavascriptFunction("onSmsPermissionUpdated").addArgument(result));
             }
         });
     }
@@ -81,6 +81,16 @@ public class JsInterface {
         return wrapper.toString();
     }
 
+    @JavascriptInterface
+    public void setTitle(final String title, boolean favEnabled, boolean isFavorite) {
+        mainActivity.setTitle(title, favEnabled ? isFavorite : null);
+    }
+
+    @JavascriptInterface
+    public void setCurrentChannel(final String channelId) {
+        mainActivity.setCurrentChannel(channelId);
+    }
+
     private void getStaticUsers(JSONObject staticContent) {
         JSONArray jsonUsers = new JSONArray();
         JSONObject genericContent = new JSONObject();

+ 9 - 0
app/src/main/res/menu/title_opt.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+    <item android:id="@+id/action_fav"
+        android:title="fav"
+        android:showAsAction="ifRoom"/>
+    <item android:id="@+id/action_settings"
+        android:title="..."
+        android:showAsAction="ifRoom"/>
+</menu>