diff --git a/app/src/main/java/com/skipping/Contant.kt b/app/src/main/java/com/skipping/Contant.kt index 19367b5..b747209 100644 --- a/app/src/main/java/com/skipping/Contant.kt +++ b/app/src/main/java/com/skipping/Contant.kt @@ -38,7 +38,7 @@ const val TIMING = "timing" /** * 定数计时 */ -const val NUMBER = "number" +const val NUMBER = "counter" const val TIMING_NAME = "定时计数(秒)" diff --git a/app/src/main/java/com/skipping/activity/begin/BeginActivity.kt b/app/src/main/java/com/skipping/activity/begin/BeginActivity.kt index d5d85fc..a1ea07f 100644 --- a/app/src/main/java/com/skipping/activity/begin/BeginActivity.kt +++ b/app/src/main/java/com/skipping/activity/begin/BeginActivity.kt @@ -16,9 +16,14 @@ import com.skipping.activity.home.HomeGridAdaper import com.skipping.activity.perform.PerformActivity import com.skipping.activity.setting.SettingActivity import com.skipping.net.DetailActivityBean +import com.skipping.utils.NumberUtil import com.skipping.utils.ScreenUtil import com.skipping.utils.StatusBarUtil import com.skipping.utils.ThreadPoolUtil +import com.skipping.view.bubblewindow.BubbleWindow +import com.skipping.view.bubblewindow.Direction +import com.skipping.view.bubblewindow.OnItemClick +import com.skipping.view.bubblewindow.itemview.TextItemView import com.tencent.mmkv.MMKV import kotlinx.android.synthetic.main.activity_begin.* import kotlinx.android.synthetic.main.activity_home.* @@ -36,6 +41,7 @@ class BeginActivity : BaseActivity() { lateinit var adaper: BeginGridAdaper lateinit var detailBean: DetailActivityBean lateinit var future: ScheduledFuture<*> + lateinit var bubbleWindow: BubbleWindow companion object { val ID = "id" @@ -54,6 +60,7 @@ class BeginActivity : BaseActivity() { } override fun initStart() { + ScreenUtil.setCustomDensity(this) } override fun initView() { @@ -79,11 +86,30 @@ class BeginActivity : BaseActivity() { }, 0, 1000) } - + } + begin_listRL.setOnClickListener { + bubbleWindow.show(begin_list) } } fun activityDetailResult(bean: DetailActivityBean) { + bean.candidates + bubbleWindow = BubbleWindow.Builder(this).apply { + for (i in 0..bean.candidates.size) { + val num = NumberUtil.numberToChinese(i) + this.setItemView(TextItemView(this@BeginActivity, i.toString(), "第{$num}组")) + } + }.setOnItemClick(object : OnItemClick { + override fun onClick(tag: String?, position: Int, bubbleWindow: BubbleWindow?) { + val num = NumberUtil.numberToChinese(tag?.toInt()!!) + begin_list.text = "第{$num}组" + } + }) +// .setMargining(com.libs.utils.ScreenUtil.getActionBarHeight(this)) + .setDirection(Direction.BOTTOM) + .build() + + detailBean = bean begin_name.text = bean.activityName if (detailBean.activityType == TIMING) { diff --git a/app/src/main/java/com/skipping/activity/home/HomeActivity.kt b/app/src/main/java/com/skipping/activity/home/HomeActivity.kt index bb79afe..97dd504 100644 --- a/app/src/main/java/com/skipping/activity/home/HomeActivity.kt +++ b/app/src/main/java/com/skipping/activity/home/HomeActivity.kt @@ -1,6 +1,7 @@ package com.skipping.activity.home import android.app.Activity +import android.app.AlertDialog import android.content.Intent import android.view.View import androidx.core.content.ContextCompat @@ -16,16 +17,13 @@ import com.skipping.NUMBER import com.skipping.R import com.skipping.TIMING import com.skipping.activity.begin.BeginActivity -import com.skipping.activity.perform.PerformActivity import com.skipping.activity.setting.SettingActivity import com.skipping.net.ActivityBean import com.skipping.net.GradleBean -import com.skipping.utils.DateUtils import com.skipping.utils.ScreenUtil import com.skipping.view.bubblewindow.BubbleWindow -import com.skipping.view.bubblewindow.Direction -import com.skipping.view.bubblewindow.OnItemClick -import com.skipping.view.bubblewindow.itemview.TextItemView +import com.skipping.view.dialog.DialogBean +import com.skipping.view.dialog.DialogTool import kotlinx.android.synthetic.main.activity_detail.view.* import kotlinx.android.synthetic.main.activity_home.* @@ -37,6 +35,8 @@ import kotlinx.android.synthetic.main.activity_home.* class HomeActivity : BaseActivity() { lateinit var classList: List lateinit var bubbleWindow: BubbleWindow + lateinit var dialog:AlertDialog + var choseGradeBeanList = mutableListOf>() var choseCla: GradleBean? = null lateinit var adaper: HomeGridAdaper var position = 0 @@ -67,9 +67,18 @@ class HomeActivity : BaseActivity() { } p.getActivityList(1) p.getClassList() + choseClass.setOnClickListener { - bubbleWindow.show(chooseIV) + dialog = DialogTool(this).buildList(this, choseGradeBeanList){ + choseCla = it.bean + chooseIV.text = it.bean.groupName + "班" + activityNameEdit?.setText(it.bean.groupName + "班活动") + dialog.dismiss() + } } + + + cancel_btn.setOnClickListener { drawerlayout.closeDrawer(GravityCompat.START) } @@ -165,10 +174,10 @@ class HomeActivity : BaseActivity() { recyclerview.layoutManager = layoutManager adaper = HomeGridAdaper(this, list) adaper.setOnItemChangeClickListener { - LogUtil.e("111111") // PerformActivity.startActivity(this, it.id.toString(), DateUtils.dealDateFormat(it.createdAt)) } adaper.setOnItemStartClickListener { + LogUtil.e(it) BeginActivity.startBegin(this, it.id.toString()) } recyclerview.adapter = adaper @@ -180,25 +189,34 @@ class HomeActivity : BaseActivity() { fun showClassList(list: List) { classList = list - bubbleWindow = BubbleWindow.Builder(this).apply { - classList.forEach { - this.setItemView(TextItemView(this@HomeActivity, it.groupID, it.groupName + "班学生")) - } - }.setOnItemClick(object : OnItemClick { - override fun onClick(tag: String?, position: Int, bubbleWindow: BubbleWindow?) { - choseCla = list[position] - chooseIV.text = list[position].groupName + "班" - activityNameEdit?.setText(list[position].groupName + "班活动") - bubbleWindow?.dismiss() - } - }).setMargining(com.libs.utils.ScreenUtil.getActionBarHeight(this)) - .setDirection(Direction.BOTTOM) - .build() + choseGradeBeanList.clear() + classList.forEach { + choseGradeBeanList.add(DialogBean(it.groupName + "班学生", it)) + } +// bubbleWindow = BubbleWindow.Builder(this).apply { +// classList.forEach { +// this.setItemView(TextItemView(this@HomeActivity, it.groupID, it.groupName + "班学生")) +// } +// }.setOnItemClick(object : OnItemClick { +// override fun onClick(tag: String?, position: Int, bubbleWindow: BubbleWindow?) { +// choseCla = list[position] +// chooseIV.text = list[position].groupName + "班" +// activityNameEdit?.setText(list[position].groupName + "班活动") +// bubbleWindow?.dismiss() +// } +// }).setMargining(com.libs.utils.ScreenUtil.getActionBarHeight(this)) +// .setDirection(Direction.BOTTOM) +// .build() } fun addActivityResult() { p.getActivityList(1) } + override fun onRestart() { + ScreenUtil.setCustomDensity(this) + super.onRestart() + } + } \ No newline at end of file diff --git a/app/src/main/java/com/skipping/activity/home/HomeGridAdaper.kt b/app/src/main/java/com/skipping/activity/home/HomeGridAdaper.kt index 6de3445..8aec369 100644 --- a/app/src/main/java/com/skipping/activity/home/HomeGridAdaper.kt +++ b/app/src/main/java/com/skipping/activity/home/HomeGridAdaper.kt @@ -42,7 +42,7 @@ class HomeGridAdaper(context: Context, list: List) : RecyclerView. override fun onBindViewHolder(holder: HomeGridAdaper.Holder, position: Int) { holder.name.text = list[position].name holder.time.text = DateUtils.dealDateFormat(list[position].createdAt) - holder.className.text = list[position].id.toString() + holder.className.text = list[position].gradeName+"年级"+list[position].gradeName if (list[position].activityType == TIMING) { holder.status.text = TIMING_NAME holder.gridItemNum.text = list[position].value.toString() + " 秒" diff --git a/app/src/main/java/com/skipping/activity/list/ListAdapter.java b/app/src/main/java/com/skipping/activity/list/ListAdapter.java index 50a9f22..319a3dd 100644 --- a/app/src/main/java/com/skipping/activity/list/ListAdapter.java +++ b/app/src/main/java/com/skipping/activity/list/ListAdapter.java @@ -43,7 +43,7 @@ public class ListAdapter extends RecyclerView.Adapter() { recyclerview.adapter = adaper } - + override fun onRestart() { + ScreenUtil.setCustomDensity(this) + super.onRestart() + } } \ No newline at end of file diff --git a/app/src/main/java/com/skipping/activity/perform/PerformAdaper.kt b/app/src/main/java/com/skipping/activity/perform/PerformAdaper.kt index 8f03e47..2ce787b 100644 --- a/app/src/main/java/com/skipping/activity/perform/PerformAdaper.kt +++ b/app/src/main/java/com/skipping/activity/perform/PerformAdaper.kt @@ -21,7 +21,8 @@ import com.skipping.net.DetailActivityBean class PerformAdaper(context: Context, bean: DetailActivityBean) : RecyclerView.Adapter() { var bean = bean var context = context - lateinit var onClick: () -> Unit + lateinit var onClick: (bean: DetailActivityBean.CandidatesBean) -> Unit + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PerformAdaper.Holder { return Holder(LayoutInflater.from(context).inflate(R.layout.perform_item, parent, false)) } @@ -31,7 +32,9 @@ class PerformAdaper(context: Context, bean: DetailActivityBean) : RecyclerView.A holder.code.text = bean.candidates[0].get(position).studentID holder.time.text = bean.activityValue.toString() holder.num.text = bean.candidates[0].get(position).score.toString() - + holder.itemView.setOnClickListener { + onClick.invoke(bean.candidates[0].get(position)) + } } override fun getItemCount(): Int { @@ -44,4 +47,9 @@ class PerformAdaper(context: Context, bean: DetailActivityBean) : RecyclerView.A var time = itemView.findViewById(R.id.time) var num = itemView.findViewById(R.id.num) } + + + fun setOnItemClickListener(onClick: (bean: DetailActivityBean.CandidatesBean) -> Unit) { + this.onClick = onClick + } } \ No newline at end of file diff --git a/app/src/main/java/com/skipping/activity/setting/SettingActivity.kt b/app/src/main/java/com/skipping/activity/setting/SettingActivity.kt index b5baa9b..03630f5 100644 --- a/app/src/main/java/com/skipping/activity/setting/SettingActivity.kt +++ b/app/src/main/java/com/skipping/activity/setting/SettingActivity.kt @@ -95,4 +95,8 @@ class SettingActivity : BaseActivity() { supportFragmentManager.beginTransaction().replace(R.id.fragment, fragment).commitAllowingStateLoss(); } + override fun onRestart() { + ScreenUtil.setCustomDensity(this) + super.onRestart() + } } \ No newline at end of file diff --git a/app/src/main/java/com/skipping/activity/splash/SplashActivity.kt b/app/src/main/java/com/skipping/activity/splash/SplashActivity.kt index 8bbe6b6..63ecf57 100644 --- a/app/src/main/java/com/skipping/activity/splash/SplashActivity.kt +++ b/app/src/main/java/com/skipping/activity/splash/SplashActivity.kt @@ -55,6 +55,10 @@ class SplashActivity : BaseActivity() { startActivity(Intent(this@SplashActivity, HomeActivity::class.java)) ActivityManager.getInstance().popActivity(this) } + } + override fun onRestart() { + ScreenUtil.setCustomDensity(this) + super.onRestart() } } \ No newline at end of file diff --git a/app/src/main/java/com/skipping/fragment/pair/PairAdaper.kt b/app/src/main/java/com/skipping/fragment/pair/PairAdaper.kt new file mode 100644 index 0000000..3456d88 --- /dev/null +++ b/app/src/main/java/com/skipping/fragment/pair/PairAdaper.kt @@ -0,0 +1,48 @@ +package com.skipping.fragment.pair + +import android.app.Activity +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.fragment.app.FragmentActivity +import androidx.recyclerview.widget.RecyclerView +import com.loop.loopminisdk.LoopDevice +import com.skipping.R + +/** + * @author Ming + * 3/25/22 + * + */ +class PairAdaper(context: Context?,list: List) : RecyclerView.Adapter() { + var list = list + var context = context + lateinit var onClick: () -> Unit + + fun setData(list: List){ + this.list = list + notifyDataSetChanged() + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PairAdaper.Holder { + return Holder(LayoutInflater.from(context).inflate(R.layout.pair_item, parent, false)) + } + + override fun onBindViewHolder(holder: PairAdaper.Holder, position: Int) { + holder.pair_item_tv1.text = list[position].loopDeviceId.toString() + holder.pair_item_tv2.text = list[position].macList.toString() + holder.pair_item_tv3.text = list[position].power.toString() + } + + override fun getItemCount(): Int { + return list.size + } + + class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) { + var pair_item_tv1 = itemView.findViewById(R.id.pair_item_tv1) + var pair_item_tv2 = itemView.findViewById(R.id.pair_item_tv2) + var pair_item_tv3 = itemView.findViewById(R.id.pair_item_tv3) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/skipping/fragment/pair/PairFragment.kt b/app/src/main/java/com/skipping/fragment/pair/PairFragment.kt index d565acb..f1e81de 100644 --- a/app/src/main/java/com/skipping/fragment/pair/PairFragment.kt +++ b/app/src/main/java/com/skipping/fragment/pair/PairFragment.kt @@ -1,18 +1,16 @@ package com.skipping.fragment.pair import android.os.Bundle -import android.os.Handler -import android.os.Message import android.view.View import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.LinearLayoutManager import com.libs.fragment.BaseFragment import com.libs.utils.LogUtil import com.loop.loopminisdk.LoopDevice -import com.loop.loopminisdk.LoopHost -import com.loop.loopminisdk.LoopMessage import com.loop.loopminisdk.LoopMini import com.skipping.R import com.skipping.utils.ConnectManager +import kotlinx.android.synthetic.main.activity_perform.* import kotlinx.android.synthetic.main.fragment_pair.* /** @@ -22,7 +20,9 @@ import kotlinx.android.synthetic.main.fragment_pair.* */ class PairFragment : BaseFragment() { var position = 0 + var deviceList: MutableList = ArrayList() lateinit var manager: ConnectManager + lateinit var adaper:PairAdaper override fun getLayoutId(): Int { return R.layout.fragment_pair; @@ -30,7 +30,7 @@ class PairFragment : BaseFragment() { override fun initView(view: View?, savedInstanceState: Bundle?) { pairStatus.setOnClickListener { - manager.pairDevice(1) + manager.host } pair_btn.setOnClickListener { @@ -57,7 +57,23 @@ class PairFragment : BaseFragment() { } override fun initData() { - manager = ConnectManager.getSingleton(activity) + manager = ConnectManager.getSingleton() + manager.setLoopHostListener { + var bytes = it.macList + pair_address.text = "网关地址:" + LoopMini.bytesToHexString(bytes) + pair_id.text = "网关id:" + it.hostId.toString() + pair_list.layoutManager = LinearLayoutManager(activity) + + for (i in 0..it.license){ + var device = LoopDevice().apply { + this.loopDeviceId = i + } + deviceList.add(device) + } + adaper = PairAdaper(activity,deviceList) + pair_list.adapter = adaper + adaper.notifyDataSetChanged() + } } override fun onResume() { @@ -67,6 +83,6 @@ class PairFragment : BaseFragment() { override fun onPause() { super.onPause() - manager.pause() +// manager.pause() } } \ No newline at end of file diff --git a/app/src/main/java/com/skipping/net/ActivityBean.java b/app/src/main/java/com/skipping/net/ActivityBean.java index 2e71435..86323b0 100644 --- a/app/src/main/java/com/skipping/net/ActivityBean.java +++ b/app/src/main/java/com/skipping/net/ActivityBean.java @@ -8,22 +8,25 @@ import java.io.Serializable; * @author Ming * 3/15/22 */ -public class ActivityBean implements Serializable { +public class ActivityBean{ + /** - * ID : 13 + * ID : 11 * Name : loop2 * ActivityType : timing * Value : 60 * OrgID : ae428145b8a466e9c72f6047b8 - * GreadID : 6b76e9770a4eafbcee213121d4ad6b + * GradeID : 6b76e9770a4eafbcee213121d4ad6b * ClassID : 77bba9124a4281bc9f92f965561cd5 * Status : 未完成 * Step : 2 * CompleteTime : null * PersonNumber : 6 * GroupID : - * CreatedAt : 2022-03-14T08:38:21.495+08:00 + * CreatedAt : 2022-03-14T08:36:49.881+08:00 + * GradeName : 101 + * ClassName : 002 */ private Integer ID; @@ -31,7 +34,7 @@ public class ActivityBean implements Serializable { private String ActivityType; private Integer Value; private String OrgID; - private String GreadID; + private String GradeID; private String ClassID; private String Status; private Integer Step; @@ -39,13 +42,15 @@ public class ActivityBean implements Serializable { private Integer PersonNumber; private String GroupID; private String CreatedAt; + private String GradeName; + private String ClassName; public Integer getId() { return ID; } - public void setId(Integer id) { - this.ID = id; + public void setId(Integer ID) { + this.ID = ID; } public String getName() { @@ -80,12 +85,12 @@ public class ActivityBean implements Serializable { OrgID = orgID; } - public String getGreadID() { - return GreadID; + public String getGradeID() { + return GradeID; } - public void setGreadID(String greadID) { - GreadID = greadID; + public void setGradeID(String gradeID) { + GradeID = gradeID; } public String getClassID() { @@ -144,15 +149,31 @@ public class ActivityBean implements Serializable { CreatedAt = createdAt; } + public String getGradeName() { + return GradeName; + } + + public void setGradeName(String gradeName) { + GradeName = gradeName; + } + + public String getClassName() { + return ClassName; + } + + public void setClassName(String className) { + ClassName = className; + } + @Override public String toString() { return "ActivityBean{" + - "ID=" + ID + + "id=" + ID + ", Name='" + Name + '\'' + ", ActivityType='" + ActivityType + '\'' + ", Value=" + Value + ", OrgID='" + OrgID + '\'' + - ", GreadID='" + GreadID + '\'' + + ", GradeID='" + GradeID + '\'' + ", ClassID='" + ClassID + '\'' + ", Status='" + Status + '\'' + ", Step=" + Step + @@ -160,6 +181,8 @@ public class ActivityBean implements Serializable { ", PersonNumber=" + PersonNumber + ", GroupID='" + GroupID + '\'' + ", CreatedAt='" + CreatedAt + '\'' + + ", GradeName='" + GradeName + '\'' + + ", ClassName='" + ClassName + '\'' + '}'; } } diff --git a/app/src/main/java/com/skipping/utils/ConnectManager.java b/app/src/main/java/com/skipping/utils/ConnectManager.java index 74183db..31b2426 100644 --- a/app/src/main/java/com/skipping/utils/ConnectManager.java +++ b/app/src/main/java/com/skipping/utils/ConnectManager.java @@ -14,6 +14,7 @@ import android.view.View; import android.widget.Button; import android.widget.EditText; +import com.libs.fragment.BaseApplication; import com.libs.utils.LogUtil; import com.libs.utils.ToastUtil; import com.loop.loopminisdk.LoopDevice; @@ -38,17 +39,17 @@ public class ConnectManager { private Set loopDeviceSet = new HashSet<>(); private LoopDevice loopDevice; private LoopHost loopHost; - private Activity activity; private Handler mHandler; private int position; + private OnLoopHost onLoopHost; private ScheduledFuture scheduledFuture; private static volatile ConnectManager connectManager; - public static ConnectManager getSingleton(Activity activity) { + public static ConnectManager getSingleton() { if (connectManager == null) { synchronized (ThreadPoolUtil.class) { if (connectManager == null) { - connectManager = new ConnectManager(activity); + connectManager = new ConnectManager(); } } } @@ -80,8 +81,8 @@ public class ConnectManager { } }; - public ConnectManager(Activity activity) { - this.activity = activity; + public ConnectManager() { + LogUtil.e("创建"); mHandler = new DeviceHandler(); } @@ -184,18 +185,19 @@ public class ConnectManager { public void pause(){ - activity.unregisterReceiver(mUsbReceiver); - activity.unbindService(usbConnection); + LogUtil.e("关闭"); + BaseApplication.getInstance().unregisterReceiver(mUsbReceiver); + BaseApplication.getInstance().unbindService(usbConnection); } private void startService(ServiceConnection serviceConnection) { if (!LoopMini.SERVICE_CONNECTED) { - Intent startService = new Intent(activity, LoopMini.class); - activity.startService(startService); + Intent startService = new Intent(BaseApplication.getInstance(), LoopMini.class); + BaseApplication.getInstance().startService(startService); } - Intent bindingIntent = new Intent(activity, LoopMini.class); - activity.bindService(bindingIntent, serviceConnection, Context.BIND_AUTO_CREATE); + Intent bindingIntent = new Intent(BaseApplication.getInstance(), LoopMini.class); + BaseApplication.getInstance().bindService(bindingIntent, serviceConnection, Context.BIND_AUTO_CREATE); } private void setFilters() { @@ -205,7 +207,7 @@ public class ConnectManager { filter.addAction(LoopMini.ACTION_USB_DISCONNECTED); filter.addAction(LoopMini.ACTION_USB_NOT_SUPPORTED); filter.addAction(LoopMini.ACTION_USB_PERMISSION_NOT_GRANTED); - activity.registerReceiver(mUsbReceiver, filter); + BaseApplication.getInstance().registerReceiver(mUsbReceiver, filter); } @@ -221,6 +223,7 @@ public class ConnectManager { break; case LoopMini.Loop_GET_HOST_INFO: loopHost = (LoopHost) msg.obj; + onLoopHost.connected(loopHost); LogUtil.e("LoopHost", loopHost.toString()); break; case LoopMini.LOOP_GET_DEVICE_INFO: @@ -240,5 +243,22 @@ public class ConnectManager { loopDeviceSet.add(loopDevice); } + public Set getDevice(){ + return loopDeviceSet; + } + + public void setLoopHostListener(OnLoopHost onLoopHost){ + this.onLoopHost = onLoopHost; + } + + public LoopHost getHost(){ + return loopHost; + } + + + public interface OnLoopHost{ + void connected(LoopHost host); + } + } diff --git a/app/src/main/java/com/skipping/utils/NumberUtil.java b/app/src/main/java/com/skipping/utils/NumberUtil.java new file mode 100644 index 0000000..bad64ad --- /dev/null +++ b/app/src/main/java/com/skipping/utils/NumberUtil.java @@ -0,0 +1,83 @@ +package com.skipping.utils; + +import android.util.Log; + +/** + * @author Ming + * 3/29/22 + */ +public class NumberUtil { + private static String nums[] = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}; + private static String pos_units[] = {"", "十", "百", "千"}; + private static String weight_units[] = {"", "万", "亿"}; + + /** + * 数字转汉字【新】 + * + * @param num + * @return + */ + public static String numberToChinese(int num) { + if (num == 0) { + return "零"; + } + + int weigth = 0;//节权位 + String chinese = ""; + String chinese_section = ""; + boolean setZero = false;//下一小节是否需要零,第一次没有上一小节所以为false + while (num > 0) { + int section = num % 10000;//得到最后面的小节 + if (setZero) {//判断上一小节的千位是否为零,是就设置零 + chinese = nums[0] + chinese; + } + chinese_section = sectionTrans(section); + if (section != 0) {//判断是都加节权位 + chinese_section = chinese_section + weight_units[weigth]; + } + chinese = chinese_section + chinese; + chinese_section = ""; + Log.d("TAG", chinese_section); + + setZero = (section < 1000) && (section > 0); + num = num / 10000; + weigth++; + } + if ((chinese.length() == 2 || (chinese.length() == 3)) && chinese.contains("一十")) { + chinese = chinese.substring(1, chinese.length()); + } + if (chinese.indexOf("一十") == 0) { + chinese = chinese.replaceFirst("一十", "十"); + } + + return chinese; + } + + /** + * 将每段数字转汉子 + * + * @param section + * @return + */ + public static String sectionTrans(int section) { + StringBuilder section_chinese = new StringBuilder(); + int pos = 0;//小节内部权位的计数器 + boolean zero = true;//小节内部的置零判断,每一个小节只能有一个零。 + while (section > 0) { + int v = section % 10;//得到最后一个数 + if (v == 0) { + if (!zero) { + zero = true;//需要补零的操作,确保对连续多个零只是输出一个 + section_chinese.insert(0, nums[0]); + } + } else { + zero = false;//有非零数字就把置 + section_chinese.insert(0, pos_units[pos]); + section_chinese.insert(0, nums[v]); + } + pos++; + section = section / 10; + } + return section_chinese.toString(); + } +} diff --git a/app/src/main/java/com/skipping/view/dialog/DialogAdaper.kt b/app/src/main/java/com/skipping/view/dialog/DialogAdaper.kt new file mode 100644 index 0000000..08ed2e5 --- /dev/null +++ b/app/src/main/java/com/skipping/view/dialog/DialogAdaper.kt @@ -0,0 +1,47 @@ +package com.skipping.view.dialog + +import android.app.AlertDialog +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.skipping.R +import com.skipping.TIMING_NAME +import com.skipping.net.ActivityBean +import com.skipping.net.DetailActivityBean + +/** + * @author Ming + * 3/25/22 + * + */ +class DialogAdaper(context: Context, val list: List>) : RecyclerView.Adapter() { + var context = context + lateinit var onClick: (bean: DialogBean) -> Unit + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DialogAdaper.Holder { + return Holder(LayoutInflater.from(context).inflate(R.layout.dialog_item, parent, false)) + } + + override fun onBindViewHolder(holder: DialogAdaper.Holder, position: Int) { + holder.dialog_item_content.text = list[position].content + holder.itemView.setOnClickListener { + onClick.invoke(list[position]) + } + } + + override fun getItemCount(): Int { + return list.size + } + + class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) { + var dialog_item_content = itemView.findViewById(R.id.dialog_item_content) + } + + + fun setOnItemClickListener(onClick: (bean: DialogBean) -> Unit) { + this.onClick = onClick + } +} \ No newline at end of file diff --git a/app/src/main/java/com/skipping/view/dialog/DialogBean.kt b/app/src/main/java/com/skipping/view/dialog/DialogBean.kt new file mode 100644 index 0000000..625a35f --- /dev/null +++ b/app/src/main/java/com/skipping/view/dialog/DialogBean.kt @@ -0,0 +1,9 @@ +package com.skipping.view.dialog + +/** + * @author Ming + * 3/29/22 + * + */ +class DialogBean(val content: String, val bean: T) { +} \ No newline at end of file diff --git a/app/src/main/java/com/skipping/view/dialog/DialogTool.kt b/app/src/main/java/com/skipping/view/dialog/DialogTool.kt new file mode 100644 index 0000000..a302f6c --- /dev/null +++ b/app/src/main/java/com/skipping/view/dialog/DialogTool.kt @@ -0,0 +1,111 @@ +package com.skipping.view.dialog + +import android.app.Activity +import android.app.AlertDialog +import android.content.Context +import android.view.View +import android.view.animation.LinearInterpolator +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.skipping.R +import com.skipping.utils.ThreadPoolUtil +import java.util.concurrent.ScheduledFuture + +/** + * @author Ming + * 3/29/22 + * + */ +class DialogTool(val context: Context) { + lateinit var dialog_reset: TextView + lateinit var dialog_bttv: TextView + lateinit var dialog_btll: LinearLayout + lateinit var dialog_iv: ImageView + var future: ScheduledFuture<*>? = null + + fun build(status: Status) { + val dialog: AlertDialog = AlertDialog.Builder(context, R.style.bubble_dialog_style).create() + val view = View.inflate(context, R.layout.dialog_view, null) + val dialog_ll = view.findViewById(R.id.dialog_ll) + dialog_bttv = view.findViewById(R.id.dialog_bttv) + dialog_iv = view.findViewById(R.id.dialog_iv) + dialog_btll = view.findViewById(R.id.dialog_btll) + dialog_reset = view.findViewById(R.id.dialog_reset) + when (status) { + Status.CONNECTING -> { + dialog_btll.visibility = View.GONE + dialog_bttv.visibility = View.VISIBLE + dialog_iv.visibility = View.VISIBLE + loading() + } + Status.RESET -> { + dialog_bttv.visibility = View.GONE + dialog_btll.visibility = View.VISIBLE + dialog_iv.visibility = View.INVISIBLE + stopLoading() + } + } + + + var lp = dialog_ll.layoutParams + lp.width = 630 + lp.height = 344 + dialog_ll.layoutParams = lp + dialog.setView(view); + dialog.setCancelable(true); + dialog.show() + } + + fun setStatus(status: Status) { + when (status) { + Status.CONNECTING -> { + dialog_btll.visibility = View.GONE + dialog_bttv.visibility = View.VISIBLE + dialog_iv.visibility = View.VISIBLE + loading() + } + Status.RESET -> { + dialog_bttv.visibility = View.GONE + dialog_btll.visibility = View.VISIBLE + dialog_iv.visibility = View.INVISIBLE + stopLoading() + } + } + } + + fun loading() { + future = ThreadPoolUtil.getSingleton().scheduleWithFixedDelayMain({ + dialog_iv.animate().setInterpolator(LinearInterpolator()).rotationBy(90f).duration = 500 + }, 0, 500) + } + + fun stopLoading() { + if (future != null) { + future?.cancel(false) + } + } + + + fun buildList(activity: Activity, list: List>, onClick: (bean: DialogBean) -> Unit): AlertDialog { + val dialog: AlertDialog = AlertDialog.Builder(context, R.style.bubble_dialog_style).create() + val view = View.inflate(context, R.layout.dialog_view_list, null) + val dialog_list_ll = view.findViewById(R.id.dialog_list_ll) + val recyclerview = view.findViewById(R.id.recyclerview) + recyclerview.layoutManager = LinearLayoutManager(activity) + var adaper = DialogAdaper(activity, list) + adaper.setOnItemClickListener(onClick) + recyclerview.adapter = adaper + var lp = dialog_list_ll.layoutParams + lp.width = 630 + lp.height = 344 + dialog_list_ll.layoutParams = lp + dialog.setView(view); + dialog.setCancelable(true); + dialog.show() + return dialog + } +} + diff --git a/app/src/main/java/com/skipping/view/dialog/Status.kt b/app/src/main/java/com/skipping/view/dialog/Status.kt new file mode 100644 index 0000000..b9078a1 --- /dev/null +++ b/app/src/main/java/com/skipping/view/dialog/Status.kt @@ -0,0 +1,10 @@ +package com.skipping.view.dialog + +/** + * @author Ming + * 3/29/22 + * + */ +enum class Status { + CONNECTING,RESET +} \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_bg.xml b/app/src/main/res/drawable/dialog_bg.xml new file mode 100644 index 0000000..72b87f5 --- /dev/null +++ b/app/src/main/res/drawable/dialog_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_cancel.xml b/app/src/main/res/drawable/dialog_cancel.xml new file mode 100644 index 0000000..d2aef71 --- /dev/null +++ b/app/src/main/res/drawable/dialog_cancel.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_ok.xml b/app/src/main/res/drawable/dialog_ok.xml new file mode 100644 index 0000000..c09c129 --- /dev/null +++ b/app/src/main/res/drawable/dialog_ok.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_begin.xml b/app/src/main/res/layout/activity_begin.xml index 863055a..c74605d 100644 --- a/app/src/main/res/layout/activity_begin.xml +++ b/app/src/main/res/layout/activity_begin.xml @@ -73,16 +73,26 @@ android:textColor="@color/black" android:textSize="28dp" /> - + android:paddingBottom="30dp"> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_view.xml b/app/src/main/res/layout/dialog_view.xml new file mode 100644 index 0000000..33f81d2 --- /dev/null +++ b/app/src/main/res/layout/dialog_view.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_view_list.xml b/app/src/main/res/layout/dialog_view_list.xml new file mode 100644 index 0000000..f95108c --- /dev/null +++ b/app/src/main/res/layout/dialog_view_list.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_pair.xml b/app/src/main/res/layout/fragment_pair.xml index 552b2dd..a7665f7 100644 --- a/app/src/main/res/layout/fragment_pair.xml +++ b/app/src/main/res/layout/fragment_pair.xml @@ -37,21 +37,23 @@ android:orientation="horizontal"> @@ -141,4 +143,9 @@ android:textColor="@color/color_3d3d3d" android:textSize="20dp" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/pair_item.xml b/app/src/main/res/layout/pair_item.xml new file mode 100644 index 0000000..aa5c75d --- /dev/null +++ b/app/src/main/res/layout/pair_item.xml @@ -0,0 +1,32 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xhdpi/load.png b/app/src/main/res/mipmap-xhdpi/load.png new file mode 100644 index 0000000..28f76e8 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/load.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/load.png b/app/src/main/res/mipmap-xxhdpi/load.png new file mode 100644 index 0000000..28f76e8 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/load.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/load.png b/app/src/main/res/mipmap-xxxhdpi/load.png new file mode 100644 index 0000000..28f76e8 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/load.png differ