公会功能,firebase和adjust埋点,充值页面修改

This commit is contained in:
wushaocheng
2022-11-10 21:39:52 +08:00
parent f568249c32
commit e565868c03
34 changed files with 869 additions and 120 deletions

View File

@@ -0,0 +1,11 @@
package com.yizhuan.erban.application;
/**
* Created by wushaocheng on 2022/11/10.
*/
public interface IReportConstants {
String CHANNEL_NAME = "ChannelName";
String ADJUST_REGISTER = "yly8k0";
}

View File

@@ -0,0 +1,41 @@
package com.yizhuan.erban.application;
import android.os.Bundle;
import java.util.Map;
/**
* Created by logwee on 2018/10/10.
*/
public interface IReportService {
/**
* 设置FirebaseAnalytics公共属性
*
* @param bundle 公共属性
*/
void setFirebaseAnalyticsDefaultEventParameters(Bundle bundle);
/**
* 埋点,不需要字事件
*
* @param eventId 事件名称
*/
void reportEvent(String eventId);
/**
* 埋点
*
* @param eventId 事件名称
* @param map 事件参数和值
*/
void reportEvent(String eventId, Map<String, Object> map);
/**
* Adjust埋点
*
* @param eventId 事件名称
*/
void reportAdjustEvent(String eventId);
}

View File

@@ -0,0 +1,114 @@
package com.yizhuan.erban.application;
import android.os.Bundle;
import android.text.TextUtils;
import com.adjust.sdk.Adjust;
import com.adjust.sdk.AdjustConfig;
import com.adjust.sdk.AdjustEvent;
import com.adjust.sdk.LogLevel;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.gson.Gson;
import com.orhanobut.logger.Logger;
import com.yizhuan.xchat_android_constants.XChatConstants;
import com.yizhuan.xchat_android_library.utils.AppMetaDataUtil;
import java.util.Map;
/**
* 统一埋点事件
* create by lvzebiao @2019/8/14
*/
public class ReportManager implements IReportService{
private static final String TAG = "ReportManager";
private ReportManager() {}
private static final class Helper {
private static final ReportManager INSTANCE = new ReportManager();
}
public static ReportManager get() {
return Helper.INSTANCE;
}
public void init() {
initFirebase();
initAdjust();
}
// FirebaseAnalytics注册公共属性
private void initFirebase() {
Bundle params = new Bundle();
params.putString(IReportConstants.CHANNEL_NAME, AppMetaDataUtil.getChannelID());
setFirebaseAnalyticsDefaultEventParameters(params);
}
//Adjust初始化
private void initAdjust() {
String appToken = XChatConstants.ADJUST_APP_TOKEN;
String environment = AdjustConfig.ENVIRONMENT_PRODUCTION;
AdjustConfig config = new AdjustConfig(XChatApplication.instance(), appToken, environment);
config.setLogLevel(LogLevel.VERBOSE);
Adjust.onCreate(config);
}
/**
* 设置FirebaseAnalytics公共属性
*
* @param bundle 公共属性
*/
@Override
public void setFirebaseAnalyticsDefaultEventParameters(Bundle bundle) {
if (bundle != null) {
FirebaseAnalytics.getInstance(XChatApplication.instance()).setDefaultEventParameters(bundle);
}
}
/**
* 埋点,不需要上报网络质量和事件耗时
*
* @param eventId 事件名称
*/
@Override
public void reportEvent(String eventId) {
reportEvent(eventId, null);
}
/**
* 埋点
*
* @param eventId 事件名称
* @param map 事件参数和值
*/
@Override
public void reportEvent(String eventId, Map<String, Object> map) {
try {
Logger.i(TAG, "reportEvent: eventId=%s, map=%s", eventId, new Gson().toJson(map));
Bundle bundle = null;
if (map != null) {
bundle = new Bundle();
for (Map.Entry<String, Object> item : map.entrySet()) {
String key = item.getKey();
Object value = item.getValue();
if (!TextUtils.isEmpty(key) && value != null) {
bundle.putString(key, String.valueOf(value));
}
}
}
//所有事件都上报到Google Analytics
FirebaseAnalytics.getInstance(XChatApplication.instance()).logEvent(eventId, bundle);
} catch (Exception e) {
Logger.e(TAG, "reportEvent", e);
}
}
@Override
public void reportAdjustEvent(String eventId) {
AdjustEvent adjustEvent = new AdjustEvent(eventId);
Adjust.trackEvent(adjustEvent);
}
}

View File

@@ -17,12 +17,8 @@ import android.util.Log;
import androidx.multidex.MultiDex;
import com.adjust.sdk.Adjust;
import com.adjust.sdk.AdjustConfig;
import com.adjust.sdk.LogLevel;
import com.bumptech.glide.request.target.ViewTarget;
import com.coorchice.library.utils.LogUtils;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.hjq.toast.ToastUtils;
import com.mob.MobSDK;
import com.mob.moblink.MobLink;
@@ -278,13 +274,6 @@ public class XChatApplication extends Application {
UMConfigure.setEncryptEnabled(true);
// 集成测试
UMConfigure.setLogEnabled(BuildConfig.DEBUG);
//Adjust
String appToken = XChatConstants.ADJUST_APP_TOKEN;
String environment = AdjustConfig.ENVIRONMENT_SANDBOX;
AdjustConfig config = new AdjustConfig(instance, appToken, environment);
config.setLogLevel(LogLevel.VERBOSE);
Adjust.onCreate(config);
}
LogUtils.d("init time = " + (System.currentTimeMillis() - startTime) + "ms");
@@ -498,6 +487,8 @@ public class XChatApplication extends Application {
InitialModel.get().init(true).subscribe();
//上报平台初始化
ReportManager.get().init();
}
private static void initNimUIKit() {
@@ -537,7 +528,6 @@ public class XChatApplication extends Application {
initOtherSDK();
}
initContext(this);
FirebaseAnalytics.getInstance(this);
}
/**

View File

@@ -1,14 +1,12 @@
package com.yizhuan.erban.association.adapter;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
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.ImageLoadUtilsV2;
import com.yizhuan.xchat_android_core.association.ClanListInfo;
import com.yizhuan.xchat_android_core.association.HallListInfo;
/**
@@ -44,15 +42,16 @@ public class AssociationRoomAdapter extends BaseQuickAdapter<HallListInfo, BaseV
ImageLoadUtilsV2.loadAvatar(helper.getView(R.id.iv_guild_icon), item.getOwnerAvatar());
helper.setText(R.id.tv_name, item.getHallName());
helper.setText(R.id.tv_room_id, mContext.getString(R.string.association_room_id, String.valueOf(item.getOwnerErbanNo())));
TextView tvApply = helper.getView(R.id.tvApply);
if(item.getApplyBtnStatus() == 0){
if (item.getApplyBtnStatus() == 0) {
tvApply.setVisibility(View.GONE);
}else if(item.getApplyBtnStatus() == 1){
} else if (item.getApplyBtnStatus() == 1) {
tvApply.setVisibility(View.VISIBLE);
tvApply.setSelected(true);
tvApply.setText(mContext.getString(R.string.apply_join));
}else if(item.getApplyBtnStatus() == 2){
} else if (item.getApplyBtnStatus() == 2) {
tvApply.setVisibility(View.VISIBLE);
tvApply.setSelected(false);
tvApply.setText(mContext.getString(R.string.have_apply));

View File

@@ -50,6 +50,10 @@ class AssociationFragment : BaseViewBindingFragment<FragmentAssociationBinding>(
associationAdapter.setOnItemChildClickListener { adapter, view, position ->
val bean = associationAdapter.getItem(position)
bean?.let {
if(it.applyBtnStatus == 2){
toast(getString(R.string.can_not_apply_3_day))
return@let
}
dialogManager.showProgressDialog(context)
HallModel.get().applyJoinClan(it.clanId.toLong())
.compose(RxHelper.bindFragment(this))

View File

@@ -1,10 +1,14 @@
package com.yizhuan.erban.association.fragment
import android.content.Context
import android.os.Bundle
import android.text.Editable
import android.text.TextUtils
import android.text.TextWatcher
import android.view.KeyEvent
import android.view.View
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager
import android.widget.TextView
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
@@ -38,29 +42,53 @@ class AssociationRoomFragment : BaseViewBindingFragment<FragmentAssociationRoomB
private lateinit var associationRoomAdapter: AssociationRoomAdapter
private lateinit var rvDelegate: RVDelegate<HallListInfo>
private var list : MutableList<HallListInfo> = ArrayList()
private val associationViewModel: AssociationViewModel by viewModels()
override fun init() {
binding.mTvSearch.setOnClickListener {
if (!TextUtils.isEmpty(binding.etSearch.text.toString())) {
val hallList = rvDelegate.adapter.data
val list = hallList.filter { it.hallName.contains(binding.mTvSearch.text.toString()) }
val hallList = list
val list = hallList.filter { it.hallName.contains(binding.etSearch.text.toString()) || it.hallId.toString().contains(binding.etSearch.text.toString()) }
if(list.isEmpty()){
rvDelegate.adapter.emptyView.findViewById<TextView>(R.id.tv_hint).text = getString(R.string.no_search_room)
}
rvDelegate.setNewData(list)
}else{
toast(getString(R.string.search_input_room_or_id))
rvDelegate.adapter.emptyView.findViewById<TextView>(R.id.tv_hint).text = getString(R.string.association_hall_list_empty)
rvDelegate.setNewData(list)
}
hideSoftInput()
}
binding.etSearch.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
}
override fun afterTextChanged(s: Editable) {
if (s.toString() == "") {
rvDelegate.adapter.emptyView.findViewById<TextView>(R.id.tv_hint).text = getString(R.string.association_hall_list_empty)
rvDelegate.setNewData(list)
}
}
})
binding.etSearch.setOnEditorActionListener(TextView.OnEditorActionListener { v, actionId, event -> //以下方法防止两次发送请求
if (actionId == EditorInfo.IME_ACTION_SEARCH && event != null || event != null && event.keyCode == KeyEvent.KEYCODE_ENTER) {
if (event.action == KeyEvent.ACTION_UP) { //发送请求
val newStr: String = binding.etSearch.text.toString().trim { it <= ' ' }
if (!TextUtils.isEmpty(newStr)) {
val hallList = rvDelegate.adapter.data
val list = hallList.filter { it.hallName.contains(newStr) }
val hallList = list
val list = hallList.filter { it.hallName.contains(newStr) || it.hallId.toString().contains(newStr)}
if(list.isEmpty()){
rvDelegate.adapter.emptyView.findViewById<TextView>(R.id.tv_hint).text = getString(R.string.no_search_room)
}
rvDelegate.setNewData(list)
} else {
toast(getString(R.string.search_input_room_or_id))
rvDelegate.adapter.emptyView.findViewById<TextView>(R.id.tv_hint).text = getString(R.string.association_hall_list_empty)
rvDelegate.setNewData(list)
}
hideSoftInput()
return@OnEditorActionListener true //自己消费
}
return@OnEditorActionListener true
@@ -80,6 +108,10 @@ class AssociationRoomFragment : BaseViewBindingFragment<FragmentAssociationRoomB
associationRoomAdapter.setOnItemChildClickListener { adapter, view, position ->
val bean = associationRoomAdapter.getItem(position)
bean?.let {
if(it.applyBtnStatus == 2){
toast(getString(R.string.can_not_apply_7_day))
return@let
}
dialogManager.showProgressDialog(context)
HallModel.get().applyJoinHall(it.hallId)
.compose(RxHelper.bindFragment(this))
@@ -111,14 +143,21 @@ class AssociationRoomFragment : BaseViewBindingFragment<FragmentAssociationRoomB
.build()
associationViewModel.hallListLiveData.observe(this) {
list = it as MutableList<HallListInfo>
rvDelegate.setNewData(it)
}
associationViewModel.getHallList()
}
private fun hideSoftInput() {
val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(binding.etSearch.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
}
override fun onDestroyView() {
super.onDestroyView()
list.clear()
dialogManager.dismissDialog()
}

View File

@@ -16,10 +16,12 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.netease.nim.uikit.StatusBarUtil;
import com.tongdaxing.erban.upgrade.AppUpgradeHelper;
import com.trello.rxlifecycle3.android.ActivityEvent;
import com.yizhuan.erban.R;
import com.yizhuan.erban.application.ReportManager;
import com.yizhuan.erban.base.BaseActivity;
import com.yizhuan.erban.common.widget.OriginalDrawStatusClickSpan;
import com.yizhuan.erban.ui.login.helper.LogoutHelper;
@@ -35,6 +37,8 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.HashMap;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
@@ -144,6 +148,9 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
@Override
public void onSuccess(String s) {
HashMap<String, Object> map = new HashMap<>(2);
map.put(FirebaseAnalytics.Param.METHOD, getString(R.string.login_facebook));
ReportManager.get().reportEvent(FirebaseAnalytics.Event.LOGIN, map);
getDialogManager().dismissDialog();
finish();
}
@@ -167,6 +174,9 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
@Override
public void onSuccess(String s) {
HashMap<String, Object> map = new HashMap<>(2);
map.put(FirebaseAnalytics.Param.METHOD, getString(R.string.login_line));
ReportManager.get().reportEvent(FirebaseAnalytics.Event.LOGIN, map);
getDialogManager().dismissDialog();
finish();
}
@@ -191,6 +201,9 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
@Override
public void onSuccess(String s) {
HashMap<String, Object> map = new HashMap<>(2);
map.put(FirebaseAnalytics.Param.METHOD, getString(R.string.login_google));
ReportManager.get().reportEvent(FirebaseAnalytics.Event.LOGIN, map);
getDialogManager().dismissDialog();
finish();
}

View File

@@ -9,8 +9,10 @@ import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.netease.nim.uikit.StatusBarUtil;
import com.yizhuan.erban.R;
import com.yizhuan.erban.application.ReportManager;
import com.yizhuan.erban.base.BaseActivity;
import com.yizhuan.erban.ui.login.helper.LogoutHelper;
import com.yizhuan.xchat_android_core.auth.AuthModel;
@@ -21,6 +23,8 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.HashMap;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
@@ -105,6 +109,9 @@ public class LoginPasswordActivity extends BaseActivity {
@Override
public void onSuccess(String s) {
HashMap<String, Object> map = new HashMap<>(2);
map.put(FirebaseAnalytics.Param.METHOD, getString(R.string.login_account));
ReportManager.get().reportEvent(FirebaseAnalytics.Event.LOGIN, map);
getDialogManager().dismissDialog();
setResult(RESULT_OK);
finish();

View File

@@ -11,10 +11,13 @@ import android.widget.RadioButton;
import androidx.annotation.Nullable;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.sleepbot.datetimepicker.time.RadialPickerLayout;
import com.sleepbot.datetimepicker.time.TimePickerDialog;
import com.trello.rxlifecycle3.android.FragmentEvent;
import com.yizhuan.erban.R;
import com.yizhuan.erban.application.IReportConstants;
import com.yizhuan.erban.application.ReportManager;
import com.yizhuan.erban.base.BaseFragment;
import com.yizhuan.erban.common.widget.dialog.DialogManager;
import com.yizhuan.xchat_android_core.auth.AuthModel;
@@ -208,6 +211,7 @@ public class AddUserInfoFragment extends BaseFragment
uid = linkedInfo.getUid();
}
INVITE_USER_CODE = shareCode;
String finalChannel = channel;
UserModel.get().requestCompleteUserInfo(userInfo, channel, uid, roomUid, shareCode)
.compose(bindUntilEvent(FragmentEvent.DESTROY))
.subscribe(new SingleObserver<UserInfo>() {
@@ -220,6 +224,10 @@ public class AddUserInfoFragment extends BaseFragment
public void onSuccess(UserInfo userInfo) {
getDialogManager().dismissDialog();
StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_COMPLETE, ResUtil.getString(R.string.login_fragment_adduserinfofragment_09));
ReportManager.get().reportAdjustEvent(IReportConstants.ADJUST_REGISTER);
HashMap<String, Object> map = new HashMap<>(2);
map.put(FirebaseAnalytics.Param.METHOD, finalChannel);
ReportManager.get().reportEvent(FirebaseAnalytics.Event.SIGN_UP, map);
AuthModel.get().setThirdUserInfo(null);
getActivity().finish();
}

View File

@@ -1,5 +1,7 @@
package com.yizhuan.erban.ui.widget;
import static com.yizhuan.xchat_android_library.utils.ResUtil.getString;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
@@ -9,10 +11,14 @@ import android.view.WindowManager;
import android.widget.TextView;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.yizhuan.erban.R;
import com.yizhuan.erban.application.ReportManager;
import com.yizhuan.xchat_android_library.utils.ResUtil;
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
import java.util.HashMap;
import cn.sharesdk.facebook.Facebook;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.ShareSDK;
@@ -91,27 +97,39 @@ public class ShareDialog extends BottomSheetDialog implements View.OnClickListen
case R.id.tv_erban:
if (onShareDialogItemClick != null) {
if (type != TYPE_SHARE_H5) {
HashMap<String, Object> map = new HashMap<>(2);
map.put(FirebaseAnalytics.Param.CONTENT_TYPE, getString(R.string.text_share_erban_friends));
ReportManager.get().reportEvent(FirebaseAnalytics.Event.SHARE, map);
onShareDialogItemClick.onInAppSharingItemClick();
} else {
SingleToastUtil.showToastShort(ResUtil.getString(R.string.ui_widget_sharedialog_02));
SingleToastUtil.showToastShort(getString(R.string.ui_widget_sharedialog_02));
}
}
dismiss();
break;
case R.id.tv_line:
if (onShareDialogItemClick != null) {
HashMap<String, Object> map = new HashMap<>(2);
map.put(FirebaseAnalytics.Param.CONTENT_TYPE, getString(R.string.share_line));
ReportManager.get().reportEvent(FirebaseAnalytics.Event.SHARE, map);
onShareDialogItemClick.onSharePlatformClick(ShareSDK.getPlatform(Line.NAME));
}
dismiss();
break;
case R.id.tv_facebook:
if (onShareDialogItemClick != null) {
HashMap<String, Object> map = new HashMap<>(2);
map.put(FirebaseAnalytics.Param.CONTENT_TYPE, getString(R.string.share_facebook));
ReportManager.get().reportEvent(FirebaseAnalytics.Event.SHARE, map);
onShareDialogItemClick.onSharePlatformClick(ShareSDK.getPlatform(Facebook.NAME));
}
dismiss();
break;
case R.id.tv_share_link:
if (onShareDialogItemClick != null) {
HashMap<String, Object> map = new HashMap<>(2);
map.put(FirebaseAnalytics.Param.CONTENT_TYPE, getString(R.string.share_link));
ReportManager.get().reportEvent(FirebaseAnalytics.Event.SHARE, map);
onShareDialogItemClick.onSharePlatformClick(ShareSDK.getPlatform(GooglePlus.NAME));
}
dismiss();

View File

@@ -100,9 +100,9 @@
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_marginStart="16dp"
android:layout_marginTop="50dp"
android:layout_marginTop="@dimen/dp_25"
android:layout_marginEnd="@dimen/dp_16"
android:layout_marginBottom="@dimen/dp_40"
android:layout_marginBottom="@dimen/dp_18"
android:background="@drawable/bg_common_confirm_normal"
android:gravity="center"
android:text="@string/charge_confirm_charge"

View File

@@ -4,11 +4,10 @@
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ll_bg"
android:layout_width="match_parent"
android:layout_height="65dp"
android:layout_height="56dp"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_16"
android:layout_marginBottom="@dimen/dp_10"
android:background="@drawable/bg_google_charge_bg_selector"
android:gravity="center_vertical"
android:orientation="horizontal">

View File

@@ -19,6 +19,7 @@
<string name="login_facebook">Facebook登錄</string>
<string name="login_line">Line登錄</string>
<string name="login_google">Google登錄</string>
<string name="login_account">賬號登錄</string>
<string name="login_select_other_login_type">選擇其他方式登錄</string>
<string name="login_agree_with_the_protocol">同意隱私政策和用戶協議後,才可以註冊登錄哦~</string>
<string name="charge_agree_with_the_protocol">請勾選同意《用戶充值協議》</string>
@@ -4950,5 +4951,13 @@
<string name="clan_week"></string>
<string name="clan_month"></string>
<string name="join_clan">加入公會</string>
<string name="association_room_id">房間ID:%s</string>
<string name="can_not_apply_3_day">3天内不可重複發送申請</string>
<string name="can_not_apply_7_day">7天内不可重複發送申請</string>
<string name="no_search_room">沒有搜到相關房間</string>
<string name="clan_income">廳收入</string>
<string name="live_income">主播收入</string>
<string name="diamond_income">鉆石收入</string>
<string name="department_of_management">所屬廳</string>
</resources>

View File

@@ -46,15 +46,30 @@
android:layout_marginStart="@dimen/dp_10"
android:src="@drawable/default_avatar" />
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<LinearLayout
android:orientation="vertical"
android:layout_marginStart="@dimen/dp_8"
android:textColor="@color/color_1F1A4E"
android:textSize="@dimen/sp_15"
android:textStyle="bold"
tools:text="公會名稱" />
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_1F1A4E"
android:textSize="@dimen/sp_15"
android:textStyle="bold"
tools:text="公會名稱" />
<TextView
android:id="@+id/tv_room_id"
android:text="@string/association_room_id"
android:textSize="@dimen/sp_12"
android:textColor="@color/color_B3B3C3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<View
android:layout_width="0dp"

View File

@@ -20,6 +20,8 @@ import com.yizhuan.erban.module_hall.hall.view.indicator.StatisticsIndicatorAdap
import com.yizhuan.erban.module_hall.income.ClanIncomeFragment;
import com.yizhuan.erban.module_hall.income.presenter.ClanIncomePresenter;
import com.yizhuan.erban.module_hall.income.view.IIncomeStatisticsView;
import com.yizhuan.erban.module_hall.income.view.LiveIncomeFragment;
import com.yizhuan.erban.ui.user.adapter.CommonWrapIndicatorAdapter;
import com.yizhuan.erban.ui.widget.magicindicator.MagicIndicator;
import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper;
import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator;
@@ -46,14 +48,14 @@ import butterknife.OnClick;
@CreatePresenter(ClanIncomePresenter.class)
public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, ClanIncomePresenter>
implements IIncomeStatisticsView, TimePickerClanDialog.TimePickerListener, ClanIncomeFragment.DayIncomeFragmentListener {
implements IIncomeStatisticsView, TimePickerClanDialog.TimePickerListener, ClanIncomeFragment.DayIncomeFragmentListener, LiveIncomeFragment.DayIncomeFragmentListener {
private static final int TYPE_DAY = 0;
private static final int TYPE_WEEK = 1;
private static final int TYPE_MONTH = 2;
@BindView(R.id.view_pager)
ViewPager viewPager;
List<ClanIncomeFragment> list = new ArrayList<>();
List<Fragment> list = new ArrayList<>();
@BindView(R.id.indicator)
MagicIndicator indicator;
@BindView(R.id.tv_month_day_start)
@@ -79,6 +81,7 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
private int mCurrentType;
private long mDayFirstTime = System.currentTimeMillis();
private long mDayLastTime = mDayFirstTime;
private int mSelectPosition;
public static void start(Context context, long id) {
Intent intent = new Intent(context, ClanIncomeActivity.class);
@@ -95,17 +98,13 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
long id = getIntent().getLongExtra(ClanIncomeFragment.FLAG_CLAN_ID, 0);
initWhiteTitleBar(ResUtil.getString(R.string.hall_activity_clanincomeactivity_01));
ClanIncomeFragment fragment = ClanIncomeFragment.getInstance(id);
fragment.setmDayIncomeFragmentListener(this);
list.add(fragment);
ClanIncomeFragment clanIncomeFragment = ClanIncomeFragment.getInstance(id);
clanIncomeFragment.setmDayIncomeFragmentListener(this);
list.add(clanIncomeFragment);
fragment = ClanIncomeFragment.getInstance(id);
fragment.setmDayIncomeFragmentListener(this);
list.add(fragment);
fragment = ClanIncomeFragment.getInstance(id);
fragment.setmDayIncomeFragmentListener(this);
list.add(fragment);
LiveIncomeFragment liveIncomeFragment = LiveIncomeFragment.getInstance(id);
liveIncomeFragment.setmDayIncomeFragmentListener(this);
list.add(liveIncomeFragment);
viewPager.setAdapter(adapter);
}
@@ -131,13 +130,14 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
private void initIndicator() {
List<String> tagList = new ArrayList<>();
tagList.add(ResUtil.getString(R.string.hall_activity_clanincomeactivity_02));
tagList.add(ResUtil.getString(R.string.hall_activity_clanincomeactivity_03));
tagList.add(ResUtil.getString(R.string.hall_activity_clanincomeactivity_04));
StatisticsIndicatorAdapter adapter = new StatisticsIndicatorAdapter(tagList, 5);
adapter.setOnItemSelectListener(position -> viewPager.setCurrentItem(position));
tagList.add(ResUtil.getString(R.string.clan_income));
tagList.add(ResUtil.getString(R.string.live_income));
CommonWrapIndicatorAdapter magicIndicatorAdapter = new CommonWrapIndicatorAdapter(context, tagList);
magicIndicatorAdapter.setOnItemSelectListener((position, view) -> {
viewPager.setCurrentItem(position);
});
CommonNavigator navigator = new CommonNavigator(this);
navigator.setAdapter(adapter);
navigator.setAdapter(magicIndicatorAdapter);
navigator.setAdjustMode(true);
indicator.setNavigator(navigator);
ViewPagerHelper.bind(indicator, viewPager);
@@ -152,13 +152,10 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
@Override
public void onPageSelected(int position) {
// 切换日,周
mCurrentType = position;
mSelectPosition = position;
ClanIncomePresenter presenter = getMvpPresenter();
if (mCurrentType == TYPE_WEEK) {
StatisticManager.Instance().onEvent(BasicConfig.INSTANCE.getAppContext(),
StatisticsProtocol.HALL_INCOME_WEEKLY_CLICK, ResUtil.getString(R.string.hall_activity_clanincomeactivity_05), null);
getWeekIncomeTotal(presenter.getWeekFirstDay(), presenter.getWeekLastDay());
} else if (mCurrentType == TYPE_DAY) {
getDayIncomeTotal(getDayFormat(mDayFirstTime), getDayFormat(mDayLastTime));
@@ -243,7 +240,13 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
tvMonthDayStart.setText(String.format(getString(R.string.format_month_day), dayArray[1], dayArray[2]));
tvMonthDayEnd.setVisibility(View.VISIBLE);
tvMonthDayEnd.setText(String.format(getString(R.string.format_month_day), endDayArray[1], endDayArray[2]));
list.get(0).getIncomeTotal(startTimeStr, endTimeStr);
if (mSelectPosition == 0) {
ClanIncomeFragment clanIncomeFragment = (ClanIncomeFragment) list.get(0);
clanIncomeFragment.getIncomeTotal(startTimeStr, endTimeStr);
}else if(mSelectPosition == 1){
LiveIncomeFragment liveIncomeFragment = (LiveIncomeFragment) list.get(1);
liveIncomeFragment.getIncomeTotal(startTimeStr, endTimeStr);
}
}
private void getWeekIncomeTotal(String startTimeStr, String endTimeStr) {
@@ -254,8 +257,13 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
tvMonthDayEnd.setVisibility(View.VISIBLE);
tvMonthDayStart.setText(String.format(getString(R.string.format_month_day), weekFirstArray[1], weekFirstArray[2]));
tvMonthDayEnd.setText(String.format(getString(R.string.format_month_day), weekLastArray[1], weekLastArray[2]));
list.get(1).getIncomeTotal(startTimeStr, endTimeStr);
if (mSelectPosition == 0) {
ClanIncomeFragment clanIncomeFragment = (ClanIncomeFragment) list.get(0);
clanIncomeFragment.getIncomeTotal(startTimeStr, endTimeStr);
}else if(mSelectPosition == 1){
LiveIncomeFragment liveIncomeFragment = (LiveIncomeFragment) list.get(1);
liveIncomeFragment.getIncomeTotal(startTimeStr, endTimeStr);
}
}
private void getMonthIncomeTotal(String startTimeStr, String endTimeStr) {
@@ -263,7 +271,13 @@ public class ClanIncomeActivity extends BaseMvpActivity<IIncomeStatisticsView, C
tvYear.setText(String.format(getString(R.string.format_year), startArray[0]));
tvMonthDayEnd.setVisibility(View.GONE);
tvMonthDayStart.setText(String.format(getString(R.string.format_month), startArray[1]));
list.get(2).getIncomeTotal(startTimeStr, endTimeStr);
if (mSelectPosition == 0) {
ClanIncomeFragment clanIncomeFragment = (ClanIncomeFragment) list.get(0);
clanIncomeFragment.getIncomeTotal(startTimeStr, endTimeStr);
}else if(mSelectPosition == 1){
LiveIncomeFragment liveIncomeFragment = (LiveIncomeFragment) list.get(1);
liveIncomeFragment.getIncomeTotal(startTimeStr, endTimeStr);
}
}
@Override

View File

@@ -377,7 +377,7 @@ public class ModuleHallActivity extends BaseMvpActivity<IModuleHallView, ModuleH
if (authInfoList != null && authInfoList.size() > 0) {
List<ButtonItem> list_adapter = new ArrayList<>();
if (hallInfo != null) {
if (hallInfo.getRoleType() == 1 && clanInfo != null && clanInfo.getElderUid() > 0) {
if (HallDataManager.get().getRoleType() == RoleType.OWNER && isSelfHall && clanInfo != null && clanInfo.getElderUid() <=0) {
ButtonItem item = new ButtonItem(getString(R.string.join_clan), () -> {
jumpCode(AuthInfo.AUTH_MEMBER_JOIN_CLAN);
});

View File

@@ -62,6 +62,8 @@ public class TimePickerClanDialog extends DialogFragment implements View.OnClick
private boolean isMonth;
private int mCurrentType;
private View view;
private static TimePickerClanDialog newInstance(PickerConfig pickerConfig, long firstMs, boolean isWeek, boolean isMonth, boolean isDay, long dayFirstTime, long dayLastTime) {
TimePickerClanDialog timePickerDialog = new TimePickerClanDialog();
timePickerDialog.initialize(pickerConfig, firstMs, isWeek, isMonth, isDay, dayFirstTime, dayLastTime);
@@ -112,7 +114,7 @@ public class TimePickerClanDialog extends DialogFragment implements View.OnClick
View initView() {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.dialog_clan_time_picker, null);
view = inflater.inflate(R.layout.dialog_clan_time_picker, null);
Context context = view.getContext();
TextView cancel = view.findViewById(R.id.tv_cancel);
cancel.setOnClickListener(this);
@@ -245,7 +247,13 @@ public class TimePickerClanDialog extends DialogFragment implements View.OnClick
this.isWeek = false;
this.isMonth = false;
mCurrentType = TYPE_DAY;
if (mFirstMs <= 0) {
mFirstMs = System.currentTimeMillis();
}
mPickerConfig.mType = Type.YEAR_MONTH_DAY;
mPickerConfig.mCurrentCalendar = new WheelCalendar(mFirstMs);
tvWeekLastDay.setSelected(false);
rlWeekGroup.setVisibility(View.VISIBLE);
if (mDayFirstTime != mDayLastTime) {
tvWeekLastDay.setText(TimeUtils.getDateTimeString(mDayLastTime, TimeUtils.DATE_FORMAT));
} else {
@@ -259,13 +267,20 @@ public class TimePickerClanDialog extends DialogFragment implements View.OnClick
tvWeekFirstDay.setSelected(false);
tvWeekLastDay.setSelected(true);
});
mTimeWheel = new TimeWheel(view, mPickerConfig);
Calendar currCalendar = Calendar.getInstance();
if (mFirstMs <= 0) {
mFirstMs = System.currentTimeMillis();
}
currCalendar.setTimeInMillis(mFirstMs);
setWeekView(currCalendar);
Calendar calendar = Calendar.getInstance();
mTimeWheel.setOnTimeChangeListener(() -> {
int year = mTimeWheel.getCurrentYear();
int month = mTimeWheel.getCurrentMonth();
int day = mTimeWheel.getCurrentDay();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, day);
setWeekView(calendar);
});
}else if(i == R.id.tvWeek) {
tvDay.setSelected(false);
tvWeek.setSelected(true);
@@ -274,14 +289,28 @@ public class TimePickerClanDialog extends DialogFragment implements View.OnClick
this.isWeek = true;
this.isMonth = false;
mCurrentType = TYPE_WEEK;
tvWeekFirstDay.setSelected(true);
tvWeekLastDay.setSelected(true);
Calendar currCalendar = Calendar.getInstance();
if (mFirstMs <= 0) {
mFirstMs = System.currentTimeMillis();
}
mPickerConfig.mType = Type.YEAR_MONTH_DAY;
mPickerConfig.mCurrentCalendar = new WheelCalendar(mFirstMs);
tvWeekFirstDay.setSelected(true);
tvWeekLastDay.setSelected(true);
rlWeekGroup.setVisibility(View.VISIBLE);
mTimeWheel = new TimeWheel(view, mPickerConfig);
Calendar currCalendar = Calendar.getInstance();
currCalendar.setTimeInMillis(mFirstMs);
setWeekView(currCalendar);
Calendar calendar = Calendar.getInstance();
mTimeWheel.setOnTimeChangeListener(() -> {
int year = mTimeWheel.getCurrentYear();
int month = mTimeWheel.getCurrentMonth();
int day = mTimeWheel.getCurrentDay();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, day);
setWeekView(calendar);
});
}else if(i == R.id.tvMonth) {
tvDay.setSelected(false);
tvWeek.setSelected(false);
@@ -290,6 +319,26 @@ public class TimePickerClanDialog extends DialogFragment implements View.OnClick
this.isWeek = false;
this.isMonth = true;
mCurrentType = TYPE_MONTH;
rlWeekGroup.setVisibility(View.GONE);
if (mFirstMs <= 0) {
mFirstMs = System.currentTimeMillis();
}
mPickerConfig.mType = Type.YEAR_MONTH;
mPickerConfig.mCurrentCalendar = new WheelCalendar(mFirstMs);
mTimeWheel = new TimeWheel(view, mPickerConfig);
Calendar currCalendar = Calendar.getInstance();
currCalendar.setTimeInMillis(mFirstMs);
setWeekView(currCalendar);
Calendar calendar = Calendar.getInstance();
mTimeWheel.setOnTimeChangeListener(() -> {
int year = mTimeWheel.getCurrentYear();
int month = mTimeWheel.getCurrentMonth();
int day = mTimeWheel.getCurrentDay();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, day);
setWeekView(calendar);
});
}
}

View File

@@ -112,6 +112,7 @@ public class TimeWheel {
break;
case YEAR_MONTH_DAY:
Utils.hideViews(hour, minute);
day.setVisibility(View.VISIBLE);
break;
case YEAR_MONTH:
Utils.hideViews(day, hour, minute);

View File

@@ -0,0 +1,34 @@
package com.yizhuan.erban.module_hall.income.adapter;
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.ImageLoadUtils;
import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2;
import com.yizhuan.xchat_android_core.module_hall.income.bean.ClanIncomeInfo;
import com.yizhuan.xchat_android_core.module_hall.income.bean.LiveIncomeInfo;
import com.yizhuan.xchat_android_library.utils.ResUtil;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class LiveIncomeAdapter extends BaseQuickAdapter<LiveIncomeInfo, BaseViewHolder> {
public LiveIncomeAdapter() {
super(R.layout.item_live_income);
}
@Override
protected void convert(@NotNull BaseViewHolder helper, LiveIncomeInfo item) {
helper.setText(R.id.tvIncome, String.valueOf(item.getIncome()))
.setText(R.id.tv_hall_number, String.valueOf(helper.getLayoutPosition() + 1))
.setText(R.id.tv_user_name, item.getNick())
.setText(R.id.tv_hall_name, item.getHallName());
ImageLoadUtilsV2.loadAvatar(helper.getView(R.id.iv_user_avatar), item.getAvatar());
ImageLoadUtils.loadImage(mContext, item.getHallAvatar(), helper.getView(R.id.iv_hall_avatar));
}
}

View File

@@ -0,0 +1,41 @@
package com.yizhuan.erban.module_hall.income.presenter;
import com.yizhuan.erban.base.BaseMvpPresenter;
import com.yizhuan.erban.module_hall.income.view.IClanIncomeView;
import com.yizhuan.erban.module_hall.income.view.ILiveIncomeView;
import com.yizhuan.xchat_android_core.module_hall.income.IncomeModel;
import com.yizhuan.xchat_android_core.module_hall.income.bean.ClanTotalIncomeInfo;
import com.yizhuan.xchat_android_core.module_hall.income.bean.LiveTotalIncomeInfo;
import org.jetbrains.annotations.NotNull;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
public class LiveIncomeFragmentPresenter extends BaseMvpPresenter<ILiveIncomeView> {
public void incomeTotal(long id, String startTimeStr, String endTimeStr) {
IncomeModel.get().getLiveIncomeList(id, startTimeStr, endTimeStr).compose(bindToLifecycle())
.subscribe(new SingleObserver<LiveTotalIncomeInfo>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(@NotNull LiveTotalIncomeInfo liveTotalIncomeInfo) {
if (getMvpView() == null)
return;
getMvpView().incomeTotalSuccess(liveTotalIncomeInfo);
}
@Override
public void onError(@NotNull Throwable e) {
if (getMvpView() == null)
return;
getMvpView().incomeTotalFail(e.getMessage());
}
});
}
}

View File

@@ -0,0 +1,11 @@
package com.yizhuan.erban.module_hall.income.view;
import com.yizhuan.xchat_android_core.module_hall.income.bean.LiveTotalIncomeInfo;
import com.yizhuan.xchat_android_library.base.IMvpBaseView;
public interface ILiveIncomeView extends IMvpBaseView {
void incomeTotalSuccess(LiveTotalIncomeInfo liveTotalIncomeInfo);
void incomeTotalFail(String message);
}

View File

@@ -0,0 +1,123 @@
package com.yizhuan.erban.module_hall.income.view;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.yizhuan.erban.R;
import com.yizhuan.erban.base.BaseMvpFragment;
import com.yizhuan.erban.module_hall.income.adapter.ClanIncomeAdapter;
import com.yizhuan.erban.module_hall.income.adapter.LiveIncomeAdapter;
import com.yizhuan.erban.module_hall.income.presenter.LiveIncomeFragmentPresenter;
import com.yizhuan.xchat_android_core.module_hall.income.bean.LiveTotalIncomeInfo;
import com.yizhuan.xchat_android_library.base.factory.CreatePresenter;
import com.yizhuan.xchat_android_library.utils.ListUtils;
import com.yizhuan.xchat_android_library.utils.ResUtil;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
/**
* 主播收入統計
* Created by wushaocheng on 2022/11/10.
*/
@CreatePresenter(LiveIncomeFragmentPresenter.class)
public class LiveIncomeFragment extends BaseMvpFragment<ILiveIncomeView, LiveIncomeFragmentPresenter> implements ILiveIncomeView {
public static final String FLAG_CLAN_ID = "clanId";
Unbinder unbinder;
@BindView(R.id.recycler_view)
RecyclerView recyclerView;
private LiveIncomeAdapter mIncomeAdapter;
private DayIncomeFragmentListener mDayIncomeFragmentListener;
private long clanId;
public static LiveIncomeFragment getInstance(long clanId) {
LiveIncomeFragment fragment = new LiveIncomeFragment();
Bundle bundle = new Bundle();
bundle.putLong(FLAG_CLAN_ID, clanId);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onFindViews() {
mIncomeAdapter = new LiveIncomeAdapter();
recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
recyclerView.setAdapter(mIncomeAdapter);
}
@Override
public void onSetListener() {
}
@Override
public void initiate() {
}
public void getIncomeTotal(String startTimeStr, String endTimeStr) {
clanId = requireArguments().getLong(FLAG_CLAN_ID);
getMvpPresenter().incomeTotal(clanId, startTimeStr, endTimeStr);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
unbinder = ButterKnife.bind(this, mView);
return mView;
}
@Override
public int getRootLayoutId() {
return R.layout.fragment_hall_income;
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
private void setTotal(double total) {
if (mDayIncomeFragmentListener != null)
mDayIncomeFragmentListener.setTotal(total);
}
public void setmDayIncomeFragmentListener(DayIncomeFragmentListener mDayIncomeFragmentListener) {
this.mDayIncomeFragmentListener = mDayIncomeFragmentListener;
}
@Override
public void incomeTotalSuccess(LiveTotalIncomeInfo liveTotalIncomeInfo) {
setTotal(liveTotalIncomeInfo.getTotal());
if (!ListUtils.isListEmpty(liveTotalIncomeInfo.getMemberIncome())) {
hideStatus();
mIncomeAdapter.setNewData(liveTotalIncomeInfo.getMemberIncome());
} else {
mIncomeAdapter.setNewData(null);
showNoData(ResUtil.getString(R.string.module_hall_income_clanincomefragment_01));
}
}
@Override
public void incomeTotalFail(String message) {
showNoData(ResUtil.getString(R.string.module_hall_income_clanincomefragment_02));
setTotal(0);
mIncomeAdapter.setNewData(null);
}
public interface DayIncomeFragmentListener {
void setTotal(double total);
}
}

View File

@@ -4,21 +4,19 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/bg_normal_1c1b22"
android:background="@color/color_white"
android:orientation="vertical">
<com.yizhuan.erban.base.TitleBar
android:id="@+id/title_bar"
android:layout_marginTop="@dimen/dp_30"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</com.yizhuan.erban.base.TitleBar>
android:layout_height="wrap_content"/>
<com.yizhuan.erban.ui.widget.magicindicator.MagicIndicator
android:id="@+id/indicator"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_45"
android:layout_height="@dimen/dp_25"
android:layout_marginStart="@dimen/dp_30"
android:layout_marginEnd="@dimen/dp_30" />
@@ -120,41 +118,6 @@
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="33dp"
android:layout_marginTop="25dp"
android:background="@color/bg_secondary_2a2a39"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="45dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/layout_activity_clan_income_04"
android:textColor="@color/text_normal_c6c6e9"
android:textSize="13dp" />
<TextView
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/layout_activity_clan_income_05"
android:textColor="@color/text_normal_c6c6e9"
android:textSize="13dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="30dp"
android:gravity="center"
android:text="@string/layout_activity_clan_income_06"
android:textColor="@color/text_normal_c6c6e9"
android:textSize="13dp" />
</LinearLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"

View File

@@ -1,12 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<com.yizhuan.erban.common.widget.StatusLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/status_layout"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="33dp"
android:layout_marginTop="25dp"
android:gravity="center_vertical"
android:orientation="horizontal">
</com.yizhuan.erban.common.widget.StatusLayout>
<TextView
android:layout_width="45dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/layout_activity_clan_income_04"
android:textColor="@color/text_normal_c6c6e9"
android:textSize="13dp" />
<TextView
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/layout_activity_clan_income_05"
android:textColor="@color/text_normal_c6c6e9"
android:textSize="13dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="30dp"
android:gravity="center"
android:text="@string/layout_activity_clan_income_06"
android:textColor="@color/text_normal_c6c6e9"
android:textSize="13dp" />
</LinearLayout>
<com.yizhuan.erban.common.widget.StatusLayout
android:id="@+id/status_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</com.yizhuan.erban.common.widget.StatusLayout>
</LinearLayout>

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="33dp"
android:layout_marginTop="25dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/diamond_income"
android:textColor="@color/text_normal_c6c6e9"
android:textSize="@dimen/sp_14" />
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/department_of_management"
android:textColor="@color/text_normal_c6c6e9"
android:textSize="14sp" />
</LinearLayout>
<com.yizhuan.erban.common.widget.StatusLayout
android:id="@+id/status_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</com.yizhuan.erban.common.widget.StatusLayout>
</LinearLayout>

View File

@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:background="@color/bg_normal_1c1b22">
tools:background="@color/color_white">
<LinearLayout
android:layout_width="match_parent"
@@ -18,7 +18,7 @@
android:layout_height="wrap_content"
android:gravity="center"
android:text="1"
android:textColor="@color/text_secondary_4f516a"
android:textColor="@color/color_1F1A4E"
android:textSize="15sp" />
<LinearLayout

View File

@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:background="@color/color_white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_hall_number"
android:layout_width="45dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center"
android:text="1"
android:textColor="@color/color_1F1A4E"
android:textSize="@dimen/sp_14" />
<LinearLayout
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginBottom="20dp"
android:orientation="vertical">
<com.yizhuan.erban.common.widget.CircleImageView
android:id="@+id/iv_user_avatar"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_gravity="center_horizontal"
android:src="@drawable/default_cover" />
<TextView
android:id="@+id/tv_user_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:ellipsize="end"
android:gravity="center"
android:lines="1"
android:textColor="@color/color_1F1A4E"
android:textSize="@dimen/sp_12"
tools:text="@string/layout_item_clan_income_01" />
</LinearLayout>
<TextView
android:id="@+id/tvIncome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:layout_marginTop="@dimen/dp_20"
android:textColor="@color/color_1F1A4E"
android:textSize="@dimen/sp_14"
android:textStyle="bold"
tools:text="1,000,000,000" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<com.yizhuan.erban.common.widget.RectRoundImageView
android:id="@+id/iv_hall_avatar"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/dp_6"
android:src="@drawable/default_cover"
app:borderRadius="8dp"
app:type="round" />
<TextView
android:id="@+id/tv_hall_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/dp_15"
android:textColor="@color/color_1F1A4E"
android:textSize="@dimen/sp_13"
tools:text="房間名稱" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/line_353548" />
</FrameLayout>

View File

@@ -4,6 +4,7 @@ import com.yizhuan.xchat_android_core.base.IModel;
import com.yizhuan.xchat_android_core.module_hall.income.bean.ClanTotalIncomeInfo;
import com.yizhuan.xchat_android_core.module_hall.income.bean.IncomeGiftInfo;
import com.yizhuan.xchat_android_core.module_hall.income.bean.IncomeTotalInfo;
import com.yizhuan.xchat_android_core.module_hall.income.bean.LiveTotalIncomeInfo;
import com.yizhuan.xchat_android_core.module_hall.income.bean.SingleRoomTotalIncomeInfo;
import java.util.List;
@@ -16,6 +17,8 @@ public interface IIncomeModel extends IModel {
Single<ClanTotalIncomeInfo> getClanIncomeList(long clanId, String startTimeStr, String endTimeStr);
Single<LiveTotalIncomeInfo> getLiveIncomeList(long clanId, String startTimeStr, String endTimeStr);
Single<SingleRoomTotalIncomeInfo> getSingleRoomIncomeList(String hallId, String clanId,String startTime, String endTime);
Single<List<IncomeGiftInfo>> incomeDetail(long memberId, long hallId, String startTimeStr, String endTimeStr);

View File

@@ -6,6 +6,7 @@ import com.yizhuan.xchat_android_core.bean.response.ServiceResult;
import com.yizhuan.xchat_android_core.module_hall.income.bean.ClanTotalIncomeInfo;
import com.yizhuan.xchat_android_core.module_hall.income.bean.IncomeGiftInfo;
import com.yizhuan.xchat_android_core.module_hall.income.bean.IncomeTotalInfo;
import com.yizhuan.xchat_android_core.module_hall.income.bean.LiveTotalIncomeInfo;
import com.yizhuan.xchat_android_core.module_hall.income.bean.SingleRoomTotalIncomeInfo;
import com.yizhuan.xchat_android_core.utils.net.RxHelper;
import com.yizhuan.xchat_android_library.net.rxnet.RxNet;
@@ -56,6 +57,27 @@ public class IncomeModel extends BaseModel implements IIncomeModel {
});
}
/**
* 獲取主播收入流水
* @param clanId
* @param startTime
* @param endTime
* @return
*/
@Override
public Single<LiveTotalIncomeInfo> getLiveIncomeList(long clanId, String startTime, String endTime) {
return api.getLiveIncomeList(clanId, startTime, endTime)
.compose(RxHelper.handleSchAndExce())
.flatMap((Function<ServiceResult<LiveTotalIncomeInfo>, SingleSource<LiveTotalIncomeInfo>>) response -> {
if (response.isSuccess()) {
return Single.just(response.getData());
} else {
return Single.error(new Throwable(response.getMessage()));
}
});
}
@Override
public Single<SingleRoomTotalIncomeInfo> getSingleRoomIncomeList(String clanId, String hallId, String startTime, String endTime) {
return api.getSingleRoomIncomeList(clanId, hallId, startTime, endTime)
@@ -105,6 +127,14 @@ public class IncomeModel extends BaseModel implements IIncomeModel {
@Query("startTime") String startTime,
@Query("endTime") String endTime);
/**
* 获取主播收入列表
*/
@GET("/clan/income/hallMemberTotalList")
Single<ServiceResult<LiveTotalIncomeInfo>> getLiveIncomeList(@Query("clanId") long clanId,
@Query("startTime") String startTime,
@Query("endTime") String endTime);
/**
* 获取个播房收入列表
*/

View File

@@ -0,0 +1,18 @@
package com.yizhuan.xchat_android_core.module_hall.income.bean;
import java.io.Serializable;
import lombok.Data;
@Data
public class LiveIncomeInfo implements Serializable {
private Long uid;
private String nick;
private String avatar;
private Double income;
private Long hallId;
private Long hallOwnerUid;
private String hallAvatar;
private String hallName;
}

View File

@@ -0,0 +1,13 @@
package com.yizhuan.xchat_android_core.module_hall.income.bean;
import java.util.List;
import lombok.Data;
@Data
public class LiveTotalIncomeInfo {
private double total;
private List<LiveIncomeInfo> memberIncome;
}

View File

@@ -24,5 +24,5 @@ only_arm64=false
channel_file=channel.txt
version_name=1.1.7
version_code=117
version_name=1.2.0
version_code=120

View File

@@ -55,4 +55,5 @@
<Littleredbook Enable="false" />
<Watermelonvideo Enable="false" />
<Tiktok Enable="false" />
<Taptap Enable="false" />
</DevInfor>