Browse Source

[add] notify JS when app run in background
[add] restore previous url on load

isundil 8 years ago
parent
commit
db2b417f1e

+ 3 - 0
.idea/misc.xml

@@ -2,6 +2,9 @@
 <project version="4">
   <component name="EntryPointsManager">
     <entry_points version="2.0" />
+    <list size="1">
+      <item index="0" class="java.lang.String" itemvalue="android.webkit.JavascriptInterface" />
+    </list>
   </component>
   <component name="NullableNotNullManager">
     <option name="myDefaultNullable" value="android.support.annotation.Nullable" />

+ 19 - 8
app/src/main/java/com/knacki/mimou/activity/MainActivity.java

@@ -1,7 +1,6 @@
 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;
@@ -12,7 +11,6 @@ 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;
@@ -26,6 +24,7 @@ import com.knacki.mimou.bridge.JavascriptFunction;
 import com.knacki.mimou.preference.CredentialHolder;
 import com.knacki.mimou.bridge.JsInterface;
 import com.knacki.mimou.R;
+import com.knacki.mimou.preference.PreferenceHolder;
 import com.knacki.mimou.preference.UserSettings;
 
 import java.util.List;
@@ -53,12 +52,12 @@ public class MainActivity extends AppCompatActivity {
             public boolean shouldOverrideUrlLoading(WebView view, String url) {
                 Uri uri = Uri.parse(url);
 
-                log.severe("Loading url " +url);
+                log.fine("Loading url " +url);
                 if (uri.getHost().equals(getString(R.string.mimouHost))) {
                     List<String> pathSegments = uri.getPathSegments();
                     if (pathSegments.size() > 0) {
                         if (pathSegments.get(0).equals("login") && !url.contains("?phoneAccess=")) {
-                            CredentialHolder.reset(MainActivity.this);
+                            PreferenceHolder.reset(MainActivity.this);
                             showLogin();
                             return true;
                         }
@@ -103,7 +102,11 @@ public class MainActivity extends AppCompatActivity {
     public void reload() {
         if (needReload && web != null) {
             if (CredentialHolder.hasCredential(this)) {
-                final String url = getString(R.string.mimouUrl) + (CredentialHolder.isLocal(this) ? getString(R.string.localUrl) : (getString(R.string.loginUrl) + "/android?phoneAccess=" +CredentialHolder.getToken(this)));
+                final String url;
+                if (CredentialHolder.isLocal(this))
+                    url = getString(R.string.mimouUrl) + getString(R.string.localUrl);
+                else
+                    url = getString(R.string.mimouUrl) + getString(R.string.loginUrl) + "/android?phoneAccess=" + CredentialHolder.getToken(this);
                 log.fine("Loading URL: " +url);
                 web.loadUrl(url);
             } else {
@@ -125,6 +128,13 @@ public class MainActivity extends AppCompatActivity {
         else
             reload();
         interfaceMimouDroid.setActivity(this);
+        runJavascript(new JavascriptFunction(JsInterface.ON_APPLICATION_RESUMED));
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        runJavascript(new JavascriptFunction(JsInterface.ON_APPLICATION_PAUSED));
     }
 
     @Override
@@ -173,6 +183,7 @@ public class MainActivity extends AppCompatActivity {
 
     public void setCurrentChannel(String channelId) {
         currentChannel = channelId;
+        UserSettings.previousChanel(this, channelId);
     }
 
     public void setTitle(final CharSequence title, final Boolean isFavorite) {
@@ -232,7 +243,7 @@ public class MainActivity extends AppCompatActivity {
     @Override
     public void onBackPressed() {
         if (UserSettings.backShowMenu(this))
-            runJavascript(new JavascriptFunction("displayMenu"));
+            runJavascript(new JavascriptFunction(JsInterface.TOGGLE_MENU));
         else
             moveTaskToBack(true);
     }
@@ -251,7 +262,7 @@ public class MainActivity extends AppCompatActivity {
                 @Override
                 public boolean onMenuItemClick(MenuItem menuItem) {
                     if (favoriteEnabled && currentChannel != null) {
-                        runJavascript(new JavascriptFunction("setChannelFavorite").addArgument(currentChannel).addArgument(!isFavorite));
+                        runJavascript(new JavascriptFunction(JsInterface.SET_CHANNEL_FAVORITE).addArgument(currentChannel).addArgument(!isFavorite));
                     }
                     return true;
                 }
@@ -260,7 +271,7 @@ public class MainActivity extends AppCompatActivity {
             menuButton.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                 @Override
                 public boolean onMenuItemClick(MenuItem menuItem) {
-                    runJavascript(new JavascriptFunction("toggleMenu"));
+                    runJavascript(new JavascriptFunction(JsInterface.TOGGLE_MENU));
                     return true;
                 }
             });

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

@@ -6,6 +6,7 @@ import com.knacki.mimou.activity.MainActivity;
 import com.knacki.mimou.contact.Contact;
 import com.knacki.mimou.contact.ContactReader;
 import com.knacki.mimou.preference.CredentialHolder;
+import com.knacki.mimou.preference.UserSettings;
 import com.knacki.mimou.sms.Conversation;
 import com.knacki.mimou.sms.ConversationList;
 import com.knacki.mimou.sms.Sms;
@@ -28,6 +29,13 @@ import java.util.logging.Logger;
  */
 public class JsInterface {
     private final Logger log = Logger.getLogger(JsInterface.class.getName());
+
+    public static final String TOGGLE_MENU = "toggleMenu";
+    public static final String ON_APPLICATION_PAUSED = "onApplicationPaused";
+    public static final String ON_APPLICATION_RESUMED = "onApplicationResumed";
+    public static final String ON_SMS_PERMISSION_UPDATED = "onSmsPermissionUpdated";
+    public static final String SET_CHANNEL_FAVORITE = "setChannelFavorite";
+
     MainActivity mainActivity;
 
     public void setActivity(MainActivity mainActivity) {
@@ -45,7 +53,7 @@ public class JsInterface {
         mainActivity.requestSmsPermission(new TypedCallback<Boolean>() {
             @Override
             public void onResult(Boolean result) {
-                mainActivity.runJavascript(new JavascriptFunction("onSmsPermissionUpdated").addArgument(result));
+                mainActivity.runJavascript(new JavascriptFunction(JsInterface.ON_SMS_PERMISSION_UPDATED).addArgument(result));
             }
         });
     }
@@ -91,6 +99,11 @@ public class JsInterface {
         mainActivity.setCurrentChannel(channelId);
     }
 
+    @JavascriptInterface
+    public String getPreviousChannel() {
+        return UserSettings.previousChanel(mainActivity);
+    }
+
     private void getStaticUsers(JSONObject staticContent) {
         JSONArray jsonUsers = new JSONArray();
         JSONObject genericContent = new JSONObject();

+ 1 - 3
app/src/main/java/com/knacki/mimou/preference/CredentialHolder.java

@@ -59,10 +59,8 @@ public abstract class CredentialHolder extends PreferenceHolder {
         return null;
     }
 
-    public static void reset(Context c) {
-        SharedPreferences.Editor p = getSharedPreferences(c).edit();
+    static void reset(SharedPreferences.Editor p) {
         p.remove(PREF_SECURITY_TOKEN);
         p.remove(USE_SMS);
-        p.commit();
     }
 }

+ 7 - 1
app/src/main/java/com/knacki/mimou/preference/PreferenceHolder.java

@@ -6,11 +6,17 @@ import android.content.SharedPreferences;
 /**
  * Created by isundil on 1/4/18.
  */
-class PreferenceHolder {
+public class PreferenceHolder {
     private static final String PREF_FILENAME = "prefs";
 
     protected static SharedPreferences getSharedPreferences(Context c) {
         return c.getSharedPreferences(PREF_FILENAME, Context.MODE_PRIVATE);
     }
 
+    public static void reset(Context c) {
+        SharedPreferences.Editor p = getSharedPreferences(c).edit();
+        UserSettings.reset(p);
+        CredentialHolder.reset(p);
+        p.commit();
+    }
 }

+ 14 - 0
app/src/main/java/com/knacki/mimou/preference/UserSettings.java

@@ -8,8 +8,22 @@ import android.content.SharedPreferences;
  */
 public class UserSettings extends PreferenceHolder {
     public static final String BACK_SHOW_MENU = "BACK_SHOW_MENU";
+    public static final String PREVIOUS_CHANNEL = "PREVIOUS_CHAN";
 
     public static boolean backShowMenu(Context c) {
         return getSharedPreferences(c).getBoolean(BACK_SHOW_MENU, true);
     }
+
+    public static String previousChanel(Context c, String s) {
+        getSharedPreferences(c).edit().putString(PREVIOUS_CHANNEL, s).commit();
+        return s;
+    }
+
+    public static String previousChanel(Context c) {
+        return getSharedPreferences(c).getString(PREVIOUS_CHANNEL, null);
+    }
+
+    static void reset(SharedPreferences.Editor p) {
+        p.remove(PREVIOUS_CHANNEL);
+    }
 }