Ver Fonte

[WIP] tmp backup

isundil há 8 anos atrás
pai
commit
4cf123e81b

+ 0 - 3
.idea/misc.xml

@@ -2,9 +2,6 @@
 <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" />

+ 1 - 1
app/build.gradle

@@ -2,7 +2,7 @@ apply plugin: 'com.android.application'
 
 android {
     compileSdkVersion 23
-    buildToolsVersion "23.0.2"
+    buildToolsVersion '25.0.0'
     defaultConfig {
         applicationId "com.knacki.mimou"
         minSdkVersion 15

+ 23 - 6
app/src/main/java/com/knacki/mimou/JsInterface.java

@@ -1,22 +1,39 @@
 package com.knacki.mimou;
 
-import android.app.Activity;
-import android.content.Intent;
 import android.webkit.JavascriptInterface;
 
-import com.knacki.mimou.activity.LoginActivity;
+import com.knacki.mimou.activity.MainActivity;
+import com.knacki.mimou.preference.CredentialHolder;
+import com.knacki.mimou.preference.UserSettings;
+
+import java.util.concurrent.Callable;
 
 /**
  * Created by thibal on 1/4/18.
  */
 public class JsInterface {
-    Activity mainActivity;
+    MainActivity mainActivity;
 
-    public void setActivity(Activity mainActivity) {
+    public void setActivity(MainActivity mainActivity) {
         this.mainActivity = mainActivity;
     }
 
     @JavascriptInterface
-    public void login() {
+    public void logout() {
+        CredentialHolder.removeToken(mainActivity);
+        mainActivity.showLogin();
+    }
+
+    public void readSmsPermission() {
+        mainActivity.requestSmsPermission(new TypedCallback<Boolean>() {
+            @Override
+            public void onResult(Boolean result) {
+                mainActivity.injectJavascript("onSmsPermissionResult(" +result +")");
+            }
+        });
+    }
+
+    public abstract class TypedCallback <T>{
+        public abstract void onResult(T result);
     }
 }

+ 1 - 1
app/src/main/java/com/knacki/mimou/activity/LoginActivity.java

@@ -6,7 +6,7 @@ import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
 import android.view.View;
 
-import com.knacki.mimou.api.CredentialHolder;
+import com.knacki.mimou.preference.CredentialHolder;
 import com.knacki.mimou.R;
 
 public class LoginActivity extends AppCompatActivity {

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

@@ -1,22 +1,39 @@
 package com.knacki.mimou.activity;
 
+import android.Manifest;
+import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.pm.PackageManager;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Handler;
+import android.support.annotation.NonNull;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
+import android.support.v7.app.AlertDialog;
 import android.support.v7.app.AppCompatActivity;
+import android.util.Base64;
+import android.webkit.ValueCallback;
 import android.webkit.WebChromeClient;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
+import android.widget.Toast;
 
 import com.knacki.mimou.BuildConfig;
-import com.knacki.mimou.api.CredentialHolder;
+import com.knacki.mimou.preference.CredentialHolder;
 import com.knacki.mimou.JsInterface;
 import com.knacki.mimou.R;
+import com.knacki.mimou.preference.UserSettings;
 
+import java.io.UnsupportedEncodingException;
+import java.security.Permissions;
+import java.util.concurrent.Callable;
+import java.util.logging.Level;
 import java.util.logging.Logger;
 
 public class MainActivity extends AppCompatActivity {
+    public final static int SMS_PERMISSION_CALLBACK = 42;
     protected WebView web;
     protected JsInterface interfaceMimouDroid;
     private static Logger log = Logger.getLogger(MainActivity.class.getName());
@@ -56,7 +73,7 @@ public class MainActivity extends AppCompatActivity {
         web.loadUrl(CredentialHolder.isLocal(this) ? (getString(R.string.mimouUrl) + (getString(R.string.localUrl))) : getString(R.string.mimouUrl));
     }
 
-    protected void showLogin() {
+    public void showLogin() {
         startActivity(new Intent(MainActivity.this, LoginActivity.class));
     }
 
@@ -69,6 +86,74 @@ public class MainActivity extends AppCompatActivity {
         interfaceMimouDroid.setActivity(this);
     }
 
+    public void injectJavascript(String js) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT  || false) {
+            web.evaluateJavascript(js, new ValueCallback<String>() {
+                @Override
+                public void onReceiveValue(String s) {
+                }
+            });
+        } else {
+            try {
+                web.loadUrl("data:text/html;charset=utf-8;base64," + Base64.encodeToString(("<script>" +js +"</script>").getBytes("UTF-8"), Base64.DEFAULT));
+            } catch (UnsupportedEncodingException e) {
+                log.log(Level.SEVERE, e.getMessage(), e);
+            }
+        }
+    }
+
+    private JsInterface.TypedCallback<Boolean> currentCallback = null;
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+        boolean allGranted = true;
+        for (int grantResult: grantResults) {
+            if (grantResult != PackageManager.PERMISSION_GRANTED) {
+                allGranted = false;
+                break;
+            }
+        }
+        if (currentCallback != null) {
+            currentCallback.onResult(allGranted);
+            currentCallback = null;
+        }
+    }
+
+    private void promptAndroidPermission() {
+        ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.READ_SMS, Manifest.permission.SEND_SMS}, SMS_PERMISSION_CALLBACK);
+    }
+
+    private void promptSmsPermission(final JsInterface.TypedCallback<Boolean> callback) {
+        new AlertDialog.Builder(this)
+                .setMessage(getString(R.string.useSmsPermission))
+                .setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialogInterface, int i) {
+                        currentCallback = callback;
+                        promptAndroidPermission();
+                    }
+                })
+                .setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialogInterface, int i) {
+                        callback.onResult(false);
+                    }
+                })
+                .show();
+    }
+
+    public void requestSmsPermission(JsInterface.TypedCallback<Boolean> callback) {
+        Boolean userPermission =  UserSettings.readSms(this);
+        if (userPermission == null) {
+            promptSmsPermission(callback);
+        } else if (userPermission == false) {
+            callback.onResult(false);
+        } else {
+            currentCallback = callback;
+            promptAndroidPermission();
+        }
+    }
+
     @Override
     public void onBackPressed() {
         moveTaskToBack(true);

+ 3 - 10
app/src/main/java/com/knacki/mimou/api/CredentialHolder.java → app/src/main/java/com/knacki/mimou/preference/CredentialHolder.java

@@ -1,21 +1,14 @@
-package com.knacki.mimou.api;
+package com.knacki.mimou.preference;
 
 import android.content.Context;
 import android.content.SharedPreferences;
 
-import com.knacki.mimou.activity.MainActivity;
-
 /**
  * Created by thibal on 1/4/18.
  */
-public abstract class CredentialHolder {
+public abstract class CredentialHolder extends PreferenceHolder {
     public static final String TOKEN_LOCAL = "_local";
-    private static final String PREF_FILENAME = "prefs";
-    private static final String PREF_SECURITY_TOKEN = "prefs";
-
-    private static SharedPreferences getSharedPreferences(Context c) {
-        return c.getSharedPreferences(PREF_FILENAME, Context.MODE_PRIVATE);
-    }
+    private static final String PREF_SECURITY_TOKEN = "securityToken";
 
     public static void setLocalUse(Context c) {
         getSharedPreferences(c).edit().putString(PREF_SECURITY_TOKEN, TOKEN_LOCAL).commit();

+ 17 - 0
app/src/main/java/com/knacki/mimou/preference/PreferenceHolder.java

@@ -0,0 +1,17 @@
+package com.knacki.mimou.preference;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+/**
+ * Created by isundil on 1/4/18.
+ */
+
+class PreferenceHolder {
+    private static final String PREF_FILENAME = "prefs";
+
+    protected static SharedPreferences getSharedPreferences(Context c) {
+        return c.getSharedPreferences(PREF_FILENAME, Context.MODE_PRIVATE);
+    }
+
+}

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

@@ -0,0 +1,20 @@
+package com.knacki.mimou.preference;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+/**
+ * Created by isundil on 1/4/18.
+ */
+
+public class UserSettings extends PreferenceHolder {
+    private final static String USE_SMS = "smsApp";
+
+    public static Boolean readSms(Context c) {
+        SharedPreferences p = getSharedPreferences(c);
+        if (p.contains(USE_SMS)) {
+            return getSharedPreferences(c).getBoolean(USE_SMS, false);
+        }
+        return null;
+    }
+}

+ 4 - 0
app/src/main/res/values-en/strings.xml

@@ -3,4 +3,8 @@
     <string name="login_text">Please login to access your chats or continue without login</string>
     <string name="action_login">Login</string>
     <string name="action_login_local">Continue without login</string>
+
+    <string name="useSmsPermission">Do you want to use mimouchat as your SMS application ?</string>
+    <string name="yes">yes</string>
+    <string name="no">no</string>
 </resources>

+ 4 - 0
app/src/main/res/values-fr/strings.xml

@@ -3,4 +3,8 @@
     <string name="login_text">Please login to access your chats or continue without login</string>
     <string name="action_login">Login</string>
     <string name="action_login_local">Continue without login</string>
+
+    <string name="useSmsPermission">Do you want to use mimouchat as your SMS application ?</string>
+    <string name="yes">yes</string>
+    <string name="no">no</string>
 </resources>

+ 2 - 2
app/src/main/res/values/dimens.xml

@@ -1,5 +1,5 @@
 <resources>
     <!-- Default screen margins, per the Android Design guidelines. -->
-    <dimen name="activity_horizontal_margin">16dp</dimen>
-    <dimen name="activity_vertical_margin">16dp</dimen>
+    <dimen name="activity_horizontal_margin">0px</dimen>
+    <dimen name="activity_vertical_margin">0px</dimen>
 </resources>

+ 1 - 1
build.gradle

@@ -5,7 +5,7 @@ buildscript {
         jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.2.2'
+        classpath 'com.android.tools.build:gradle:2.3.3'
 
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files

+ 2 - 2
gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
-#Mon Dec 28 10:00:20 PST 2015
+#Thu Jan 04 22:02:47 UTC 2018
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip