diff --git a/common/src/main/java/com/yunbao/common/Constants.java b/common/src/main/java/com/yunbao/common/Constants.java index 65dea4f09..1fc271e19 100644 --- a/common/src/main/java/com/yunbao/common/Constants.java +++ b/common/src/main/java/com/yunbao/common/Constants.java @@ -46,6 +46,7 @@ public class Constants { public static final String LIVE_NEAR = "liveNear"; public static final String LIVE_CLASS_PREFIX = "liveClass_"; public static final String LIVE_ADMIN_ROOM = "liveAdminRoom"; + public static final String LIVE_ANCHER_NAME = "ancherName";//主播名 public static final String HAS_GAME = "hasGame"; public static final String OPEN_FLASH = "openFlash"; public static final String SHARE_QR_CODE_FILE = "shareQrCodeFile.png"; diff --git a/live/src/main/java/com/yunbao/live/activity/LiveActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveActivity.java index 4832c1d38..210712103 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveActivity.java @@ -58,6 +58,7 @@ import com.yunbao.live.dialog.LiveGuardDialogFragment; import com.yunbao.live.dialog.LiveGiveHotDialogFragment; import com.yunbao.live.dialog.LiveInputDialogFragment; import com.yunbao.live.dialog.LiveMoreDialogFragment; +import com.yunbao.live.dialog.LiveNewGuardBuyDialogFragment; import com.yunbao.live.dialog.LiveRedPackListDialogFragment; import com.yunbao.live.dialog.LiveRedPackSendDialogFragment; import com.yunbao.live.dialog.LiveShareDialogFragment; @@ -1304,6 +1305,23 @@ public abstract class LiveActivity extends AbsActivity implements SocketMessageL fragment.show(getSupportFragmentManager(), "LiveHotDialogFragment"); } + /** + * 打开购买新版守护的弹窗 + */ + public void openNewBuyGuardWindow() { + if (TextUtils.isEmpty(mLiveUid) || TextUtils.isEmpty(mStream) || mLiveGuardInfo == null) { + return; + } + LiveNewGuardBuyDialogFragment fragment = new LiveNewGuardBuyDialogFragment(); + fragment.setLiveGuardInfo(mLiveGuardInfo); + Bundle bundle = new Bundle(); + bundle.putString(Constants.COIN_NAME, mCoinName); + bundle.putString(Constants.LIVE_UID, mLiveUid); + bundle.putString(Constants.LIVE_ANCHER_NAME, mAncherName); + bundle.putString(Constants.STREAM, mStream); + fragment.setArguments(bundle); + fragment.show(getSupportFragmentManager(), "LiveGuardBuyDialogFragment"); + } /** * 打开购买守护的弹窗 */ diff --git a/live/src/main/java/com/yunbao/live/adapter/GuardRightAdapter.java b/live/src/main/java/com/yunbao/live/adapter/GuardRightAdapter.java index 9daf2acea..e304b0cd1 100644 --- a/live/src/main/java/com/yunbao/live/adapter/GuardRightAdapter.java +++ b/live/src/main/java/com/yunbao/live/adapter/GuardRightAdapter.java @@ -36,6 +36,9 @@ public class GuardRightAdapter extends RecyclerView.Adapter mList) { + this.mList = mList; + } @NonNull @Override diff --git a/live/src/main/java/com/yunbao/live/adapter/LiveNewGuardBuyItemsAdapter.java b/live/src/main/java/com/yunbao/live/adapter/LiveNewGuardBuyItemsAdapter.java new file mode 100644 index 000000000..b4b1bb8a4 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/adapter/LiveNewGuardBuyItemsAdapter.java @@ -0,0 +1,109 @@ +package com.yunbao.live.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.common.utils.WordUtil; +import com.yunbao.live.R; +import com.yunbao.live.bean.GuardBuyBean; + +import java.util.ArrayList; +import java.util.List; + +/** + * 守护购买列表适配器 + */ +public class LiveNewGuardBuyItemsAdapter extends RecyclerView.Adapter { + + List items = new ArrayList<>(); + private final Context context; + private int selectId = 1; + private OnItemSelectListener itemSelect; + + public LiveNewGuardBuyItemsAdapter(Context context) { + this.context = context; + } + + public void setItems(List items) { + this.items = items; + } + public void setOnItemSelectListener(OnItemSelectListener listener){ + this.itemSelect=listener; + } + + @NonNull + @Override + public Vh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new Vh(LayoutInflater.from(context).inflate(R.layout.item_dialog_guard_buy, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull Vh holder, int position) { + GuardBuyBean bean = items.get(position); + holder.setData(bean, bean.getId()); + } + + public void changeItem(int id) { + this.selectId = id; + } + + + @Override + public int getItemCount() { + return items.size(); + } + + protected class Vh extends RecyclerView.ViewHolder { + private LinearLayout buyButton; + private TextView title; + private TextView msg; + private TextView coin; + + public Vh(@NonNull View itemView) { + super(itemView); + buyButton = itemView.findViewById(R.id.guard_buy_button); + title = itemView.findViewById(R.id.guard_buy_title); + msg = itemView.findViewById(R.id.guard_buy_goback); + coin = itemView.findViewById(R.id.guard_buy_money); + + buyButton.setOnClickListener(view -> { + buyButton.setBackgroundResource(R.drawable.img_k_selected); + changeItem((int)title.getTag()); + notifyDataSetChanged(); + if(itemSelect!=null){ + itemSelect.onSelectId((int)title.getTag()); + } + + }); + } + + private void setData(GuardBuyBean bean, int id) { + String coin = bean.getCoin() + ""; + title.setText(bean.getName()); + title.setTag(id); + String msgText = WordUtil.getString(R.string.buy_guard_back_coin); + msg.setText(msgText + coin); + this.coin.setText(coin); + if(id==selectId){ + buyButton.setBackgroundResource(R.drawable.img_k_selected); + }else { + buyButton.setBackgroundResource(R.drawable.img_k_uncheck); + } + + } + } + + /** + * 用于回调通知当前选择id + */ + public interface OnItemSelectListener { + void onSelectId(int id); + } +} diff --git a/live/src/main/java/com/yunbao/live/bean/GuardBuyBean.java b/live/src/main/java/com/yunbao/live/bean/GuardBuyBean.java index a296d04f9..1aa495bdb 100644 --- a/live/src/main/java/com/yunbao/live/bean/GuardBuyBean.java +++ b/live/src/main/java/com/yunbao/live/bean/GuardBuyBean.java @@ -3,6 +3,8 @@ package com.yunbao.live.bean; import com.yunbao.common.utils.WordUtil; import com.yunbao.live.R; +import java.util.Arrays; + /** * Created by cxf on 2018/11/6. * 守护商品类型 @@ -67,4 +69,15 @@ public class GuardBuyBean { } return ""; } + + @Override + public String toString() { + return "GuardBuyBean{" + + "id=" + id + + ", name='" + name + '\'' + + ", type=" + type + + ", coin=" + coin + + ", privilege=" + Arrays.toString(privilege) + + '}'; + } } diff --git a/live/src/main/java/com/yunbao/live/dialog/LiveGuardDialogFragment.java b/live/src/main/java/com/yunbao/live/dialog/LiveGuardDialogFragment.java index 86cb28ac1..ed0f4a67c 100644 --- a/live/src/main/java/com/yunbao/live/dialog/LiveGuardDialogFragment.java +++ b/live/src/main/java/com/yunbao/live/dialog/LiveGuardDialogFragment.java @@ -93,6 +93,12 @@ public class LiveGuardDialogFragment extends AbsDialogFragment implements View.O mTip = (TextView) mRootView.findViewById(R.id.tip); mBtnBuy = (TextView) mRootView.findViewById(R.id.btn_buy); mBtnBuy.setOnClickListener(this); + /* mBtnBuy.setOnLongClickListener(view -> { + //长按调用老版购买守护页面,调试用 + dismiss(); + ((LiveActivity) mContext).openBuyGuardWindow(); + return false; + });*/ if (mLiveGuardInfo != null) { mGuardNum.setText(WordUtil.getString(R.string.guard_guard) + "(" + mLiveGuardInfo.getGuardNum() + ")"); int guardType = mLiveGuardInfo.getMyGuardType(); @@ -158,7 +164,7 @@ public class LiveGuardDialogFragment extends AbsDialogFragment implements View.O @Override public void onClick(View v) { dismiss(); - ((LiveActivity) mContext).openBuyGuardWindow(); + ((LiveActivity) mContext).openNewBuyGuardWindow(); } @Override diff --git a/live/src/main/java/com/yunbao/live/dialog/LiveNewGuardBuyDialogFragment.java b/live/src/main/java/com/yunbao/live/dialog/LiveNewGuardBuyDialogFragment.java new file mode 100644 index 000000000..0cbce77cf --- /dev/null +++ b/live/src/main/java/com/yunbao/live/dialog/LiveNewGuardBuyDialogFragment.java @@ -0,0 +1,316 @@ +package com.yunbao.live.dialog; + +import android.app.Dialog; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.Constants; +import com.yunbao.common.bean.UserBean; +import com.yunbao.common.dialog.AbsDialogFragment; +import com.yunbao.common.http.HttpCallback; +import com.yunbao.common.utils.DialogUitl; +import com.yunbao.common.utils.RouteUtil; +import com.yunbao.common.utils.ToastUtil; +import com.yunbao.common.utils.WordUtil; +import com.yunbao.live.R; +import com.yunbao.live.activity.LiveActivity; +import com.yunbao.live.adapter.GuardRightAdapter; +import com.yunbao.live.adapter.LiveNewGuardBuyItemsAdapter; +import com.yunbao.live.bean.GuardBuyBean; +import com.yunbao.live.bean.GuardRightBean; +import com.yunbao.live.bean.LiveGuardInfo; +import com.yunbao.live.http.LiveHttpConsts; +import com.yunbao.live.http.LiveHttpUtil; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by cxf on 2018/11/6. + * 直播间购买守护弹窗 + * 改版后效果 + */ + +public class LiveNewGuardBuyDialogFragment extends AbsDialogFragment implements View.OnClickListener { + + private RecyclerView mRights;//权益列表 + private RecyclerView mBuys;//购买列表 + private TextView anchorName; + private TextView mCoin; + private String mCoinName; + private TextView mCoinNameTextView; + private View mBtnBuy; + private List mRightList=new ArrayList<>();//权限列表 + private List mBuyList;//商品列表 + private long mCoinVal;//余额 + private String mLiveUid; + private String mStream; + private String mAncherName; + private LiveGuardInfo mLiveGuardInfo; + private GuardBuyBean mTargetBuyBean; + + private LiveNewGuardBuyItemsAdapter buyItemsAdapter; + private GuardRightAdapter mGuardRightAdapter; + + + @Override + protected int getLayoutId() { + return R.layout.dialog_new_guard_buy; + } + + @Override + protected int getDialogStyle() { + return R.style.dialog2; + } + + @Override + protected boolean canCancel() { + return true; + } + + @Override + protected void setWindowAttributes(Window window) { + window.setWindowAnimations(R.style.bottomToTopAnim); + WindowManager.LayoutParams params = window.getAttributes(); + params.width = WindowManager.LayoutParams.MATCH_PARENT; + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + params.gravity = Gravity.BOTTOM; + window.setAttributes(params); + } + + public void setLiveGuardInfo(LiveGuardInfo info) { + mLiveGuardInfo = info; + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + mCoinNameTextView = mRootView.findViewById(R.id.guard_coin_name); + mCoin = mRootView.findViewById(R.id.guard_coin); + mBtnBuy = mRootView.findViewById(R.id.guard_btn_buy); + mRights = mRootView.findViewById(R.id.guard_rights); + mBuys = mRootView.findViewById(R.id.guard_buys); + anchorName = mRootView.findViewById(R.id.guard_anchor_name); + mBtnBuy.setOnClickListener(this); + mRights.setHasFixedSize(true); + mRights.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false)); + mBuys.setHasFixedSize(true); + mBuys.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false){ + @Override + public boolean canScrollHorizontally() {//购买列表禁止滑动 + return false; + } + }); + mBuys.setItemViewCacheSize(3); + + buyItemsAdapter = new LiveNewGuardBuyItemsAdapter(mContext); + mGuardRightAdapter = new GuardRightAdapter(mContext, mRightList); + mRights.setAdapter(mGuardRightAdapter); + mBuys.setAdapter(buyItemsAdapter); + buyItemsAdapter.setOnItemSelectListener(this::refreshList); + + Bundle bundle = getArguments(); + if (bundle != null) { + mLiveUid = bundle.getString(Constants.LIVE_UID); + mStream = bundle.getString(Constants.STREAM); + mAncherName=bundle.getString(Constants.LIVE_ANCHER_NAME); + String coinName = WordUtil.getString(R.string.diamond); + mCoinName = coinName; + mCoinNameTextView.setText(WordUtil.getString(R.string.guard_my) + coinName + ":"); + anchorName.setText(String.format("成爲%s的守護", mAncherName)); + } + LiveHttpUtil.getGuardBuyList(new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + JSONObject obj = JSON.parseObject(info[0]); + mRightList = JSON.parseArray(obj.getString("privilege"), GuardRightBean.class); + mBuyList = JSON.parseArray(obj.getString("list"), GuardBuyBean.class); + try { + mCoinVal = obj.getLongValue("coin"); + } catch (Exception e) { + e.printStackTrace(); + } + mCoin.setText(String.valueOf(mCoinVal)); + buyItemsAdapter.setItems(mBuyList); + mGuardRightAdapter.setList(mRightList); + buyItemsAdapter.notifyDataSetChanged(); + + refreshList(1); + + } else { + ToastUtil.show(msg); + } + } + }); + } + + + private void refreshList(int index) { + if (!mRightList.isEmpty()) { + GuardBuyBean guardBuyBean = mBuyList.get(index - 1); + mTargetBuyBean=guardBuyBean; + for (GuardRightBean bean : mRightList) { + bean.setChecked(false); + } + for (int i : guardBuyBean.getPrivilege()) { + mRightList.get(i).setChecked(true); + } + mGuardRightAdapter.notifyDataSetChanged(); + mBtnBuy.setEnabled(mCoinVal >= guardBuyBean.getCoin()); + } + + } + + + + @Override + public void onClick(View view) { + int i = view.getId(); + if (i == R.id.guard_btn_buy) { + clickBuyGuard(); + + } +// else if (i == R.id.coin) { +// forwardMyCoin(); +// +// } + } + + /** + * 跳转到我的钻石 + */ + private void forwardMyCoin() { + dismiss(); + RouteUtil.forwardMyCoin(mContext); + } + + /** + * 点击购买守护按钮 + */ + private void clickBuyGuard() { + if (TextUtils.isEmpty(mLiveUid) || TextUtils.isEmpty(mStream) || mLiveGuardInfo == null || mTargetBuyBean == null) { + return; + } + Log.d("ffffff", "" + mLiveGuardInfo.getMyGuardType() + " " + mTargetBuyBean.getType()); + if (mLiveGuardInfo.getMyGuardType() == Constants.GUARD_TYPE_MONTH && mTargetBuyBean.getType() == Constants.GUARD_TYPE_DAY) { + DialogUitl.showSimpleTipDialog(mContext, WordUtil.getString(R.string.guard_buy_tip)); + return; + } else if (mLiveGuardInfo.getMyGuardType() == Constants.GUARD_TYPE_YEAR && mTargetBuyBean.getType() == Constants.GUARD_TYPE_DAY) { + DialogUitl.showSimpleTipDialog(mContext, "您為當前主播的年守護無法開通周守護"); + return; + } else if (mLiveGuardInfo.getMyGuardType() == Constants.GUARD_TYPE_YEAR && mTargetBuyBean.getType() == Constants.GUARD_TYPE_MONTH) { + DialogUitl.showSimpleTipDialog(mContext, "您為當前主播的年守護無法開通月守護"); + return; + } else { + if (mLiveGuardInfo.getMyGuardType() == Constants.GUARD_TYPE_MONTH + && mTargetBuyBean.getType() == Constants.GUARD_TYPE_YEAR) { + DialogUitl.showSimpleDialog(mContext, WordUtil.getString(R.string.guard_buy_tip_2), new DialogUitl.SimpleCallback() { + @Override + public void onConfirmClick(Dialog dialog, String content) { + doBuyGuard(); + } + }); + return; + } else if (mLiveGuardInfo.getMyGuardType() == Constants.GUARD_TYPE_DAY + && mTargetBuyBean.getType() == Constants.GUARD_TYPE_MONTH) { + DialogUitl.showSimpleDialog(mContext, "您為當前主播的周守護,開通月守護將覆蓋您的周守護時長,是否開通?", new DialogUitl.SimpleCallback() { + @Override + public void onConfirmClick(Dialog dialog, String content) { + doBuyGuard(); + } + }); + return; + } else if (mLiveGuardInfo.getMyGuardType() == Constants.GUARD_TYPE_DAY + && mTargetBuyBean.getType() == Constants.GUARD_TYPE_YEAR) { + DialogUitl.showSimpleDialog(mContext, "您為當前主播的周守護,開通年守護將覆蓋您的周守護時長,是否開通?", new DialogUitl.SimpleCallback() { + @Override + public void onConfirmClick(Dialog dialog, String content) { + doBuyGuard(); + } + }); + return; + } + + } + buyGuard(); + } + + /** + * 购买守护 + */ + private void buyGuard() { + if (mTargetBuyBean == null) { + return; + } + DialogUitl.showSimpleDialog(mContext, + String.format(WordUtil.getString(R.string.guard_buy_tip_3), mTargetBuyBean.getCoin(), mCoinName, mTargetBuyBean.getShopName()), + new DialogUitl.SimpleCallback() { + + @Override + public void onConfirmClick(Dialog dialog, String content) { + doBuyGuard(); + } + }); + } + + /** + * 购买守护 + */ + private void doBuyGuard() { + if (mTargetBuyBean == null) { + return; + } + LiveHttpUtil.buyGuard(mLiveUid, mStream, mTargetBuyBean.getId(), new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + JSONObject obj = JSON.parseObject(info[0]); + String votes = obj.getString("votestotal");//主播当前的映票数 + int guardNum = obj.getIntValue("guard_nums");//主播当前的守护人数 + int guardType = obj.getIntValue("type"); + String ancherName = obj.getString("ancherName"); + String liveuid = obj.getString("liveuid"); + if (mLiveGuardInfo != null) { + mLiveGuardInfo.setMyGuardType(guardType); + mLiveGuardInfo.setMyGuardEndTime(obj.getString("endtime")); + mLiveGuardInfo.setGuardNum(guardNum); + } + mCoinVal = obj.getLongValue("coin"); + String coinString = String.valueOf(mCoinVal); + mCoin.setText(coinString); + UserBean u = CommonAppConfig.getInstance().getUserBean(); + if (u != null) { + u.setCoin(coinString); + u.setLevel(obj.getIntValue("level")); + } + ((LiveActivity) mContext).sendBuyGuardMessage2(votes, guardNum, guardType, ancherName, liveuid); + dismiss(); + } + ToastUtil.show(msg); + } + }); + } + + + @Override + public void onDestroy() { + mLiveGuardInfo = null; + LiveHttpUtil.cancel(LiveHttpConsts.GET_GUARD_BUY_LIST); + super.onDestroy(); + } +} diff --git a/live/src/main/res/drawable/bg_guard_info.xml b/live/src/main/res/drawable/bg_guard_info.xml new file mode 100644 index 000000000..e7a43f71c --- /dev/null +++ b/live/src/main/res/drawable/bg_guard_info.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/drawable/bg_guard_up_title.xml b/live/src/main/res/drawable/bg_guard_up_title.xml new file mode 100644 index 000000000..15af2f005 --- /dev/null +++ b/live/src/main/res/drawable/bg_guard_up_title.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/drawable/guardian_img_bg.png b/live/src/main/res/drawable/guardian_img_bg.png new file mode 100644 index 000000000..2a6bc02e6 Binary files /dev/null and b/live/src/main/res/drawable/guardian_img_bg.png differ diff --git a/live/src/main/res/drawable/guardian_img_wings.png b/live/src/main/res/drawable/guardian_img_wings.png new file mode 100644 index 000000000..25aaed820 Binary files /dev/null and b/live/src/main/res/drawable/guardian_img_wings.png differ diff --git a/live/src/main/res/drawable/img_diamond.png b/live/src/main/res/drawable/img_diamond.png new file mode 100644 index 000000000..b1de36b8f Binary files /dev/null and b/live/src/main/res/drawable/img_diamond.png differ diff --git a/live/src/main/res/drawable/img_guard_bottom.png b/live/src/main/res/drawable/img_guard_bottom.png new file mode 100644 index 000000000..94de45974 Binary files /dev/null and b/live/src/main/res/drawable/img_guard_bottom.png differ diff --git a/live/src/main/res/drawable/img_k_selected.png b/live/src/main/res/drawable/img_k_selected.png new file mode 100644 index 000000000..efdc9aba2 Binary files /dev/null and b/live/src/main/res/drawable/img_k_selected.png differ diff --git a/live/src/main/res/drawable/img_k_uncheck.png b/live/src/main/res/drawable/img_k_uncheck.png new file mode 100644 index 000000000..e803cb8a1 Binary files /dev/null and b/live/src/main/res/drawable/img_k_uncheck.png differ diff --git a/live/src/main/res/drawable/img_venosa.png b/live/src/main/res/drawable/img_venosa.png new file mode 100644 index 000000000..8171bc178 Binary files /dev/null and b/live/src/main/res/drawable/img_venosa.png differ diff --git a/live/src/main/res/drawable/sh_img_title.png b/live/src/main/res/drawable/sh_img_title.png new file mode 100644 index 000000000..9fc187e8b Binary files /dev/null and b/live/src/main/res/drawable/sh_img_title.png differ diff --git a/live/src/main/res/layout/dialog_guard_list.xml b/live/src/main/res/layout/dialog_guard_list.xml index 5ee191918..6b97a3ee6 100644 --- a/live/src/main/res/layout/dialog_guard_list.xml +++ b/live/src/main/res/layout/dialog_guard_list.xml @@ -48,8 +48,7 @@ android:gravity="center" android:text="@string/guard_buy_2" android:textColor="@color/white" - android:textSize="14sp" - /> + android:textSize="14sp" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/item_dialog_guard_buy.xml b/live/src/main/res/layout/item_dialog_guard_buy.xml new file mode 100644 index 000000000..c00fd158c --- /dev/null +++ b/live/src/main/res/layout/item_dialog_guard_buy.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/values/strings.xml b/live/src/main/res/values/strings.xml index 7abc06d3b..491888253 100644 --- a/live/src/main/res/values/strings.xml +++ b/live/src/main/res/values/strings.xml @@ -1 +1,4 @@ - + + 成爲TA的守護,爲TA保駕護航! + 返還 +