Ver Fonte

[bugfix] back do not stack activities
[bugfix] removed debug
[bugfix] clean destroy webView

isundil há 8 anos atrás
pai
commit
d997a879ab

+ 1 - 1
app/src/main/AndroidManifest.xml

@@ -12,7 +12,7 @@
         android:label="@string/app_name"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <activity android:name=".activity.MainActivity">
+        <activity android:name=".activity.MainActivity" android:noHistory="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />

+ 44 - 11
app/src/main/java/com/knacki/mimou/activity/MainActivity.java

@@ -7,6 +7,8 @@ import android.content.pm.PackageManager;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
 import android.support.annotation.NonNull;
 import android.support.v4.app.ActivityCompat;
 import android.support.v7.app.AlertDialog;
@@ -20,7 +22,9 @@ 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.UserSettings;
 
+import java.util.List;
 import java.util.logging.Logger;
 
 public class MainActivity extends AppCompatActivity {
@@ -45,10 +49,13 @@ public class MainActivity extends AppCompatActivity {
 
                 log.severe("Loading url " +url);
                 if (uri.getHost().equals(getString(R.string.mimouHost))) {
-                    if (uri.getPathSegments().get(0).equals("login") && !url.contains("?phoneAccess=")) {
-                        CredentialHolder.removeToken(MainActivity.this);
-                        showLogin();
-                        return true;
+                    List<String> pathSegments = uri.getPathSegments();
+                    if (pathSegments.size() > 0) {
+                        if (pathSegments.get(0).equals("login") && !url.contains("?phoneAccess=")) {
+                            CredentialHolder.reset(MainActivity.this);
+                            showLogin();
+                            return true;
+                        }
                     }
                     return super.shouldOverrideUrlLoading(view, url);
                 }
@@ -69,7 +76,6 @@ public class MainActivity extends AppCompatActivity {
         if (intentUri != null) {
             String securityToken = intentUri.getQueryParameter("token");
             if (securityToken != null) {
-                log.severe("tetete " +securityToken +' '+intentUri.toString());
                 CredentialHolder.setSecurityToken(this, securityToken);
             }
         }
@@ -77,10 +83,11 @@ public class MainActivity extends AppCompatActivity {
     }
 
     public void reload() {
-        if (needReload) {
+        if (needReload && web != null) {
             if (CredentialHolder.hasCredential(this)) {
-                log.severe("Loading url " +getString(R.string.mimouUrl) + (CredentialHolder.isLocal(this) ? getString(R.string.localUrl) : (getString(R.string.loginUrl) + "?phoneAccess=" +CredentialHolder.getToken(this))));
-                web.loadUrl(getString(R.string.mimouUrl) + (CredentialHolder.isLocal(this) ? getString(R.string.localUrl) : (getString(R.string.loginUrl) + "/android?phoneAccess=" +CredentialHolder.getToken(this))));
+                final String url = getString(R.string.mimouUrl) + (CredentialHolder.isLocal(this) ? getString(R.string.localUrl) : (getString(R.string.loginUrl) + "/android?phoneAccess=" +CredentialHolder.getToken(this)));
+                log.fine("Loading URL: " +url);
+                web.loadUrl(url);
             } else {
                 showLogin();
             }
@@ -102,8 +109,29 @@ public class MainActivity extends AppCompatActivity {
         interfaceMimouDroid.setActivity(this);
     }
 
-    private void runJavascript(String js) {
-        web.loadUrl("javascript:" +js);
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+
+        if (web != null) {
+            web.removeAllViews();
+            web.clearHistory();
+            web.clearCache(true);
+            web.destroyDrawingCache();
+            web.pauseTimers();
+            web.destroy();
+            web = null;
+        }
+    }
+
+    private void runJavascript(final String js) {
+        (new Handler(Looper.getMainLooper())).post(new Runnable() {
+            @Override
+            public void run() {
+                if (web != null)
+                    web.loadUrl("javascript:" +js);
+            }
+        });
     }
 
     public void runJavascript(JavascriptFunction fnc) {
@@ -135,6 +163,7 @@ public class MainActivity extends AppCompatActivity {
                 .setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialogInterface, int i) {
+                        CredentialHolder.setSMSPermission(MainActivity.this, false);
                         currentCallback = callback;
                         promptAndroidPermission();
                     }
@@ -142,6 +171,7 @@ public class MainActivity extends AppCompatActivity {
                 .setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialogInterface, int i) {
+                        CredentialHolder.setSMSPermission(MainActivity.this, false);
                         callback.onResult(false);
                     }
                 })
@@ -163,6 +193,9 @@ public class MainActivity extends AppCompatActivity {
 
     @Override
     public void onBackPressed() {
-        moveTaskToBack(true);
+        if (UserSettings.backShowMenu(this))
+            runJavascript(new JavascriptFunction("onNativeBackPressed"));
+        else
+            moveTaskToBack(true);
     }
 }

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

@@ -15,7 +15,7 @@ public class JavascriptFunction {
     private boolean firstArg = true;
     private boolean immutable = false;
 
-    JavascriptFunction(String fncName) {
+    public JavascriptFunction(String fncName) {
         fncStr = new StringBuilder(fncName).append('(');
     }
 

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

@@ -36,7 +36,7 @@ public class JsInterface {
 
     @JavascriptInterface
     public void logout() {
-        CredentialHolder.removeToken(mainActivity);
+        CredentialHolder.reset(mainActivity);
         mainActivity.showLogin();
     }
 

+ 19 - 5
app/src/main/java/com/knacki/mimou/preference/CredentialHolder.java

@@ -3,6 +3,8 @@ package com.knacki.mimou.preference;
 import android.content.Context;
 import android.content.SharedPreferences;
 
+import com.knacki.mimou.activity.MainActivity;
+
 import java.util.logging.Logger;
 
 /**
@@ -38,17 +40,29 @@ public abstract class CredentialHolder extends PreferenceHolder {
         return getSharedPreferences(c).getString(PREF_SECURITY_TOKEN, null);
     }
 
-    public static void removeToken(Context c) {
-        getSharedPreferences(c).edit().remove(PREF_SECURITY_TOKEN).commit();
-    }
-
     public static Boolean hasSMSPermission(Context c) {
         SharedPreferences p = getSharedPreferences(c);
         if (p.contains(PREF_SECURITY_TOKEN) && p.getString(PREF_SECURITY_TOKEN, "").equals(TOKEN_LOCAL))
             return true;
         if (p.contains(USE_SMS)) {
-            return getSharedPreferences(c).getBoolean(USE_SMS, false);
+            return p.getBoolean(USE_SMS, false);
         }
         return null;
     }
+
+    public static Boolean setSMSPermission(Context c, boolean granted) {
+        SharedPreferences p = getSharedPreferences(c);
+
+        if (!p.contains(PREF_SECURITY_TOKEN) || !p.getString(PREF_SECURITY_TOKEN, "").equals(TOKEN_LOCAL)) {
+            p.edit().putBoolean(USE_SMS, granted).commit();
+        }
+        return null;
+    }
+
+    public static void reset(Context c) {
+        SharedPreferences.Editor p = getSharedPreferences(c).edit();
+        p.remove(PREF_SECURITY_TOKEN);
+        p.remove(USE_SMS);
+        p.commit();
+    }
 }

+ 5 - 1
app/src/main/java/com/knacki/mimou/preference/UserSettings.java

@@ -6,6 +6,10 @@ import android.content.SharedPreferences;
 /**
  * Created by isundil on 1/4/18.
  */
-
 public class UserSettings extends PreferenceHolder {
+    public static final String BACK_SHOW_MENU = "BACK_SHOW_MENU";
+
+    public static boolean backShowMenu(Context c) {
+        return getSharedPreferences(c).getBoolean(BACK_SHOW_MENU, true);
+    }
 }