Browse Source

增加 utils

liuyuqi-dellpc 3 years ago
parent
commit
e6892092bf

+ 43 - 2
app/src/main/java/me/yoqi/android/netauth/MainActivity.java

@@ -1,19 +1,60 @@
 package me.yoqi.android.netauth;
 
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
 import androidx.appcompat.app.AppCompatActivity;
 
-import android.os.Bundle;
+import me.yoqi.android.netauth.ui.login.LoginActivity;
+import me.yoqi.android.utils.SPUtils;
 
 public class MainActivity extends AppCompatActivity {
+    Button btnLogin;
+    TextView tvStatus;
+    SPUtils spUtils;
+    Context mContext;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 
+        mContext = this;
+        spUtils = new SPUtils(mContext);
         initView();
     }
-    void initView(){
 
+    void initView() {
+        btnLogin = findViewById(R.id.btn_login);
+        tvStatus = findViewById(R.id.tv_status);
+
+        btnLogin.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                //跳转到登录界面
+                Intent intent = new Intent(mContext, LoginActivity.class);
+                startActivity(intent);
+            }
+        });
+        changeStatus();
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        changeStatus();
+    }
+
+    void changeStatus() {
+        boolean netStatus = spUtils.getBoolean("status", false);
+        if (netStatus) {
+            tvStatus.setText("登录成功");
+        } else {
+            tvStatus.setText("未登录");
+        }
     }
 }

+ 10 - 11
app/src/main/java/me/yoqi/android/netauth/ui/login/LoginActivity.java

@@ -1,16 +1,7 @@
 package me.yoqi.android.netauth.ui.login;
 
 import android.app.Activity;
-
-import androidx.lifecycle.Observer;
-import androidx.lifecycle.ViewModelProviders;
-
 import android.os.Bundle;
-
-import androidx.annotation.Nullable;
-import androidx.annotation.StringRes;
-import androidx.appcompat.app.AppCompatActivity;
-
 import android.text.Editable;
 import android.text.TextWatcher;
 import android.view.KeyEvent;
@@ -22,10 +13,17 @@ import android.widget.ProgressBar;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProviders;
+
 import me.yoqi.android.netauth.R;
-import me.yoqi.android.netauth.ui.login.LoginViewModel;
-import me.yoqi.android.netauth.ui.login.LoginViewModelFactory;
 
+/**
+ * 登录界面
+ */
 public class LoginActivity extends AppCompatActivity {
 
     private LoginViewModel loginViewModel;
@@ -34,6 +32,7 @@ public class LoginActivity extends AppCompatActivity {
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_login);
+
         loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory())
                 .get(LoginViewModel.class);
 

+ 2 - 1
app/src/main/java/me/yoqi/android/netauth/ui/login/LoginFormState.java

@@ -3,9 +3,10 @@ package me.yoqi.android.netauth.ui.login;
 import androidx.annotation.Nullable;
 
 /**
- * Data validation state of the login form.
+ * 表单验证.
  */
 class LoginFormState {
+
     @Nullable
     private Integer usernameError;
     @Nullable

+ 3 - 0
app/src/main/java/me/yoqi/android/netauth/ui/login/LoginViewModel.java

@@ -11,6 +11,9 @@ import me.yoqi.android.netauth.data.Result;
 import me.yoqi.android.netauth.data.model.LoggedInUser;
 import me.yoqi.android.netauth.R;
 
+/**
+ *
+ */
 public class LoginViewModel extends ViewModel {
 
     private MutableLiveData<LoginFormState> loginFormState = new MutableLiveData<>();

+ 12 - 0
app/src/main/java/me/yoqi/android/utils/NetUtils.java

@@ -0,0 +1,12 @@
+package me.yoqi.android.utils;
+
+/**
+ * 网络检测工具类
+ * @author liuyuqi.gov@msn.cn
+ * @createTime 2020-08-18
+ */
+public class NetUtils {
+    //检测网络是否可用,wifi or gps
+    
+}
+

+ 22 - 0
app/src/main/java/me/yoqi/android/utils/RegexParser.java

@@ -0,0 +1,22 @@
+package me.yoqi.android.utils;
+
+import android.util.Patterns;
+
+/**
+ * 常用正则表达式
+ *
+ * @author liuyuqi.gov@msn.cn
+ * @createTime 2020-08-17
+ */
+public class RegexParser {
+    static final String PHONE_PATTERN = Patterns.PHONE.pattern();
+    static final String EMAIL_PATTERN = Patterns.EMAIL_ADDRESS.pattern();
+
+    //at、话题、链接匹配表达式
+    static final String MENTION_PATTERN = "@.{1,15}?\\s";
+    static final String HASHTAG_PATTERN = "#.{1,15}?\\s";
+    static final String URL_PATTERN = "(http|https|ftp|svn)://([a-zA-Z0-9]+[/?.?])" +
+            "+[a-zA-Z0-9]*\\??([a-zA-Z0-9]*=[a-zA-Z0-9]*&?)*";
+
+}
+

+ 78 - 0
app/src/main/java/me/yoqi/android/utils/SPUtils.java

@@ -0,0 +1,78 @@
+package me.yoqi.android.utils;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+
+import java.util.Map;
+import java.util.Set;
+
+public class SPUtils {
+    private static final String SP_NAME = "common";
+    private SPUtils mSpUtils;
+    private SharedPreferences sp;
+    private Editor editor;
+
+    public SPUtils(Context mContext) {
+        sp = mContext.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
+        editor = sp.edit();
+    }
+
+    public SPUtils getInstance(Context context) {
+
+        if (mSpUtils == null) {
+            synchronized (SPUtils.class) {
+                if (mSpUtils == null) {
+                    mSpUtils = new SPUtils(context);
+                    return mSpUtils;
+                }
+            }
+        }
+
+        return mSpUtils;
+
+    }
+
+    public void putBoolean(String key, Boolean value) {
+        editor.putBoolean(key, value);
+        editor.commit();
+    }
+
+    public boolean getBoolean(String key, Boolean defValue) {
+        return sp.getBoolean(key, defValue);
+    }
+
+    public void putString(String key, String value) {
+        if (key == null) {
+            return;
+        }
+        editor.putString(key, value);
+        editor.commit();
+    }
+
+    public String getString(String key, String defValue) {
+        return sp.getString(key, defValue);
+    }
+
+    public Set<String> getStringSet(String key, Set<String> defValue) {
+        return sp.getStringSet(key, defValue);
+    }
+
+    public void putInt(String key, int value) {
+        editor.putInt(key, value);
+        editor.commit();
+    }
+
+    public int getInt(String key, int defValue) {
+        return sp.getInt(key, defValue);
+    }
+
+    public Map<String, ?> getAll() {
+        return sp.getAll();
+    }
+
+    public void remove(String key) {
+        sp.edit().remove(key).apply();
+    }
+
+}

+ 80 - 0
app/src/main/java/me/yoqi/android/utils/SimplexToast.java

@@ -0,0 +1,80 @@
+package me.yoqi.android.utils;
+
+import android.content.Context;
+import android.view.Gravity;
+import android.widget.Toast;
+
+/**
+ * 以后请用这个吐司,谢谢!!!
+ * <p>
+ * <p>
+ * {@link Toast}的创建都是要inflate一个layout, findViewById之类的
+ * 将一个吐司单例化,并且作防止频繁点击的处理。
+ * <p>
+ * <p>
+ */
+@SuppressWarnings("all")
+public class SimplexToast {
+
+    private static Toast mToast;
+    private static long nextTimeMillis;
+    private static int yOffset;
+    static Context mContext;
+    private static SimplexToast simplexToast;
+
+    public synchronized static SimplexToast getInstance(Context context) {
+        if (simplexToast == null) {
+            simplexToast = new SimplexToast(context);
+        }
+        return simplexToast;
+    }
+
+    public SimplexToast(Context context) {
+        mContext = context;
+    }
+
+    public static Toast init(Context context) {
+        if (context == null) {
+            throw new IllegalArgumentException("Context should not be null!!!");
+        }
+        if (mToast == null) {
+            mToast = Toast.makeText(context, null, Toast.LENGTH_SHORT);
+            yOffset = mToast.getYOffset();
+        }
+        mToast.setDuration(Toast.LENGTH_SHORT);
+        mToast.setGravity(Gravity.BOTTOM, 0, yOffset);
+        mToast.setMargin(0, 0);
+        return mToast;
+    }
+
+    public static void show(String content) {
+        show(content, Toast.LENGTH_SHORT);
+    }
+
+    public static void show(String content, int duration) {
+        show(mContext, content, Gravity.BOTTOM, duration);
+    }
+
+    public static void show(Context context, int rid) {
+        show(context, context.getResources().getString(rid));
+    }
+
+    public static void show(Context context, String content) {
+        show(context, content, Gravity.BOTTOM);
+    }
+
+    public static void show(Context context, String content, int gravity) {
+        show(context, content, gravity, Toast.LENGTH_SHORT);
+    }
+
+    public static void show(Context context, String content, int gravity, int duration) {
+        long current = System.currentTimeMillis();
+        //if (current < nextTimeMillis) return;
+        if (mToast == null) init(context.getApplicationContext());
+        mToast.setText(content);
+        mToast.setDuration(duration);
+        mToast.setGravity(gravity, 0, yOffset);
+        nextTimeMillis = current + (duration == Toast.LENGTH_LONG ? 3500 : 2000);
+        mToast.show();
+    }
+}

+ 10 - 0
app/src/main/java/me/yoqi/android/utils/StringUtils.java

@@ -0,0 +1,10 @@
+package me.yoqi.android.utils;
+
+/**
+ * @author liuyuqi.gov@msn.cn
+ * @createTime 2020-08-17
+ */
+public class StringUtils {
+
+}
+

+ 17 - 2
app/src/main/res/layout/activity_main.xml

@@ -7,12 +7,27 @@
     tools:context=".MainActivity">
 
     <TextView
+        android:id="@+id/tv_status"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="Hello World!"
-        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginTop="308dp"
+        android:text="登录成功"
+        android:textSize="45dp"
+        app:layout_constraintHorizontal_bias="0.562"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
 
+    <Button
+        android:id="@+id/btn_login"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="56dp"
+        android:text="登录"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.517"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/tv_status" />
+
+
 </androidx.constraintlayout.widget.ConstraintLayout>