diff --git a/app/build.gradle b/app/build.gradle index 836e483..773486d 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: 'org.jetbrains.kotlin.android' android { compileSdkVersion 33 @@ -15,6 +16,9 @@ android { resValue "string", "authorities", applicationId resourceConfigurations += ['zh', 'en', 'hdpi'] } + buildFeatures { + viewBinding = true + } signingConfigs { release { keyAlias 'key0' @@ -53,8 +57,8 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } namespace 'com.rehome.sgbaxj' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f22f0a1..5b66494 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,20 +4,19 @@ - + android:required="true" /> - - - - - + @@ -50,6 +49,7 @@ + @@ -57,14 +57,13 @@ android:name="android.hardware.telephony" android:required="false" /> - - + - + tools:replace="android:allowBackup" + tools:targetApi="s"> + - - - + android:screenOrientation="portrait"/> + android:name=".activity.CustomDialogActivity" + android:theme="@android:style/Theme.Dialog" /> - - + @@ -331,8 +329,8 @@ android:value="1280" /> - + \ No newline at end of file diff --git a/app/src/main/java/com/rehome/sgbaxj/activity/LoginActivity.java b/app/src/main/java/com/rehome/sgbaxj/activity/LoginActivity.java index fd4a0de..34f784b 100755 --- a/app/src/main/java/com/rehome/sgbaxj/activity/LoginActivity.java +++ b/app/src/main/java/com/rehome/sgbaxj/activity/LoginActivity.java @@ -189,7 +189,6 @@ public class LoginActivity extends BaseActivity { private void OnlineLogin() { String json = getPhoneInfo(); - Log.i("app", Contans.IP + Contans.LOGIN); Request request = NoHttp.createStringRequest(Contans.IP + Contans.LOGIN, RequestMethod.POST); // SSLSocketFactory socketFactory = NohttpUtils.getSSLSocketFactory(context); // if(socketFactory!=null){ @@ -366,7 +365,7 @@ public class LoginActivity extends BaseActivity { private void DownloadAndInstall(String downloadURL, String versionName, String description, String versionCode) { new DownloadManager.Builder(this) .apkUrl(downloadURL) - .apkName("中粤能源点巡检.apk") + .apkName("韶关电厂保安巡检.apk") .smallIcon(R.mipmap.logo1) .showNewerToast(true) .apkVersionCode(Integer.parseInt(versionCode)) diff --git a/app/src/main/java/com/rehome/sgbaxj/activity/MainActivity.java b/app/src/main/java/com/rehome/sgbaxj/activity/MainActivity.java index 44d7cb8..f75f77b 100644 --- a/app/src/main/java/com/rehome/sgbaxj/activity/MainActivity.java +++ b/app/src/main/java/com/rehome/sgbaxj/activity/MainActivity.java @@ -28,6 +28,7 @@ import com.azhon.appupdate.listener.OnDownloadListener; import com.azhon.appupdate.manager.DownloadManager; import com.rehome.sgbaxj.R; import com.rehome.sgbaxj.activity.regular.RegularActivity; +import com.rehome.sgbaxj.activity.sbxj.BamjActivity; import com.rehome.sgbaxj.activity.sbxj.XscbglActivity; import com.rehome.sgbaxj.adapter.GridViewAdapter; import com.rehome.sgbaxj.base.BaseActivity3; @@ -40,6 +41,7 @@ import com.rehome.sgbaxj.service.MQTTPushService; import com.rehome.sgbaxj.utils.AppManager; import com.rehome.sgbaxj.utils.FlashUtil; import com.rehome.sgbaxj.utils.HttpUtils; +import com.rehome.sgbaxj.utils.NetworkUtil; import com.rehome.sgbaxj.utils.SPUtils; import com.rehome.sgbaxj.utils.StatusBarUtil; import com.rehome.sgbaxj.weight.AuditDialog; @@ -166,6 +168,9 @@ public class MainActivity extends BaseActivity3 { str.add("保安巡检"); imageId.add(R.mipmap.icon8); colors.add(R.drawable.radius_e2); + str.add("保安免检管理"); + imageId.add(R.mipmap.icon3); + colors.add(R.drawable.radius_b1); } } @@ -297,7 +302,17 @@ public class MainActivity extends BaseActivity3 { }else if(iconText.equals("手电筒")){ checkPermission(); }else if(iconText.equals("Q4工单")){ - + showLog("Q4工单"); + }else if (iconText.equals("保安免检管理")) { + if (NetworkUtil.hasNetWorkStatus(context, true)) { + Log.i("app", "有wifi网络"); + Intent intentTemp = new Intent(context, BamjActivity.class); + intentTemp.putExtra("type", "BA"); + startActivity(intentTemp); + } else { + Log.i("app", "无网络"); + showToast("没有连接到wifi,当前功能需要依赖网络环境,请检查网络连接"); + } } } }); @@ -433,7 +448,7 @@ public class MainActivity extends BaseActivity3 { private void DownloadAndInstall(String downloadURL, String versionName, String description, String versionCode) { new DownloadManager.Builder(this) .apkUrl(downloadURL) - .apkName("中粤能源点巡检.apk") + .apkName("韶关电厂保安巡检.apk") .smallIcon(R.mipmap.logo1) .showNewerToast(true) .apkVersionCode(Integer.parseInt(versionCode)) diff --git a/app/src/main/java/com/rehome/sgbaxj/activity/sbxj/BamjActivity.kt b/app/src/main/java/com/rehome/sgbaxj/activity/sbxj/BamjActivity.kt new file mode 100644 index 0000000..db73e1c --- /dev/null +++ b/app/src/main/java/com/rehome/sgbaxj/activity/sbxj/BamjActivity.kt @@ -0,0 +1,211 @@ +package com.rehome.sgbaxj.activity.sbxj + +import android.text.TextUtils +import android.util.Log +import android.view.View +import android.widget.CheckBox +import android.widget.TextView +import com.rehome.sgbaxj.R +import com.rehome.sgbaxj.adapter.BamjAdapter +import com.rehome.sgbaxj.base.BaseActivityOaToolbarViewBinding +import com.rehome.sgbaxj.bean.MjList +import com.rehome.sgbaxj.bean.MjRequestInfo +import com.rehome.sgbaxj.bean.XsRequestInfo +import com.rehome.sgbaxj.contans.Contans +import com.rehome.sgbaxj.databinding.ActivityBamjBinding +import com.rehome.sgbaxj.utils.GsonUtils +import com.rehome.sgbaxj.utils.HttpListener +import com.rehome.sgbaxj.utils.NetworkUtil +import com.rehome.sgbaxj.utils.NoProgresshttpUtils +import com.rehome.sgbaxj.utils.SPUtils +import com.rehome.sgbaxj.weight.MjEditDialog +import com.rehome.sgbaxj.weight.WaitDialog +import com.yolanda.nohttp.NoHttp +import com.yolanda.nohttp.RequestMethod +import com.yolanda.nohttp.rest.Request +import com.yolanda.nohttp.rest.RequestQueue +import com.yolanda.nohttp.rest.Response + +class BamjActivity : BaseActivityOaToolbarViewBinding() { + + private val mjList: MutableList = mutableListOf() + private lateinit var adapter: BamjAdapter + private lateinit var headView: View + private lateinit var head: View + private lateinit var tv_yjzj: TextView + private lateinit var xj_cb: CheckBox + private lateinit var dialog: WaitDialog + private lateinit var queue: RequestQueue + private lateinit var username: String + + override fun getViewBinding() = ActivityBamjBinding.inflate(layoutInflater) + + override fun getToolbar() = binding.toolbarView.toolbar + + override fun initView() { + initToolbar("保安免检管理", "提交", { finish() }, { + if (NetworkUtil.hasNetWorkStatus(context, true)) { + showLog("有wifi网络") + if (mjList.size > 0) { + var isChecked = false + val mjCheckList: MutableList = mutableListOf() + for (i in mjList.indices) { + if (mjList[i].isChecked) { + isChecked = true + mjCheckList.add(mjList[i]) + } + } + if (isChecked) { + val dialog = MjEditDialog(this, object : MjEditDialog.DialogListener { + override fun onYesClick(noCheckReason: String) { + if(!TextUtils.isEmpty(noCheckReason)){ + upLoadBaMj(noCheckReason,mjCheckList) + }else{ + showToast("免检原因必填") + } + } + + override fun onNoClick() { + + } + + }) + dialog.show() + } else { + showToast("请选择要免检的计划") + } + } + } else { + showLog("无网络") + showToast("无wifi网络连接,请先连接到wifi网络") + } + }) + queue = NoHttp.newRequestQueue(1) + username = SPUtils.get(context, Contans.USERID, "") as String + binding.lv.emptyView = binding.tvNodata + dialog = WaitDialog(context, "上传数据中...请稍等...") + dialog.setCancelable(false) + headView = View.inflate(context, R.layout.scxscb_item, null) + head = headView.findViewById(R.id.head) + tv_yjzj = headView.findViewById(R.id.tv_yjzj) + tv_yjzj.text = "总点数" + xj_cb = headView.findViewById(R.id.xj_cb) + binding.lv.addHeaderView(headView, null, false) + xj_cb.setOnClickListener { + if (xj_cb.isChecked) { + for (i in mjList.indices) { + mjList[i].isChecked = true + adapter.notifyDataSetChanged() + } + } else { + for (i in mjList.indices) { + mjList[i].isChecked = false + adapter.notifyDataSetChanged() + } + } + } + + adapter = BamjAdapter(this, mjList) { view: View -> + val checkBox = view as CheckBox + val index = checkBox.tag as Int + mjList[index].isChecked = checkBox.isChecked + var count = 0 + for (a in mjList.indices) { + if (mjList[a].isChecked) { + count++ + } + } + xj_cb.isChecked = count == mjList.size + adapter.notifyDataSetChanged() + } + binding.lv.adapter = adapter + } + + override fun initData() { + if (NetworkUtil.hasNetWorkStatus(context, true)) { + showLog("有wifi网络") + requestData() + } else { + showLog("无网络") + } + } + + private fun requestData() { //下载巡检数据 + val request: Request = + NoHttp.createStringRequest(Contans.IP + Contans.BA_Download_MJ_URL, RequestMethod.POST) + request.setDefineRequestBodyForJson(createJsonBaMjDown()) + NoProgresshttpUtils.getInstance().add(this, 0, request, object : HttpListener { + + override fun onSucceed(what: Int, response: Response?) { + showLog("----------------") + val result = response?.get() + showLog(result ?: "") + val bean = GsonUtils.GsonToBean(result, MjList::class.java) + if (bean.state == "1") { + if (bean.data != null && bean.data.size > 0) { + mjList.clear() + val list = bean.data //服务器数据 + mjList.addAll(list) + adapter.notifyDataSetChanged() + }else{ + mjList.clear() + adapter.notifyDataSetChanged() + } + }else{ + mjList.clear() + adapter.notifyDataSetChanged() + } + } + + override fun onFailed(what: Int, response: Response?) { + + } + }) + } + + private fun upLoadBaMj(noCheckReason: String?,mjCheckList: MutableList) { + val request: Request = + NoHttp.createStringRequest(Contans.IP + Contans.BA_UPLOAD_MJ_URL, RequestMethod.POST) + request.setDefineRequestBodyForJson(createJsonBaMjUp(noCheckReason,mjCheckList)) + NoProgresshttpUtils.getInstance().add(this, 0, request, object : HttpListener { + + override fun onSucceed(what: Int, response: Response?) { + showLog("----------------") + val result = response?.get() + showLog(result ?: "") + val bean = GsonUtils.GsonToBean(result, MjList::class.java) + if (bean.state == "1") { + showToast("操作成功") + initData() + } + } + + override fun onFailed(what: Int, response: Response?) { + + } + }) + } + + private fun createJsonBaMjDown(): String { + val info = XsRequestInfo() + info.action = "BA_XJGL_BAKH_GET" + val json = GsonUtils.GsonString(info) + showLog(json) + return json + } + + private fun createJsonBaMjUp(noCheckReason: String?,mjCheckList: MutableList): String { + val info = MjRequestInfo() + info.action = "BA_XJGL_BAKHSC_SET" + if (noCheckReason != null) { + info.bz = noCheckReason + } else { + info.bz = "" + } + info.scr = username + info.data = mjCheckList + val json = GsonUtils.GsonString(info) + showLog(json) + return json + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rehome/sgbaxj/adapter/BamjAdapter.java b/app/src/main/java/com/rehome/sgbaxj/adapter/BamjAdapter.java new file mode 100644 index 0000000..481b468 --- /dev/null +++ b/app/src/main/java/com/rehome/sgbaxj/adapter/BamjAdapter.java @@ -0,0 +1,93 @@ +package com.rehome.sgbaxj.adapter; + + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.CheckBox; +import android.widget.TextView; +import com.rehome.sgbaxj.R; +import com.rehome.sgbaxj.bean.MjList; +import com.zhy.autolayout.utils.AutoUtils; +import java.util.List; + +/** + * Create By HuangWenFei + * 创建日期:2023-07-25 14:16 + * 描述:保安免检计划适配器 + */ + +public class BamjAdapter extends BaseAdapter { + + private Context context; + private List mjjh; + private CallBack mCallBack; + + public BamjAdapter(Context context, List mjjh, CallBack mCallBack) { + this.context = context; + this.mCallBack = mCallBack; + this.mjjh=mjjh; + } + + public interface CallBack { + void Click(View view); + } + + @Override + public int getCount() { + return mjjh.size(); + } + + @Override + public Object getItem(int i) { + return mjjh.get(i); + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + + ViewHolder holder; + if (view == null) { + holder = new ViewHolder(); + view = LayoutInflater.from(context).inflate(R.layout.scxscb_item, viewGroup, false); + holder.xj_cb = view.findViewById(R.id.xj_cb); + holder.tv_gwmc = view.findViewById(R.id.tv_gwmc); + holder.tv_yjzj = view.findViewById(R.id.tv_yjzj); + + view.setTag(holder); + AutoUtils.autoSize(view); + } else { + holder = (ViewHolder) view.getTag(); + } + + + holder.xj_cb.setChecked(mjjh.get(i).isChecked()); + holder.tv_gwmc.setText(mjjh.get(i).getKhmc()); + holder.tv_yjzj.setText(mjjh.get(i).getZds()); + + + + holder.xj_cb.setTag(i); + holder.xj_cb.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + mCallBack.Click(view); + } + }); + return view; + } + + static class ViewHolder { + CheckBox xj_cb; + TextView tv_gwmc; + TextView tv_yjzj; + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rehome/sgbaxj/base/BaseActivity.java b/app/src/main/java/com/rehome/sgbaxj/base/BaseActivity.java index cbce4a9..6427b4e 100755 --- a/app/src/main/java/com/rehome/sgbaxj/base/BaseActivity.java +++ b/app/src/main/java/com/rehome/sgbaxj/base/BaseActivity.java @@ -16,6 +16,7 @@ import android.nfc.tech.NfcF; import android.nfc.tech.NfcV; import android.os.Bundle; import android.os.Parcelable; +import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.WindowManager; @@ -222,7 +223,11 @@ public abstract class BaseActivity extends AutoLayoutActivity { public void showLog(String logText) { if (BuildConfig.LOG_ERROR) { - Log.i("app", logText); + if(TextUtils.isEmpty(logText)){ + Log.i("app", "logText is null"); + }else{ + Log.i("app", logText); + } } } } diff --git a/app/src/main/java/com/rehome/sgbaxj/base/BaseActivity3.java b/app/src/main/java/com/rehome/sgbaxj/base/BaseActivity3.java index 8beb576..6694391 100755 --- a/app/src/main/java/com/rehome/sgbaxj/base/BaseActivity3.java +++ b/app/src/main/java/com/rehome/sgbaxj/base/BaseActivity3.java @@ -17,6 +17,7 @@ import android.nfc.tech.NfcF; import android.nfc.tech.NfcV; import android.os.Bundle; import android.os.Parcelable; +import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.EditText; @@ -239,7 +240,11 @@ public abstract class BaseActivity3 extends AutoLayoutActivity { public void showLog(String logText) { if (BuildConfig.LOG_ERROR) { - Log.i("app", logText); + if(TextUtils.isEmpty(logText)){ + Log.i("app", "logText is null"); + }else{ + Log.i("app", logText); + } } } diff --git a/app/src/main/java/com/rehome/sgbaxj/base/BaseActivityAutoToolbarViewBinding.kt b/app/src/main/java/com/rehome/sgbaxj/base/BaseActivityAutoToolbarViewBinding.kt new file mode 100644 index 0000000..75da988 --- /dev/null +++ b/app/src/main/java/com/rehome/sgbaxj/base/BaseActivityAutoToolbarViewBinding.kt @@ -0,0 +1,268 @@ +package com.rehome.sgbaxj.base + + +import android.app.Activity +import android.app.PendingIntent +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.nfc.NdefMessage +import android.nfc.NfcAdapter +import android.nfc.tech.* +import android.os.Build +import android.os.Bundle +import android.text.TextUtils +import android.util.Log +import android.widget.Toast +import androidx.viewbinding.ViewBinding +import com.rehome.sgbaxj.BuildConfig +import com.rehome.sgbaxj.R +import com.rehome.sgbaxj.utils.AutoToolbar +import com.rehome.sgbaxj.utils.ControllerActivity +import com.rehome.sgbaxj.utils.StatusBarUtil +import com.zhy.autolayout.AutoLayoutActivity +import java.nio.charset.StandardCharsets +import java.util.* + +/** + * Create By HuangWenFei + * 创建日期:2023-07-25 14:04 + * 描述:基类使用ViewBinding,ButterKnife已被作者废弃,不再维护 + */ +abstract class BaseActivityAutoToolbarViewBinding : AutoLayoutActivity() { + protected lateinit var binding: T + protected lateinit var mToolbar: AutoToolbar + protected lateinit var context: Context + private var nfcAdapter: NfcAdapter? = null + private var readResult = "" + private var pendingIntent: PendingIntent? = null + private lateinit var mFilters: Array + private lateinit var mTechLists: Array> + private var isFirst = true + private var ndef: IntentFilter? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = getViewBinding() + mToolbar = getToolbar() + setContentView(binding.root) + context = this + ControllerActivity.getAppManager().addActivity(this) + initView() + initData() + } + + protected abstract fun getViewBinding(): T + protected abstract fun getToolbar(): AutoToolbar + + //初始化View + protected abstract fun initView() + + //初始化数据 + protected abstract fun initData() + + + fun startActivity(cls: Class?) { + val intent = Intent(this, cls) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) + startActivity(intent) + } + + override fun onPause() { + super.onPause() + if (nfcAdapter != null) { + nfcAdapter!!.disableForegroundDispatch(this) + } + } + + /* + * 重写onResume回调函数的意义在于处理多次读取NFC标签时的情况 + */ + override fun onResume() { + super.onResume() + + // 前台分发系统,这里的作用在于第二次检测NFC标签时该应用有最高的捕获优先权. + if (nfcAdapter != null && pendingIntent != null) { + nfcAdapter!!.enableForegroundDispatch( + this, pendingIntent, mFilters, + mTechLists + ) + } + } + + override fun onDestroy() { + super.onDestroy() + ControllerActivity.getAppManager().finishActivity(this) + } + + /** + * 显示toast + * + * @param text + */ + fun showToast(text: String?) { + if (text != null && text.trim { it <= ' ' } != "") { + Toast.makeText(this, text, Toast.LENGTH_SHORT).show() + } + } + + fun showToast(id: Int) { + Toast.makeText(this, id, Toast.LENGTH_SHORT).show() + } + + /** + * 检测工作,判断设备的NFC支持情况 + * + * @return + */ + private fun ifNFCUse(): Boolean { + if (nfcAdapter == null) { + Toast.makeText(this, "设备不支持NFC!", Toast.LENGTH_SHORT).show() + return false + } + if (!nfcAdapter!!.isEnabled) { + Toast.makeText(this, "请在系统设置中先启用NFC功能!", Toast.LENGTH_SHORT).show() + return false + } + return true + } + + /** + * 初始化过程 + */ + fun initNFC() { + + //NFC适配器,所有的关于NFC的操作从该适配器进行 + nfcAdapter = NfcAdapter.getDefaultAdapter(this) + if (!ifNFCUse()) { + return + } + //将被调用的Intent,用于重复被Intent触发后将要执行的跳转 + pendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + PendingIntent.getActivity( + this, + 0, + Intent(this, javaClass).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), + PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT + ) + } else { + PendingIntent.getActivity( + this, + 0, + Intent(this, javaClass).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), + PendingIntent.FLAG_UPDATE_CURRENT + ) + } + + + //设定要过滤的标签动作,这里只接收ACTION_NDEF_DISCOVERED类型 + ndef = IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED) + ndef!!.addCategory("*/*") + mFilters = arrayOf(ndef!!) // 过滤器 + mTechLists = arrayOf( + arrayOf(NfcA::class.java.name), arrayOf( + NfcF::class.java.name + ), arrayOf(NfcB::class.java.name), arrayOf( + NfcV::class.java.name + ), arrayOf(MifareClassic::class.java.name), arrayOf( + MifareUltralight::class.java.name + ), arrayOf(IsoDep::class.java.name) + ) // 允许扫描的标签类型 + if (isFirst) { + if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent + .action + ) { + ndef = IntentFilter() + if (readFromTag(intent)) { + Toast.makeText(this, readResult, Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(this, "标签数据为空", Toast.LENGTH_SHORT).show() + } + } + isFirst = false + } + } + + /** + * 2进制to 16进制 + * @param src + * @return + */ + private fun bytesToHex(src: ByteArray?): String { + val sb = StringBuffer() + if (src == null || src.isEmpty()) { + return "" + } + var sTemp: String + for (i in src.indices) { + sTemp = Integer.toHexString(0xFF and src[i].toInt()) + if (sTemp.length < 2) { + sb.append(0) + } + sb.append(sTemp.uppercase(Locale.getDefault())) + } + return sb.toString() + } + + /* + * 有必要要了解onNewIntent回调函数的调用时机,请自行上网查询 + */ + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action || NfcAdapter.ACTION_TECH_DISCOVERED == intent.action) { + val id = bytesToHex(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID)) + handleNfc(id) + +// if (readFromTag(intent)) { +// Toast.makeText(this, readResult, Toast.LENGTH_SHORT).show(); +// handleNfc(readResult); +// } else { +// Toast.makeText(this, "ID:" + id + " 标签数据为空", Toast.LENGTH_SHORT).show(); +// } + } + } + + /** + * 读取NFC标签数据的操作 + */ + private fun readFromTag(intent: Intent): Boolean { + if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) { + val rawArray = intent + .getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES) + if (rawArray != null) { + val mNdefMsg = rawArray[0] as NdefMessage + val mNdefRecord = mNdefMsg.records[0] + if (mNdefRecord != null) { + readResult = String(mNdefRecord.payload, StandardCharsets.UTF_8) + return true + } + //return false; + } + return false + } + return false + } + + //处理NFC + open fun handleNfc(result: String?) { + //showToast(result); + } + + open fun setBack() { + mToolbar.setNavigationIcon(R.mipmap.ac_back_icon) + mToolbar.setNavigationOnClickListener { finish() } + } + + protected open fun setStatusBar() { + StatusBarUtil.setColor(this, resources.getColor(R.color.colorPrimary)) + } + + open fun showLog(logText: String?) { + if (BuildConfig.LOG_ERROR) { + if (TextUtils.isEmpty(logText)) { + Log.i("app", "logText is null") + } else { + Log.i("app", logText!!) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rehome/sgbaxj/base/BaseActivityOaToolbarViewBinding.kt b/app/src/main/java/com/rehome/sgbaxj/base/BaseActivityOaToolbarViewBinding.kt new file mode 100644 index 0000000..7ce28ed --- /dev/null +++ b/app/src/main/java/com/rehome/sgbaxj/base/BaseActivityOaToolbarViewBinding.kt @@ -0,0 +1,276 @@ +package com.rehome.sgbaxj.base + + +import android.app.Activity +import android.app.PendingIntent +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.nfc.NdefMessage +import android.nfc.NfcAdapter +import android.nfc.tech.* +import android.os.Build +import android.os.Bundle +import android.text.TextUtils +import android.util.Log +import android.view.View +import android.widget.Toast +import androidx.viewbinding.ViewBinding +import com.rehome.sgbaxj.utils.ControllerActivity +import com.rehome.sgbaxj.BuildConfig +import com.rehome.sgbaxj.R +import com.rehome.sgbaxj.utils.OAToolbar +import com.zhy.autolayout.AutoLayoutActivity +import java.nio.charset.StandardCharsets +import java.util.* + + +/** + * Create By HuangWenFei + * 创建日期:2023-07-25 14:09 + * 描述:基类使用ViewBinding,ButterKnife已被作者废弃,不再维护 + */ +abstract class BaseActivityOaToolbarViewBinding : AutoLayoutActivity() { + protected lateinit var binding: T + protected lateinit var mToolbar: OAToolbar + protected lateinit var context: Context + private var nfcAdapter: NfcAdapter? = null + private var readResult = "" + private var pendingIntent: PendingIntent? = null + private lateinit var mFilters: Array + private lateinit var mTechLists: Array> + private var isFirst = true + private var ndef: IntentFilter? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = getViewBinding() + mToolbar = getToolbar() + setContentView(binding.root) + context = this + ControllerActivity.getAppManager().addActivity(this) + initView() + initData() + } + //初始化ViewBinding + protected abstract fun getViewBinding(): T + //初始化OAToolbar + protected abstract fun getToolbar(): OAToolbar + //初始化View + protected abstract fun initView() + //初始化数据 + protected abstract fun initData() + + + fun startActivity(cls: Class?) { + val intent = Intent(this, cls) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) + startActivity(intent) + } + + override fun onPause() { + super.onPause() + if (nfcAdapter != null) { + nfcAdapter!!.disableForegroundDispatch(this) + } + } + + /* + * 重写onResume回调函数的意义在于处理多次读取NFC标签时的情况 + */ + override fun onResume() { + super.onResume() + + // 前台分发系统,这里的作用在于第二次检测NFC标签时该应用有最高的捕获优先权. + if (nfcAdapter != null && pendingIntent != null) { + nfcAdapter!!.enableForegroundDispatch( + this, pendingIntent, mFilters, + mTechLists + ) + } + } + + override fun onDestroy() { + super.onDestroy() + ControllerActivity.getAppManager().finishActivity(this) + } + + /** + * 显示toast + * + * @param text + */ + fun showToast(text: String?) { + if (text != null && text.trim { it <= ' ' } != "") { + Toast.makeText(this, text, Toast.LENGTH_SHORT).show() + } + } + + fun showToast(id: Int) { + Toast.makeText(this, id, Toast.LENGTH_SHORT).show() + } + + /** + * 检测工作,判断设备的NFC支持情况 + * + * @return + */ + private fun ifNFCUse(): Boolean { + if (nfcAdapter == null) { + Toast.makeText(this, "设备不支持NFC!", Toast.LENGTH_SHORT).show() + return false + } + if (!nfcAdapter!!.isEnabled) { + Toast.makeText(this, "请在系统设置中先启用NFC功能!", Toast.LENGTH_SHORT).show() + return false + } + return true + } + + /** + * 初始化过程 + */ + fun initNFC() { + + //NFC适配器,所有的关于NFC的操作从该适配器进行 + nfcAdapter = NfcAdapter.getDefaultAdapter(this) + if (!ifNFCUse()) { + return + } + //将被调用的Intent,用于重复被Intent触发后将要执行的跳转 + pendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + PendingIntent.getActivity( + this, + 0, + Intent(this, javaClass).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), + PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT + ) + } else { + PendingIntent.getActivity( + this, + 0, + Intent(this, javaClass).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), + PendingIntent.FLAG_UPDATE_CURRENT + ) + } + + + //设定要过滤的标签动作,这里只接收ACTION_NDEF_DISCOVERED类型 + ndef = IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED) + ndef!!.addCategory("*/*") + mFilters = arrayOf(ndef!!) // 过滤器 + mTechLists = arrayOf( + arrayOf(NfcA::class.java.name), arrayOf( + NfcF::class.java.name + ), arrayOf(NfcB::class.java.name), arrayOf( + NfcV::class.java.name + ), arrayOf(MifareClassic::class.java.name), arrayOf( + MifareUltralight::class.java.name + ), arrayOf(IsoDep::class.java.name) + ) // 允许扫描的标签类型 + if (isFirst) { + if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent + .action + ) { + ndef = IntentFilter() + if (readFromTag(intent)) { + Toast.makeText(this, readResult, Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(this, "标签数据为空", Toast.LENGTH_SHORT).show() + } + } + isFirst = false + } + } + + /** + * 2进制to 16进制 + * @param src + * @return + */ + private fun bytesToHex(src: ByteArray?): String { + val sb = StringBuffer() + if (src == null || src.isEmpty()) { + return "" + } + var sTemp: String + for (i in src.indices) { + sTemp = Integer.toHexString(0xFF and src[i].toInt()) + if (sTemp.length < 2) { + sb.append(0) + } + sb.append(sTemp.uppercase(Locale.getDefault())) + } + return sb.toString() + } + + /* + * 有必要要了解onNewIntent回调函数的调用时机,请自行上网查询 + */ + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action || NfcAdapter.ACTION_TECH_DISCOVERED == intent.action) { + val id = bytesToHex(intent.getByteArrayExtra(NfcAdapter.EXTRA_ID)) + handleNfc(id) + } + } + + /** + * 读取NFC标签数据的操作 + */ + private fun readFromTag(intent: Intent): Boolean { + if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) { + val rawArray = intent + .getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES) + if (rawArray != null) { + val mNdefMsg = rawArray[0] as NdefMessage + val mNdefRecord = mNdefMsg.records[0] + if (mNdefRecord != null) { + readResult = String(mNdefRecord.payload, StandardCharsets.UTF_8) + return true + } + } + return false + } + return false + } + + //处理NFC + open fun handleNfc(result: String) { + //showToast(result); + } + + fun initToolbar( + title: String, + rightText: String, + listenerLeftClick: View.OnClickListener, + listenerRightClick: View.OnClickListener + ) { + mToolbar.setTvTitleText(title) + mToolbar.setTvRightText(rightText) + mToolbar.setIvLeftIcon(R.mipmap.ac_back_icon) + mToolbar.setIvLeftOnClickListener(listenerLeftClick) + mToolbar.setTvRightOnClickListener(listenerRightClick) + } + + fun initToolbar( + title: String, + rightText: String, + listenerRightClick: View.OnClickListener + ) { + mToolbar.setTvTitleText(title) + mToolbar.setTvRightText(rightText) + mToolbar.setIvLeftIcon(R.mipmap.ac_back_icon) + mToolbar.setIvLeftOnClickListener { finish() } + mToolbar.setTvRightOnClickListener(listenerRightClick) + } + + open fun showLog(logText: String?) { + if (BuildConfig.LOG_ERROR) { + if (TextUtils.isEmpty(logText)) { + Log.i("app", "logText is null") + } else { + Log.i("app", logText!!) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rehome/sgbaxj/base/BaseFragment.java b/app/src/main/java/com/rehome/sgbaxj/base/BaseFragment.java index 48243f0..2c9b071 100755 --- a/app/src/main/java/com/rehome/sgbaxj/base/BaseFragment.java +++ b/app/src/main/java/com/rehome/sgbaxj/base/BaseFragment.java @@ -3,6 +3,7 @@ package com.rehome.sgbaxj.base; import android.app.Activity; import android.content.Context; import android.os.Bundle; +import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -62,7 +63,11 @@ public abstract class BaseFragment extends Fragment { public void showLog(String logText) { if (BuildConfig.LOG_ERROR) { - Log.i("app", logText); + if(TextUtils.isEmpty(logText)){ + Log.i("app", "logText is null"); + }else{ + Log.i("app", logText); + } } } diff --git a/app/src/main/java/com/rehome/sgbaxj/base/BaseFragmentKotlinViewBinding.kt b/app/src/main/java/com/rehome/sgbaxj/base/BaseFragmentKotlinViewBinding.kt new file mode 100644 index 0000000..19984d5 --- /dev/null +++ b/app/src/main/java/com/rehome/sgbaxj/base/BaseFragmentKotlinViewBinding.kt @@ -0,0 +1,31 @@ +package com.rehome.sgbaxj.base + +/** + * Create By HuangWenFei + * 创建日期:2023-07-25 14:14 + * 描述: + */ + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.viewbinding.ViewBinding + +abstract class BaseFragmentKotlinViewBinding : Fragment() { + protected var binding: T? = null + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding = getBinding(inflater, container) + return binding!!.root + } + + protected abstract fun getBinding(inflater: LayoutInflater?, container: ViewGroup?): T + override fun onDestroyView() { + super.onDestroyView() + binding = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rehome/sgbaxj/base/BaseFragmentViewBinding.java b/app/src/main/java/com/rehome/sgbaxj/base/BaseFragmentViewBinding.java new file mode 100644 index 0000000..d5f4b42 --- /dev/null +++ b/app/src/main/java/com/rehome/sgbaxj/base/BaseFragmentViewBinding.java @@ -0,0 +1,84 @@ +package com.rehome.sgbaxj.base; + +/** + * Create By HuangWenFei + * 创建日期:2023-07-25 14:15 + * 描述: + */ + +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.viewbinding.ViewBinding; + +/** + * Create By HuangWenFei + * 创建日期:2023-01-11 15:13 + * 描述: + */ +public abstract class BaseFragmentViewBinding extends Fragment { + + protected Context context; + + protected T binding; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + binding = getBinding(inflater, container); + return binding.getRoot(); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + initView(); + initData(); + } + + protected abstract T getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container); + /** + * 初始化视图 + */ + protected abstract void initView(); + + /** + * 初始化数据 + */ + protected abstract void initData(); + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); + this.context = context; + } + + @Override + public void onDetach() { + super.onDetach(); + this.context = null; + } + + public void showToast(String msg) { + Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); + } + + public void showToast(int strId) { + Toast.makeText(context, strId, Toast.LENGTH_SHORT).show(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/rehome/sgbaxj/bean/MjList.java b/app/src/main/java/com/rehome/sgbaxj/bean/MjList.java new file mode 100644 index 0000000..f5b4512 --- /dev/null +++ b/app/src/main/java/com/rehome/sgbaxj/bean/MjList.java @@ -0,0 +1,148 @@ +package com.rehome.sgbaxj.bean; + +/** + * Create By HuangWenFei + * 创建日期:2023-07-25 14:17 + * 描述: + */ + + +import java.util.List; + +/** + * Create By HuangWenFei + * 创建日期:2023-03-03 15:32 + * 描述: + */ +public class MjList { + private String state; + private String msg; + private List data; + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + + private String zxid; + + private String khmc; + + private String st; + + private String et; + + private String zds; + + private String yjds; + + private String ljds; + + private String mjds; + + private String mk; + + private boolean checked;//0:未选中,1:已选中 + + public String getZxid() { + return zxid; + } + + public void setZxid(String zxid) { + this.zxid = zxid; + } + + public String getKhmc() { + return khmc; + } + + public void setKhmc(String khmc) { + this.khmc = khmc; + } + + public String getSt() { + return st; + } + + public void setSt(String st) { + this.st = st; + } + + public String getEt() { + return et; + } + + public void setEt(String et) { + this.et = et; + } + + public String getZds() { + return zds; + } + + public void setZds(String zds) { + this.zds = zds; + } + + public String getYjds() { + return yjds; + } + + public void setYjds(String yjds) { + this.yjds = yjds; + } + + public String getLjds() { + return ljds; + } + + public void setLjds(String ljds) { + this.ljds = ljds; + } + + public String getMjds() { + return mjds; + } + + public void setMjds(String mjds) { + this.mjds = mjds; + } + + public String getMk() { + return mk; + } + + public void setMk(String mk) { + this.mk = mk; + } + + public boolean isChecked() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rehome/sgbaxj/bean/MjRequestInfo.java b/app/src/main/java/com/rehome/sgbaxj/bean/MjRequestInfo.java new file mode 100644 index 0000000..41adecc --- /dev/null +++ b/app/src/main/java/com/rehome/sgbaxj/bean/MjRequestInfo.java @@ -0,0 +1,47 @@ +package com.rehome.sgbaxj.bean; + +/** + * Create By HuangWenFei + * 创建日期:2023-07-25 14:38 + * 描述:免检管理上传请求数据 + */ +import java.util.List; + +public class MjRequestInfo { + private String action; + private String bz; + private String scr; + private List data; + + public String getAction() { + return action; + } + + public void setAction(String action) { + this.action = action; + } + + public String getBz() { + return bz; + } + + public void setBz(String bz) { + this.bz = bz; + } + + public String getScr() { + return scr; + } + + public void setScr(String scr) { + this.scr = scr; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } +} diff --git a/app/src/main/java/com/rehome/sgbaxj/contans/Contans.java b/app/src/main/java/com/rehome/sgbaxj/contans/Contans.java index ffbd568..7ed3ee0 100755 --- a/app/src/main/java/com/rehome/sgbaxj/contans/Contans.java +++ b/app/src/main/java/com/rehome/sgbaxj/contans/Contans.java @@ -62,6 +62,10 @@ public class Contans { public final static String GET_STATISTICS_DATA = "XSCB/STATISTICS_CHECKED.ashx";//获取本人上传的巡检数据 public final static String LAST_UPLOAD_POINT_CHECKED = "XSCB/LAST_UPLOAD_POINT_CHECKED.ashx";//获取当前值当前点最后的已巡检人 public final static String XJ_UPLOAD_LOCATION_CHECKED = "XSCB/CURRENT_CHECK_LOCALTION.ashx";//上传巡检人当前位置 + //保安获取免检列表 + public final static String BA_Download_MJ_URL = "MJGL/BA_MJGL.ashx"; + //保安上传免检列表 + public final static String BA_UPLOAD_MJ_URL = "MJGL/BA_MJGL.ashx"; // ========================= intent KEY ========================// diff --git a/app/src/main/java/com/rehome/sgbaxj/utils/NoProgresshttpUtils.java b/app/src/main/java/com/rehome/sgbaxj/utils/NoProgresshttpUtils.java index c5a4e8e..29cd636 100644 --- a/app/src/main/java/com/rehome/sgbaxj/utils/NoProgresshttpUtils.java +++ b/app/src/main/java/com/rehome/sgbaxj/utils/NoProgresshttpUtils.java @@ -4,7 +4,10 @@ package com.rehome.sgbaxj.utils; import android.app.Activity; import android.content.Context; +import android.text.TextUtils; +import android.util.Log; +import com.rehome.sgbaxj.BuildConfig; import com.rehome.sgbaxj.R; import com.yolanda.nohttp.NoHttp; import com.yolanda.nohttp.download.DownloadQueue; @@ -63,9 +66,20 @@ public class NoProgresshttpUtils { public void add(Activity mActivity, int what, Request request, HttpListener callback) { + showLog(request.url()); mQueue.add(what, request, new HttpResponseListenerNoProgress(mActivity, request, callback)); } + public void showLog(String logText) { + if (BuildConfig.LOG_ERROR) { + if(TextUtils.isEmpty(logText)){ + Log.i("app", "logText is null"); + }else{ + Log.i("app", logText); + } + } + } + /** * 取消这个sign这个标记的所有请求 * diff --git a/app/src/main/java/com/rehome/sgbaxj/utils/NohttpUtils.java b/app/src/main/java/com/rehome/sgbaxj/utils/NohttpUtils.java index 1a2772a..c6b0f6e 100755 --- a/app/src/main/java/com/rehome/sgbaxj/utils/NohttpUtils.java +++ b/app/src/main/java/com/rehome/sgbaxj/utils/NohttpUtils.java @@ -2,7 +2,10 @@ package com.rehome.sgbaxj.utils; import android.app.Activity; import android.content.Context; +import android.text.TextUtils; +import android.util.Log; +import com.rehome.sgbaxj.BuildConfig; import com.rehome.sgbaxj.R; import com.yolanda.nohttp.NoHttp; import com.yolanda.nohttp.download.DownloadQueue; @@ -72,14 +75,26 @@ public class NohttpUtils { * @param */ public void add(Activity mActivity, int what, Request request, HttpListener callback, boolean canCanel, boolean isLoading, String msg) { + showLog(request.url()); mQueue.add(what, request, new HttpResponseListener(mActivity, request, callback, canCanel, isLoading, msg)); } public void add(Activity mActivity, int what, Request request, HttpListener callback) { + showLog(request.url()); mQueue.add(what, request, new HttpResponseListener(mActivity, request, callback, true, true, "加载中...")); } + public void showLog(String logText) { + if (BuildConfig.LOG_ERROR) { + if(TextUtils.isEmpty(logText)){ + Log.i("app", "logText is null"); + }else{ + Log.i("app", logText); + } + } + } + /** * 取消这个sign这个标记的所有请求 * diff --git a/app/src/main/java/com/rehome/sgbaxj/weight/MjEditDialog.java b/app/src/main/java/com/rehome/sgbaxj/weight/MjEditDialog.java new file mode 100644 index 0000000..db9c279 --- /dev/null +++ b/app/src/main/java/com/rehome/sgbaxj/weight/MjEditDialog.java @@ -0,0 +1,158 @@ +package com.rehome.sgbaxj.weight; + + +/** + * Create By HuangWenFei + * 创建日期:2023-07-25 14:39 + * 描述:免检提交对话框 + */ + + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import com.rehome.sgbaxj.R; + +/** + * Created by Administrator on 2018/1/31. + */ + +public class MjEditDialog extends Dialog { + private Button yes, no;//确定按钮 + private TextView titleTv;//消息标题文本 + private EditText et_phone;//输入电话 + private String titleStr;//从外界设置的title文本 + private String messageStr;//从外界设置的消息文本 + //确定文本和取消文本的显示内容 + private String yesStr, noStr; + + private DialogListener listener;//取消,确定按钮被点击了的监听器 + + public MjEditDialog(Context context, DialogListener listener) { + super(context, R.style.Dialog_Msg); + this.listener = listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_mj_edit); + //按空白处不能取消动画 + setCanceledOnTouchOutside(false); + + //初始化界面控件 + initView(); + //初始化界面数据 + initData(); + //初始化界面控件的事件 + initEvent(); + + } + + /** + * 初始化界面的确定和取消监听器 + */ + private void initEvent() { + //设置确定按钮被点击后,向外界提供监听 + yes.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //dismiss(); + if (listener != null) { + if (TextUtils.isEmpty(et_phone.getText().toString().trim())) { + et_phone.setError("免检原因必填"); + listener.onYesClick(""); + } else { + dismiss(); + listener.onYesClick(et_phone.getText().toString().trim()); + } + } + } + }); + + no.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + if (listener != null) { + listener.onNoClick(); + } + } + }); + } + + /** + * 初始化界面控件的显示数据 + */ + private void initData() { + //如果用户自定了title和message + if (titleStr != null) { + titleTv.setText(titleStr); + } + if (messageStr != null) { + et_phone.setText(messageStr); + } + //如果设置按钮的文字 + if (yesStr != null) { + yes.setText(yesStr); + } + } + + /** + * 初始化界面控件 + */ + private void initView() { + yes = (Button) findViewById(R.id.yes); + no = (Button) findViewById(R.id.no); + titleTv = (TextView) findViewById(R.id.title); + et_phone = (EditText) findViewById(R.id.et_phone); + } + + /** + * 从外界Activity为Dialog设置标题 + * + * @param title + */ + public void setTitle(String title) { + titleStr = title; + } + + /** + * 从外界Activity为Dialog设置dialog的message + * + * @param message + */ + public void setMessage(String message) { + messageStr = message; + } + + /** + * 设置确定按钮和取消被点击的接口 + */ + public interface DialogListener { + public void onYesClick(String noCheckReason); + + public void onNoClick(); + } + + @Override + public void show() { + super.show(); + /** + * 设置宽度全屏,要设置在show的后面 + */ + WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); + layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; + layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT; + getWindow().getDecorView().setPadding(0, 0, 0, 0); + getWindow().setAttributes(layoutParams); + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_bamj.xml b/app/src/main/res/layout/activity_bamj.xml new file mode 100644 index 0000000..c58dadb --- /dev/null +++ b/app/src/main/res/layout/activity_bamj.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_mj_edit.xml b/app/src/main/res/layout/dialog_mj_edit.xml new file mode 100644 index 0000000..6dc23ff --- /dev/null +++ b/app/src/main/res/layout/dialog_mj_edit.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + +