Browse Source

增加 TialService

liuyuqi-dellpc 3 years ago
parent
commit
9c5285e62c

+ 7 - 0
README.md

@@ -0,0 +1,7 @@
+## NetAuth
+
+通大校园网认证app,手机自动登录,一键上网。用完一键断网。
+
+
+## screenshot
+

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

@@ -2,6 +2,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="me.yoqi.android.netauth">
 
+    <!--    获取网络状态-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <!--    存储权限-->
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+
     <application
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
@@ -11,7 +18,7 @@
         android:theme="@style/AppTheme">
         <activity
             android:name=".ui.login.LoginActivity"
-            android:label="@string/title_activity_login"></activity>
+            android:label="@string/title_activity_login" />
         <activity android:name=".MainActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -19,6 +26,16 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+
+        <service
+            android:name=".service.QSTileService"
+            android:icon="@drawable/abc_vector_test"
+            android:label="@string/app_name"
+            android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
+            <intent-filter>
+                <action android:name="android.service.quicksettings.action.QS_TILE" />
+            </intent-filter>
+        </service>
     </application>
 
 </manifest>

+ 18 - 0
app/src/main/java/me/yoqi/android/netauth/model/Account.java

@@ -0,0 +1,18 @@
+package me.yoqi.android.netauth.model;
+
+import android.media.Image;
+
+import java.io.Serializable;
+
+/**
+ * 用户账号信息
+ *
+ * @author liuyuqi.gov@msn.cn
+ * @created 2020-10-17
+ */
+public class Account implements Serializable {
+    String userName;
+    String pwd;
+    Image logo;//头像
+    int sex;
+}

+ 19 - 0
app/src/main/java/me/yoqi/android/netauth/model/Config.java

@@ -0,0 +1,19 @@
+package me.yoqi.android.netauth.model;
+
+import android.os.Build;
+
+/**
+ * 通用配置
+ *
+ * @author liuyuqi.gov@msn.cn
+ * @created 2020-10-17
+ */
+public class Config {
+    int SDK = Build.VERSION.SDK_INT;
+
+    String LOG_TAG = "ONE_TAP_CDUT_NET";
+
+    // 校园网登录地址
+    String CAMPUS_NET_URL = "http://172.20.255.252";
+
+}

+ 94 - 0
app/src/main/java/me/yoqi/android/netauth/service/QSTileService.java

@@ -0,0 +1,94 @@
+package me.yoqi.android.netauth.service;
+
+import android.os.AsyncTask;
+import android.os.Build;
+import android.service.quicksettings.Tile;
+import android.service.quicksettings.TileService;
+
+import androidx.annotation.RequiresApi;
+
+import me.yoqi.android.netauth.R;
+import me.yoqi.android.netauth.utils.NtutNet;
+import me.yoqi.android.utils.NetUtils;
+import me.yoqi.android.utils.SPUtils;
+
+/**
+ * @author liuyuqi.gov@msn.cn
+ * @created 2020-10-17
+ */
+@RequiresApi(api = Build.VERSION_CODES.N)
+public class QSTileService extends TileService {
+
+    SPUtils spUtils;
+    Tile tile;
+    NtutNet cdutNet = new NtutNet();
+
+    /**
+     * 图标可见回调
+     */
+    @Override
+    public void onStartListening() {
+        super.onStartListening();
+        if (NetUtils.isWifiConnected(this)) {
+            updateStatus(R.string.tile_label, false);
+        } else {// 未连接 WiFi 则将图块置为不可用状态
+            updateStatus(R.string.tile_status_no_net_conn, false);
+        }
+    }
+
+    @Override
+    public void onClick() {
+        super.onClick();
+        tile = getQsTile();
+        new MyTask().execute();
+    }
+
+    /**
+     * 更新状态
+     *
+     * @param labelId
+     * @param enable
+     */
+    void updateStatus(int labelId, boolean enable) {
+        tile = getQsTile();
+        tile.setLabel(getString(labelId));
+        if (enable) {
+            tile.setState(Tile.STATE_ACTIVE); //登录校园网成功
+        } else {
+            tile.setState(Tile.STATE_UNAVAILABLE);
+        }
+        tile.updateTile();
+    }
+
+    /**
+     * 异步登录
+     */
+    class MyTask extends AsyncTask<String, Integer, Boolean> {
+
+        @Override
+        protected Boolean doInBackground(String... strings) {
+            //更新状态
+            publishProgress(R.string.tile_status_check);
+            Boolean res = cdutNet.check();
+            if (res == null) {
+                publishProgress(R.string.tile_status_not); // 未连接校园网
+                return false;
+            } else if (res) {
+                publishProgress(R.string.tile_status_ok); //登录成功
+                return true;
+            } else {
+                //执行登录
+                if (cdutNet.login("ss", "236")) {
+                    publishProgress(R.string.tile_status_failed); //登录失败
+                    return false;
+                } else return true;
+            }
+        }
+
+        @Override
+        protected void onProgressUpdate(Integer... values) {
+            super.onProgressUpdate(values);
+//            updateStatus(values[0], false);
+        }
+    }
+}

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

@@ -36,6 +36,9 @@ public class LoginActivity extends AppCompatActivity {
         loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory())
                 .get(LoginViewModel.class);
 
+
+//        sp中取得保存的账户密码,填充。多个账户的话下拉提供选择
+
         final EditText usernameEditText = findViewById(R.id.username);
         final EditText passwordEditText = findViewById(R.id.password);
         final Button loginButton = findViewById(R.id.login);

+ 24 - 0
app/src/main/java/me/yoqi/android/netauth/utils/MD5.java

@@ -0,0 +1,24 @@
+package me.yoqi.android.netauth.utils;
+
+import java.io.ByteArrayInputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * 加密工具类,网络传输过程中,账号信息加密传输
+ *
+ * @author liuyuqi.gov@msn.cn
+ * @created 2020-10-17
+ */
+public class MD5 {
+    String md5(String str) throws NoSuchAlgorithmException {
+        MessageDigest md5 = MessageDigest.getInstance("MD5");
+        md5.update(str.getBytes());
+        return null;
+    }
+
+    String prase(ByteArrayInputStream bytes) {
+        // TODO: 2020-10-17
+        return null;
+    }
+}

+ 36 - 0
app/src/main/java/me/yoqi/android/netauth/utils/NtutNet.java

@@ -0,0 +1,36 @@
+package me.yoqi.android.netauth.utils;
+
+import android.util.Log;
+
+/**
+ * @author liuyuqi.gov@msn.cn
+ * @created 2020-10-17
+ */
+public class NtutNet {
+    String tag = "CduNet";
+
+    /**
+     * 检测校园网状态
+     *
+     * @return null 未连接校园网
+     * false 已连接校园网,但未登录
+     * true 已链接校园网,登登录成功
+     */
+    public Boolean check() {
+        // TODO: 2020-10-17 检测网络状态
+        return false;
+    }
+
+    /**
+     * 执行登录
+     *
+     * @param userName
+     * @param pwd
+     * @return
+     */
+    public boolean login(String userName, String pwd) {
+        Log.i(tag, "login: user+pwd" + userName + ":" + pwd);
+        // TODO: 2020-10-17 执行登录,如果登陆成功,返回true
+        return false;
+    }
+}

+ 20 - 1
app/src/main/java/me/yoqi/android/utils/NetUtils.java

@@ -1,12 +1,31 @@
 package me.yoqi.android.utils;
 
+import android.app.Service;
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.Build;
+
 /**
  * 网络检测工具类
+ *
  * @author liuyuqi.gov@msn.cn
  * @createTime 2020-08-18
  */
 public class NetUtils {
     //检测网络是否可用,wifi or gps
-    
+
+    /**
+     * 判断 WiFi 连接
+     */
+    public static boolean isWifiConnected(Context context) {
+        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Service.CONNECTIVITY_SERVICE);
+        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
+            return networkInfo != null && networkInfo.isAvailable() && networkInfo.getType() == ConnectivityManager.TYPE_WIFI;
+        } else {
+            return false;
+        }
+    }
 }
 

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

@@ -9,4 +9,16 @@
     <string name="invalid_username">Not a valid username</string>
     <string name="invalid_password">Password must be >5 characters</string>
     <string name="login_failed">"Login failed"</string>
+
+
+
+    <string name="tile_label">CdutNet</string>
+    <string name="tile_status_check">Checking&#8230;</string>
+    <string name="tile_status_loggin">Logining&#8230;</string>
+    <string name="tile_status_ok">OK</string>
+    <string name="tile_status_not">Not</string>
+    <string name="tile_status_failed">Failed</string>
+    <string name="tile_status_no_net_conn">NoNetConn</string>
+    <string name="how_to">Add the tile \"CdutNet\" in Quick Settings to use.</string>
+
 </resources>