ソースを参照

[add] credential

isundil 8 年 前
コミット
3b0b2d0e93

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

@@ -1,12 +1,12 @@
 package com.knacki.mimou.activity;
 
+import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
 import android.support.v7.app.AppCompatActivity;
 import android.view.View;
-import android.widget.Button;
-import android.widget.TextView;
-import android.widget.Toast;
 
+import com.knacki.mimou.api.CredentialHolder;
 import com.knacki.mimou.R;
 
 public class LoginActivity extends AppCompatActivity {
@@ -16,16 +16,18 @@ public class LoginActivity extends AppCompatActivity {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_login);
 
-        ((Button) findViewById(R.id.login)).setOnClickListener(new View.OnClickListener() {
+        findViewById(R.id.login).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                Toast.makeText(LoginActivity.this, "test", Toast.LENGTH_LONG).show();
+                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.mimouUrl) +getString(R.string.loginUrl))));
             }
         });
-        ((TextView) findViewById(R.id.login_local)).setOnClickListener(new View.OnClickListener() {
+
+        findViewById(R.id.login_local).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                Toast.makeText(LoginActivity.this, "test local", Toast.LENGTH_LONG).show();
+                CredentialHolder.setLocalUse(LoginActivity.this);
+                startActivity(new Intent(LoginActivity.this, MainActivity.class));
             }
         });
     }

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

@@ -10,13 +10,16 @@ import android.webkit.WebView;
 import android.webkit.WebViewClient;
 
 import com.knacki.mimou.BuildConfig;
+import com.knacki.mimou.api.CredentialHolder;
 import com.knacki.mimou.JsInterface;
 import com.knacki.mimou.R;
 
+import java.util.logging.Logger;
+
 public class MainActivity extends AppCompatActivity {
     protected WebView web;
     protected JsInterface interfaceMimouDroid;
-    private boolean needLogin = false;
+    private static Logger log = Logger.getLogger(MainActivity.class.getName());
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -30,10 +33,11 @@ public class MainActivity extends AppCompatActivity {
             public boolean shouldOverrideUrlLoading(WebView view, String url) {
                 Uri uri = Uri.parse(url);
 
+                log.fine("Loading url " +url);
                 if (uri.getHost().equals(getString(R.string.mimouHost))) {
                     if (uri.getPathSegments().get(0).equals("login")) {
-                        needLogin = true;
-                        startActivity(new Intent(MainActivity.this, LoginActivity.class));
+                        CredentialHolder.removeToken(MainActivity.this);
+                        showLogin();
                         return true;
                     }
                     return super.shouldOverrideUrlLoading(view, url);
@@ -49,15 +53,24 @@ public class MainActivity extends AppCompatActivity {
 
         web.getSettings().setJavaScriptEnabled(true);
         web.addJavascriptInterface(interfaceMimouDroid, "__native");
-        web.loadUrl(getString(R.string.mimouUrl));
+        web.loadUrl(CredentialHolder.isLocal(this) ? (getString(R.string.mimouUrl) + (getString(R.string.localUrl))) : getString(R.string.mimouUrl));
+    }
+
+    protected void showLogin() {
+        startActivity(new Intent(MainActivity.this, LoginActivity.class));
     }
 
     @Override
     protected void onResume() {
         super.onResume();
-        if (needLogin) {
-            startActivity(new Intent(MainActivity.this, LoginActivity.class));
+        if (!CredentialHolder.hasCredential(this)) {
+            showLogin();
         }
         interfaceMimouDroid.setActivity(this);
     }
+
+    @Override
+    public void onBackPressed() {
+        moveTaskToBack(true);
+    }
 }

+ 48 - 0
app/src/main/java/com/knacki/mimou/api/CredentialHolder.java

@@ -0,0 +1,48 @@
+package com.knacki.mimou.api;
+
+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 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);
+    }
+
+    public static void setLocalUse(Context c) {
+        getSharedPreferences(c).edit().putString(PREF_SECURITY_TOKEN, TOKEN_LOCAL).commit();
+    }
+
+    public static void setSecurityToken(Context c, String token) {
+        getSharedPreferences(c).edit().putString(PREF_SECURITY_TOKEN, token).commit();
+    }
+
+    public static boolean hasCredential(Context c) {
+        return getSharedPreferences(c).contains(PREF_SECURITY_TOKEN);
+    }
+
+    public static boolean isLocal(Context c) {
+        SharedPreferences p = getSharedPreferences(c);
+        return p.contains(PREF_SECURITY_TOKEN) && p.getString(PREF_SECURITY_TOKEN, "").equals(TOKEN_LOCAL);
+    }
+
+    public static boolean isLocal(String token) {
+        return token.equals(TOKEN_LOCAL);
+    }
+
+    public static String getToken(Context c) {
+        return getSharedPreferences(c).getString(PREF_SECURITY_TOKEN, null);
+    }
+
+    public static void removeToken(Context c) {
+        getSharedPreferences(c).edit().remove(PREF_SECURITY_TOKEN).commit();
+    }
+}

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

@@ -3,4 +3,6 @@
     <string name="mimouUrl">https://mimouchat.knacki.info/</string>
     <string name="mimouHost">mimouchat.knacki.info</string>
     <string name="mimouScheme">https</string>
+    <string name="loginUrl">mlogin</string>
+    <string name="localUrl">local</string>
 </resources>