Browse Source

增加历史记录页面

liuyuqi-dellpc 4 years ago
parent
commit
e9027479f5

+ 1 - 0
.idea/gradle.xml

@@ -14,6 +14,7 @@
           </set>
         </option>
         <option name="resolveModulePerSourceSet" value="false" />
+        <option name="useQualifiedModuleNames" value="true" />
       </GradleProjectSettings>
     </option>
   </component>

+ 1 - 1
.idea/misc.xml

@@ -8,7 +8,7 @@
   <component name="Kotlin2JsCompilerArguments">
     <option name="sourceMapEmbedSources" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">

+ 1 - 1
app/build.gradle

@@ -20,7 +20,7 @@ android {
         versionCode 13
         versionName "1.23"
         applicationId "me.yoqi.android.qrcode"
-        minSdkVersion 14
+        minSdkVersion 16
         targetSdkVersion 29
     }
 

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

@@ -112,7 +112,8 @@
                     android:scheme="zxing" />
             </intent-filter>
         </activity>
-        <activity android:name="me.yoqi.android.qrcode.ResultActivity" />
+        <activity android:name="me.yoqi.android.qrcode.ui.ResultActivity"/>
+        <activity android:name=".ui.HistoryActivity" />
 
         <service
             android:name="me.yoqi.android.qrcode.service.QuickStartService"

+ 2 - 0
app/src/main/java/me/yoqi/android/qrcode/CaptureActivity.java

@@ -37,6 +37,8 @@ import com.google.zxing.client.android.result.ResultHandlerFactory;
 import java.io.IOException;
 import java.util.Collection;
 
+import me.yoqi.android.qrcode.ui.ResultActivity;
+
 /**
  * 识别二维码 CaptureActivity
  *

+ 52 - 0
app/src/main/java/me/yoqi/android/qrcode/dao/QRCodeOpenHelper.java

@@ -0,0 +1,52 @@
+package me.yoqi.android.qrcode.dao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.util.Log;
+
+import me.yoqi.android.qrcode.model.Config;
+
+/**
+ * 数据库操作类
+ */
+public class QRCodeOpenHelper extends SQLiteOpenHelper {
+    public String tag = "QRCodeOpenHelper";
+
+    /**
+     * 首次创建表
+     *
+     * @see SQLiteOpenHelper#onCreate(SQLiteDatabase)
+     */
+    @Override
+    public void onCreate(SQLiteDatabase db) {
+        Log.i(tag, "onCreate");
+        String sql1 = "CREATE TABLE User ( _ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, pwd TEXT NOT NULL)";
+        String sql2 = "CREATE TABLE scanHistory ( _ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, content TEXT NOT NULL, " +
+                "created TEXT NOT NULL, isUrl INTEGER DEFAULT 0 )";
+        db.execSQL(sql1);
+        db.execSQL(sql2);
+    }
+
+    /**
+     * 构造方法创建一个数据库 Creates a new instance of OrderOpenHelper.
+     *
+     * @param context 上下文对象
+     */
+    public QRCodeOpenHelper(Context context) {
+        super(context, Config.DATA_BASE, null, 3);
+        Log.i(tag, "OrderOpenHelper");
+    }
+
+    /**
+     * 升级数据库会调用这个方法
+     *
+     * @param db         数据库对象
+     * @param oldVersion 老版本号
+     * @param newVersion 新版本号
+     */
+    @Override
+    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        Log.i(tag, "onUpgrade");
+    }
+}

+ 165 - 0
app/src/main/java/me/yoqi/android/qrcode/dao/ScanHistoryDao.java

@@ -0,0 +1,165 @@
+package me.yoqi.android.qrcode.dao;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import me.yoqi.android.qrcode.model.Config;
+import me.yoqi.android.qrcode.model.ScanHistory;
+
+/**
+ * 扫码记录 操作类
+ *
+ * @author liuyuqi.gov@msn.cn
+ * @date 2020-10-20
+ */
+public class ScanHistoryDao {
+    private QRCodeOpenHelper openHelper;
+
+    public ScanHistoryDao(Context context) {
+        openHelper = new QRCodeOpenHelper(context);
+    }
+
+    /**
+     * 删除表
+     */
+    public void delete() {
+        SQLiteDatabase db = openHelper.getReadableDatabase();
+        db.delete(Config.TABLE_HISTORY, null, null);
+        db.close();
+    }
+
+    /**
+     * 删除一条数据 : DELETE FROM User WHERE _ID=1
+     *
+     * @param id qrcode id
+     */
+    public void delete(int id) {
+        SQLiteDatabase db = openHelper.getReadableDatabase();
+        db.delete(Config.TABLE_HISTORY, "_ID=?", new String[]{String.valueOf(id)});
+        db.close();
+    }
+
+    /**
+     * 插入历史记录
+     *
+     * @param scanHistories 一条或多条
+     */
+    public void addHistorys(ArrayList<ScanHistory> scanHistories) {
+        SQLiteDatabase db = openHelper.getReadableDatabase();
+        for (ScanHistory scanHistory : scanHistories) {
+            ContentValues values = new ContentValues();
+            values.put("content", scanHistory.getContent());
+            values.put("created", scanHistory.getCreated());
+            values.put("isUrl", scanHistory.getIsUrl());
+            db.insert(Config.TABLE_HISTORY, null, values);
+        }
+        db.close();
+    }
+
+    /**
+     * 增加一条数据
+     *
+     * @param scanHistory
+     */
+    public void addHistory(ScanHistory scanHistory) {
+        SQLiteDatabase db = openHelper.getReadableDatabase();
+        ContentValues values = new ContentValues();
+        values.put("content", scanHistory.getContent());
+        values.put("created", scanHistory.getCreated());
+        values.put("isUrl", scanHistory.getIsUrl());
+        db.insert(Config.TABLE_HISTORY, null, values);
+        db.close();
+    }
+
+    /**
+     * 获取多条数据
+     *
+     * @return
+     */
+    public ArrayList<ScanHistory> getHistories() {
+        SQLiteDatabase db = openHelper.getReadableDatabase();
+        ArrayList<ScanHistory> list = new ArrayList<>();
+        Cursor cursor = db.rawQuery(
+                "select * from scanHistory order by _ID",
+                null);// 查询获取数据
+
+        if (cursor != null && cursor.getCount() > 0) {
+            while (cursor.moveToNext()) {
+                ScanHistory scanHistory = new ScanHistory();
+                scanHistory.setContent(cursor.getString(1));
+                scanHistory.setCreated(cursor.getString(2));
+                scanHistory.setIsUrl(cursor.getInt(3));
+                list.add(scanHistory);
+            }
+        }
+        db.close();
+        cursor.close();
+        return list;
+    }
+
+    /**
+     * 获取所有扫码内容
+     *
+     * @return
+     */
+    public String[] getContents() {
+        List<String> tmp = new ArrayList<String>();
+        SQLiteDatabase db = openHelper.getReadableDatabase();
+        Cursor cursor = db.rawQuery(
+                "select content from scanHistory order by _ID",
+                null);// 查询获取数据
+
+        if (cursor != null && cursor.getCount() > 0) {
+            while (cursor.moveToNext()) {
+                tmp.add(cursor.getString(0));
+            }
+        }
+        db.close();
+        cursor.close();
+        return tmp.toArray(new String[0]);
+    }
+
+    /**
+     * 通过id查询一条数据
+     *
+     * @param id
+     * @return
+     */
+    public ScanHistory getHistory(int id) {
+        SQLiteDatabase db = openHelper.getReadableDatabase();
+        ScanHistory scanHistory = new ScanHistory();
+        Cursor cursor = db.query(Config.TABLE_HISTORY, new String[]{"_ID", "content",
+                        "created", "isUrl"},
+                null, new String[]{String.valueOf(id)}, null,
+                null, "_ID");
+        if (cursor != null && cursor.getCount() > 0) {
+            while (cursor.moveToNext()) {
+                scanHistory.setContent(cursor.getString(1));
+                scanHistory.setCreated(cursor.getString(2));
+                scanHistory.setIsUrl(cursor.getInt(3));
+            }
+        }
+        db.close();
+        cursor.close();
+        return scanHistory;
+
+    }
+
+    /**
+     * 更新数据
+     *
+     * @param isUrl 是否是链接
+     */
+    public void updateIsUrl(boolean isUrl, int id) {
+        SQLiteDatabase db = openHelper.getReadableDatabase();
+        ContentValues values = new ContentValues();
+        values.put("isurl", 0);
+        db.update(Config.TABLE_HISTORY, values, "_ID=?", new String[]{String.valueOf(id)});
+        db.close();
+    }
+}

+ 48 - 0
app/src/main/java/me/yoqi/android/qrcode/dao/UserDao.java

@@ -0,0 +1,48 @@
+package me.yoqi.android.qrcode.dao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+
+import me.yoqi.android.qrcode.model.Config;
+
+/**
+ * 用户表操作类
+ *
+ * @author liuyuqi.gov@msn.cn
+ * @date 2020-10-20
+ */
+public class UserDao {
+    private QRCodeOpenHelper openHelper;
+    private SQLiteDatabase db;
+
+    public UserDao(Context context) {
+        openHelper = new QRCodeOpenHelper(context);
+        db = openHelper.getReadableDatabase();//数据库对象
+    }
+
+    public void addUser() {
+
+    }
+
+    public void addUsers() {
+
+    }
+
+    /**
+     * 删除表
+     */
+    public void delete() {
+        db.delete(Config.TABLE_USER, null, null);
+        db.close();
+    }
+
+    /**
+     * 通过id更新用户表
+     *
+     * @param id
+     */
+    public void update(int id) {
+        // TODO: 2020-10-20
+    }
+
+}

+ 16 - 0
app/src/main/java/me/yoqi/android/qrcode/model/Config.java

@@ -0,0 +1,16 @@
+package me.yoqi.android.qrcode.model;
+
+/**
+ * 全局配置
+ *
+ * @author liuyuqi.gov@msn.cn
+ * @date 2020-10-20
+ */
+public class Config {
+    /**
+     * 数据库常量.
+     */
+    public static final String DATA_BASE = "zzqrcode.db";
+    public static final String TABLE_HISTORY = "scanHistory";//扫码历史记录表
+    public static final String TABLE_USER = "User";//用户表
+}

+ 38 - 0
app/src/main/java/me/yoqi/android/qrcode/model/ScanHistory.java

@@ -0,0 +1,38 @@
+package me.yoqi.android.qrcode.model;
+
+/**
+ * history 类
+ *
+ * @author liuyuqi.gov@msn.cn
+ * @date 2020-10-20
+ */
+public class ScanHistory {
+    String id;  //自增字段
+    String content; //内容
+    String created; //创建时间
+    int isUrl; //是否是链接
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getCreated() {
+        return created;
+    }
+
+    public void setCreated(String created) {
+        this.created = created;
+    }
+
+    public int getIsUrl() {
+        return isUrl;
+    }
+
+    public void setIsUrl(int isUrl) {
+        this.isUrl = isUrl;
+    }
+}

+ 44 - 0
app/src/main/java/me/yoqi/android/qrcode/ui/HistoryActivity.java

@@ -0,0 +1,44 @@
+package me.yoqi.android.qrcode.ui;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.os.PersistableBundle;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+
+import me.yoqi.android.qrcode.R;
+import me.yoqi.android.qrcode.dao.ScanHistoryDao;
+
+/**
+ * 扫码历史记录
+ *
+ * @author liuyuqi.gov@msn.cn
+ * @date 2020-10-20
+ */
+public class HistoryActivity extends AppCompatActivity {
+    ScanHistoryDao scanHistoryDao;
+    private Context mContext;
+    ListView lvHistory;
+
+    @Override
+    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
+        super.onCreate(savedInstanceState, persistentState);
+        setContentView(R.layout.activity_history);
+        mContext = this;
+        initView();
+    }
+
+    private void initView() {
+        lvHistory = findViewById(R.id.lv_history);
+        scanHistoryDao = new ScanHistoryDao(mContext);
+
+        // 获取所有 content
+        String[] contents = scanHistoryDao.getContents();
+        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.lv_content, contents);
+        lvHistory.setAdapter(adapter);
+    }
+
+}

+ 31 - 8
app/src/main/java/me/yoqi/android/qrcode/ResultActivity.java → app/src/main/java/me/yoqi/android/qrcode/ui/ResultActivity.java

@@ -1,50 +1,73 @@
-package me.yoqi.android.qrcode;
+package me.yoqi.android.qrcode.ui;
 
 import android.annotation.SuppressLint;
 import android.content.ClipData;
 import android.content.ClipboardManager;
+import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
 import android.view.View;
+import android.widget.ArrayAdapter;
 import android.widget.Button;
 import android.widget.EditText;
+import android.widget.ListView;
 
 import androidx.appcompat.app.AppCompatActivity;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+import me.yoqi.android.qrcode.R;
+import me.yoqi.android.qrcode.dao.ScanHistoryDao;
+import me.yoqi.android.qrcode.model.ScanHistory;
 import me.yoqi.android.qrcode.utils.StringUtils;
 
+/**
+ * 扫描结果页面
+ */
 public class ResultActivity extends AppCompatActivity {
 
-    private EditText et_result;
-    private Button btn_url;
     ClipboardManager myClipboard;
     String text;
+    Context mContext;
 
     @SuppressLint("NewApi")
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_result);
+        mContext = this;
         initView();
+    }
+
+    private void initView() {
+        EditText et_result = findViewById(R.id.et_result);
+        Button btn_url = findViewById(R.id.btn_url);
+
+        ScanHistory scanHistory = new ScanHistory();
         Intent intent = getIntent();
         text = intent.getStringExtra("text");
         et_result.setText(text);
+
         if (StringUtils.isHttpUrl(text)) {
             btn_url.setVisibility(View.VISIBLE);
+            scanHistory.setIsUrl(1);
         } else {
             btn_url.setVisibility(View.GONE);
         }
-
+        //剪切板
         myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
 
         ClipData myClip = ClipData.newPlainText("text", text);
         myClipboard.setPrimaryClip(myClip);
-    }
+        //保存数据库
+        ScanHistoryDao scanHistoryDao = new ScanHistoryDao(mContext);
+        scanHistory.setCreated(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+        scanHistory.setContent(text);
+        scanHistoryDao.addHistory(scanHistory);
 
-    private void initView() {
-        et_result = findViewById(R.id.et_result);
-        btn_url = findViewById(R.id.btn_url);
         btn_url.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {

+ 16 - 0
app/src/main/res/layout/activity_history.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/ll_history"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <ListView
+        android:id="@+id/lv_history"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:gravity="center_horizontal"
+        android:textAlignment="center" />
+
+</LinearLayout>

+ 14 - 0
app/src/main/res/layout/list_item.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/ll_list_item"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center_horizontal">
+
+    <TextView
+        android:id="@+id/lv_content"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="2dp" />
+
+</LinearLayout>