diff --git a/app/src/main/java/com/yizhuan/erban/decoration/adapter/DecorationCommonAdapter.kt b/app/src/main/java/com/yizhuan/erban/decoration/adapter/DecorationCommonAdapter.kt new file mode 100644 index 000000000..c916c1c9c --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/decoration/adapter/DecorationCommonAdapter.kt @@ -0,0 +1,23 @@ +package com.yizhuan.erban.decoration.adapter + +import android.widget.ImageView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.ui.utils.load +import com.yizhuan.xchat_android_core.decoration.DecorationInfo +import com.yizhuan.xchat_android_core.room.game.GameInfo + + +open class DecorationCommonAdapter(layoutResId: Int = R.layout.item_decoration_common) : + BaseQuickAdapter(layoutResId) { + + override fun convert(helper: BaseViewHolder, item: DecorationInfo) { + helper.getView(R.id.iv_pic).load(item.pic) + helper.setText(R.id.tv_name, "${item.name}(${item.dressDay})天") + .setText(R.id.tv_price, item.dressPrice.toString()) + .setGone(R.id.tv_limit, false) + .addOnClickListener(R.id.tv_buy, R.id.tv_send) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/decoration/adapter/MyCarAdapter.java b/app/src/main/java/com/yizhuan/erban/decoration/adapter/MyCarAdapter.java index 7bf4919f4..c9c0c681e 100644 --- a/app/src/main/java/com/yizhuan/erban/decoration/adapter/MyCarAdapter.java +++ b/app/src/main/java/com/yizhuan/erban/decoration/adapter/MyCarAdapter.java @@ -37,7 +37,6 @@ public class MyCarAdapter extends BaseAdapter { .fitCenter() .into(binding.ivCarCover); - helper.addOnClickListener(R.id.tv_buy); helper.addOnClickListener(R.id.tv_used); // 倒计时 diff --git a/app/src/main/java/com/yizhuan/erban/decoration/helper/DecorationHelper.java b/app/src/main/java/com/yizhuan/erban/decoration/helper/DecorationHelper.java index b2dc471b2..1034d8ec4 100644 --- a/app/src/main/java/com/yizhuan/erban/decoration/helper/DecorationHelper.java +++ b/app/src/main/java/com/yizhuan/erban/decoration/helper/DecorationHelper.java @@ -1,7 +1,22 @@ package com.yizhuan.erban.decoration.helper; +import android.annotation.SuppressLint; +import android.content.Context; import android.text.TextUtils; +import com.yizhuan.erban.R; +import com.yizhuan.erban.common.widget.dialog.DialogManager; +import com.yizhuan.xchat_android_core.decoration.DecorationInfo; +import com.yizhuan.xchat_android_core.decoration.DecorationInfoEvent; +import com.yizhuan.xchat_android_core.decoration.DecorationModel; +import com.yizhuan.xchat_android_core.user.bean.UserInfo; +import com.yizhuan.xchat_android_core.utils.net.RxHelper; +import com.yizhuan.xchat_android_library.utils.SingleToastUtil; + +import org.greenrobot.eventbus.EventBus; + +import io.reactivex.functions.Consumer; + /** * create by lvzebiao @2019/3/21 */ @@ -28,4 +43,36 @@ public class DecorationHelper { return ""; } + @SuppressLint("CheckResult") + public static void showBuyDialog(Context context, + DialogManager dialogManager, + String targetNick, + long targetUid) { + DecorationInfo decorationInfo = EventBus.getDefault().getStickyEvent(DecorationInfoEvent.class).getDecorationInfo(); + dialogManager.showOkCancelDialog( + "赠送确认", + context.getResources().getString( + R.string.donate_decoration_info_text, + decorationInfo.getName(), + targetNick, + String.valueOf(decorationInfo.getDressDay()) + + ), + "赠送", + "取消", + true, + () -> { + dialogManager.showProgressDialog(context); + DecorationModel.INSTANCE.sendDecoration(decorationInfo.getDressType(), decorationInfo.getDressId(), targetUid) + .compose(RxHelper.bindContext(context)) + .subscribe(s -> { + dialogManager.dismissDialog(); + SingleToastUtil.showToast("赠送成功"); + }, throwable -> { + dialogManager.dismissDialog(); + SingleToastUtil.showToast(throwable.getMessage()); + }); + }); + } + } diff --git a/app/src/main/java/com/yizhuan/erban/decoration/view/CarShopFragment.java b/app/src/main/java/com/yizhuan/erban/decoration/view/CarShopFragment.java deleted file mode 100644 index 9d53c2c6f..000000000 --- a/app/src/main/java/com/yizhuan/erban/decoration/view/CarShopFragment.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.yizhuan.erban.decoration.view; - -import android.app.Activity; -import android.os.Bundle; -import androidx.recyclerview.widget.GridLayoutManager; - -import com.netease.nim.uikit.common.ui.recyclerview.decoration.SpacingDecoration; -import com.yizhuan.erban.BR; -import com.yizhuan.erban.R; -import com.yizhuan.erban.base.BaseBindingFragment; -import com.yizhuan.erban.constants.BundleKeys; -import com.yizhuan.erban.databinding.FragmentRexylerviewBindBinding; -import com.yizhuan.erban.decoration.adapter.CarShopAdapter; -import com.yizhuan.erban.decoration.viewmodel.CarShopVm; -import com.yizhuan.xchat_android_core.utils.net.DontWarnObserver; -import com.yizhuan.xchat_android_library.annatation.ActLayoutRes; -import com.yizhuan.xchat_android_library.utils.ListUtils; -import com.yizhuan.erban.ui.widget.marqueeview.Utils; -import com.yizhuan.xchat_android_core.Constants; -import com.yizhuan.xchat_android_core.decoration.car.bean.CarInfo; - -import java.util.List; - -/** - * Created by huangmeng1 on 2018/5/7. - */ -@ActLayoutRes(R.layout.fragment_rexylerview_bind) -public class CarShopFragment extends BaseBindingFragment { - private CarShopVm carShopVm; - private CarShopAdapter carShopAdapter; - - private DecorationStoreActivity activity; - - public CarShopAdapter getCarShopAdapter() { - return carShopAdapter; - } - - public static CarShopFragment newInstance(int position, String uid) { - CarShopFragment carShopFragment = new CarShopFragment(); - Bundle bundle = new Bundle(); - bundle.putInt(Constants.KEY_POSITION, position); - bundle.putString(BundleKeys.KEY_EXTRA_1, uid); - carShopFragment.setArguments(bundle); - return carShopFragment; - } - - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - this.activity = (DecorationStoreActivity) activity; - } - - @Override - public void initiate() { - carShopVm = new CarShopVm(); - if (getArguments() != null) { - carShopVm.setUid(getArguments().getString(BundleKeys.KEY_EXTRA_1)); - } - mBinding.setViewmodel(carShopVm); - - carShopAdapter = new CarShopAdapter(R.layout.item_car_shop, BR.carInfo); - carShopAdapter.setOnItemChildClickListener((adapter, view, position) -> { - if (activity != null) { - activity.showCarDetail((CarInfo) adapter.getData().get(position)); - } - }); - carShopAdapter.setOnItemClickListener((adapter, view, position) -> { - carShopAdapter.setSelectPosition(position); - carShopAdapter.notifyDataSetChanged(); - if (activity != null) { - activity.showCarPrice((CarInfo) adapter.getData().get(position)); - } - }); - carShopAdapter.setOnLoadMoreListener(() -> loadData(true, false)); - mBinding.swipeRefresh.setOnRefreshListener(() -> loadData(false, false)); - - mBinding.recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2)); - int heightSpace = Utils.dip2px(mContext, 10); - mBinding.recyclerView.setAdapter(carShopAdapter); - mBinding.recyclerView.addItemDecoration(new SpacingDecoration(heightSpace, heightSpace, true)); - - loadData(false, getArguments().getInt(Constants.KEY_POSITION) == 1); - } - - @Override - public void setUserVisibleHint(boolean isVisibleToUser) { - super.setUserVisibleHint(isVisibleToUser); - if (isVisibleToUser && activity != null) { - activity.setCar(true); - List list = carShopAdapter.getData(); - int selectPosition = carShopAdapter.getSelectPosition(); - if (!ListUtils.isListEmpty(list) && selectPosition < list.size()) { - activity.showCarPrice(list.get(selectPosition)); - } - } - } - - private boolean isLoading = false; - - private void loadData(boolean isLode, boolean isFirst) { - if (isLoading) { - return; - } - isLoading = true; - - carShopVm.loadData(isLode).compose(bindToLifecycle()) - .doAfterTerminate(() -> setUserVisibleHint(isFirst)) - .subscribe(new DontWarnObserver>() { - @Override - public void accept(List carInfos, String error) { - super.accept(carInfos, error); - isLoading = false; - } - }); - } -} diff --git a/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationCommonFragment.kt b/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationCommonFragment.kt new file mode 100644 index 000000000..9808aa890 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationCommonFragment.kt @@ -0,0 +1,105 @@ +package com.yizhuan.erban.decoration.view + +import android.os.Bundle +import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.FragmentDecorationCommonBinding +import com.yizhuan.erban.decoration.adapter.DecorationCommonAdapter +import com.yizhuan.erban.decoration.viewmodel.DecorationViewModel +import com.yizhuan.erban.ui.relation.FansListActivity +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.decoration.DecorationInfo +import com.yizhuan.xchat_android_core.decoration.DecorationInfoEvent +import com.yizhuan.xchat_android_library.annatation.ActLayoutRes +import org.greenrobot.eventbus.EventBus + +/** + * Created by huangmeng1 on 2018/5/7. + */ +@ActLayoutRes(R.layout.fragment_decoration_common) +class DecorationCommonFragment : BaseViewBindingFragment() { + + companion object { + fun newInstance(dressType: Int): DecorationCommonFragment { + val args = Bundle() + args.putInt("dressType", dressType) + val fragment = DecorationCommonFragment() + fragment.arguments = args + return fragment + } + } + + private val dressType: Int by lazy { requireArguments().getInt("dressType") } + private lateinit var rvDelegate: RVDelegate + private lateinit var decorationAdapter: DecorationCommonAdapter + private val decorationViewModel: DecorationViewModel by viewModels() + + override fun init() { + + decorationViewModel.loadingLiveData.observe(viewLifecycleOwner) { + if (it) dialogManager.showProgressDialog(mContext) + else dialogManager.dismissDialog() + } + decorationAdapter = if (dressType == DecorationStoreActivity.TAB_USER_CARD) { + DecorationCommonAdapter(R.layout.item_decoration_user_card) + } else { + DecorationCommonAdapter() + } + rvDelegate = RVDelegate.Builder() + .setAdapter(decorationAdapter) + .setRecyclerView(binding.recyclerView) + .setEmptyView(EmptyViewHelper.createEmptyView(mContext, "暂无装扮")) + .setLayoutManager( + if (dressType == DecorationStoreActivity.TAB_USER_CARD) { + LinearLayoutManager(mContext) + } else { + GridLayoutManager(mContext, 2, GridLayoutManager.VERTICAL, false) + } + ) + .build() + decorationViewModel.getDecorationInfoList(dressType) + decorationViewModel.decorationInfoListLiveData.observe(viewLifecycleOwner) { + rvDelegate.loadData(it) + } + + decorationAdapter.setOnItemChildClickListener { _, view, position -> + val decorationInfo = + decorationAdapter.getItem(position) ?: return@setOnItemChildClickListener + when (view.id) { + R.id.tv_buy -> { + dialogManager.showOkCancelDialog( + "购买确认", + mContext.resources.getString( + R.string.buy_decoration_info_text, + decorationInfo.name, + decorationInfo.dressDay.toString() + ), + "购买", + "取消", + true + ) { + decorationViewModel.buyDecoration( + decorationInfo.dressType, + decorationInfo.dressId + ) + } + } + R.id.tv_send -> { + EventBus.getDefault().postSticky(DecorationInfoEvent(decorationInfo)) + FansListActivity.start(mContext, FansListActivity.TYPE_DECORATION) + } + } + } + + } + + override fun onDestroy() { + super.onDestroy() + EventBus.getDefault().removeStickyEvent(DecorationInfoEvent::class.java) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationStoreActivity.java b/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationStoreActivity.java deleted file mode 100644 index 2aa7de6b1..000000000 --- a/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationStoreActivity.java +++ /dev/null @@ -1,494 +0,0 @@ -package com.yizhuan.erban.decoration.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.Intent; -import android.graphics.Paint; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentPagerAdapter; -import androidx.core.content.ContextCompat; - -import android.text.TextUtils; -import android.view.MotionEvent; -import android.view.View; - -import com.opensource.svgaplayer.SVGADrawable; -import com.opensource.svgaplayer.SVGAParser; -import com.opensource.svgaplayer.SVGAVideoEntity; -import com.tencent.qgame.animplayer.util.ScaleType; -import com.yizhuan.erban.R; -import com.yizhuan.erban.base.BaseBindingActivity; -import com.yizhuan.erban.databinding.ActivityDecorationStoreBinding; -import com.yizhuan.erban.decoration.helper.DecorationDialogHelper; -import com.yizhuan.erban.decoration.helper.DecorationSaleType; -import com.yizhuan.erban.decoration.view.widgets.CarMagicIndicator; -import com.yizhuan.erban.ui.user.decorationsend.DecorationSendActivity; -import com.yizhuan.erban.ui.utils.ImageLoadKt; -import com.yizhuan.erban.ui.utils.ImageLoadUtils; -import com.yizhuan.erban.ui.webview.CommonWebViewActivity; -import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper; -import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator; -import com.yizhuan.xchat_android_core.Constants; -import com.yizhuan.xchat_android_core.auth.AuthModel; -import com.yizhuan.xchat_android_core.decoration.bean.BaseDecoration; -import com.yizhuan.xchat_android_core.decoration.car.bean.CarInfo; -import com.yizhuan.xchat_android_core.decoration.headwear.bean.HeadWearInfo; -import com.yizhuan.xchat_android_core.home.bean.TabInfo; -import com.yizhuan.xchat_android_core.noble.NobleUtil; -import com.yizhuan.xchat_android_core.user.UserModel; -import com.yizhuan.xchat_android_core.user.bean.UserInfo; -import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils; -import com.yizhuan.xchat_android_library.annatation.ActLayoutRes; -import com.yizhuan.xchat_android_library.utils.SingleToastUtil; - -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import io.reactivex.functions.Consumer; - -@ActLayoutRes(R.layout.activity_decoration_store) -public class DecorationStoreActivity extends BaseBindingActivity implements CarMagicIndicator.OnItemSelectListener { - public final static int TAB_HEAD_WEAR = 0; - public final static int TAB_CAR = 1; - public final static int TAB_NAMEPLATE = 2; - private final static String IS_CHECK_MY_DECORATION = "IS_CHECK_MY_DECORATION"; - private SVGAParser mSVGAParser; - private long userId; - private boolean isCar; - private CarInfo buyCarInfo; - private HeadWearInfo wearInfo; - private UserInfo cacheLoginUserInfo; - private HeadWearFragment wearFragment; - private CarShopFragment shopFragment; - private boolean isBuy; - - public static void start(Context context, long userId) { - Intent intent = new Intent(context, DecorationStoreActivity.class); - intent.putExtra("userId", userId); - context.startActivity(intent); - } - - public static void start(Context context, long userId, int position) { - Intent intent = new Intent(context, DecorationStoreActivity.class); - intent.putExtra("userId", userId); - intent.putExtra(Constants.KEY_POSITION, position); - context.startActivity(intent); - } - - public void setCar(boolean car) { - isCar = car; - } - - @Override - protected boolean needSteepStateBar() { - return true; - } - - @SuppressLint("CheckResult") - @Override - protected void init() { - - userId = getIntent().getLongExtra("userId", 0); - int currentItem = getIntent().getIntExtra(Constants.KEY_POSITION, TAB_HEAD_WEAR); - - mBinding.setClick(this); - mSVGAParser = new SVGAParser(this); - - wearFragment = HeadWearFragment.newInstance(currentItem, userId + ""); - shopFragment = CarShopFragment.newInstance(currentItem, userId + ""); - - List tabInfoList = new ArrayList<>(2); - tabInfoList.add(new TabInfo(0, "头饰")); - tabInfoList.add(new TabInfo(1, "座驾")); - CommonNavigator commonNavigator = new CommonNavigator(this); - commonNavigator.setAdjustMode(true); - CarMagicIndicator indicator = new CarMagicIndicator(this, tabInfoList, 0); - indicator.setOnItemSelectListener(this); - commonNavigator.setAdapter(indicator); - mBinding.tabLayout.setNavigator(commonNavigator); - - ViewPagerHelper.bind(mBinding.tabLayout, mBinding.viewpager); - - mBinding.viewpager.setOffscreenPageLimit(2); - mBinding.viewpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { - @Override - public int getCount() { - return 2; - } - - @Override - public Fragment getItem(int position) { - if (position == 0) { - return wearFragment; - } else if (position == 1) { - return shopFragment; - } - return wearFragment; - } - }); - - mBinding.viewpager.setCurrentItem(currentItem); - - UserModel.get().getUserInfo(userId).subscribe(new Consumer() { - @Override - public void accept(UserInfo userInfo) throws Exception { - cacheLoginUserInfo = userInfo; - if (cacheLoginUserInfo != null) { - mBinding.setIsSelf(cacheLoginUserInfo.getUid() == AuthModel.get().getCurrentUid()); - ImageLoadUtils.loadImage(DecorationStoreActivity.this, cacheLoginUserInfo.getAvatar(), mBinding.ivAvatar); - if (cacheLoginUserInfo.getUserHeadwear() != null && !TextUtils.isEmpty(cacheLoginUserInfo.getUserHeadwear().getPic())) { - // 头饰 - NobleUtil.loadHeadWear(cacheLoginUserInfo.getUserHeadwear().getPic(), mBinding.ivHeadWear); - } else if (cacheLoginUserInfo.getNobleInfo() != null && !TextUtils.isEmpty(cacheLoginUserInfo.getNobleInfo().getHeadWear())) { - // 头饰 - NobleUtil.loadResource(cacheLoginUserInfo.getNobleInfo().getHeadWear(), mBinding.ivHeadWear); - } - } - } - }); - - - Boolean isCheckMyDecoration = (Boolean) SharedPreferenceUtils.get(DecorationStoreActivity.IS_CHECK_MY_DECORATION, true); - if (isCheckMyDecoration != null && isCheckMyDecoration) { - mBinding.tvRedTip.setVisibility(View.INVISIBLE); - } else { - mBinding.tvRedTip.setVisibility(View.VISIBLE); - } - - mBinding.rlCarDetail.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - return true; - } - }); - } - - @Override - public void onClick(View v) { - super.onClick(v); - switch (v.getId()) { - case R.id.iv_back: - finish(); - break; - case R.id.tv_edit: - startActivity(new Intent(this, MyDecorationActivity.class)); - mBinding.tvRedTip.setVisibility(View.INVISIBLE); - SharedPreferenceUtils.put(DecorationStoreActivity.IS_CHECK_MY_DECORATION, true); - break; - case R.id.tv_buy: - if (isCar && buyCarInfo != null) { - showSureDialog(DecorationSaleType.BUY_CAR); - } else if (!isCar && wearInfo != null) { - showSureDialog(DecorationSaleType.BUY_HEAD_WEAR); - } - break; - case R.id.tv_go_send: - if (isCar && buyCarInfo != null) { - DecorationSendActivity.start(this, buyCarInfo); - } else if (!isCar && wearInfo != null) { - DecorationSendActivity.start(this, wearInfo); - } - break; - case R.id.tv_send: - if (isCar && buyCarInfo != null) { - showSureDialog(DecorationSaleType.SEND_CAR); - } else if (!isCar && wearInfo != null) { - showSureDialog(DecorationSaleType.SEND_HEAD_WEAR); - } - - break; - } - } - - - private void showSureDialog(int type) { - if (cacheLoginUserInfo == null) return; - BaseDecoration decoration; - if (type == DecorationSaleType.BUY_CAR || type == DecorationSaleType.SEND_CAR) { - decoration = buyCarInfo; - } else { - decoration = wearInfo; - } - if (decoration == null) { - return; - } - DecorationDialogHelper.Options options = new DecorationDialogHelper.Builder() - .setTargetUid(cacheLoginUserInfo.getUid()) - .setNick(cacheLoginUserInfo.getNick()) - .setType(type) - .setDecoration(decoration) - .create(); - DecorationDialogHelper helper = new DecorationDialogHelper(context, getDialogManager(), options); - helper.showBuyOrDonateDialog(); - helper.setOnOpDecorationListener(new DecorationDialogHelper.OnOpDecorationListener() { - @Override - public void onBuyCarSuccess() { - // 更新商店这辆车的数据 - if (shopFragment != null && shopFragment.getCarShopAdapter() != null) - shopFragment.getCarShopAdapter().setCarInfoHasBeenBought(buyCarInfo); - - setPrice(buyCarInfo, true); - isBuy = false; - setBuyButton(isBuy); - setGoSendButton(isBuy); - - mBinding.tvRedTip.setVisibility(View.VISIBLE); - SharedPreferenceUtils.put(DecorationStoreActivity.IS_CHECK_MY_DECORATION, false); - } - - @Override - public void onBuyHeadwearSuccess() { - // 更新商店头饰的数据 - if (wearFragment != null && wearFragment.getShopAdapter() != null) { - wearFragment.getShopAdapter().setCarInfoHasBeenBought(wearInfo); - } - setPrice(wearInfo, true); - isBuy = false; - setBuyButton(isBuy); - setGoSendButton(isBuy); - - mBinding.tvRedTip.setVisibility(View.VISIBLE); - SharedPreferenceUtils.put(DecorationStoreActivity.IS_CHECK_MY_DECORATION, false); - - //更新用户信息 - UserModel.get().updateCurrentUserInfo().subscribe(); - } - }); - - } - - @Override - public void onBackPressed() { - if (mBinding.rlCarDetail.getVisibility() == View.VISIBLE) { - dismissCarDetail(); - } else { - super.onBackPressed(); - } - } - - public void showCarPrice(CarInfo carInfo) { - if (carInfo == null || carInfo.getCarId() <= 0) return; - //座驾标签 - if (carInfo.getLabelType() == CarInfo.TAG_TYPE_NORMAL) { - mBinding.llLimitContainer.setVisibility(View.GONE); - mBinding.tvOriginalPrice.setVisibility(View.GONE); - - } else if (CarInfo.TAG_TYPE_NEW == carInfo.getLabelType()) { - mBinding.llLimitContainer.setVisibility(View.GONE); - mBinding.tvOriginalPrice.setVisibility(View.GONE); - - } else if (CarInfo.TAG_TYPE_DISCOUNT == carInfo.getLabelType()) { - mBinding.llLimitContainer.setVisibility(View.GONE); - mBinding.tvOriginalPrice.setVisibility(View.VISIBLE); - setOriginalPrice(carInfo); - - } else if (CarInfo.TAG_TYPE_LIMIT == carInfo.getLabelType()) { - mBinding.llLimitContainer.setVisibility(View.VISIBLE); - mBinding.tvLimitDesc.setText(carInfo.getLimitDesc()); - if (TextUtils.isEmpty(carInfo.getRedirectLink())) { - mBinding.tvGoWeb.setVisibility(View.GONE); - } else { - mBinding.tvGoWeb.setVisibility(View.VISIBLE); - mBinding.tvGoWeb.setOnClickListener(v -> { - CommonWebViewActivity.start(DecorationStoreActivity.this, carInfo.getRedirectLink()); - }); - } - return; - - } else if (CarInfo.TAG_TYPE_EXCLUSIVE == carInfo.getLabelType()) { - mBinding.llLimitContainer.setVisibility(View.VISIBLE); - mBinding.tvLimitDesc.setText(carInfo.getLimitDesc()); - if (TextUtils.isEmpty(carInfo.getRedirectLink())) { - mBinding.tvGoWeb.setVisibility(View.GONE); - } else { - mBinding.tvGoWeb.setVisibility(View.VISIBLE); - mBinding.tvGoWeb.setOnClickListener(v -> CommonWebViewActivity.start(DecorationStoreActivity.this, carInfo.getRedirectLink())); - } - return; - - } - - buyCarInfo = carInfo; - boolean buyState = carInfo.getRemainingDay() > 0 && carInfo.getStatus() == CarInfo.STATUS_USER_CAN_USE; - setPrice(carInfo, buyState); - isBuy = !buyState; - - setBuyButton(isBuy); - setGoSendButton(isBuy); - } - - private void setBuyButton(boolean isBuy) { - if (isBuy) { - mBinding.tvBuy.setBackgroundResource(R.drawable.bg_button_buy); - mBinding.tvBuy.setText("购买"); - - } else { - mBinding.tvBuy.setBackgroundResource(R.drawable.bg_button_remain); - mBinding.tvBuy.setText("续费"); - - } - } - - private void setGoSendButton(boolean isBuy) { - mBinding.tvGoSend.setBackgroundResource(R.drawable.bg_left_button_buy); - mBinding.tvGoSend.setTextColor(ContextCompat.getColor(this, R.color.color_333333)); -// if (isBuy) { -// mBinding.tvGoSend.setBackgroundResource(R.drawable.bg_left_button_buy); -// mBinding.tvGoSend.setTextColor(ContextCompat.getColor(this, R.color.color_333333)); -// -// } else { -// mBinding.tvGoSend.setBackgroundResource(R.drawable.bg_left_button_remain); -// mBinding.tvGoSend.setTextColor(ContextCompat.getColor(this, R.color.color_FC6E6D)); -// } - } - - private void setPrice(BaseDecoration bean, boolean isRenewPrice) { - - StringBuilder price = new StringBuilder(); - - if (bean.isGoldSale()) { - price.append(isRenewPrice ? String.valueOf(bean.getRenewPrice()) : String.valueOf(bean.getPrice())); - price.append("钻石"); - } - - if (bean.isGoldAndRadishSale()) - price.append("/"); - - if (bean.isRadishSale()) { - price.append(isRenewPrice ? String.valueOf(bean.getRadishRenewPrice()) : String.valueOf(bean.getRadishPrice())); - price.append("萝卜"); - } - - mBinding.tvPrice.setText(com.yizhuan.xchat_android_core.utils.TextUtils.textTwoColors(price.toString(), "(" + bean.getDays() + "天)", - ContextCompat.getColor(this, R.color.appColor), - ContextCompat.getColor(this, R.color.color_999999))); - } - - private void setOriginalPrice(BaseDecoration bean) { - StringBuilder price = new StringBuilder(); - - if (bean.isGoldSale()) { - price.append(bean.getOriginalPrice()); - price.append("钻石"); - } - - if (bean.isGoldAndRadishSale()) - price.append("/"); - - if (bean.isRadishSale()) { - price.append(bean.getRadishOriginalPrice()); - price.append("萝卜"); - } - mBinding.tvOriginalPrice.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG); //中划线 - mBinding.tvOriginalPrice.setText(price + "(" + bean.getDays() + "天)"); - } - - public void showHeadWearPrice(HeadWearInfo headWearInfo) { - if (headWearInfo == null || headWearInfo.getHeadwearId() <= 0) return; - NobleUtil.loadHeadWear(headWearInfo.getPic(), mBinding.ivHeadWear); - //头饰标签 - if (HeadWearInfo.LABEL_TYPE_NORMAL == headWearInfo.getLabelType()) { - mBinding.llLimitContainer.setVisibility(View.GONE); - mBinding.tvOriginalPrice.setVisibility(View.GONE); - } else if (HeadWearInfo.LABEL_TYPE_NEW == headWearInfo.getLabelType()) { - mBinding.llLimitContainer.setVisibility(View.GONE); - mBinding.tvOriginalPrice.setVisibility(View.GONE); - } else if (HeadWearInfo.LABEL_TYPE_DISCOUNT == headWearInfo.getLabelType()) { - mBinding.llLimitContainer.setVisibility(View.GONE); - mBinding.tvOriginalPrice.setVisibility(View.VISIBLE); - setOriginalPrice(headWearInfo); - } else if (HeadWearInfo.LABEL_TYPE_LIMIT == headWearInfo.getLabelType()) { - mBinding.llLimitContainer.setVisibility(View.VISIBLE); - mBinding.tvLimitDesc.setText(headWearInfo.getLimitDesc()); - if (TextUtils.isEmpty(headWearInfo.getRedirectLink())) { - mBinding.tvGoWeb.setVisibility(View.GONE); - } else { - mBinding.tvGoWeb.setVisibility(View.VISIBLE); - mBinding.tvGoWeb.setOnClickListener(v -> { - CommonWebViewActivity.start(DecorationStoreActivity.this, headWearInfo.getRedirectLink()); - }); - } - return; - } else if (HeadWearInfo.LABEL_TYPE_EXCLUSIVE == headWearInfo.getLabelType()) { - mBinding.llLimitContainer.setVisibility(View.VISIBLE); - mBinding.tvLimitDesc.setText(headWearInfo.getLimitDesc()); - if (TextUtils.isEmpty(headWearInfo.getRedirectLink())) { - mBinding.tvGoWeb.setVisibility(View.GONE); - } else { - mBinding.tvGoWeb.setVisibility(View.VISIBLE); - mBinding.tvGoWeb.setOnClickListener(v -> CommonWebViewActivity.start(DecorationStoreActivity.this, headWearInfo.getRedirectLink())); - } - return; - } - - wearInfo = headWearInfo; - boolean buyState = headWearInfo.getStatus() == HeadWearInfo.STATUS_IN_USED; - setPrice(headWearInfo, buyState); - isBuy = !buyState; - - setBuyButton(isBuy); - setGoSendButton(isBuy); - } - - public void showCarDetail(CarInfo carInfo) { - if (carInfo == null || carInfo.getCarId() <= 0) return; - - mBinding.rlCarDetail.setVisibility(View.VISIBLE); - - if (carInfo.getOtherViewType() == 1 && !TextUtils.isEmpty(carInfo.getViewUrl())) { - showVAPAnimation(carInfo.getViewUrl()); - } else { - showSvgaAnimation(carInfo.getEffect()); - } - mBinding.tvBuyCancel.setOnClickListener(v -> dismissCarDetail()); - - } - - private void showVAPAnimation(String url) { - mBinding.vapAnimView.setLoop(99999); - mBinding.vapAnimView.setScaleType(ScaleType.FIT_CENTER); - ImageLoadKt.loadAnim(mBinding.vapAnimView, url); - } - - private void showSvgaAnimation(String effect) { - //effect = TextUtils.isEmpty(effect) && BuildConfig.DEBUG ? "https://image.zhongjialx.com/svga/Noble_OpenEffect_7_1.svga" : effect; - try { - URL url = new URL(effect); - mSVGAParser.parse(url, new SVGAParser.ParseCompletion() { - @Override - public void onComplete(SVGAVideoEntity svgaVideoEntity) { - if (mBinding.rlCarDetail.getVisibility() == View.GONE) return; - SVGADrawable drawable = new SVGADrawable(svgaVideoEntity); - mBinding.svgaCarPlay.setLoops(-1); - mBinding.svgaCarPlay.setImageDrawable(drawable); - mBinding.svgaCarPlay.startAnimation(); - mBinding.svgaCarPlay.setClearsAfterStop(true); - } - - @Override - public void onError() { -// Toast.makeText(DecorationStoreActivity.this, "网络异常", Toast.LENGTH_SHORT).show(); - SingleToastUtil.showToastShort("网络异常"); - } - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private void dismissCarDetail() { - if (mBinding.rlCarDetail != null) { - mBinding.svgaCarPlay.stopAnimation(true); - mBinding.svgaCarPlay.setImageDrawable(null); - mBinding.rlCarDetail.setVisibility(View.GONE); - mBinding.vapAnimView.stopPlay(); - } - } - - @Override - public void onItemSelect(int position) { - mBinding.viewpager.setCurrentItem(position); - } -} diff --git a/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationStoreActivity.kt b/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationStoreActivity.kt new file mode 100644 index 000000000..2eb789ca3 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/decoration/view/DecorationStoreActivity.kt @@ -0,0 +1,119 @@ +package com.yizhuan.erban.decoration.view + +import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.view.View +import androidx.activity.viewModels +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentPagerAdapter +import androidx.viewpager.widget.ViewPager.SimpleOnPageChangeListener +import com.netease.nim.uikit.StatusBarUtil +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseViewBindingActivity +import com.yizhuan.erban.base.TitleBar +import com.yizhuan.erban.databinding.ActivityDecorationStoreBinding +import com.yizhuan.erban.decoration.view.widgets.CarMagicIndicator +import com.yizhuan.erban.decoration.view.widgets.MyDecorationMagicIndicator +import com.yizhuan.erban.decoration.viewmodel.DecorationViewModel +import com.yizhuan.erban.home.helper.BannerHelper +import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper +import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator +import com.yizhuan.xchat_android_core.Constants +import com.yizhuan.xchat_android_core.home.bean.TabInfo +import com.yizhuan.xchat_android_library.annatation.ActLayoutRes + +@ActLayoutRes(R.layout.activity_decoration_store) +class DecorationStoreActivity : BaseViewBindingActivity(), + CarMagicIndicator.OnItemSelectListener, MyDecorationMagicIndicator.OnItemSelectListener { + + companion object { + + const val TAB_HEAD_WEAR = 0 + const val TAB_CAR = 1 + const val TAB_NAMEPLATE = 2 + const val TAB_USER_CARD = 3 + const val TAB_CHAT_BUBBLE = 4 + + @JvmStatic + fun start(context: Context, position: Int) { + val intent = Intent(context, DecorationStoreActivity::class.java) + intent.putExtra(Constants.KEY_POSITION, position) + context.startActivity(intent) + } + } + + private var mPosition = 0 + private val decorationViewModel: DecorationViewModel by viewModels() + + override fun init() { + initWhiteTitleBar("装扮商城") + mTitleBar?.addAction(object : TitleBar.TextAction( + "我的装扮", Color.parseColor("#999999") + ) { + override fun performAction(view: View) { + MyDecorationActivity.start(this@DecorationStoreActivity, 0) + } + }) + mPosition = intent.getIntExtra(Constants.KEY_POSITION, 0) + initViews() + decorationViewModel.bannerLiveData.observe(this) + { + BannerHelper.setBanner(binding.rollView, it) + } + } + + private fun initViews() { + val viewPager = binding.viewpager + val mMagicIndicator = binding.viewIndicator + val tabInfoList: MutableList = ArrayList(5) + tabInfoList.add(TabInfo(TAB_HEAD_WEAR, "头饰")) + tabInfoList.add(TabInfo(TAB_CAR, "座驾")) + tabInfoList.add(TabInfo(TAB_NAMEPLATE, "铭牌")) + tabInfoList.add(TabInfo(TAB_USER_CARD, "资料卡")) + tabInfoList.add(TabInfo(TAB_CHAT_BUBBLE, "聊天气泡")) + val commonNavigator = CommonNavigator(this) + commonNavigator.isAdjustMode = true + val indicator = MyDecorationMagicIndicator(this, tabInfoList) + indicator.setOnItemSelectListener(this) + commonNavigator.adapter = indicator + mMagicIndicator.navigator = commonNavigator + ViewPagerHelper.bind(mMagicIndicator, viewPager) + viewPager.adapter = object : FragmentPagerAdapter( + supportFragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT + ) { + override fun getCount(): Int { + return tabInfoList.size + } + + override fun getItem(position: Int): Fragment { + return DecorationCommonFragment.newInstance(position) + } + } + viewPager.addOnPageChangeListener(object : SimpleOnPageChangeListener() { + override fun onPageSelected(position: Int) { + super.onPageSelected(position) + if (position == 1) { + mMagicIndicator.findViewById(R.id.car_badge_garage).visibility = + View.GONE + } + } + }) + viewPager.currentItem = mPosition + } + + override fun onItemSelect(position: Int) { + binding.viewpager.currentItem = position + } + + override fun needSteepStateBar(): Boolean { + return true + } + + override fun setStatusBar() { + super.setStatusBar() + StatusBarUtil.transparencyBar(this) + StatusBarUtil.StatusBarLightMode(this) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/decoration/view/HeadWearFragment.java b/app/src/main/java/com/yizhuan/erban/decoration/view/HeadWearFragment.java deleted file mode 100644 index d205169da..000000000 --- a/app/src/main/java/com/yizhuan/erban/decoration/view/HeadWearFragment.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.yizhuan.erban.decoration.view; - -import android.app.Activity; -import android.os.Bundle; -import androidx.recyclerview.widget.GridLayoutManager; - -import com.netease.nim.uikit.common.ui.recyclerview.decoration.SpacingDecoration; -import com.yizhuan.erban.BR; -import com.yizhuan.erban.R; -import com.yizhuan.erban.base.BaseBindingFragment; -import com.yizhuan.erban.databinding.FragmentRexylerviewBindBinding; -import com.yizhuan.erban.decoration.adapter.HeadWearShopAdapter; -import com.yizhuan.erban.decoration.viewmodel.HeadWearVm; -import com.yizhuan.erban.ui.widget.marqueeview.Utils; -import com.yizhuan.xchat_android_core.Constants; -import com.yizhuan.xchat_android_core.decoration.headwear.bean.HeadWearInfo; -import com.yizhuan.xchat_android_core.utils.net.DontWarnObserver; -import com.yizhuan.xchat_android_library.annatation.ActLayoutRes; -import com.yizhuan.xchat_android_library.utils.ListUtils; - -import java.util.List; - -/** - * Created by huangmeng1 on 2018/5/7. - */ -@ActLayoutRes(R.layout.fragment_rexylerview_bind) -public class HeadWearFragment extends BaseBindingFragment { - private HeadWearVm headWearVm; - private HeadWearShopAdapter shopAdapter; - private DecorationStoreActivity activity; - - public HeadWearShopAdapter getShopAdapter() { - return shopAdapter; - } - - public static HeadWearFragment newInstance(int position, String uid) { - HeadWearFragment headWearFragment = new HeadWearFragment(); - Bundle bundle = new Bundle(); - bundle.putInt(Constants.KEY_POSITION, position); - bundle.putString("uid", uid); - headWearFragment.setArguments(bundle); - return headWearFragment; - } - - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - this.activity = (DecorationStoreActivity) activity; - } - - @Override - public void setUserVisibleHint(boolean isVisibleToUser) { - super.setUserVisibleHint(isVisibleToUser); - if (isVisibleToUser && activity != null) { - activity.setCar(false); - if (!ListUtils.isListEmpty(shopAdapter.getData())) { - activity.showHeadWearPrice(shopAdapter.getData().get(shopAdapter.getSelectPosition())); - } - } - } - - @Override - public void initiate() { - - headWearVm = new HeadWearVm(); - headWearVm.setUid(getArguments().getString("uid")); - mBinding.setViewmodel(headWearVm); - shopAdapter = new HeadWearShopAdapter(R.layout.item_head_wear, BR.headWearInfo); - - shopAdapter.setOnItemClickListener((adapter, view, position) -> { - shopAdapter.setSelectPosition(position); - if (activity != null) { - activity.showHeadWearPrice((HeadWearInfo) adapter.getData().get(position)); - } - }); - - shopAdapter.setOnLoadMoreListener(() -> loadData(true, false)); - mBinding.swipeRefresh.setOnRefreshListener(() -> loadData(false, false)); - - mBinding.recyclerView.setAdapter(shopAdapter); - mBinding.recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3)); - int heightSpace = Utils.dip2px(mContext, 10); - mBinding.recyclerView.addItemDecoration(new SpacingDecoration(heightSpace, heightSpace, true)); - - loadData(false, getArguments().getInt(Constants.KEY_POSITION) == 0); - } - - private boolean isLoading = false; - - private void loadData(boolean isLode, boolean isFirst) { - if (isLoading) { - return; - } - isLoading = true; - headWearVm.loadData(isLode).compose(bindToLifecycle()) - .doAfterSuccess(headWearInfos -> { - setUserVisibleHint(isFirst); - }) - .subscribe(new DontWarnObserver>() { - @Override - public void accept(List headWearInfos, String error) { - super.accept(headWearInfos, error); - isLoading = false; - } - }); - } -} diff --git a/app/src/main/java/com/yizhuan/erban/decoration/view/MyCarFragment.java b/app/src/main/java/com/yizhuan/erban/decoration/view/MyCarFragment.java index 36a954c3e..aa04ba08b 100644 --- a/app/src/main/java/com/yizhuan/erban/decoration/view/MyCarFragment.java +++ b/app/src/main/java/com/yizhuan/erban/decoration/view/MyCarFragment.java @@ -70,10 +70,6 @@ public class MyCarFragment extends BaseBindingFragment { switch (view.getId()) { - case R.id.tv_buy: - mCarView.showDetail(mCarGarageAdapter.getItem(position)); - break; - case R.id.tv_used: startDriving(mCarGarageAdapter.getItem(position)); break; diff --git a/app/src/main/java/com/yizhuan/erban/decoration/view/MyHeadWearFragment.java b/app/src/main/java/com/yizhuan/erban/decoration/view/MyHeadWearFragment.java index c09944535..778e730ff 100644 --- a/app/src/main/java/com/yizhuan/erban/decoration/view/MyHeadWearFragment.java +++ b/app/src/main/java/com/yizhuan/erban/decoration/view/MyHeadWearFragment.java @@ -51,14 +51,9 @@ public class MyHeadWearFragment extends BaseBindingFragment { switch (view.getId()) { - case R.id.tv_buy: - showSureDialog(position); - break; - case R.id.tv_used: setUsedStatus(position); break; - } }); diff --git a/app/src/main/java/com/yizhuan/erban/decoration/viewmodel/DecorationViewModel.kt b/app/src/main/java/com/yizhuan/erban/decoration/viewmodel/DecorationViewModel.kt new file mode 100644 index 000000000..af8d18cd5 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/decoration/viewmodel/DecorationViewModel.kt @@ -0,0 +1,62 @@ +package com.yizhuan.erban.decoration.viewmodel + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.yizhuan.erban.base.BaseViewModel +import com.yizhuan.xchat_android_core.bean.response.ListResult +import com.yizhuan.xchat_android_core.decoration.DecorationInfo +import com.yizhuan.xchat_android_core.decoration.DecorationModel +import com.yizhuan.xchat_android_core.home.bean.BannerInfo +import com.yizhuan.xchat_android_core.home.model.HomeModel +import com.yizhuan.xchat_android_core.utils.toast + +class DecorationViewModel : BaseViewModel() { + + private val BANNER_TYPE = "3" + + private val _bannerLiveData = MutableLiveData>() + val bannerLiveData: LiveData> = _bannerLiveData + + private val _decorationInfoListLiveData = MutableLiveData>() + val decorationInfoListLiveData: LiveData> = + _decorationInfoListLiveData + + init { + getBannerInfo() + } + + fun getBannerInfo() { + safeLaunch( + block = { + _bannerLiveData.value = HomeModel.getHomeBanner(BANNER_TYPE) + }, + onError = { + _bannerLiveData.value = null + } + ) + } + + fun getDecorationInfoList(dressType: Int) { + safeLaunch( + block = { + _decorationInfoListLiveData.value = + ListResult.success(DecorationModel.getDecorationInfoList(dressType), 1) + }, + onError = { + _decorationInfoListLiveData.value = ListResult.failed(1) + } + ) + } + + fun buyDecoration(dressType: Int, dressId: Int) { + safeLaunch( + true, + block = { + DecorationModel.buyDecoration(dressType, dressId) + "购买成功".toast() + }, + ) + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/friend/action/AbstractSelectFriendAction.java b/app/src/main/java/com/yizhuan/erban/friend/action/AbstractSelectFriendAction.java index 06e078720..4e91d3158 100644 --- a/app/src/main/java/com/yizhuan/erban/friend/action/AbstractSelectFriendAction.java +++ b/app/src/main/java/com/yizhuan/erban/friend/action/AbstractSelectFriendAction.java @@ -18,6 +18,7 @@ public abstract class AbstractSelectFriendAction { public static final int TYPE_SHARE = 4; public static final int ROOM_MSG = 5; public static final int TYPE_CP = 7; + public static final int TYPE_SEND_DECORATION = 8; /** * 世界动态 */ @@ -25,7 +26,7 @@ public abstract class AbstractSelectFriendAction { /** * 模厅的搜索 */ - public static final int TYPE_MODULE_HALL = 5; + public static final int TYPE_MODULE_HALL = 9; protected Context context; protected DialogManager dialogManager; diff --git a/app/src/main/java/com/yizhuan/erban/ui/im/RouterHandler.java b/app/src/main/java/com/yizhuan/erban/ui/im/RouterHandler.java index 0dbae12fb..f37886c3c 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/im/RouterHandler.java +++ b/app/src/main/java/com/yizhuan/erban/ui/im/RouterHandler.java @@ -46,7 +46,6 @@ import com.yizhuan.erban.ui.withdraw.BinderAlipayActivity; import com.yizhuan.erban.vip.VipMainActivity; import com.yizhuan.tutu.mentoring_relationship.activity.MentoringRelationshipActivity; import com.yizhuan.xchat_android_core.DemoCache; -import com.yizhuan.xchat_android_core.UriProvider; import com.yizhuan.xchat_android_core.auth.AuthModel; import com.yizhuan.xchat_android_core.community.event.SquareTaskEvent; import com.yizhuan.xchat_android_core.home.event.VisitorUnreadCountEvent; @@ -71,7 +70,6 @@ import org.greenrobot.eventbus.EventBus; import io.reactivex.SingleObserver; import io.reactivex.disposables.Disposable; -import io.reactivex.functions.Consumer; /** * Created by MadisonRong on 08/06/2018. @@ -107,21 +105,21 @@ public class RouterHandler { break; case RouterType.CAR: if (JavaUtil.str2int(routerValue) == 0) { - DecorationStoreActivity.start(context, AuthModel.get().getCurrentUid(), DecorationStoreActivity.TAB_CAR); + DecorationStoreActivity.start(context, DecorationStoreActivity.TAB_CAR); } else { MyDecorationActivity.start(context, 1); } break; case RouterType.DECORATION: if (JavaUtil.str2int(routerValue) == 0) { - DecorationStoreActivity.start(context, AuthModel.get().getCurrentUid()); + DecorationStoreActivity.start(context,0); } else { MyDecorationActivity.start(context, 0); } break; case RouterType.NAMEPLATE: if (JavaUtil.str2int(routerValue) == 0) { - DecorationStoreActivity.start(context, AuthModel.get().getCurrentUid(), DecorationStoreActivity.TAB_NAMEPLATE); + DecorationStoreActivity.start(context, DecorationStoreActivity.TAB_NAMEPLATE); } else { MyDecorationActivity.start(context, 2); } @@ -352,7 +350,7 @@ public class RouterHandler { if (intRouterValue < 0 || intRouterValue > 4) { intRouterValue = 0; } - DecorationStoreActivity.start(context, AuthModel.get().getCurrentUid(), intRouterValue); + DecorationStoreActivity.start(context, intRouterValue); break; case RouterType.MY_DECORATION: if (intRouterValue < 0 || intRouterValue > 4) { diff --git a/app/src/main/java/com/yizhuan/erban/ui/im/actions/DecorationAction.java b/app/src/main/java/com/yizhuan/erban/ui/im/actions/DecorationAction.java index 71ce2a7ff..6dbfd8be9 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/im/actions/DecorationAction.java +++ b/app/src/main/java/com/yizhuan/erban/ui/im/actions/DecorationAction.java @@ -19,6 +19,6 @@ public class DecorationAction extends BaseAction { @Override public void onClick() { - DecorationStoreActivity.start(getActivity(), JavaUtil.str2long(getAccount())); + DecorationStoreActivity.start(getActivity(), JavaUtil.str2int(getAccount())); } } diff --git a/app/src/main/java/com/yizhuan/erban/ui/im/friend/FriendListAdapter.java b/app/src/main/java/com/yizhuan/erban/ui/im/friend/FriendListAdapter.java index cb5b6e7dd..64336fb2e 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/im/friend/FriendListAdapter.java +++ b/app/src/main/java/com/yizhuan/erban/ui/im/friend/FriendListAdapter.java @@ -34,22 +34,17 @@ public class FriendListAdapter extends BaseQuickAdapter { if (type == AbstractSelectFriendAction.TYPE_NORMAL - || type == AbstractSelectFriendAction.TYPE_CP) { + || type == AbstractSelectFriendAction.TYPE_CP + || type == AbstractSelectFriendAction.TYPE_SEND_DECORATION) { UserInfoActivity.Companion.start(context, item.getUid()); } }); @@ -131,6 +127,7 @@ public class FriendListAdapter extends BaseQuickAdapter { if (onItemClickListener != null) { @@ -172,4 +170,8 @@ public class FriendListAdapter extends BaseQuickAdapter + DecorationHelper.showBuyDialog(mContext, + getDialogManager(), + attentionInfo.getNick(), + attentionInfo.getUid())); + break; default: adapter.setRylListener((attentionInfo) -> { if (selectFriendActivity != null && attentionInfo != null) { diff --git a/app/src/main/java/com/yizhuan/erban/ui/relation/FansListActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/relation/FansListActivity.kt index 19125a2cb..6b0b1d5ae 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/relation/FansListActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/relation/FansListActivity.kt @@ -27,6 +27,7 @@ class FansListActivity : BaseActivity() { const val TYPE_ATTENTION = "attention" const val TYPE_FRIEND = "Friend" const val TYPE_CP = "relation_cp" + const val TYPE_DECORATION = "type_decoration" @JvmStatic fun start(context: Context, type: String) { @@ -40,7 +41,8 @@ class FansListActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_fans) - when (intent.getStringExtra(KEY_TYPE) ?: "") { + val type = intent.getStringExtra(KEY_TYPE) ?: "" + when (type) { TYPE_ATTENTION -> { initWhiteTitleBar(getString(R.string.my_attention)) commitF(AttentionFragment.newInstance(Constants.FAN_NO_MAIN_PAGE_TYPE)) @@ -51,24 +53,29 @@ class FansListActivity : BaseActivity() { } - TYPE_CP -> { + TYPE_CP, TYPE_DECORATION -> { + val searchType = if (TYPE_CP == type) { + AbstractSelectFriendAction.TYPE_CP + } else { + AbstractSelectFriendAction.TYPE_SEND_DECORATION + } initWhiteTitleBar(getString(R.string.title_select_friend)) findViewById(R.id.layout_search)?.apply { visibility = View.VISIBLE setOnClickListener { SearchActivity.start( this@FansListActivity, - AbstractSelectFriendAction.TYPE_CP + searchType ) } findViewById(R.id.search_edit).setOnClickListener { SearchActivity.start( this@FansListActivity, - AbstractSelectFriendAction.TYPE_CP + searchType ) } } - commitF(FriendListFragment.newInstance(false, AbstractSelectFriendAction.TYPE_CP)) + commitF(FriendListFragment.newInstance(false, searchType)) } else -> { initWhiteTitleBar(getString(R.string.fan)) diff --git a/app/src/main/java/com/yizhuan/erban/ui/search/SearchActivity.java b/app/src/main/java/com/yizhuan/erban/ui/search/SearchActivity.java index 6a20465f3..0e080733c 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/search/SearchActivity.java +++ b/app/src/main/java/com/yizhuan/erban/ui/search/SearchActivity.java @@ -81,33 +81,27 @@ import io.reactivex.android.schedulers.AndroidSchedulers; */ @CreatePresenter(SearchPresenter.class) public class SearchActivity extends BaseMvpActivity implements ISearchView, View.OnClickListener, ContactsIndicatorAdapter.OnItemSelectListener { + public static final int CODE_REQUEST_TO_SEARCH = 200; private static final String MARK = "isCar"; private static final String CAR_INFO = "carInfo"; private static final String WEAR_INFO = "wearInfo"; private static final String SHOW_HISTORY = "show_history"; - - public static final int CODE_REQUEST_TO_SEARCH = 200; protected EditText searchEdit; + protected int type = AbstractSelectFriendAction.TYPE_NORMAL; private ImageView ivBack; private TextView tvSearch; private ImageView ivClearText; - private View clSearchHistoryContainer; private RecyclerView rvSearchHistory; private View flClearSearchHistory; - private View clRoomHistoryContainer; private RecyclerView rvRoomHistory; private View flClearRoomHistory; - private MagicIndicator indicator; private ViewPager viewPager; - private LinearLayout llSearchDetail; - private CarInfo carInfo; private HeadWearInfo wearInfo; - protected int type = AbstractSelectFriendAction.TYPE_NORMAL; private int secondOperator = -1; private boolean mShowHistory = false; @@ -117,6 +111,26 @@ public class SearchActivity extends BaseMvpActivity mTabs = new ArrayList<>(); //CP - if (type == AbstractSelectFriendAction.TYPE_CP) { - userFrg = SearchDetailFragment.newInstance(SearchDetailFragment.TYPE_SEARCH_USER, AbstractSelectFriendAction.TYPE_CP); + if (type == AbstractSelectFriendAction.TYPE_CP || type == AbstractSelectFriendAction.TYPE_SEND_DECORATION) { + userFrg = SearchDetailFragment.newInstance(SearchDetailFragment.TYPE_SEARCH_USER, type); mTabs.add(userFrg); viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(), mTabs, null)); return; @@ -268,7 +284,6 @@ public class SearchActivity extends BaseMvpActivity homeRooms) { @@ -477,7 +470,9 @@ public class SearchActivity extends BaseMvpActivity + + + + diff --git a/app/src/main/res/drawable/shape_decoration_limit.xml b/app/src/main/res/drawable/shape_decoration_limit.xml new file mode 100644 index 000000000..f8ceae579 --- /dev/null +++ b/app/src/main/res/drawable/shape_decoration_limit.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/app/src/main/res/drawable/shape_white_10dp_round.xml b/app/src/main/res/drawable/shape_white_10dp_round.xml new file mode 100644 index 000000000..cf62019e7 --- /dev/null +++ b/app/src/main/res/drawable/shape_white_10dp_round.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_decoration_store.xml b/app/src/main/res/layout/activity_decoration_store.xml index 07c47d089..6654a737a 100644 --- a/app/src/main/res/layout/activity_decoration_store.xml +++ b/app/src/main/res/layout/activity_decoration_store.xml @@ -1,296 +1,49 @@ - + - - - - - - - - - + + android:layout_height="wrap_content" + android:layout_below="@+id/title_bar" + app:layout_constraintEnd_toEndOf="parent"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_height="80dp" + android:layout_marginStart="@dimen/dp_15" + android:layout_marginEnd="@dimen/dp_15" + android:visibility="gone" + app:rollviewpager_hint_gravity="left" + app:rollviewpager_hint_paddingBottom="8dp" + tools:visibility="visible" /> - + + + + + + + + diff --git a/app/src/main/res/layout/fragment_decoration_common.xml b/app/src/main/res/layout/fragment_decoration_common.xml new file mode 100644 index 000000000..b29aba3ac --- /dev/null +++ b/app/src/main/res/layout/fragment_decoration_common.xml @@ -0,0 +1,21 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/item_decoration_common.xml b/app/src/main/res/layout/item_decoration_common.xml new file mode 100644 index 000000000..7d7c12e14 --- /dev/null +++ b/app/src/main/res/layout/item_decoration_common.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_decoration_user_card.xml b/app/src/main/res/layout/item_decoration_user_card.xml new file mode 100644 index 000000000..6709dbbf1 --- /dev/null +++ b/app/src/main/res/layout/item_decoration_user_card.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/decoration/DecorationInfo.kt b/core/src/main/java/com/yizhuan/xchat_android_core/decoration/DecorationInfo.kt new file mode 100644 index 000000000..6a7dabce3 --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/decoration/DecorationInfo.kt @@ -0,0 +1,13 @@ +package com.yizhuan.xchat_android_core.decoration + +data class DecorationInfo( + val dressDay: Int = 0, + val dressId: Int = 0, + val dressPrice: Int = 0, + val dressSeq: Int = 0, + val dressType: Int = 0, + val id: Int = 0, + val iosPic: String = "", + val name: String = "", + val pic: String = "", +) \ No newline at end of file diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/decoration/DecorationInfoEvent.java b/core/src/main/java/com/yizhuan/xchat_android_core/decoration/DecorationInfoEvent.java new file mode 100644 index 000000000..6e639c3ac --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/decoration/DecorationInfoEvent.java @@ -0,0 +1,15 @@ +package com.yizhuan.xchat_android_core.decoration; + +import lombok.Data; + +@Data +public class DecorationInfoEvent { + private DecorationInfo decorationInfo; + + public DecorationInfoEvent() { + } + + public DecorationInfoEvent(DecorationInfo decorationInfo) { + this.decorationInfo = decorationInfo; + } +} diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/decoration/DecorationModel.kt b/core/src/main/java/com/yizhuan/xchat_android_core/decoration/DecorationModel.kt new file mode 100644 index 000000000..c9cbc3cb5 --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/decoration/DecorationModel.kt @@ -0,0 +1,73 @@ +package com.yizhuan.xchat_android_core.decoration + +import com.yizhuan.xchat_android_core.base.BaseModel +import com.yizhuan.xchat_android_core.bean.response.ServiceResult +import com.yizhuan.xchat_android_core.utils.net.RxHelper +import com.yizhuan.xchat_android_core.utils.net.launchRequest +import com.yizhuan.xchat_android_library.net.rxnet.RxNet +import io.reactivex.Single +import retrofit2.http.* + +object DecorationModel : BaseModel() { + + private val api = RxNet.create(Api::class.java) + + suspend fun getDecorationInfoList(dressType: Int): List? = + launchRequest { + api.getDecorationInfoList(dressType) + } + + suspend fun buyDecoration(dressType: Int, dressId: Int): String? = + launchRequest { + api.buyDecoration(dressType, dressId) + } + + fun sendDecoration( + dressType: Int, + dressId: Int, + targetUid: Long, + ): Single { + return api.sendDecoration(dressType, dressId, targetUid) + .compose(RxHelper.handleSchAndExce()) + .compose(RxHelper.handleStringData()) + } + + + private interface Api { + + /** + * 获取装扮商城列表 + * + * @return + */ + @GET("/dress/shop/list") + suspend fun getDecorationInfoList(@Query("dressType") dressType: Int): ServiceResult> + + /** + * 购买装扮 + * + * @return + */ + @FormUrlEncoded + @POST("/dress/shop/buy") + suspend fun buyDecoration( + @Field("dressType") dressType: Int, + @Field("dressId") dressId: Int + ): ServiceResult + + /** + * 赠送装扮 + * + * @return + */ + @FormUrlEncoded + @POST("/dress/shop/send") + fun sendDecoration( + @Field("dressType") dressType: Int, + @Field("dressId") dressId: Int, + @Field("targetUid") targetUid: Long, + ): Single> + + } + +} \ No newline at end of file