左晓为主开发手持机充值管理机
zuoxiao
2025-03-20 e863cc5da7b0c581c65d7e16ac3aa2ff9d98e4fc
feat(generallibrary): 添加项目选择功能

- 在数据库中增加 ProjectDataBean 表用于存储项目信息
- 新增 ProjectDataDao 接口用于操作项目数据- 创建 ProjectDialog 用于用户选择项目
- 在 BaseApplication 中添加项目相关初始化逻辑
- 修改 LoginActivity 以支持项目选择
1 文件已重命名
8个文件已修改
5个文件已添加
341 ■■■■■ 已修改文件
app/src/main/java/com/dayu/recharge/MyApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/LoginActivity.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
baselibrary/src/main/java/com/dayu/baselibrary/view/ConfirmDialog.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
baselibrary/src/main/java/com/dayu/baselibrary/view/LibraryDialog.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/BaseApplication.kt 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/bean/db/ProjectDataBean.kt 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/dao/AppDataBase.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/dao/BaseDaoSingleton.kt 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/dao/ProjectDataDao.kt 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/tool/BaseCommon.kt 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/view/ProjectDialog.kt 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/view/SearchDialog.kt 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/res/layout/project_dialog.xml 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/MyApplication.java
@@ -69,7 +69,7 @@
                        BusinessProvider.getInstance(this);
                        break;
                    case BaseCommon.Generalv1Library:
                        com.dayu.general.BaseApplication.getInstance().application = this;
                        com.dayu.general.BaseApplication.getInstance(this);
                        break;
                }
            }
app/src/main/java/com/dayu/recharge/activity/LoginActivity.java
@@ -1,5 +1,7 @@
package com.dayu.recharge.activity;
import static com.dayu.baselibrary.utils.BaseCommon.Generalv1Library;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -20,6 +22,7 @@
import com.dayu.baselibrary.utils.TipUtil;
import com.dayu.baselibrary.utils.WSMD5;
import com.dayu.baselibrary.view.LibraryDialog;
import com.dayu.general.view.ProjectDialog;
import com.dayu.henanlibrary.HeNanApplication;
import com.dayu.henanlibrary.dao.HNBaseDaoSingleton;
@@ -127,6 +130,8 @@
            } else if (type == BaseCommon.Generalv1Library) {
                binding.nameLL.setVisibility(View.VISIBLE);
                getGeneralV1Permission();
                ProjectDialog projectDialog=new ProjectDialog(this);
                projectDialog.show();
            }
            MyApplication.myApplication.initApplication();
        });
baselibrary/src/main/java/com/dayu/baselibrary/view/ConfirmDialog.java
@@ -2,6 +2,7 @@
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
@@ -23,18 +24,18 @@
public class ConfirmDialog extends Dialog {
    Activity mContext;
    Context mContext;
    View.OnClickListener mListner;
    String mData;
    String mTitle;
    public ConfirmDialog(@NonNull Activity context) {
    public ConfirmDialog(@NonNull Context context) {
        super(context, com.dayu.baselibrary.R.style.ws_pay_showSelfDialog);
        mContext = context;
        initView();
    }
    public ConfirmDialog(@NonNull Activity context, View.OnClickListener listner) {
    public ConfirmDialog(@NonNull Context context, View.OnClickListener listner) {
        super(context, com.dayu.baselibrary.R.style.ws_pay_showSelfDialog);
        mContext = context;
        mListner = listner;
@@ -42,7 +43,7 @@
    }
    public ConfirmDialog(@NonNull Activity context, String data, View.OnClickListener listner) {
    public ConfirmDialog(@NonNull Context context, String data, View.OnClickListener listner) {
        super(context, com.dayu.baselibrary.R.style.ws_pay_showSelfDialog);
        mContext = context;
        mListner = listner;
@@ -50,7 +51,7 @@
        initView();
    }
    public ConfirmDialog(@NonNull Activity context, String title, String data, View.OnClickListener listner) {
    public ConfirmDialog(@NonNull Context context, String title, String data, View.OnClickListener listner) {
        super(context, com.dayu.baselibrary.R.style.ws_pay_showSelfDialog);
        mContext = context;
        mListner = listner;
@@ -80,7 +81,6 @@
        if (mListner == null) {
            ok.setOnClickListener((View v) -> {
                ConfirmDialog.this.dismiss();
                mContext.finish();
            });
        } else {
            ok.setOnClickListener(mListner);
baselibrary/src/main/java/com/dayu/baselibrary/view/LibraryDialog.java
@@ -93,6 +93,7 @@
                            mLibraryBack.listener(type);
                            LibraryDialog.this.dismiss();
                            confirmDialog.dismiss();
                        }
                    });
                    confirmDialog.show();
generallibrary/src/main/java/com/dayu/general/BaseApplication.kt
@@ -1,6 +1,8 @@
package com.dayu.general
import android.app.Application
import android.nfc.Tag
import com.dayu.general.dao.BaseDaoSingleton
class BaseApplication private constructor() {
@@ -13,14 +15,29 @@
        @Volatile
        private var myApplication: BaseApplication? = null
        private var Tag : String ?= ""
        var projectDataDao = BaseDaoSingleton.getInstance(application)?.projectDataDao()
        @JvmStatic
        fun getInstance(): BaseApplication {
            return myApplication ?: synchronized(this) {
                myApplication ?: BaseApplication().also {
                    myApplication = it
                }
        fun getInstance(application: Application): BaseApplication {
            if (myApplication == null) {
                myApplication = BaseApplication()
                BaseApplication.application = application
            }
           return myApplication as BaseApplication
        }
    }
    fun init() {
     if (projectDataDao!=null){
         val projectDataBean = projectDataDao?.findFirst()
         if (projectDataBean!=null){
             Tag = projectDataBean.projectTag
         }
     }
    }
}
generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt
@@ -9,7 +9,7 @@
import com.dayu.general.adapter.SearchListAdapter
import com.dayu.general.bean.net.SearchUserResult
import com.dayu.general.databinding.ActivitySearchUserGeBinding
import com.dayu.general.dialog.SearchDialog
import com.dayu.general.view.SearchDialog
import com.dayu.general.net.ApiManager
import com.dayu.general.net.BaseResponse
generallibrary/src/main/java/com/dayu/general/bean/db/ProjectDataBean.kt
New file
@@ -0,0 +1,19 @@
package com.dayu.general.bean.db
import androidx.room.Entity
import androidx.room.PrimaryKey
/**
 * Description:项目选项
 * Author: zuo
 * Date: 2025/3/18
 */
@Entity
class ProjectDataBean {
    @PrimaryKey(autoGenerate = true)
    var projectId: Long? = 0
    var projectName: String? = null
    var projectType: Int? = null
    var projectTag: String = ""
}
generallibrary/src/main/java/com/dayu/general/dao/AppDataBase.kt
@@ -8,4 +8,5 @@
@Database(entities = [PassWordCardBean::class, CardData::class], version = 1, exportSchema = false)
abstract class AppDataBase : RoomDatabase() {
    abstract fun cardDataDao(): CardDataDao
    abstract fun projectDataDao(): ProjectDataDao
}
generallibrary/src/main/java/com/dayu/general/dao/BaseDaoSingleton.kt
@@ -9,28 +9,31 @@
class BaseDaoSingleton {
    companion object {
        var baseDao: AppDataBase? = null
        @JvmField
        val SqlitePath: String =
            Environment.getExternalStorageDirectory().absolutePath + File.separator + ".dayu" + File.separator + "data" + File.separator
        @JvmStatic
        fun getInstance(context: Context?): AppDataBase? {
            if (baseDao == null) {
                baseDao = Room.databaseBuilder<AppDataBase>(
                    context!!,
                    AppDataBase::class.java,
                    SqlitePath + "ConfigurationData_generalV1"
                ).allowMainThreadQueries().build()
            }
            return baseDao
        }
    }
    var baseDao: AppDataBase? = null
    var AsynchBaseDao: AppDataBase? = null
    //MyFileUtil.SqlitePath +
    fun getInstance(context: Context?): AppDataBase? {
        if (baseDao == null) {
            baseDao = Room.databaseBuilder<AppDataBase>(
                context!!,
                AppDataBase::class.java,
                SqlitePath + "ConfigurationData_generalV1"
            ).allowMainThreadQueries().build()
        }
        return baseDao
    }
    fun getAsynchInstance(context: Context?): AppDataBase? {
        if (AsynchBaseDao == null) {
generallibrary/src/main/java/com/dayu/general/dao/ProjectDataDao.kt
New file
@@ -0,0 +1,29 @@
package com.dayu.general.dao
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
import com.dayu.general.bean.db.ProjectDataBean
/**
 * Description:
 * Author: zuo
 * Date: 2025/3/18
 */
@Dao
interface ProjectDataDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(projectDataBean: ProjectDataBean)
    @Update
    fun update(projectDataBean: ProjectDataBean)
    @Delete
    fun delete(projectDataBean: ProjectDataBean)
    @Query("select  * from ProjectDataBean  limit 1")
    fun findFirst(): ProjectDataBean?
}
generallibrary/src/main/java/com/dayu/general/tool/BaseCommon.kt
New file
@@ -0,0 +1,16 @@
package com.dayu.general.tool
/**
 * Description:
 * Author: zuo
 * Date: 2025/3/20
 */
class BaseCommon {
  companion object{
      val YuanMo: Int = 1
      val QiHe: Int = 2
  }
}
generallibrary/src/main/java/com/dayu/general/view/ProjectDialog.kt
New file
@@ -0,0 +1,92 @@
package com.dayu.general.view
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.Gravity
import android.view.ViewGroup
import android.widget.RadioGroup
import android.widget.TextView
import com.dayu.baselibrary.view.ConfirmDialog
import com.dayu.general.R
import com.dayu.general.bean.db.ProjectDataBean
import com.dayu.general.dao.BaseDaoSingleton
import com.dayu.general.tool.BaseCommon
/**
 * Description:
 * Author: zuo
 * Date: 2025/3/17
 */
class ProjectDialog(context: Context):Dialog(context,com.dayu.baselibrary.R.style.ws_pay_showSelfDialog){
    var confirmDialog: ConfirmDialog? = null
    var mLibraryBack: LibraryBack? = null
    var isChose: Boolean = false
    var projectDataDao = BaseDaoSingleton.getInstance(context)?.projectDataDao()
    var projectBean: ProjectDataBean = ProjectDataBean()
    var type: Int = 0
    var data: String = ""
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        initView()
    }
    private fun initView() {
        window?.setGravity(Gravity.CENTER)
        setContentView(R.layout.project_dialog)
        setCanceledOnTouchOutside(false)
        setCancelable(false)
        val radioGroup = findViewById<RadioGroup>(R.id.radioLibrary)
        if (projectDataDao != null) {
            projectBean = projectDataDao?.findFirst() ?: ProjectDataBean()
            radioGroup.setOnCheckedChangeListener { _, checkedId ->
                isChose = true
                // 当选中的RadioButton发生变化时调用
                when (checkedId) {
                    R.id.yuanMouLibrary -> {
                        type = BaseCommon.YuanMo
                        projectBean.projectType = type
                        data = "确认选择河南版本吗?"
                    }
                    R.id.qiHeLibrary -> {
                        type = BaseCommon.QiHe
                        projectBean.projectType = type
                        data = "确认选择齐河单机版本吗?"
                    }
                }
            }
            val okBtn = findViewById<TextView>(R.id.ok)
            okBtn.setOnClickListener {
                if (isChose) {
                    // 二次确认
                    confirmDialog = ConfirmDialog(context, data) {
                        projectDataDao?.insert(projectBean)
                        mLibraryBack?.listener(type)
                        dismiss()
                        confirmDialog?.dismiss()
                    }
                    confirmDialog?.show()
                }
            }
        }
    }
    interface LibraryBack {
        fun listener(type: Int)
    }
    override fun show() {
        super.show()
        /**
         * 设置宽度全屏,要设置在show的后面
         */
        val layoutParams = window?.attributes
        layoutParams?.gravity = Gravity.CENTER
        layoutParams?.width = ViewGroup.LayoutParams.MATCH_PARENT
        layoutParams?.height = ViewGroup.LayoutParams.MATCH_PARENT
        window?.decorView?.setPadding(0, 0, 0, 0)
        window?.attributes = layoutParams
    }
}
generallibrary/src/main/java/com/dayu/general/view/SearchDialog.kt
File was renamed from generallibrary/src/main/java/com/dayu/general/dialog/SearchDialog.kt
@@ -1,4 +1,4 @@
package com.dayu.general.dialog
package com.dayu.general.view
import android.app.Dialog
import android.content.Context
@@ -6,8 +6,6 @@
import android.view.Gravity
import android.view.LayoutInflater
import android.view.ViewGroup
import android.view.WindowManager
import com.dayu.general.R
import com.dayu.general.databinding.DialogSearchBinding
/**
generallibrary/src/main/res/layout/project_dialog.xml
New file
@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#40000000"
    android:gravity="center"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/dialog_bg_margin"
        android:background="@drawable/base_bg_dialog_top_stroke"
        android:gravity="center"
        android:orientation="vertical">
        <TextView
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:gravity="center"
            android:text="请先选择项目"
            android:textColor="@color/dialog_btn"
            android:textSize="23sp"
            android:textStyle="bold" />
        <View
            android:layout_width="match_parent"
            android:layout_height="2px"
            android:layout_marginTop="20dp"
            android:background="@color/line_bg" />
        <RadioGroup
            android:id="@+id/radioLibrary"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <RadioButton
                android:id="@+id/yuanMouLibrary"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="50dp"
                android:layout_marginTop="25dp"
                android:layout_marginRight="50dp"
                android:background="@drawable/radio_select"
                android:button="@null"
                android:gravity="center"
                android:padding="6dp"
                android:text="元谋项目"
                android:textColor="@drawable/radio_text_select"
                android:textSize="20sp" />
            <RadioButton
                android:id="@+id/qiHeLibrary"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="50dp"
                android:layout_marginTop="25dp"
                android:layout_marginRight="50dp"
                android:background="@drawable/radio_select"
                android:button="@null"
                android:gravity="center"
                android:padding="6dp"
                android:text="齐河项目"
                android:textColor="@drawable/radio_text_select"
                android:textSize="20sp" />
        </RadioGroup>
        <View
            android:layout_width="match_parent"
            android:layout_height="2px"
            android:layout_marginTop="35dp"
            android:background="@color/line_bg" />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:padding="5dp"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/ok"
                android:layout_width="match_parent"
                android:layout_height="@dimen/dialog_btn_height"
                android:background="@drawable/textview_select_bg"
                android:gravity="center"
                android:paddingLeft="15dp"
                android:paddingTop="5dp"
                android:paddingRight="15dp"
                android:paddingBottom="5dp"
                android:text="确      认"
                android:textColor="@color/dialog_btn"
                android:textSize="20sp" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>