diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index f1066eb..806a7d2 100644 Binary files a/app/src/main/ic_launcher-playstore.png and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/com/xscm/midi/LaunchPageActivity.java b/app/src/main/java/com/xscm/midi/LaunchPageActivity.java index 20d7961..637d00c 100644 --- a/app/src/main/java/com/xscm/midi/LaunchPageActivity.java +++ b/app/src/main/java/com/xscm/midi/LaunchPageActivity.java @@ -17,7 +17,7 @@ import com.xscm.moduleutil.utils.ARouteConstants; import com.xscm.moduleutil.utils.SpUtil; import com.xscm.midi.databinding.ActivityLaunchPageBinding; -public class LaunchPageActivity extends BaseAppCompatActivity { +public class LaunchPageActivity extends BaseAppCompatActivity { private Handler handler; private PolicyDialog policyDialog; @@ -28,12 +28,18 @@ public class LaunchPageActivity extends BaseAppCompatActivity mUploadMessage; private ValueCallback mUploadCallbackAboveL; private final int REQUEST_FILE_PICKER = 1; @@ -53,6 +62,8 @@ public class WebViewActivity extends BaseAppCompatActivity { Window window = getWindow(); window.setLayout((int) (ScreenUtils.getScreenWidth() * 315.f / 375), WindowManager.LayoutParams.WRAP_CONTENT); mBinding.ivClose.setOnClickListener(v -> dismiss()); - mBinding.tvIKnow.setOnClickListener(v -> dismiss()); + mBinding.tvIKnow.setOnClickListener(v -> { + + ARouter.getInstance().build(ARouteConstants.UNDERAGE_ACTIVITY).withInt("type", 0).navigation(); + +// ARouter.getInstance().build(ARouteConstants.H5).withString("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/feedback/teenage?id=" + SpUtil.getToken()).navigation(); +// dismiss(); + }); mBinding.tvOpen.setOnClickListener(v -> { // if (teenagerInfo.getHad_password() == 1) { @@ -49,7 +55,7 @@ public class YouthModelDialog extends BaseDialog { // } else { // ARouter.getInstance().build(ARouteConstants.SET_YOUTH_PWD_ACTIVITY).withInt("type", SetYouthPasswordActivity.SET_TYPE).navigation(); // } - ARouter.getInstance().build(ARouteConstants.H5).withString("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url()+ "/web/index.html#/pages/feedback/teenage?id="+ SpUtil.getToken()).navigation(); + ARouter.getInstance().build(ARouteConstants.H5).withString("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/feedback/teenage?id=" + SpUtil.getToken()).navigation(); dismiss(); }); diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/dialog/giftLottery/GiftLotteryDialog.java b/moduleUtil/src/main/java/com/xscm/moduleutil/dialog/giftLottery/GiftLotteryDialog.java index 8d7241a..35ee946 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/dialog/giftLottery/GiftLotteryDialog.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/dialog/giftLottery/GiftLotteryDialog.java @@ -25,6 +25,7 @@ import com.alibaba.android.arouter.launcher.ARouter; import com.xscm.moduleutil.R; import com.xscm.moduleutil.base.BaseMvpDialogFragment; import com.xscm.moduleutil.bean.GiftBean; +import com.xscm.moduleutil.bean.MqttXlhEnd; import com.xscm.moduleutil.bean.RoomMessageEvent; import com.xscm.moduleutil.bean.WalletBean; import com.xscm.moduleutil.bean.blindboxwheel.BlindBoxBean; @@ -36,6 +37,7 @@ import com.xscm.moduleutil.event.LotteryEvent; import com.xscm.moduleutil.utils.ARouteConstants; import com.xscm.moduleutil.widget.CircularProgressView; import com.xscm.moduleutil.widget.GiftCardView; +import com.xscm.moduleutil.widget.floatingView.IFloatingView; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -131,7 +133,9 @@ public class GiftLotteryDialog extends BaseMvpDialogFragment + app:layout_constraintTop_toBottomOf="@+id/tv_content" + android:visibility="invisible"/> isExit = false, 2000); } else { + exitApp(); // 退出应用 - finish(); - android.os.Process.killProcess(android.os.Process.myPid()); - System.exit(0); +// finishAll(); +// android.os.Process.killProcess(android.os.Process.myPid()); +// System.exit(0); } } }); @@ -224,14 +225,39 @@ public class MainActivity extends BaseMvpActivity isExit = false, 2000); } else { // 退出应用 - finish(); - android.os.Process.killProcess(android.os.Process.myPid()); - System.exit(0); + exitApp(); + } return true; // 消费事件 } return super.onKeyDown(keyCode, event); } + + /** + * 优雅地退出应用,避免闪屏 + */ + private void exitApp() { + // 清理资源 + if (appUpdateDialog != null && appUpdateDialog.isShowing()) { + appUpdateDialog.dismiss(); + appUpdateDialog = null; + } + + // 移除所有回调 + if (mHandler != null) { + mHandler.removeCallbacksAndMessages(null); + } + + // 关闭所有Activity + finishAffinity(); + + // 延迟杀死进程,确保界面完全关闭 + new Handler().postDelayed(() -> { + android.os.Process.killProcess(android.os.Process.myPid()); + System.exit(0); + }, 100); + } + @Override protected void initView() { super.initView(); diff --git a/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.java b/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.java index 58d370a..b6150f9 100644 --- a/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.java +++ b/moduleroom/src/main/java/com/example/moduleroom/activity/RoomActivity.java @@ -558,6 +558,7 @@ public class RoomActivity extends BaseMvpActivity { @@ -307,7 +314,8 @@ public class RoomSettingFragment extends BaseMvpDialogFragment { + if (isAdded() && getActivity() != null) { + getChildFragmentManager() + .beginTransaction() + .replace(R.id.container, ktvFragment) + .commitAllowingStateLoss(); + } + }); + } } } @@ -243,10 +256,23 @@ public class RoomFragment extends BaseMvpFragment { + if (isAdded() && getActivity() != null) { + getChildFragmentManager() + .beginTransaction() + .replace(R.id.container, roomAuctionFragment) + .commitAllowingStateLoss(); + } + }); + } } } @@ -260,11 +286,23 @@ public class RoomFragment extends BaseMvpFragment { + if (isAdded() && getActivity() != null) { + getChildFragmentManager() + .beginTransaction() + .replace(R.id.container, friendshipRoomFragment) + .commitAllowingStateLoss(); + } + }); + } } } @@ -278,11 +316,23 @@ public class RoomFragment extends BaseMvpFragment { + if (isAdded() && getActivity() != null) { + getChildFragmentManager() + .beginTransaction() + .replace(R.id.container, roomCabinFragment) + .commitAllowingStateLoss(); + } + }); + } } } @@ -473,7 +523,7 @@ public class RoomFragment extends BaseMvpFragment { + if (isAdded() && getActivity() != null) { + performLoadSubFragment(qxRoomSeatViewType); + } + }); + } + return; + } + + performLoadSubFragment(qxRoomSeatViewType); + +// if (mRoomInfoResp == null || mRoomInfoResp.getRoom_info() == null) return; +// String typeId = mRoomInfoResp.getRoom_info().getType_id(); +// String labelId = mRoomInfoResp.getRoom_info().getLabel_id(); // -// case KTV: -// if (ktvFragment != null && ktvFragment.isAdded()) { -// ktvFragment.roomInfoUpdate(mRoomInfoResp); -// }else { -// setqxRoomSeatViewType(qxRoomSeatViewType); -// } -// break; -// case AUCTION: -// if (roomAuctionFragment != null && roomAuctionFragment.isAdded()) { -// roomAuctionFragment.roomInfoUpdate(mRoomInfoResp); -// }else { -// setqxRoomSeatViewType(qxRoomSeatViewType); -// } -// break; -// case CABIN: -// if (roomCabinFragment != null && roomCabinFragment.isAdded()) { -// roomCabinFragment.roomInfoUpdate(mRoomInfoResp); -// }else { -// setqxRoomSeatViewType(qxRoomSeatViewType); -// } -// break; -// case FRIEND: -// if (friendshipRoomFragment != null && friendshipRoomFragment.isAdded()) { -// friendshipRoomFragment.roomInfoUpdate(mRoomInfoResp); -// }else { -// setqxRoomSeatViewType(qxRoomSeatViewType); -// } -// break; -// case NORMAL: -// if (singSongFragment != null && singSongFragment.isAdded()) { -// singSongFragment.roomInfoUpdate(mRoomInfoResp); -// }else { -// setqxRoomSeatViewType(qxRoomSeatViewType); -// } -// break; -// default: -// break; +// Fragment newFragment = null; +// +// if ("1".equals(typeId)) { +// if ("1".equals(labelId)) { +// singSongFragment = SingSongFragment.newInstance(); +// newFragment = singSongFragment; +// } else if ("2".equals(labelId)) { +// ktvFragment = RoomKtvFragment.newInstance(); +// newFragment = ktvFragment; +// } +// } else if ("2".equals(typeId)) { +// roomAuctionFragment = RoomAuctionFragment.newInstance(); +// newFragment = roomAuctionFragment; +// } else if ("6".equals(typeId)) { +// roomCabinFragment = RoomCabinFragment.newInstance(); +// newFragment = roomCabinFragment; +// setviewyc(); +// } else if ("3".equals(typeId)) { +// if ("1".equals(labelId)) { +// singSongFragment = SingSongFragment.newInstance(); +// newFragment = singSongFragment; +// } else if ("2".equals(labelId)) { +// ktvFragment = RoomKtvFragment.newInstance(); +// newFragment = ktvFragment; +// } +// } else if ("4".equals(typeId)) { +// if ("1".equals(labelId)) { +// singSongFragment = SingSongFragment.newInstance(); +// newFragment = singSongFragment; +// } else if ("2".equals(labelId)) { +// ktvFragment = RoomKtvFragment.newInstance(); +// newFragment = ktvFragment; +// } +// } else if ("7".equals(typeId)) { +// friendshipRoomFragment = FriendshipRoomFragment.newInstance(); +// newFragment = friendshipRoomFragment; +// }else if ("8".equals(typeId)){ +// if ("1".equals(labelId)) { +// singSongFragment = SingSongFragment.newInstance(); +// newFragment = singSongFragment; +// } else if ("2".equals(labelId)) { +// ktvFragment = RoomKtvFragment.newInstance(); +// newFragment = ktvFragment; +// } // } +// +// if (newFragment != null) { +// replaceNestedFragment(newFragment, R.id.container); +// } +// +// setview(); +// +// if (mRoomInfoResp.getUser_info().getPit_number() != 0) { +// AgoraManager.getInstance(getActivity()).muteLocalAudioStream(false); +// ((RoomActivity) getActivity()).switchMic(2); +// } else { +// AgoraManager.getInstance(getActivity()).muteLocalAudioStream(true); +// } +// // 延迟执行更新,确保 Fragment 已经添加完成 +//// if (getActivity() != null && isAdded()) { +//// getView().post(() -> updateChildFragmentViews()); +//// } +// +//// if (getActivity() instanceof RoomActivity) { +//// if (mRoomInfoResp.getRoom_info().getType_id().equals("6")) { +//// ((RoomActivity) getActivity()).changeBackground(com.xscm.moduleutil.R.mipmap.cabin_bj); +//// ((RoomActivity) getActivity()).setvisibTop(false); +//// } else if (mRoomInfoResp.getRoom_info().getType_id().equals("7")) { +//// if (mRoomInfoResp.getRoom_info().getRoom_background() == null || mRoomInfoResp.getRoom_info().getRoom_background().equals("")) { +//// ((RoomActivity) getActivity()).changeBackground(com.xscm.moduleutil.R.mipmap.jiaoy_bj); +//// } else { +//// ((RoomActivity) getActivity()).changeBackgroundColor(mRoomInfoResp.getRoom_info().getRoom_background()); +//// } +//// ((RoomActivity) getActivity()).setvisibTop(true); +//// } else { +//// ((RoomActivity) getActivity()).changeBackgroundColor(mRoomInfoResp.getRoom_info().getRoom_background()); +//// ((RoomActivity) getActivity()).setvisibTop(true); +//// } +//// } +// +// updateChildFragmentViews(); + } + private void performLoadSubFragment(QXRoomSeatViewType qxRoomSeatViewType) { + this.qxRoomSeatViewType = qxRoomSeatViewType; if (mRoomInfoResp == null || mRoomInfoResp.getRoom_info() == null) return; String typeId = mRoomInfoResp.getRoom_info().getType_id(); String labelId = mRoomInfoResp.getRoom_info().getLabel_id(); @@ -637,6 +752,14 @@ public class RoomFragment extends BaseMvpFragment updateChildFragmentViews()); -// } - -// if (getActivity() instanceof RoomActivity) { -// if (mRoomInfoResp.getRoom_info().getType_id().equals("6")) { -// ((RoomActivity) getActivity()).changeBackground(com.xscm.moduleutil.R.mipmap.cabin_bj); -// ((RoomActivity) getActivity()).setvisibTop(false); -// } else if (mRoomInfoResp.getRoom_info().getType_id().equals("7")) { -// if (mRoomInfoResp.getRoom_info().getRoom_background() == null || mRoomInfoResp.getRoom_info().getRoom_background().equals("")) { -// ((RoomActivity) getActivity()).changeBackground(com.xscm.moduleutil.R.mipmap.jiaoy_bj); -// } else { -// ((RoomActivity) getActivity()).changeBackgroundColor(mRoomInfoResp.getRoom_info().getRoom_background()); -// } -// ((RoomActivity) getActivity()).setvisibTop(true); -// } else { -// ((RoomActivity) getActivity()).changeBackgroundColor(mRoomInfoResp.getRoom_info().getRoom_background()); -// ((RoomActivity) getActivity()).setvisibTop(true); -// } -// } updateChildFragmentViews(); } - /// 这是在进入电影放的时候,隐藏下面的和排麦视图 public void setviewyc() { // mBinding.ivSoundEffects.setVisibility(View.GONE); @@ -693,20 +794,36 @@ public class RoomFragment extends BaseMvpFragment { + if (isAdded() && getActivity() != null) { + performFragmentReplacement(newFragment, containerId); + } + }); + } + return; + } + + performFragmentReplacement(newFragment, containerId); + } + + private void performFragmentReplacement(@NonNull Fragment newFragment, int containerId) { String tag = newFragment.getClass().getSimpleName(); // 使用类名作为 tag FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); - // 可选:检查是否已有相同类型的 Fragment -// Fragment existing = getChildFragmentManager().findFragmentById(containerId); -// if (existing != null) { -// transaction.remove(existing); -// } callSpecificDestroyMethod(newFragment); transaction.replace(containerId, newFragment, tag); transaction.commitAllowingStateLoss(); - } - /** * 调用特定Fragment的销毁方法 * @@ -790,7 +907,7 @@ public class RoomFragment extends BaseMvpFragment { - + private static final String PREF_UNDERAGE_PASSWORD = "underagePassword"; + private String firstPassword = ""; // 用于存储首次输入的密码 + private boolean isConfirming = false; // 标识是否处于确认密码阶段 + @Autowired + public int type ; // 0-设置密码模式,1-验证密码模式 @Override protected void initData() { - } + + @Override protected void initView() { super.initView(); mBinding.topBar.setTitle("未成年人模式"); mBinding.text.setTextColor(ColorManager.getInstance().getPrimaryColorInt()); + + if (type == 1) { + // 验证密码模式 + mBinding.meMim.setText("请输入监护密码"); + mBinding.text.setVisibility(View.GONE); + } else { + // 设置密码模式 + mBinding.meMim.setText("请输入监护密码"); + mBinding.text.setVisibility(android.view.View.GONE); + } + + mBinding.verificationcodeview.setOnInputListener(new SplitEditText.OnInputListener() { + @Override + public void onInputFinished(String content) { + // 当输入完成4位数字时自动处理 + handlePasswordInput(content); + } + + @Override + public void onInputChanged(String text) { + + } + }); + } + + /** + * 处理密码输入完成后的逻辑 + * + * @param password 输入的密码 + */ + private void handlePasswordInput(String password) { + + if (type == 1) { + // 验证密码模式 + verifyPassword(password); + } else { + // 设置密码模式 + setupPassword(password); + } + +// if (!isConfirming) { +// // 第一次输入密码,保存并清空输入框 +// firstPassword = password; +// isConfirming = true; +// +// // 清空输入框 +// mBinding.verificationcodeview.setText(""); +// +// // 更改提示文字 +// mBinding.meMim.setText("请再次输入监护密码"); +// } else { +// // 第二次输入密码,进行对比 +// if (firstPassword.equals(password)) { +// // 密码一致,保存到本地并跳转页面 +// savePassword(password); +// navigateToNextPage(); +// } else { +// // 密码不一致,提示并重新设置 +// ToastUtils.showShort("两次输入的密码不一致,请重新设置"); +// resetPasswordInput(); +// } +// } + } + /** + * 验证密码(type=1时使用) + * @param inputPassword 用户输入的密码 + */ + private void verifyPassword(String inputPassword) { + // 从本地获取已保存的密码 + String savedPassword = SpUtil.getUnderagePassword(); + + if (savedPassword.isEmpty()) { + // 尚未设置密码 + ToastUtils.showShort("尚未设置监护密码"); + mBinding.verificationcodeview.setText(""); // 清空输入框 + return; + } + + if (savedPassword.equals(inputPassword)) { + // 密码正确,关闭页面 +// ToastUtils.showShort("密码验证成功"); + + ARouter.getInstance().build(ARouteConstants.ME).navigation(); + finishAll(); + } else { + // 密码错误,提示并清空输入框 + ToastUtils.showShort("密码错误,请重新输入"); + mBinding.verificationcodeview.setText(""); // 清空输入框 + } + } + + /** + * 设置密码(type=0时使用) + * @param password 输入的密码 + */ + private void setupPassword(String password) { + if (!isConfirming) { + // 第一次输入密码,保存并清空输入框 + firstPassword = password; + isConfirming = true; + + // 清空输入框 + mBinding.verificationcodeview.setText(""); + + // 更改提示文字 + mBinding.meMim.setText("请再次输入监护密码"); + } else { + // 第二次输入密码,进行对比 + if (firstPassword.equals(password)) { + // 密码一致,保存到本地并跳转页面 + savePassword(password); + navigateToNextPage(); + } else { + // 密码不一致,提示并重新设置 + ToastUtils.showShort("两次输入的密码不一致,请重新设置"); + resetPasswordInput(); + } + } + } + /** + * 保存密码到本地 + * + * @param password 要保存的密码 + */ + private void savePassword(String password) { + SpUtil.setUnderagePassword(password); + } + + /** + * 重置密码输入状态 + */ + private void resetPasswordInput() { + firstPassword = ""; + isConfirming = false; + + // 清空输入框 + mBinding.verificationcodeview.setText(""); + + // 恢复提示文字 + mBinding.meMim.setText("请输入监护密码"); + } + + /** + * 跳转到下一个页面 + */ + private void navigateToNextPage() { +// ToastUtils.showShort("密码设置成功"); + + ARouter.getInstance().build(ARouteConstants.H5).withString("url", CommonAppContext.getInstance().getCurrentEnvironment().getH5Url() + "/web/index.html#/pages/feedback/teenage?id=" + SpUtil.getToken()) + .withString("type", "1").navigation(); + mBinding.verificationcodeview.setText(""); + finish(); + // 这里可以添加页面跳转逻辑 + finishAll(); } @Override diff --git a/modulevocal/src/main/res/layout/activity_underage.xml b/modulevocal/src/main/res/layout/activity_underage.xml index 2cc8d30..f528e33 100644 --- a/modulevocal/src/main/res/layout/activity_underage.xml +++ b/modulevocal/src/main/res/layout/activity_underage.xml @@ -78,13 +78,14 @@ android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="忘记密码?请联系客服" + android:text="确认" android:textColor="#0DFFB9" app:layout_constraintTop_toBottomOf="@+id/rel_code_show" android:gravity="center" android:layout_marginTop="@dimen/dp_21" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent"/> + app:layout_constraintEnd_toEndOf="parent" + android:visibility="gone"/> diff --git a/modulevocal/src/main/res/layout/fragment_vocal_range.xml b/modulevocal/src/main/res/layout/fragment_vocal_range.xml index 1515ba6..37f0846 100644 --- a/modulevocal/src/main/res/layout/fragment_vocal_range.xml +++ b/modulevocal/src/main/res/layout/fragment_vocal_range.xml @@ -33,7 +33,7 @@ android:layout_width="@dimen/dp_24" android:layout_height="@dimen/dp_24" android:layout_marginRight="@dimen/dp_11" - android:src="@mipmap/image_yq" /> + android:src="@drawable/image_yq" /> + android:src="@drawable/custom" />