diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f4eae2a..dbc3e42 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -31,7 +31,13 @@ - + + + + + + + @@ -53,6 +59,9 @@ + () { + lateinit var adaper: BeginGridAdaper + lateinit var detailBean: DetailActivityBean + lateinit var future: ScheduledFuture<*> + + companion object { + val ID = "id" + val DATA = "data" + fun startBegin(activity: Activity, id: String) { + val intent = Intent(activity, BeginActivity::class.java) + val bundle = Bundle() + bundle.putString(ID, id) + intent.putExtra(DATA, bundle) + activity.startActivity(intent) + } + } + + override fun getContentViewResId(): Int? { + return R.layout.activity_begin + } + + override fun initStart() { + } + + override fun initView() { + initPresnter() + } + + override fun initData() { + p.getActivityDetail(intent.getBundleExtra(DATA).getString(ID)) + begin_back.setOnClickListener { + finish() + } + begin_start.setOnClickListener { + if (detailBean.activityType == TIMING) { + //定时计数 + var num = detailBean.activityValue + future = ThreadPoolUtil.getSingleton().scheduleWithFixedDelayMain({ + if (num <= 0) { + future.cancel(false) + return@scheduleWithFixedDelayMain + } + num-- + begin_type.text = TIMING_NAME + ": " + num + " 秒" + }, 0, 1000) + + } + + } + } + + fun activityDetailResult(bean: DetailActivityBean) { + detailBean = bean + begin_name.text = bean.activityName + if (detailBean.activityType == TIMING) { + begin_type.text = TIMING_NAME + ": " + bean.activityValue + " 秒" + } else { + begin_type.text = NUMBER_NAME + ": " + bean.activityValue + " 个" + } + beginList.layoutManager = GridLayoutManager(this, 4) + adaper = BeginGridAdaper(this, bean.candidates[0]) + beginList.adapter = adaper + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/skipping/activity/begin/BeginGridAdaper.kt b/app/src/main/java/com/skipping/activity/begin/BeginGridAdaper.kt new file mode 100644 index 0000000..8fcd75b --- /dev/null +++ b/app/src/main/java/com/skipping/activity/begin/BeginGridAdaper.kt @@ -0,0 +1,61 @@ +package com.skipping.activity.begin + +import android.content.Context +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.RelativeLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.libs.utils.LogUtil +import com.skipping.* +import com.skipping.net.ActivityBean +import com.skipping.net.DetailActivityBean +import com.skipping.utils.DateUtils + +/** + * @author Ming + * 3/25/22 + * + */ +class BeginGridAdaper(context: Context, list: List) : RecyclerView.Adapter() { + var list = list + var context = context + lateinit var onClick: (bean: DetailActivityBean.CandidatesBean) -> Unit + + fun addData(list: List) { + this.list += list + notifyDataSetChanged() + } + + fun setData(list: List) { + this.list = list + notifyDataSetChanged() + } + + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BeginGridAdaper.Holder { + return Holder(LayoutInflater.from(context).inflate(R.layout.begin_item, parent, false)) + } + + override fun onBindViewHolder(holder: BeginGridAdaper.Holder, position: Int) { + holder.begin_item_name.text = list[position].name + holder.begin_item_id.text = list[position].studentID + } + + override fun getItemCount(): Int { + return list.size + } + + class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) { + var begin_item_name = itemView.findViewById(R.id.begin_item_name) + var begin_item_id = itemView.findViewById(R.id.begin_item_id) + + } + + 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/begin/BeginPresenter.kt b/app/src/main/java/com/skipping/activity/begin/BeginPresenter.kt new file mode 100644 index 0000000..9fa3330 --- /dev/null +++ b/app/src/main/java/com/skipping/activity/begin/BeginPresenter.kt @@ -0,0 +1,36 @@ +package com.skipping.activity.begin + +import android.os.Parcel +import android.os.Parcelable +import com.libs.fragment.BasePresenter +import com.libs.network.CallBack +import com.libs.network.Concise +import com.libs.utils.ToastUtil +import com.skipping.ACCOUNT +import com.skipping.BASE_URL +import com.skipping.PASSWORD +import com.skipping.TOKEN +import com.skipping.activity.IView +import com.skipping.net.* +import com.tencent.mmkv.MMKV + +/** + * @author Ming + * 3/24/22 + * + */ +class BeginPresenter() : BasePresenter() { + val mmkv = MMKV.defaultMMKV() + val concise: Concise = object : Concise(BASE_URL) {}.addHeader("Token", mmkv?.decodeString(TOKEN)).build() as Concise + + fun getActivityDetail(id: String) { + concise.request(v, concise.api.detailActivity(id), object : CallBack>{ + override fun onSuccess(k: BaseBean?) { + v.activityDetailResult(k?.data!!) + } + + override fun onFailed(e: Throwable?) { + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/skipping/activity/detail/DetailActivity.java b/app/src/main/java/com/skipping/activity/detail/DetailActivity.java index bcc0ca6..82ed4ec 100644 --- a/app/src/main/java/com/skipping/activity/detail/DetailActivity.java +++ b/app/src/main/java/com/skipping/activity/detail/DetailActivity.java @@ -52,7 +52,7 @@ public class DetailActivity extends BaseActivity { @Override protected void initData() { - connectManager = new ConnectManager(this); +// connectManager = new ConnectManager(this,new ConnectManager.DeviceHandler()); String id = (String) getIntent().getBundleExtra("id").get("id"); recyclerview.setLayoutManager(new LinearLayoutManager(this)); adapter = new DetailAdapter(recyclerview); 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 9adf677..bb79afe 100644 --- a/app/src/main/java/com/skipping/activity/home/HomeActivity.kt +++ b/app/src/main/java/com/skipping/activity/home/HomeActivity.kt @@ -2,14 +2,12 @@ package com.skipping.activity.home import android.app.Activity import android.content.Intent -import android.view.DragEvent import android.view.View import androidx.core.content.ContextCompat import androidx.core.view.GravityCompat import androidx.drawerlayout.widget.DrawerLayout import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.libs.fragment.BaseActivity import com.libs.utils.ActivityManager import com.libs.utils.LogUtil @@ -17,6 +15,7 @@ import com.libs.utils.ToastUtil 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 @@ -41,6 +40,7 @@ class HomeActivity : BaseActivity() { var choseCla: GradleBean? = null lateinit var adaper: HomeGridAdaper var position = 0 + val layoutManager = GridLayoutManager(this, 3) companion object { fun startHome(activity: Activity) { @@ -65,7 +65,7 @@ class HomeActivity : BaseActivity() { create_activity.setOnClickListener { drawerlayout.openDrawer(GravityCompat.START) } - p.getActivityList() + p.getActivityList(1) p.getClassList() choseClass.setOnClickListener { bubbleWindow.show(chooseIV) @@ -89,7 +89,6 @@ class HomeActivity : BaseActivity() { } }) - ok_btn.setOnClickListener { if (choseCla == null) { ToastUtil.longToast("请选择班级") @@ -129,7 +128,9 @@ class HomeActivity : BaseActivity() { homeTitle.text = "跳绳数量" } - refreshLayout.setOnRefreshListener { p.getActivityList() } + refreshLayout.setOnRefreshListener { + p.getActivityList(1) + } recyclerview.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { @@ -137,6 +138,13 @@ class HomeActivity : BaseActivity() { refreshLayout.setEnabled(recyclerView.getChildCount() == 0 || recyclerView.getChildAt(0).getTop() >= 0) } }) + recyclerview.setOnScrollChangeListener(object : View.OnScrollChangeListener { + override fun onScrollChange(v: View?, scrollX: Int, scrollY: Int, oldScrollX: Int, oldScrollY: Int) { + if (layoutManager.findLastCompletelyVisibleItemPosition() >= 8 && p.loadBoolean) { + p.getActivityList(p.page + 1) + } + } + }) } override fun initStart() { @@ -144,15 +152,24 @@ class HomeActivity : BaseActivity() { } - fun showList(list: List) { - if(refreshLayout.isRefreshing){ + fun showList(page: Int, list: List) { + LogUtil.e(page, list.size) + if (refreshLayout.isRefreshing) { refreshLayout.isRefreshing = false } + if (page != 1) { + adaper.addData(list) + return + } if (!::adaper.isInitialized) { - recyclerview.layoutManager = GridLayoutManager(this, 3) + recyclerview.layoutManager = layoutManager adaper = HomeGridAdaper(this, list) - adaper.setOnItemClickListener { - PerformActivity.startActivity(this, it.id.toString(), DateUtils.dealDateFormat(it.createdAt)) + adaper.setOnItemChangeClickListener { + LogUtil.e("111111") +// PerformActivity.startActivity(this, it.id.toString(), DateUtils.dealDateFormat(it.createdAt)) + } + adaper.setOnItemStartClickListener { + BeginActivity.startBegin(this, it.id.toString()) } recyclerview.adapter = adaper } else { @@ -180,7 +197,7 @@ class HomeActivity : BaseActivity() { } fun addActivityResult() { - p.getActivityList() + p.getActivityList(1) } 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 c1af76e..6de3445 100644 --- a/app/src/main/java/com/skipping/activity/home/HomeGridAdaper.kt +++ b/app/src/main/java/com/skipping/activity/home/HomeGridAdaper.kt @@ -1,15 +1,15 @@ package com.skipping.activity.home import android.content.Context +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.RelativeLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView -import com.skipping.NUMBER_NAME -import com.skipping.R -import com.skipping.TIMING -import com.skipping.TIMING_NAME +import com.libs.utils.LogUtil +import com.skipping.* import com.skipping.net.ActivityBean import com.skipping.utils.DateUtils @@ -21,8 +21,13 @@ import com.skipping.utils.DateUtils class HomeGridAdaper(context: Context, list: List) : RecyclerView.Adapter() { var list = list var context = context - lateinit var onClick: (bean: ActivityBean) -> Unit + lateinit var onClickChange: (bean: ActivityBean) -> Unit + lateinit var onClickStart: (bean: ActivityBean) -> Unit + fun addData(list: List) { + this.list += list + notifyDataSetChanged() + } fun setData(list: List) { this.list = list @@ -40,11 +45,25 @@ class HomeGridAdaper(context: Context, list: List) : RecyclerView. holder.className.text = list[position].id.toString() if (list[position].activityType == TIMING) { holder.status.text = TIMING_NAME + holder.gridItemNum.text = list[position].value.toString() + " 秒" } else { holder.status.text = NUMBER_NAME + holder.gridItemNum.text = list[position].value.toString() + " 个" } - if (onClick != null) { - holder.itemView.setOnClickListener { onClick.invoke(list[position]) } + if (onClickChange != null) { + holder.gridItemChangeRL.setOnClickListener { onClickChange.invoke(list[position]) } + + } + if (onClickStart != null) { + holder.gridItemStartRL.setOnClickListener { onClickStart.invoke(list[position]) } + } + + if (list[position].status == UNFINISHED) { + holder.gridItemChange.setBackgroundResource(R.drawable.grid_chengji_change) + holder.gridItemChange.text = "编辑" + } else { + holder.gridItemChange.setBackgroundResource(R.drawable.grid_chengji) + holder.gridItemChange.text = "成绩" } } @@ -57,9 +76,18 @@ class HomeGridAdaper(context: Context, list: List) : RecyclerView. var time = itemView.findViewById(R.id.time) var className = itemView.findViewById(R.id.className) var status = itemView.findViewById(R.id.status) + var gridItemChange = itemView.findViewById(R.id.gridItemChange) + var gridItemStart = itemView.findViewById(R.id.gridItemStart) + var gridItemChangeRL = itemView.findViewById(R.id.gridItemChangeRL) + var gridItemStartRL = itemView.findViewById(R.id.gridItemStartRL) + var gridItemNum = itemView.findViewById(R.id.gridItemNum) } - fun setOnItemClickListener(onClick: (bean: ActivityBean) -> Unit) { - this.onClick = onClick + fun setOnItemChangeClickListener(onClickChange: (bean: ActivityBean) -> Unit) { + this.onClickChange = onClickChange + } + + fun setOnItemStartClickListener(onClickStart: (bean: ActivityBean) -> Unit) { + this.onClickStart = onClickStart } } \ No newline at end of file diff --git a/app/src/main/java/com/skipping/activity/home/HomePresenter.kt b/app/src/main/java/com/skipping/activity/home/HomePresenter.kt index 470ff26..5ee5306 100644 --- a/app/src/main/java/com/skipping/activity/home/HomePresenter.kt +++ b/app/src/main/java/com/skipping/activity/home/HomePresenter.kt @@ -1,16 +1,11 @@ package com.skipping.activity.home -import android.text.Editable import com.libs.fragment.BasePresenter import com.libs.network.CallBack import com.libs.network.Concise -import com.libs.utils.LogUtil import com.libs.utils.ToastUtil -import com.skipping.ACCOUNT import com.skipping.BASE_URL -import com.skipping.PASSWORD import com.skipping.TOKEN -import com.skipping.activity.IView import com.skipping.net.* import com.tencent.mmkv.MMKV @@ -22,21 +17,26 @@ import com.tencent.mmkv.MMKV class HomePresenter() : BasePresenter() { val mmkv = MMKV.defaultMMKV() val concise: Concise = object : Concise(BASE_URL) {}.addHeader("Token", mmkv?.decodeString(TOKEN)).build() as Concise + var loadBoolean = true + var page = 1 - fun getActivityList() { + fun getActivityList(page: Int) { + this.page = page val bean = ActivityReqBean() - bean.index = 1 - bean.pageSize = 12 + loadBoolean = false + bean.index = page + bean.pageSize = 15 concise.request(v, concise.api.getActivityList(bean), object : CallBack>> { override fun onSuccess(k: BaseBean>?) { + loadBoolean = k?.data?.size == 15 if (k != null) { - v.showList(k.data) + v.showList(page, k.data) } } override fun onFailed(e: Throwable?) { + loadBoolean = false } - }) } diff --git a/app/src/main/java/com/skipping/fragment/pair/DeviceBean.kt b/app/src/main/java/com/skipping/fragment/pair/DeviceBean.kt new file mode 100644 index 0000000..6e312fd --- /dev/null +++ b/app/src/main/java/com/skipping/fragment/pair/DeviceBean.kt @@ -0,0 +1,11 @@ +package com.skipping.fragment.pair + +/** + * @author Ming + * 3/27/22 + * + */ +class DeviceBean { + var id: Int? = null + var mac: String? = null +} \ 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 90ad28d..d565acb 100644 --- a/app/src/main/java/com/skipping/fragment/pair/PairFragment.kt +++ b/app/src/main/java/com/skipping/fragment/pair/PairFragment.kt @@ -1,10 +1,18 @@ 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 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.fragment_pair.* /** @@ -14,11 +22,16 @@ import kotlinx.android.synthetic.main.fragment_pair.* */ class PairFragment : BaseFragment() { var position = 0 + lateinit var manager: ConnectManager + override fun getLayoutId(): Int { return R.layout.fragment_pair; } override fun initView(view: View?, savedInstanceState: Bundle?) { + pairStatus.setOnClickListener { + manager.pairDevice(1) + } pair_btn.setOnClickListener { if (position == 0) { @@ -44,5 +57,16 @@ class PairFragment : BaseFragment() { } override fun initData() { + manager = ConnectManager.getSingleton(activity) + } + + override fun onResume() { + super.onResume() + manager.resume() + } + + override fun onPause() { + super.onPause() + manager.pause() } } \ No newline at end of file diff --git a/app/src/main/java/com/skipping/utils/ConnectManager.java b/app/src/main/java/com/skipping/utils/ConnectManager.java index fb6aadc..74183db 100644 --- a/app/src/main/java/com/skipping/utils/ConnectManager.java +++ b/app/src/main/java/com/skipping/utils/ConnectManager.java @@ -37,13 +37,26 @@ public class ConnectManager { private LoopMini loopMax; private Set loopDeviceSet = new HashSet<>(); private LoopDevice loopDevice; - private EditText editText; private LoopHost loopHost; private Activity activity; - private MyHandler mHandler; + private Handler mHandler; private int position; private ScheduledFuture scheduledFuture; - private Button btn, btn2, btn3, btn4, btn5; + private static volatile ConnectManager connectManager; + + public static ConnectManager getSingleton(Activity activity) { + if (connectManager == null) { + synchronized (ThreadPoolUtil.class) { + if (connectManager == null) { + connectManager = new ConnectManager(activity); + } + } + } + return connectManager; + } + + + private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -69,7 +82,7 @@ public class ConnectManager { public ConnectManager(Activity activity) { this.activity = activity; - mHandler = new MyHandler(); + mHandler = new DeviceHandler(); } private final ServiceConnection usbConnection = new ServiceConnection() { @@ -77,6 +90,13 @@ public class ConnectManager { public void onServiceConnected(ComponentName arg0, IBinder arg1) { loopMax = ((LoopMini.UsbBinder) arg1).getService(); loopMax.setHandler(mHandler); + ThreadPoolUtil.getSingleton().scheduleMain(new Runnable() { + @Override + public void run() { + loopMax.getHostInfo(); + loopMax.openPairMode(); + } + },1000); } @Override @@ -156,10 +176,6 @@ public class ConnectManager { }, 0, 10); } - public interface ConnectInterface { - void connect(LoopDevice loopDevice); - } - public void resume(){ setFilters(); @@ -193,7 +209,7 @@ public class ConnectManager { } - private class MyHandler extends Handler { + public class DeviceHandler extends Handler { @Override public void handleMessage(Message msg) { super.handleMessage(msg); diff --git a/app/src/main/res/drawable/grid_24right.xml b/app/src/main/res/drawable/grid_24right.xml new file mode 100644 index 0000000..ed3d80b --- /dev/null +++ b/app/src/main/res/drawable/grid_24right.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/grid_chengji_change.xml b/app/src/main/res/drawable/grid_chengji_change.xml new file mode 100644 index 0000000..47f69b9 --- /dev/null +++ b/app/src/main/res/drawable/grid_chengji_change.xml @@ -0,0 +1,6 @@ + + + + + \ 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 new file mode 100644 index 0000000..863055a --- /dev/null +++ b/app/src/main/res/layout/activity_begin.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index b64182f..c24e8b4 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -15,6 +15,8 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_pair.xml b/app/src/main/res/layout/fragment_pair.xml index a5e2c81..552b2dd 100644 --- a/app/src/main/res/layout/fragment_pair.xml +++ b/app/src/main/res/layout/fragment_pair.xml @@ -10,7 +10,7 @@ android:layout_width="match_parent" android:layout_height="180dp" android:orientation="vertical" - android:paddingLeft="90dp" + android:paddingLeft="70dp" android:paddingRight="90dp"> + android:textColor="@color/color_50_FF0000" + android:textSize="20dp" /> @@ -114,9 +116,9 @@ diff --git a/app/src/main/res/layout/grid_item.xml b/app/src/main/res/layout/grid_item.xml index a52823c..7c2d569 100644 --- a/app/src/main/res/layout/grid_item.xml +++ b/app/src/main/res/layout/grid_item.xml @@ -33,7 +33,6 @@ android:textSize="28dp" /> - @@ -110,37 +111,52 @@ + android:paddingLeft="20dp"> - + android:paddingTop="20dp" + android:paddingBottom="20dp"> - + + - + android:paddingTop="20dp" + android:paddingBottom="20dp"> + + + +