diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4632092038..d4dc355ab5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -604,6 +604,14 @@
android:name=".forum.search.ForumOrUserSearchActivity"
android:screenOrientation="portrait" />
+
+
+
+
diff --git a/app/src/main/java/com/gh/common/DefaultJsApi.kt b/app/src/main/java/com/gh/common/DefaultJsApi.kt
index ca42ec55d8..f507c902a6 100644
--- a/app/src/main/java/com/gh/common/DefaultJsApi.kt
+++ b/app/src/main/java/com/gh/common/DefaultJsApi.kt
@@ -115,6 +115,7 @@ class DefaultJsApi(var context: Context) {
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : BiResponse() {
override fun onSuccess(data: ResponseBody) {
+ EnergyTaskHelper.postEnergyTask("bind_wechat")
handler.complete(true)
}
@@ -198,6 +199,7 @@ class DefaultJsApi(var context: Context) {
@JavascriptInterface
fun updateRegulationTestStatus(msg: Any) {
if (msg.toString().toLowerCase(Locale.getDefault()) == "pass") {
+ EnergyTaskHelper.postEnergyTask("finish_etiquette_exam")
SPUtils.setString(Constants.SP_REGULATION_TEST_PASS_STATUS, "pass")
}
}
@@ -257,6 +259,11 @@ class DefaultJsApi(var context: Context) {
runOnUiThread { DirectUtils.directToWebView(context, url.toString(), "内部网页") }
}
+ @JavascriptInterface
+ fun postWearBadgeTask(msg: Any) {
+ EnergyTaskHelper.postEnergyTask("wear_badge")
+ }
+
@Keep
internal data class ImageEvent(var imageList: ArrayList = arrayListOf(), var position: Int = 0)
diff --git a/app/src/main/java/com/gh/common/constant/Constants.java b/app/src/main/java/com/gh/common/constant/Constants.java
index 2ec0f8122c..cbe7ddffe8 100644
--- a/app/src/main/java/com/gh/common/constant/Constants.java
+++ b/app/src/main/java/com/gh/common/constant/Constants.java
@@ -179,6 +179,18 @@ public class Constants {
public static final String LOGOUT_ADDRESS_DEV = "https://static-web.ghzs.com/ghzs_help_dev/help.html?content=5f6b1f02786564003944a693";
public static final String LOGOUT_ADDRESS = "https://static-web.ghzs.com/ghzs_help/help.html?content=5f534111b1f72909fc225672";
+ // 商品详情
+ public static final String COMMODITY_DETAIL_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/product";
+ public static final String COMMODITY_DETAIL_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/product";
+
+ // 光能记录
+ public static final String ENERGY_RECORD_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/record";
+ public static final String ENERGY_RECORD_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/record";
+
+ // 订单中心
+ public static final String ORDER_CENTER_ADDRESS_DEV = "https://static-web.ghzs.com/shop-dev/index.html#/orders";
+ public static final String ORDER_CENTER_ADDRESS = "https://static-web.ghzs.com/shop/index.html#/orders";
+
//最少需要多少数据才能上传
public static final int DATA_AMOUNT = 20;
diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java
index 9a2a29a478..43fcfcb809 100644
--- a/app/src/main/java/com/gh/common/util/DialogUtils.java
+++ b/app/src/main/java/com/gh/common/util/DialogUtils.java
@@ -1945,6 +1945,52 @@ public class DialogUtils {
return dialog;
}
+ public static void showEnergyDialog(Context context, String userName, String energy) {
+ context = checkDialogContext(context);
+
+ final Dialog dialog = new Dialog(context, R.style.DialogWindowTransparent);
+
+ View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_energy, null);
+ ((TextView)contentView.findViewById(R.id.userName)).setText("\"" + userName + "\"");
+ ((TextView)contentView.findViewById(R.id.energy)).setText(energy + "");
+
+ contentView.findViewById(R.id.dialog_positive).setOnClickListener(v -> {
+ dialog.dismiss();
+ });
+
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setContentView(contentView);
+ dialog.show();
+ }
+
+ public static void showEnergyTaskNoticeDialog(Context context, String title, String content) {
+ context = checkDialogContext(context);
+
+ final Dialog dialog = new Dialog(context, R.style.DialogWindowTransparent);
+
+ View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_notice, null);
+ TextView titleTv = contentView.findViewById(R.id.dialog_title);
+ TextView contentTv = contentView.findViewById(R.id.dialog_content);
+ TextView okTv = contentView.findViewById(R.id.dialog_ok);
+
+ if (title == null) {
+ titleTv.setVisibility(View.GONE);
+ } else {
+ titleTv.setVisibility(View.VISIBLE);
+ titleTv.setText(title);
+ }
+ contentTv.setText(content);
+
+ okTv.setTextColor(ContextCompat.getColor(context, R.color.theme_font));
+ okTv.setOnClickListener(v -> {
+ dialog.dismiss();
+ });
+
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setContentView(contentView);
+ dialog.show();
+ }
+
/**
* @param context may be is application context
* @return activity context
diff --git a/app/src/main/java/com/gh/common/util/DirectUtils.kt b/app/src/main/java/com/gh/common/util/DirectUtils.kt
index a40ab8e7be..356e7d53b3 100644
--- a/app/src/main/java/com/gh/common/util/DirectUtils.kt
+++ b/app/src/main/java/com/gh/common/util/DirectUtils.kt
@@ -39,6 +39,8 @@ import com.gh.gamecenter.gamedetail.rating.RatingReplyActivity
import com.gh.gamecenter.manager.UserManager
import com.gh.gamecenter.mygame.PlayedGameActivity
import com.gh.gamecenter.personalhome.UserHomeActivity
+import com.gh.gamecenter.personalhome.background.PersonalityBackgroundActivity
+import com.gh.gamecenter.personalhome.border.AvatarBorderActivity
import com.gh.gamecenter.qa.CommunityFragment
import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity
import com.gh.gamecenter.qa.article.SimpleArticleListActivity
@@ -48,10 +50,12 @@ import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity
import com.gh.gamecenter.qa.subject.CommunitySubjectActivity
import com.gh.gamecenter.retrofit.Response
import com.gh.gamecenter.retrofit.RetrofitManager
+import com.gh.gamecenter.security.BindPhoneActivity
import com.gh.gamecenter.servers.GameServersActivity
import com.gh.gamecenter.subject.SubjectActivity
import com.gh.gamecenter.suggest.SuggestType
import com.gh.gamecenter.tag.TagsActivity
+import com.gh.gamecenter.user.UserViewModel
import com.gh.gamecenter.video.data.VideoDataActivity
import com.gh.gamecenter.video.detail.VideoDetailActivity
import com.gh.gamecenter.video.detail.VideoDetailContainerViewModel
@@ -249,6 +253,68 @@ object DirectUtils {
"bbs_detail" -> directForumDetail(context, linkEntity.link ?: "", entrance)
+ "mobile_bind" -> {
+ CheckLoginUtils.checkLogin(context, entrance) {
+ context.startActivity(BindPhoneActivity.getNormalIntent(context, false))
+ }
+ }
+
+ "authentication" -> {
+ CheckLoginUtils.checkLogin(context, entrance) {
+ context.startActivity(UserInfoEditActivity.getIntent(context, UserViewModel.TYPE_ID_CARD))
+ }
+ }
+
+ "user_background" -> {
+ CheckLoginUtils.checkLogin(context, entrance) {
+ context.startActivity(PersonalityBackgroundActivity.getIntent(context))
+ }
+ }
+
+ "avatar_frame" -> {
+ CheckLoginUtils.checkLogin(context, entrance) {
+ context.startActivity(AvatarBorderActivity.getIntent(context))
+ }
+ }
+
+ "badge" -> {
+ CheckLoginUtils.checkLogin(context, entrance) {
+ UserManager.getInstance().userInfoEntity?.run {
+ directToBadgeWall(context, userId, name, icon)
+ }
+ }
+ }
+
+ "etiquette_exam" -> directToRegulationTestPage(context)
+
+ "setting" -> context.startActivity(SettingActivity.getIntent(context, false, entrance))
+
+ "index_page" -> directToMainActivity(context)
+
+ "video_upload" -> context.startActivity(VideoManagerActivity.getIntent(context, "", entrance))
+
+ "bbs" -> directToForum(context)
+
+ "user_page" -> directToHomeActivity(context, UserManager.getInstance().userId, "", entrance)
+
+ "video_tab" -> directToVideoTab(context)
+
+ "toolkit" -> context.startActivity(ToolBoxActivity.getIntent(context, entrance))
+
+ "toolkit_detail" -> {
+ linkEntity.toolkit?.run {
+ if (url != null && url!!.contains(Config.URL_ARTICLE)) {
+ val newsId = url!!.substring(url!!.lastIndexOf("/") + 1, url!!.length - 5) // 5: ".html"
+ val intent = NewsDetailActivity.getIntentById(context, newsId, entrance)
+ context.startActivity(intent)
+ } else {
+ context.startActivity(WebActivity.getWebByCollectionTools(context, this, false))
+ }
+ } ?: ""
+ }
+
+ "halo_tab" -> directToPersonalTab(context)
+
//"h5_game_center" -> directLetoGameCenter(context)
"" -> {
@@ -1049,6 +1115,46 @@ object DirectUtils {
}
}
+ /**
+ * 到首页视频 tab
+ */
+ @JvmStatic
+ fun directToVideoTab(context: Context) {
+ if (RunningUtils.isRunning(context)
+ && MainActivity::class.java.name == RunningUtils.getBaseActivity(context)) {
+ val intent = Intent(context, MainActivity::class.java)
+ intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
+ context.startActivity(intent)
+
+ // 这里换个线程操作是为了做一点延时
+ AppExecutor.ioExecutor.execute {
+ EventBus.getDefault().post(EBSkip(MainActivity.EB_SKIP_MAIN, MainWrapperFragment.INDEX_ASK))
+ }
+ } else {
+ jumpActivity(context, Bundle().apply { putInt(KEY_POSITION, MainWrapperFragment.INDEX_VIDEO) })
+ }
+ }
+
+ /**
+ * 到我的光环 tab
+ */
+ @JvmStatic
+ fun directToPersonalTab(context: Context) {
+ if (RunningUtils.isRunning(context)
+ && MainActivity::class.java.name == RunningUtils.getBaseActivity(context)) {
+ val intent = Intent(context, MainActivity::class.java)
+ intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
+ context.startActivity(intent)
+
+ // 这里换个线程操作是为了做一点延时
+ AppExecutor.ioExecutor.execute {
+ EventBus.getDefault().post(EBSkip(MainActivity.EB_SKIP_MAIN, MainWrapperFragment.INDEX_ASK))
+ }
+ } else {
+ jumpActivity(context, Bundle().apply { putInt(KEY_POSITION, MainWrapperFragment.INDEX_PERSONAL) })
+ }
+ }
+
/**
* 跳转至使用帮助与反馈
* @param position 使用帮助:[HelpAndFeedbackActivity.HELP_ITEM],意见反馈:[HelpAndFeedbackActivity.SUGGESTION_ITEM]
@@ -1060,4 +1166,47 @@ object DirectUtils {
bundle.putInt(BaseActivity_TabLayout.PAGE_INDEX, position)
jumpActivity(context, bundle)
}
+
+ /**
+ * 跳转至商品详情
+ */
+ @JvmStatic
+ fun directToCommodityDetail(context: Context, commodityId: String) {
+ var url: String = if ("internal" == BuildConfig.FLAVOR) {
+ Constants.COMMODITY_DETAIL_ADDRESS_DEV
+ } else {
+ Constants.COMMODITY_DETAIL_ADDRESS
+ }
+
+ url = String.format(Locale.CHINA, "%s?shopid=%s×tamp=%d", url, commodityId, (Date().time / 1000 / 1000.toFloat()).roundToInt())
+ directToFullScreenWebPage(context, url, false)
+ }
+
+ /**
+ * 跳转至光能记录
+ */
+ @JvmStatic
+ fun directToEnergyRecord(context: Context, position: Int) {
+ var url: String = if ("internal" == BuildConfig.FLAVOR) {
+ Constants.ENERGY_RECORD_ADDRESS_DEV
+ } else {
+ Constants.ENERGY_RECORD_ADDRESS
+ }
+
+ url = String.format(Locale.CHINA, "%s?position=%s×tamp=%d", url, position, (Date().time / 1000 / 1000.toFloat()).roundToInt())
+ directToFullScreenWebPage(context, url, false)
+ }
+
+ /**
+ * 跳转至订单中心
+ */
+ @JvmStatic
+ fun directToOrderCenter(context: Context) {
+ var url: String = if ("internal" == BuildConfig.FLAVOR) {
+ Constants.ORDER_CENTER_ADDRESS_DEV
+ } else {
+ Constants.ORDER_CENTER_ADDRESS
+ }
+ directToFullScreenWebPage(context, url, false)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java
index 21b4d27a15..ef1d6ced62 100644
--- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.java
+++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.java
@@ -655,6 +655,8 @@ public class DownloadItemUtils {
}
DataUtils.onGameLaunchEvent(context, gameEntity.getName(), gameEntity.getApk().get(0).getPlatform(), location);
PackageUtils.launchApplicationByPackageName(context, gameEntity.getApk().get(0).getPackageName());
+
+ EnergyTaskHelper.postEnergyTask("play_game", gameEntity.getId(), gameEntity.getApk().get(0).getPackageName());
} else if (str.equals(context.getString(R.string.update))) {
if (entrance.contains("我的游戏")) {
MtaHelper.onEvent("我的游戏_启动", "更新", gameEntity.getName());
@@ -688,6 +690,8 @@ public class DownloadItemUtils {
downloadBtn.setBackgroundResource(R.drawable.game_item_btn_downloading_style);
downloadBtn.setTextColor(ContextCompat.getColorStateList(context, R.color.text_downloading_style));
DeviceRemindDialog.Companion.showDeviceRemindDialog(context, gameEntity);
+
+ EnergyTaskHelper.postEnergyTask("download_game", gameEntity.getId(), gameEntity.getApk().get(0).getPackageName());
} else {
Utils.toast(context, msg);
}
diff --git a/app/src/main/java/com/gh/common/util/EnergyTaskHelper.kt b/app/src/main/java/com/gh/common/util/EnergyTaskHelper.kt
new file mode 100644
index 0000000000..9fc52b0619
--- /dev/null
+++ b/app/src/main/java/com/gh/common/util/EnergyTaskHelper.kt
@@ -0,0 +1,115 @@
+package com.gh.common.util
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.view.Gravity
+import android.view.View
+import android.widget.LinearLayout
+import android.widget.PopupWindow
+import android.widget.TextView
+import com.facebook.drawee.view.SimpleDraweeView
+import com.gh.base.CurrentActivityHolder
+import com.gh.gamecenter.R
+import com.gh.gamecenter.entity.EnergyTaskCompleteEntity
+import com.gh.gamecenter.guangneng.GuangnengCenterActivity
+import com.gh.gamecenter.guangneng.GuangnengHouseActivity
+import com.gh.gamecenter.retrofit.BiResponse
+import com.gh.gamecenter.retrofit.EmptyResponse
+import com.gh.gamecenter.retrofit.RetrofitManager
+import com.halo.assistant.HaloApp
+import com.lightgame.utils.AppManager
+import com.lightgame.utils.Utils
+import io.reactivex.schedulers.Schedulers
+import okhttp3.MediaType
+import okhttp3.RequestBody
+import org.json.JSONObject
+
+/**
+ * 上报光能任务辅助类
+ */
+object EnergyTaskHelper {
+
+ @JvmStatic
+ fun postEnergyTask(action: String) {
+ postEnergyTask(action, null, null, null)
+ }
+
+ @JvmStatic
+ fun postEnergyTask(action: String, id: String) {
+ postEnergyTask(action, id, null, null)
+ }
+
+ @JvmStatic
+ fun postEnergyTask(action: String, id: String, packageName: String) {
+ postEnergyTask(action, id, packageName, null)
+ }
+
+ @JvmStatic
+ fun postGnTaskForWeb(action: String, url: String) {
+ postEnergyTask(action, null, null, url)
+ }
+
+ @SuppressLint("CheckResult")
+ @JvmStatic
+ fun postEnergyTask(action: String, id: String? = null, packageName: String? = null, url: String? = null) {
+ val jsonObject = JSONObject()
+ jsonObject.put("action", action)
+
+ if (id != null) {
+ val actionParam = JSONObject()
+ actionParam.put("_id", id)
+ if (packageName != null) {
+ actionParam.put("package", packageName)
+ }
+ jsonObject.put("action_param", actionParam)
+ }
+
+ if (url != null) {
+ val actionParam = JSONObject()
+ actionParam.put("url", url)
+ }
+
+ debugOnly { Utils.log("GnTaskHelper -> $jsonObject") }
+
+ val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString())
+ RetrofitManager.getInstance(HaloApp.getInstance().application)
+ .api.postEnergyTask(body)
+ .subscribeOn(Schedulers.io())
+ .observeOn(Schedulers.io())
+ .subscribe(object : BiResponse>() {
+ override fun onSuccess(data: List) {
+ data.forEach { showPopup(it) }
+ }
+ })
+ }
+
+ // 完成弹窗
+ @JvmStatic
+ fun showPopup(entity: EnergyTaskCompleteEntity) {
+ val currentActivity = AppManager.getInstance().recentActiveActivity
+ val contentView = View.inflate(currentActivity, R.layout.popup_energy_task, null)
+ val taskIcon = contentView.findViewById(R.id.taskIcon)
+ ImageUtils.display(taskIcon, entity.icon)
+ contentView.run {
+ findViewById(R.id.taskDesc).text = "恭喜你!完成任务:${entity.name}"
+ findViewById(R.id.taskEnergy).text = "+${entity.energy}光能"
+ isFocusable = true
+ isFocusableInTouchMode = true
+ setOnClickListener {
+ currentActivity.startActivity(GuangnengCenterActivity.getIntent(currentActivity))
+ }
+ }
+ val popWindow = PopupWindow(contentView, LinearLayout.LayoutParams.MATCH_PARENT,
+ 110F.dip2px() - DisplayUtils.getStatusBarHeight(currentActivity.resources))
+ popWindow.run {
+ isClippingEnabled = false
+ showAtLocation(currentActivity.window.decorView, Gravity.TOP, 0, 0)
+ }
+
+ countDownTimer(3) { finish, _ ->
+ if (finish && popWindow != null && popWindow.isShowing) {
+ popWindow.dismiss()
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/common/util/EntranceUtils.java b/app/src/main/java/com/gh/common/util/EntranceUtils.java
index ee48a70945..2c7f140a6b 100644
--- a/app/src/main/java/com/gh/common/util/EntranceUtils.java
+++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java
@@ -221,6 +221,7 @@ public class EntranceUtils {
public static final String KEY_PRIMARY_CATALOG_NAME = "primaryCatalogName";
public static final String KEY_CATALOG_TITLE = "catalog_title";
public static final String KEY_CATALOG_INIT_TITLE = "catalog_init_title";
+ public static final String KEY_CATEGORY_LIST = "categoty_list";
public static void jumpActivity(Context context, Bundle bundle) {
bundle.putBoolean(KEY_REQUIRE_REDIRECT, true);
diff --git a/app/src/main/java/com/gh/common/util/ShareUtils.java b/app/src/main/java/com/gh/common/util/ShareUtils.java
index 0a02bd8645..bc5c046b60 100644
--- a/app/src/main/java/com/gh/common/util/ShareUtils.java
+++ b/app/src/main/java/com/gh/common/util/ShareUtils.java
@@ -678,6 +678,35 @@ public class ShareUtils {
if (listener != null) {
listener.onItemClick(holder.getAdapterPosition());
}
+
+ switch (mShareEntrance) {
+ case game:
+ case plugin:
+ EnergyTaskHelper.postEnergyTask("share_game_detail", resourceId);
+ break;
+ case video:
+ EnergyTaskHelper.postEnergyTask("share_video", resourceId);
+ break;
+ case news:
+ EnergyTaskHelper.postEnergyTask("share_article", resourceId);
+ break;
+ case askNormal:
+ EnergyTaskHelper.postEnergyTask("share_question", resourceId);
+ break;
+ case answerNormal:
+ EnergyTaskHelper.postEnergyTask("share_answer", resourceId);
+ break;
+ case communityArticle:
+ EnergyTaskHelper.postEnergyTask("share_community_article", resourceId);
+ break;
+ case tools:
+ EnergyTaskHelper.postEnergyTask("share_toolkit", resourceId);
+ break;
+ case web:
+ EnergyTaskHelper.postGnTaskForWeb("share_web", shareUrl);
+ break;
+ }
+
switch (holder.getPosition()) {
case 0:
shareType = "wechat_friend";
diff --git a/app/src/main/java/com/gh/common/util/TimeUtils.kt b/app/src/main/java/com/gh/common/util/TimeUtils.kt
index c1ab1cc6cb..8beef42d98 100644
--- a/app/src/main/java/com/gh/common/util/TimeUtils.kt
+++ b/app/src/main/java/com/gh/common/util/TimeUtils.kt
@@ -117,6 +117,17 @@ object TimeUtils {
return calendar.timeInMillis
}
+ @JvmStatic
+ fun getTimeOfToday(hour: Int): Long {
+ val calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"))
+ calendar.timeInMillis = getJavaTimestamp(System.currentTimeMillis())
+ calendar.set(Calendar.HOUR_OF_DAY, hour)
+ calendar.set(Calendar.MINUTE, 0)
+ calendar.set(Calendar.SECOND, 0)
+ calendar.set(Calendar.MILLISECOND, 0)
+ return calendar.timeInMillis
+ }
+
@JvmStatic
fun getJavaTimestamp(timestamp: Long): Long {
return if ((log10(timestamp.toDouble()) + 1).toInt() == 10) {
diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java
index 4f2d0ebbb5..f1908eafeb 100644
--- a/app/src/main/java/com/gh/gamecenter/MainActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java
@@ -2,7 +2,6 @@ package com.gh.gamecenter;
import android.annotation.SuppressLint;
import android.app.Activity;
-import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -19,7 +18,6 @@ import android.util.Log;
import android.view.KeyEvent;
import androidx.annotation.NonNull;
-import androidx.annotation.RestrictTo;
import androidx.lifecycle.ViewModelProviders;
import com.gh.base.AppUncaughtHandler;
@@ -31,13 +29,10 @@ import com.gh.common.avoidcallback.AvoidOnResultManager;
import com.gh.common.constant.Config;
import com.gh.common.constant.Constants;
import com.gh.common.exposure.meta.MetaUtil;
-import com.gh.common.loghub.LoghubUtils;
import com.gh.common.repository.ReservationRepository;
import com.gh.common.simulator.SimulatorGameManager;
import com.gh.common.util.ActivationHelper;
import com.gh.common.util.ClassUtils;
-import com.gh.common.util.ConcernUtils;
-import com.gh.common.util.DataCollectionUtils;
import com.gh.common.util.DataUtils;
import com.gh.common.util.DeviceTokenUtils;
import com.gh.common.util.DeviceUtils;
@@ -57,18 +52,14 @@ import com.gh.common.util.PackageUtils;
import com.gh.common.util.PlatformUtils;
import com.gh.common.util.SPUtils;
import com.gh.common.util.ShareUtils;
-import com.gh.common.util.ThirdPartyPackageHelper;
import com.gh.common.util.ToastUtils;
-import com.gh.common.util.UrlFilterUtils;
import com.gh.download.DownloadManager;
import com.gh.gamecenter.download.DownloadFragment;
import com.gh.gamecenter.entity.CommunityEntity;
-import com.gh.gamecenter.entity.GameDigestEntity;
import com.gh.gamecenter.entity.GameEntity;
import com.gh.gamecenter.entity.InnerMetaInfoEntity;
import com.gh.gamecenter.entity.NotificationUgc;
import com.gh.gamecenter.eventbus.EBNetworkState;
-import com.gh.gamecenter.eventbus.EBPackage;
import com.gh.gamecenter.eventbus.EBReuse;
import com.gh.gamecenter.eventbus.EBSkip;
import com.gh.gamecenter.fragment.MainWrapperFragment;
@@ -77,11 +68,9 @@ import com.gh.gamecenter.manager.DataCollectionManager;
import com.gh.gamecenter.manager.UpdateManager;
import com.gh.gamecenter.manager.UserManager;
import com.gh.gamecenter.normal.NormalFragment;
-import com.gh.gamecenter.packagehelper.PackageRepository;
import com.gh.gamecenter.packagehelper.PackageViewModel;
import com.gh.gamecenter.qa.CommunityFragment;
import com.gh.gamecenter.retrofit.BiResponse;
-import com.gh.gamecenter.retrofit.EmptyResponse;
import com.gh.gamecenter.retrofit.Response;
import com.gh.gamecenter.retrofit.RetrofitManager;
import com.gh.gamecenter.suggest.SuggestSelectFragment;
@@ -90,7 +79,6 @@ import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.halo.assistant.HaloApp;
-import com.halo.assistant.fragment.SettingsFragment;
import com.lightgame.download.DownloadEntity;
import com.lightgame.download.DownloadStatus;
import com.lightgame.download.FileUtils;
@@ -101,7 +89,6 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.jetbrains.annotations.NotNull;
-import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
@@ -111,7 +98,6 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
diff --git a/app/src/main/java/com/gh/gamecenter/amway/AmwayViewModel.kt b/app/src/main/java/com/gh/gamecenter/amway/AmwayViewModel.kt
index 0d7cb0c743..d4b3fc1f0d 100644
--- a/app/src/main/java/com/gh/gamecenter/amway/AmwayViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/amway/AmwayViewModel.kt
@@ -2,10 +2,7 @@ package com.gh.gamecenter.amway
import android.annotation.SuppressLint
import android.app.Application
-import com.gh.common.util.EntranceUtils
-import com.gh.common.util.ErrorHelper
-import com.gh.common.util.LogUtils
-import com.gh.common.util.ToastUtils
+import com.gh.common.util.*
import com.gh.download.DownloadManager
import com.gh.gamecenter.baselist.ListViewModel
import com.gh.gamecenter.baselist.LoadStatus
@@ -209,6 +206,8 @@ class AmwayViewModel(application: Application) : ListViewModel(context) {
+
+ override fun getItemCount(): Int {
+ return if (mEntityList == null || mEntityList.isEmpty()) return 0 else mEntityList.size + 1
+ }
+
+ override fun getItemViewType(position: Int): Int {
+ if (position == itemCount - 1) {
+ return ItemViewType.ITEM_FOOTER
+ }
+ return ItemViewType.ITEM_BODY
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
+ return when (viewType) {
+ ItemViewType.ITEM_BODY -> {
+ CommodityItemViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.commodity_item, parent, false))
+ }
+ else -> {
+ FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false))
+ }
+ }
+ }
+
+ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
+ when (holder) {
+ is CommodityItemViewHolder -> {
+ holder.binding.run {
+ root.layoutParams = (root.layoutParams as ViewGroup.MarginLayoutParams).apply {
+ val top = if (position == 0 || position == 1) 8F.dip2px() else 0
+ topMargin = top
+ }
+
+ val commodity = mEntityList[position]
+ entity = commodity
+ executePendingBindings()
+
+ commodity.tag?.run {
+ if (id.isNotBlank()) tagContainer.addView(getTagView(this))
+ }
+
+ originEnergy.paint.flags = Paint.STRIKE_THRU_TEXT_FLAG
+ originEnergy.paint.isAntiAlias = true
+
+ root.setOnClickListener { DirectUtils.directToCommodityDetail(mContext, commodity.id) }
+ }
+ }
+
+ is FooterViewHolder -> holder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver, R.string.ask_loadover_hint)
+ }
+ }
+
+ private fun getTagView(tag: CommodityEntity.CommodityTagEntity): TextView {
+ return TextView(mContext).apply {
+ layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
+ textSize = 10F
+ text = tag.name
+ setTextColor(Color.parseColor("#${tag.style.color}"))
+ setPadding(4F.dip2px(), 4F.dip2px(), 4F.dip2px(), 4F.dip2px())
+ val drawable = GradientDrawable()
+ drawable.setColor(Color.parseColor("#${tag.style.background}"))
+ drawable.cornerRadius = DisplayUtils.dip2px(2F).toFloat()
+ background = drawable
+ }
+ }
+
+ fun isLoadOver(): Boolean {
+ return mIsOver
+ }
+
+ inner class CommodityItemViewHolder(val binding: CommodityItemBinding) : BaseRecyclerViewHolder(binding.root)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/CommodityListFragment.kt b/app/src/main/java/com/gh/gamecenter/guangneng/CommodityListFragment.kt
new file mode 100644
index 0000000000..657137376e
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/CommodityListFragment.kt
@@ -0,0 +1,120 @@
+package com.gh.gamecenter.guangneng
+
+import android.os.Bundle
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.GridLayoutManager
+import com.gh.common.util.*
+import com.gh.gamecenter.R
+import com.gh.gamecenter.baselist.ListFragment
+import com.gh.gamecenter.databinding.FragmentCommodityListBinding
+import com.gh.gamecenter.entity.CommodityCategoryEntity
+import com.gh.gamecenter.entity.CommodityEntity
+import com.gh.gamecenter.entity.SubjectSettingEntity
+
+class CommodityListFragment : ListFragment() {
+
+ private var mAdapter: CommodityListAdapter? = null
+ private lateinit var mBinding: FragmentCommodityListBinding
+ private var mCategoryList: ArrayList? = null
+ private var mCurrentIndex = 0
+
+ override fun getLayoutId() = 0
+
+ override fun getInflatedLayout() = FragmentCommodityListBinding.inflate(layoutInflater).apply { mBinding = this }.root
+
+ override fun provideListViewModel(): CommodityListViewModel {
+ mEntrance = requireArguments().getString(EntranceUtils.KEY_ENTRANCE) ?: ""
+ val categoryId = requireArguments().getString(EntranceUtils.KEY_CATEGORY_ID) ?: ""
+ val factory = CommodityListViewModel.Factory(categoryId, mEntrance)
+ return viewModelProvider(factory)
+ }
+
+ override fun provideListAdapter() = mAdapter
+ ?: CommodityListAdapter(requireContext()).apply { mAdapter = this }
+
+ override fun getItemDecoration() = null
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val gridLayoutManager = GridLayoutManager(context, 2)
+ gridLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
+ override fun getSpanSize(position: Int): Int {
+ return if (position == mAdapter!!.itemCount - 1) {
+ 2
+ } else {
+ 1
+ }
+ }
+ }
+ mListRv.layoutManager = gridLayoutManager
+ mListRefresh?.layoutParams = (mListRefresh?.layoutParams as ViewGroup.MarginLayoutParams).apply {
+ leftMargin = 12F.dip2px()
+ rightMargin = 12F.dip2px()
+ }
+
+ requireArguments().getParcelableArrayList(EntranceUtils.KEY_CATEGORY_LIST)?.run {
+ mCategoryList = this
+ mBinding.header.visibility = View.VISIBLE
+ mBinding.more.setOnClickListener { requireContext().startActivity(GuangnengHouseActivity.getIntent(requireContext())) }
+ this.forEachIndexed { index, entity ->
+ val item = layoutInflater.inflate(R.layout.item_filter_commodity_size, mBinding.categoryContainer, false)
+ mBinding.categoryContainer.addView(item)
+ val tv = item.findViewById(R.id.size_tv)
+ tv.text = entity.name
+ item.setOnClickListener {
+ if (index != mCurrentIndex) {
+ changeCategoryBg(index)
+ mListViewModel.categoryId = entity.id
+ onLoadRefresh()
+ mCurrentIndex = index
+ }
+ }
+ }
+ changeCategoryBg(0)
+ }
+
+ mBinding.bottom.run {
+ if (mEntrance == "光能中心") {
+ visibility = View.VISIBLE
+ setOnClickListener { requireContext().startActivity(GuangnengHouseActivity.getIntent(requireContext())) }
+ } else {
+ visibility = View.GONE
+ }
+ }
+ }
+
+ private fun changeCategoryBg(position: Int) {
+ mCategoryList?.forEachIndexed { index, _ ->
+ val item = mBinding.categoryContainer.getChildAt(index)
+ val tv = item.findViewById(R.id.size_tv)
+ if (position == index) {
+ tv.setTextColor(R.color.theme_font.toColor())
+ tv.setBackgroundResource(R.drawable.button_round_e6f8fa)
+ } else {
+ tv.setTextColor(R.color.text_666666.toColor())
+ tv.setBackgroundResource(R.drawable.button_round_f5f5f5)
+ }
+ }
+ }
+
+ fun refreshPage(size: SubjectSettingEntity.Size) {
+ mListViewModel.sortSize = size
+ onRefresh()
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ mListRefresh?.isNestedScrollingEnabled = false
+ }
+
+ override fun onLoadDone() {
+ super.onLoadDone()
+ mListRefresh?.isEnabled = false
+ }
+
+ fun setNestedScrollingEnabled(enable: Boolean) {
+ mListRv.isNestedScrollingEnabled = enable
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/CommodityListViewModel.kt b/app/src/main/java/com/gh/gamecenter/guangneng/CommodityListViewModel.kt
new file mode 100644
index 0000000000..69fff63803
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/CommodityListViewModel.kt
@@ -0,0 +1,46 @@
+package com.gh.gamecenter.guangneng
+
+import android.app.Application
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import com.gh.common.util.UrlFilterUtils
+import com.gh.gamecenter.baselist.ListViewModel
+import com.gh.gamecenter.entity.CommodityEntity
+import com.gh.gamecenter.entity.SubjectSettingEntity
+import com.gh.gamecenter.retrofit.RetrofitManager
+import com.halo.assistant.HaloApp
+import io.reactivex.Single
+
+class CommodityListViewModel(application: Application, var categoryId: String, var entrance: String): ListViewModel(application) {
+
+ var sortSize = SubjectSettingEntity.Size()
+
+ override fun provideDataObservable(page: Int) = null
+
+ override fun provideDataSingle(page: Int): Single> {
+ return RetrofitManager.getInstance(getApplication()).api.getCommodities(getFilter(), page)
+ }
+
+ override fun mergeResultLiveData() {
+ mResultLiveData.addSource(mListLiveData) {
+ if (entrance == "光能中心" && it.size > 10) {
+ mResultLiveData.postValue(it.subList(0, 10))
+ } else {
+ mResultLiveData.postValue(it)
+ }
+ }
+ }
+
+ private fun getFilter(): String {
+ return UrlFilterUtils.getFilterQuery(
+ "category_id", categoryId,
+ "min_energy", sortSize.min.toString(),
+ "max_energy", sortSize.max.toString())
+ }
+
+ class Factory(private val categoryId: String, private val entrance: String) : ViewModelProvider.NewInstanceFactory() {
+ override fun create(modelClass: Class): T {
+ return CommodityListViewModel(HaloApp.getInstance().application, categoryId, entrance) as T
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengCenterActivity.kt b/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengCenterActivity.kt
new file mode 100644
index 0000000000..ac5843ccc7
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengCenterActivity.kt
@@ -0,0 +1,22 @@
+package com.gh.gamecenter.guangneng
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import com.gh.common.util.DisplayUtils
+import com.gh.gamecenter.NormalActivity
+
+class GuangnengCenterActivity : NormalActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ hideToolbar(true)
+ DisplayUtils.transparentStatusAndNavigation(this)
+ }
+
+ companion object {
+ fun getIntent(context: Context?): Intent? {
+ return getTargetIntent(context, GuangnengCenterActivity::class.java, GuangnengCenterFragment::class.java)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengCenterFragment.kt b/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengCenterFragment.kt
new file mode 100644
index 0000000000..e951f79a5f
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengCenterFragment.kt
@@ -0,0 +1,259 @@
+package com.gh.gamecenter.guangneng
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.CheckedTextView
+import android.widget.ImageView
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
+import butterknife.OnClick
+import com.gh.base.adapter.FragmentAdapter
+import com.gh.base.fragment.BaseLazyFragment
+import com.gh.common.util.*
+import com.gh.gamecenter.R
+import com.gh.gamecenter.databinding.FragmentGuangnengCenterBinding
+import com.gh.gamecenter.entity.CommodityCategoryEntity
+import com.gh.gamecenter.manager.UserManager
+import com.gh.gamecenter.personalhome.UserHomeViewModel
+import com.gh.gamecenter.user.UserViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.tabs.TabLayout
+import com.halo.assistant.HaloApp
+
+
+class GuangnengCenterFragment : BaseLazyFragment() {
+
+ private lateinit var mBinding: FragmentGuangnengCenterBinding
+ private lateinit var mUserViewModel: UserViewModel
+ private lateinit var mUserHomeViewModel: UserHomeViewModel
+ private lateinit var mGnCenterViewModel: GuangnengCenterViewModel
+ private val mTitleList = listOf("赚光能", "兑换区")
+ private var mFragmentsList = ArrayList()
+ private var mCategoryList = ArrayList()
+
+ override fun getLayoutId() = 0
+
+ override fun getInflatedLayout() = FragmentGuangnengCenterBinding.inflate(layoutInflater).apply { mBinding = this }.root
+
+ override fun onFragmentResume() {
+ super.onFragmentResume()
+
+ // 6:00-18:59 展示白天背景,否则展示夜晚背景
+ if (System.currentTimeMillis() >= TimeUtils.getTimeOfToday(6)
+ && System.currentTimeMillis() < TimeUtils.getTimeOfToday(19) ) {
+ mBinding.background.setImageResource(R.drawable.bg_gncenter_day)
+ } else {
+ mBinding.background.setImageResource(R.drawable.bg_gncenter_night)
+ }
+
+ if (NetworkUtils.isNetworkConnected(requireContext())) {
+ if (CheckLoginUtils.isLogin()) {
+ mUserHomeViewModel.getUserEnergy()
+ if (mFragmentsList.isNotEmpty()) {
+ (mFragmentsList[0] as TaskFragment).onLoadRefresh()
+ }
+ }
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ mGnCenterViewModel = viewModelProvider()
+ mUserViewModel = viewModelProvider(UserViewModel.Factory(HaloApp.getInstance().application))
+ mUserHomeViewModel = viewModelProvider(UserHomeViewModel.Factory(HaloApp.getInstance().application, UserManager.getInstance().userId))
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ mGnCenterViewModel.categories.observe(viewLifecycleOwner, Observer {
+ mCategoryList.clear()
+ mCategoryList.addAll(it)
+ initViewpager()
+ })
+
+ mUserViewModel.loginObsUserinfo.observe(viewLifecycleOwner, Observer {
+ if (it != null && it.data != null) {
+ mUserHomeViewModel.userId = UserManager.getInstance().userId
+ mUserHomeViewModel.getUserEnergy()
+ if (mFragmentsList.isNotEmpty()) {
+ (mFragmentsList[0] as TaskFragment).onLoadRefresh()
+ }
+ }
+ })
+
+ mUserHomeViewModel.energy.observe(viewLifecycleOwner, Observer {
+ mBinding.userEnergy.text = "${it}光能"
+ })
+
+ mBinding.run {
+ val screenHeight = resources.displayMetrics.heightPixels
+ val behavior = BottomSheetBehavior.from(bottomSheet)
+ val toolbarHeight = screenHeight - DisplayUtils.getStatusBarHeight(resources) - 48F.dip2px()
+ behavior.peekHeight = screenHeight - 312F.dip2px()
+ behavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
+ override fun onStateChanged(bottomSheet: View, newState: Int) {
+ if (newState == BottomSheetBehavior.STATE_HIDDEN) {
+ behavior.state = BottomSheetBehavior.STATE_COLLAPSED
+ }
+
+ if (bottomSheet.height > toolbarHeight) {
+ val layoutParams = bottomSheet.layoutParams
+ layoutParams.height = toolbarHeight
+ bottomSheet.layoutParams = layoutParams
+ }
+ }
+
+ override fun onSlide(bottomSheet: View, slideOffset: Float) {
+ }
+ })
+ }
+ }
+
+ private fun initViewpager() {
+ mBinding.run {
+ mFragmentsList.clear()
+ val tag = "android:switcher:${viewpager.id}:"
+ val taskFragment = childFragmentManager.findFragmentByTag("${tag}0") ?: TaskFragment()
+ val commodityListFragment = childFragmentManager.findFragmentByTag("${tag}1")
+ ?: CommodityListFragment().apply {
+ val bundle = Bundle()
+ bundle.putString(EntranceUtils.KEY_ENTRANCE, "光能中心")
+ if (mCategoryList.isNotEmpty()) {
+ bundle.putString(EntranceUtils.KEY_CATEGORY_ID, mCategoryList[0].id)
+ bundle.putParcelableArrayList(EntranceUtils.KEY_CATEGORY_LIST,
+ if (mCategoryList.size > 2) ArrayList(mCategoryList.subList(0, 2)) else mCategoryList)
+ }
+ arguments = bundle
+ }
+ mFragmentsList.add(taskFragment)
+ mFragmentsList.add(commodityListFragment)
+
+ viewpager.offscreenPageLimit = mFragmentsList.size
+ viewpager.adapter = FragmentAdapter(childFragmentManager, mFragmentsList, mTitleList)
+ tabLayout.setupWithViewPager(viewpager)
+
+ for (i in 0 until tabLayout.tabCount) {
+ val tab = tabLayout.getTabAt(i) ?: continue
+ val tabTitle = if (tab.text != null) tab.text.toString() else ""
+ val tabView = getTabView(tabTitle)
+ tab.customView = tabView
+ }
+
+ tabLayout.getTabAt(0)?.let { updateTabStyle(it, true) }
+ tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
+ override fun onTabReselected(tab: TabLayout.Tab?) {
+ updateTabStyle(tab, true)
+ }
+
+ override fun onTabUnselected(tab: TabLayout.Tab?) {
+ updateTabStyle(tab, false)
+ }
+
+ override fun onTabSelected(tab: TabLayout.Tab?) {
+ updateTabStyle(tab, true)
+ }
+ })
+
+ // 处理BottomSheetBehavior的ViewPager嵌套RecyclerView滑动冲突问题
+ viewpager.addOnPageChangeListener {
+ (mFragmentsList[0] as TaskFragment).setNestedScrollingEnabled(it == 0)
+ (mFragmentsList[1] as CommodityListFragment).setNestedScrollingEnabled(it == 1)
+ bottomSheet.requestLayout()
+ }
+ }
+ }
+
+ private fun getTabView(title: String): View {
+ val view = LayoutInflater.from(HaloApp.getInstance().application.baseContext).inflate(R.layout.tab_item_gn_house, null)
+ val tabTitle = view.findViewById(R.id.tab_title)
+ if (tabTitle is CheckedTextView) {
+ tabTitle.text = title
+ }
+ return view
+ }
+
+ private fun updateTabStyle(tab: TabLayout.Tab?, isChecked: Boolean) {
+ val tabView = tab?.customView
+ tabView?.run {
+ val tabIndicator = findViewById(R.id.tab_indicator)
+ tabIndicator.visibility = if (isChecked) View.VISIBLE else View.INVISIBLE
+ }
+ }
+
+ @OnClick(R.id.backIv, R.id.gnRecord, R.id.lotteryCenter, R.id.signSwitch, R.id.signBubble,
+ R.id.oneDay, R.id.twoDay, R.id.threeDay, R.id.fourDay, R.id.fiveDay, R.id.sixDay, R.id.sevenDay)
+ fun onViewClicked(v: View) {
+ when (v.id) {
+ R.id.backIv -> requireActivity().finish()
+
+ R.id.gnRecord -> {
+ ifLogin("光能中心-光能记录") {
+ DirectUtils.directToEnergyRecord(requireContext(), 0)
+ }
+ }
+
+ R.id.lotteryCenter -> {
+ ifLogin("光能中心-抽奖中心") {
+ // 抽奖中心
+ }
+ }
+
+ R.id.signSwitch -> {
+ ifLogin("光能中心-签到提醒") {
+ // 签到提醒
+ }
+ }
+
+ R.id.signBubble -> {
+ ifLogin("光能中心-签到气泡") {
+ // 签到气泡
+ }
+ }
+
+ R.id.oneDay -> {
+ ifLogin("光能中心-1天") {
+ // 1天
+ }
+ }
+
+ R.id.twoDay -> {
+ ifLogin("光能中心-2天") {
+ // 2天
+ }
+ }
+
+ R.id.threeDay -> {
+ ifLogin("光能中心-3天") {
+ // 3天
+ }
+ }
+
+ R.id.fourDay -> {
+ ifLogin("光能中心-4天") {
+ // 4天
+ }
+ }
+
+ R.id.fiveDay -> {
+ ifLogin("光能中心-5天") {
+ // 5天
+ }
+ }
+
+ R.id.sixDay -> {
+ ifLogin("光能中心-6天") {
+ // 6天
+ }
+ }
+
+ R.id.sevenDay -> {
+ ifLogin("光能中心-7天") {
+ // 7天
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengCenterViewModel.kt b/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengCenterViewModel.kt
new file mode 100644
index 0000000000..d3850572e6
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengCenterViewModel.kt
@@ -0,0 +1,39 @@
+package com.gh.gamecenter.guangneng
+
+import android.annotation.SuppressLint
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.MutableLiveData
+import com.gh.gamecenter.entity.CommodityCategoryEntity
+import com.gh.gamecenter.retrofit.BiResponse
+import com.gh.gamecenter.retrofit.RetrofitManager
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.schedulers.Schedulers
+
+class GuangnengCenterViewModel(application: Application) : AndroidViewModel(application) {
+
+ private val api = RetrofitManager.getInstance(getApplication()).api
+ var categories = MutableLiveData>()
+
+
+ init {
+ getCommodityCategories()
+ }
+
+ @SuppressLint("CheckResult")
+ fun getCommodityCategories() {
+ api.commodityCategories
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(object : BiResponse>() {
+ override fun onSuccess(data: List) {
+ categories.postValue(data)
+ }
+
+ override fun onFailure(exception: Exception) {
+ super.onFailure(exception)
+ categories.postValue(null)
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengHouseActivity.kt b/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengHouseActivity.kt
new file mode 100644
index 0000000000..c0b70d1996
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengHouseActivity.kt
@@ -0,0 +1,22 @@
+package com.gh.gamecenter.guangneng
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import com.gh.common.util.DisplayUtils
+import com.gh.gamecenter.NormalActivity
+
+class GuangnengHouseActivity : NormalActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ hideToolbar(true)
+ DisplayUtils.transparentStatusAndNavigation(this)
+ }
+
+ companion object {
+ fun getIntent(context: Context?): Intent? {
+ return getTargetIntent(context, GuangnengHouseActivity::class.java, GuangnengHouseFragment::class.java)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengHouseFragment.kt b/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengHouseFragment.kt
new file mode 100644
index 0000000000..abb7490c92
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengHouseFragment.kt
@@ -0,0 +1,291 @@
+package com.gh.gamecenter.guangneng
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.CheckedTextView
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.core.os.bundleOf
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.Observer
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import butterknife.OnClick
+import com.gh.base.adapter.FragmentAdapter
+import com.gh.base.fragment.BaseLazyFragment
+import com.gh.common.util.*
+import com.gh.gamecenter.R
+import com.gh.gamecenter.databinding.FragmentGuangnengHouseBinding
+import com.gh.gamecenter.entity.CommodityCategoryEntity
+import com.gh.gamecenter.entity.SubjectSettingEntity
+import com.gh.gamecenter.entity.TaskEntity
+import com.gh.gamecenter.manager.UserManager
+import com.gh.gamecenter.personalhome.UserHomeViewModel
+import com.gh.gamecenter.user.UserViewModel
+import com.google.android.material.appbar.AppBarLayout
+import com.google.android.material.tabs.TabLayout
+import com.halo.assistant.HaloApp
+import kotlin.math.abs
+
+class GuangnengHouseFragment: BaseLazyFragment() {
+
+ private lateinit var mBinding: FragmentGuangnengHouseBinding
+ private lateinit var mUserViewModel: UserViewModel
+ private lateinit var mUserHomeViewModel: UserHomeViewModel
+ private lateinit var mGnHouseViewModel: GuangnengHouseViewModel
+ private lateinit var mCommodityCategories: List
+ private val mTitleList = ArrayList()
+ private val mFragments = ArrayList()
+ private val mTasks = ArrayList()
+ private val mRollUserNames = ArrayList()
+ private val mRollCommodityNames = ArrayList()
+ private var currentSizeIndex = 0
+
+ override fun getLayoutId() = 0
+
+ override fun getInflatedLayout() = FragmentGuangnengHouseBinding.inflate(layoutInflater).apply { mBinding = this }.root
+
+ override fun onFragmentResume() {
+ super.onFragmentResume()
+
+ if (NetworkUtils.isNetworkConnected(requireContext())) {
+ if (CheckLoginUtils.isLogin()) {
+ mUserHomeViewModel.getUserEnergy()
+ mGnHouseViewModel.getNoviceTasks()
+ }
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ mGnHouseViewModel = viewModelProvider()
+ mUserViewModel = viewModelProvider(UserViewModel.Factory(HaloApp.getInstance().application))
+ mUserHomeViewModel = viewModelProvider(UserHomeViewModel.Factory(HaloApp.getInstance().application, UserManager.getInstance().userId))
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ mUserViewModel.loginObsUserinfo.observe(viewLifecycleOwner, Observer {
+ if (it != null && it.data != null) {
+ mBinding.run {
+ val userInfo = it.data
+ userIcon.display(userInfo.iconBorder?.url, userInfo.icon ?: "")
+ userName.text = userInfo.name
+ }
+ mUserHomeViewModel.userId = UserManager.getInstance().userId
+ mUserHomeViewModel.getUserEnergy()
+ } else {
+ mBinding.run {
+ userIcon.display("", "")
+ userName.text = "请先登录"
+ }
+ }
+ })
+
+ mUserHomeViewModel.energy.observe(viewLifecycleOwner, Observer {
+ mBinding.userEnergy.text = "${it}光能"
+ })
+
+ mGnHouseViewModel.rollNotices.observe(viewLifecycleOwner, Observer { list ->
+ if (list.isEmpty()) return@Observer
+ mRollUserNames.clear()
+ mRollCommodityNames.clear()
+ list.forEach {
+ mRollUserNames.add(it.user.name)
+ mRollCommodityNames.add(it.commodity.name)
+ }
+ initRollNotice()
+ })
+
+ mGnHouseViewModel.noviceTasks.observe(viewLifecycleOwner, Observer {
+ mTasks.clear()
+ mTasks.addAll(it)
+ mGnHouseViewModel.getDailyTasks()
+ })
+
+ mGnHouseViewModel.dailyTasks.observe(viewLifecycleOwner, Observer {
+ mTasks.addAll(it)
+ initTaskView()
+ })
+
+ mGnHouseViewModel.commodityCategories.observe(viewLifecycleOwner, Observer {
+ if (it.isEmpty()) return@Observer
+ mCommodityCategories = it
+ initViewPager()
+ })
+
+ mBinding.run {
+ appbar.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { appBarLayout, verticalOffset ->
+ if (abs(verticalOffset) >= appBarLayout.totalScrollRange / 2) {
+ toolbar.setBackgroundColor(R.color.white.toColor())
+ backIv.setImageResource(R.drawable.ic_back_gamedetail)
+ title.setTextColor(R.color.text_333333.toColor())
+ gnRuleTv.setTextColor(R.color.text_333333.toColor())
+ gnRuleIv.setImageResource(R.drawable.icon_doubt_black)
+ tabLayout.setBackgroundColor(R.color.white.toColor())
+ sizeContainer.setBackgroundColor(R.color.white.toColor())
+ DisplayUtils.setStatusBarColor(requireActivity(), R.color.white, true)
+ } else {
+ toolbar.setBackgroundColor(R.color.transparent.toColor())
+ backIv.setImageResource(R.drawable.ic_toolbar_back_white)
+ title.setTextColor(R.color.white.toColor())
+ gnRuleTv.setTextColor(R.color.white.toColor())
+ gnRuleIv.setImageResource(R.drawable.icon_doubt_white)
+ tabLayout.setBackgroundColor(R.color.transparent.toColor())
+ sizeContainer.setBackgroundColor(R.color.transparent.toColor())
+ DisplayUtils.setStatusBarColor(requireActivity(), R.color.transparent, true)
+ }
+ })
+ }
+ }
+
+ private fun initRollNotice() {
+ mBinding.run {
+ rollNotice.visibility = View.VISIBLE
+ userNameMarquee.startWithList(mRollUserNames)
+ commodityNameMarquee.startWithList(mRollCommodityNames)
+ }
+ }
+
+ private fun initTaskView() {
+ mBinding.run {
+ if (mTasks.isEmpty()) {
+ GnTaskTitle.visibility = View.GONE
+ GnTaskContainer.visibility = View.GONE
+ } else {
+ GnTaskTitle.visibility = View.VISIBLE
+ GnTaskContainer.visibility = View.VISIBLE
+ GnTaskMore.setOnClickListener { requireContext().startActivity(GuangnengCenterActivity.getIntent(requireContext())) }
+ GnTaskContainer.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false)
+ GnTaskContainer.adapter = HorizontalGnTaskAdapter(requireContext(), "光能屋", mTasks)
+ }
+ }
+ }
+
+ private fun initViewPager() {
+ mBinding.run {
+ mTitleList.clear()
+ mFragments.clear()
+ val tag = "android:switcher:${viewpager.id}:"
+ mCommodityCategories.forEachIndexed { index, entity ->
+ mTitleList.add(entity.name)
+ val commodityListFragment = childFragmentManager.findFragmentByTag("$tag$index")
+ ?: CommodityListFragment().with(bundleOf(
+ EntranceUtils.KEY_ENTRANCE to "光能屋",
+ EntranceUtils.KEY_CATEGORY_ID to entity.id))
+ mFragments.add(commodityListFragment)
+ }
+
+ viewpager.offscreenPageLimit = mFragments.size
+ viewpager.adapter = FragmentAdapter(childFragmentManager, mFragments, mTitleList)
+ tabLayout.setupWithViewPager(viewpager)
+
+ for (i in 0 until tabLayout.tabCount) {
+ val tab = tabLayout.getTabAt(i) ?: continue
+ val tabTitle = if (tab.text != null) tab.text.toString() else ""
+ val tabView = getTabView(tabTitle)
+ tab.customView = tabView
+ }
+
+ tabLayout.getTabAt(0)?.let { updateTabStyle(it, true) }
+ tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
+ override fun onTabReselected(tab: TabLayout.Tab?) {
+ updateTabStyle(tab, true)
+ }
+
+ override fun onTabUnselected(tab: TabLayout.Tab?) {
+ updateTabStyle(tab, false)
+ }
+
+ override fun onTabSelected(tab: TabLayout.Tab?) {
+ updateTabStyle(tab, true)
+ }
+ })
+ }
+
+ initSize()
+ }
+
+
+ private fun getTabView(title: String): View {
+ val view = LayoutInflater.from(HaloApp.getInstance().application.baseContext).inflate(R.layout.tab_item_gn_house, null)
+ val tabTitle = view.findViewById(R.id.tab_title)
+ if (tabTitle is CheckedTextView) {
+ tabTitle.text = title
+ }
+ return view
+ }
+
+ private fun updateTabStyle(tab: TabLayout.Tab?, isChecked: Boolean) {
+ val tabView = tab?.customView
+ tabView?.run {
+ val tabIndicator = findViewById(R.id.tab_indicator)
+ tabIndicator.visibility = if (isChecked) View.VISIBLE else View.INVISIBLE
+ }
+ }
+
+ private fun getDefaultSizeFilterArray(): ArrayList {
+ return arrayListOf().apply {
+ add(SubjectSettingEntity.Size(min = -1, max = -1, text = "全部"))
+ add(SubjectSettingEntity.Size(min = 1, max = 100, text = "1-100"))
+ add(SubjectSettingEntity.Size(min = 101, max = 500, text = "101-500"))
+ add(SubjectSettingEntity.Size(min = 501, max = 2000, text = "501-2000"))
+ add(SubjectSettingEntity.Size(min = 2000, max = -1, text = "2000以上"))
+ }
+ }
+
+
+ private fun initSize() {
+ getDefaultSizeFilterArray().forEachIndexed { index, size ->
+ val item = layoutInflater.inflate(R.layout.item_filter_commodity_size, mBinding.sizeContainer, false)
+ mBinding.sizeContainer.addView(item)
+ val tv = item.findViewById(R.id.size_tv)
+ tv.text = size.text
+ item.setOnClickListener {
+ if (currentSizeIndex != index) {
+ changeSizeBg(index)
+ (mFragments[mBinding.viewpager.currentItem] as CommodityListFragment).refreshPage(size)
+ currentSizeIndex = index
+ }
+ }
+ }
+ changeSizeBg(0)
+ }
+
+ private fun changeSizeBg(position: Int) {
+ getDefaultSizeFilterArray().forEachIndexed { index, _ ->
+ val item = mBinding.sizeContainer.getChildAt(index)
+ val tv = item.findViewById(R.id.size_tv)
+ if (position == index) {
+ tv.setTextColor(R.color.theme_font.toColor())
+ tv.setBackgroundResource(R.drawable.button_round_e6f8fa)
+ } else {
+ tv.setTextColor(R.color.text_666666.toColor())
+ tv.setBackgroundResource(R.drawable.button_round_f5f5f5)
+ }
+ }
+ }
+
+
+ @OnClick(R.id.backIv, R.id.gnRecord, R.id.gnOrder)
+ fun onViewClicked(v: View) {
+ when (v.id) {
+ R.id.backIv -> requireActivity().finish()
+
+ R.id.gnRecord -> {
+ ifLogin("光能屋-光能记录") {
+ DirectUtils.directToEnergyRecord(requireContext(), 1)
+ }
+ }
+
+ R.id.gnOrder -> {
+ ifLogin("光能屋-订单中心") {
+ DirectUtils.directToOrderCenter(requireContext())
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengHouseViewModel.kt b/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengHouseViewModel.kt
new file mode 100644
index 0000000000..f42d45447f
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/GuangnengHouseViewModel.kt
@@ -0,0 +1,78 @@
+package com.gh.gamecenter.guangneng
+
+import android.annotation.SuppressLint
+import android.app.Application
+import androidx.lifecycle.AndroidViewModel
+import androidx.lifecycle.MutableLiveData
+import com.gh.gamecenter.entity.CommodityCategoryEntity
+import com.gh.gamecenter.entity.RollNoticeEntity
+import com.gh.gamecenter.entity.TaskEntity
+import com.gh.gamecenter.retrofit.BiResponse
+import com.gh.gamecenter.retrofit.RetrofitManager
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.schedulers.Schedulers
+
+class GuangnengHouseViewModel(application: Application)
+ : AndroidViewModel(application) {
+
+ private val api = RetrofitManager.getInstance(getApplication()).api
+ var commodityCategories = MutableLiveData>()
+ var noviceTasks = MutableLiveData>()
+ var dailyTasks = MutableLiveData>()
+ var rollNotices = MutableLiveData>()
+
+
+ init {
+ getRollNotices()
+ getNoviceTasks()
+ getCommodityCategories()
+ }
+
+ @SuppressLint("CheckResult")
+ fun getRollNotices() {
+ api.rollNotices
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(object : BiResponse>() {
+ override fun onSuccess(data: List) {
+ rollNotices.postValue(data)
+ }
+ })
+ }
+
+ @SuppressLint("CheckResult")
+ fun getNoviceTasks() {
+ api.noviceTasks
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(object : BiResponse>() {
+ override fun onSuccess(data: List) {
+ noviceTasks.postValue(data)
+ }
+ })
+ }
+
+ @SuppressLint("CheckResult")
+ fun getDailyTasks() {
+ api.getDailyTasks(1)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(object : BiResponse>() {
+ override fun onSuccess(data: List) {
+ dailyTasks.postValue(data)
+ }
+ })
+ }
+
+ @SuppressLint("CheckResult")
+ fun getCommodityCategories() {
+ api.commodityCategories
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(object : BiResponse>() {
+ override fun onSuccess(data: List) {
+ commodityCategories.postValue(data)
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/HorizontalGnTaskAdapter.kt b/app/src/main/java/com/gh/gamecenter/guangneng/HorizontalGnTaskAdapter.kt
new file mode 100644
index 0000000000..fd36864272
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/HorizontalGnTaskAdapter.kt
@@ -0,0 +1,64 @@
+package com.gh.gamecenter.guangneng
+
+import android.content.Context
+import android.view.ViewGroup
+import androidx.databinding.DataBindingUtil
+import com.gh.base.BaseRecyclerViewHolder
+import com.gh.common.util.*
+import com.gh.gamecenter.R
+import com.gh.gamecenter.databinding.NoviceTaskItemBinding
+import com.gh.gamecenter.entity.TaskEntity
+import com.lightgame.adapter.BaseRecyclerAdapter
+
+class HorizontalGnTaskAdapter(context: Context,
+ private val entrance: String,
+ private var mList: List)
+ : BaseRecyclerAdapter(context) {
+
+
+ override fun getItemCount() = mList.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int)
+ = GnTaskViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.novice_task_item, parent, false))
+
+
+ override fun onBindViewHolder(holder: GnTaskViewHolder, position: Int) {
+ holder.binding.run {
+ root.layoutParams = (root.layoutParams as ViewGroup.MarginLayoutParams).apply {
+ leftMargin = if (position == 0) 16F.dip2px() else 0
+ }
+
+ val task = mList[position]
+ entity = task
+ executePendingBindings()
+
+ if (task.status == "finished") {
+ taskBtn.text = "已完成"
+ taskBtn.setTextColor(R.color.text_cccccc.toColor())
+ taskBtn.setBackgroundResource(R.drawable.button_round_f5f5f5)
+ } else {
+ taskBtn.text = "去完成"
+ taskBtn.setTextColor(R.color.theme_font.toColor())
+ taskBtn.setBackgroundResource(R.drawable.button_round_ebfdff)
+ }
+
+ taskNotice.setOnClickListener {
+ DialogUtils.showEnergyTaskNoticeDialog(mContext, task.name, task.descr)
+ }
+
+ root.setOnClickListener {
+ CheckLoginUtils.checkLogin(mContext, entrance) {
+ when (task.status) {
+ "normal" -> DirectUtils.directToLinkPage(mContext, task.link, entrance, "")
+
+ "limiting" -> ToastUtils.toast(R.string.limiting_tip.toResString())
+
+// "finished" -> {}
+ }
+ }
+ }
+ }
+ }
+
+ class GnTaskViewHolder(val binding: NoviceTaskItemBinding) : BaseRecyclerViewHolder(binding.root)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/TaskAdapter.kt b/app/src/main/java/com/gh/gamecenter/guangneng/TaskAdapter.kt
new file mode 100644
index 0000000000..c7a1330ac3
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/TaskAdapter.kt
@@ -0,0 +1,156 @@
+package com.gh.gamecenter.guangneng
+
+import android.content.Context
+import android.view.View
+import android.view.ViewGroup
+import androidx.databinding.DataBindingUtil
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.gh.base.BaseRecyclerViewHolder
+import com.gh.common.constant.ItemViewType
+import com.gh.common.util.*
+import com.gh.gamecenter.R
+import com.gh.gamecenter.adapter.viewholder.FooterViewHolder
+import com.gh.gamecenter.baselist.ListAdapter
+import com.gh.gamecenter.databinding.*
+
+class TaskAdapter(context: Context) : ListAdapter(context) {
+
+ private val mEntrance = "光能屋-任务列表"
+
+ override fun getItemCount(): Int {
+ return if (mEntityList.isNullOrEmpty()) 0 else mEntityList.size + FOOTER_ITEM_COUNT
+ }
+
+ override fun getItemViewType(position: Int): Int {
+ return if (position == itemCount - 1) {
+ ItemViewType.ITEM_FOOTER
+ } else {
+ val item = mEntityList[position]
+ when {
+ item.noviceTasks != null -> TYPE_NOVICE
+
+ item.title != null -> TYPE_TITLE
+
+ else -> TYPE_NORMAL
+ }
+ }
+ }
+
+ override fun areItemsTheSame(oldItem: TaskItemData?, newItem: TaskItemData?): Boolean {
+ return when {
+ oldItem?.noviceTasks != null && newItem?.noviceTasks != null -> {
+ oldItem.noviceTasks?.size == newItem.noviceTasks?.size
+ }
+
+ oldItem?.title != null && newItem?.title != null -> true
+
+ oldItem?.dailyTask != null && newItem?.dailyTask != null -> {
+ oldItem.dailyTask?.id == newItem.dailyTask?.id
+ }
+
+ else -> super.areItemsTheSame(oldItem, newItem)
+ }
+ }
+
+ override fun areContentsTheSame(oldItem: TaskItemData?, newItem: TaskItemData?): Boolean {
+ return when {
+ oldItem?.noviceTasks != null && newItem?.noviceTasks != null -> {
+ oldItem.noviceTasks?.size == newItem.noviceTasks?.size
+ }
+
+ oldItem?.title != null && newItem?.title != null -> true
+
+ oldItem?.dailyTask != null && newItem?.dailyTask != null -> {
+ oldItem.dailyTask?.id == newItem.dailyTask?.id
+ }
+
+ else -> super.areContentsTheSame(oldItem, newItem)
+ }
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
+ val view: View
+ return when (viewType) {
+ ItemViewType.ITEM_FOOTER -> {
+ view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)
+ FooterViewHolder(view)
+ }
+
+ TYPE_NOVICE -> NoviceTasksViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.novice_tasks_item, parent, false))
+
+ TYPE_TITLE -> TaskTitleViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.task_title_item, parent, false))
+
+ else -> DailyTaskViewHolder(DataBindingUtil.inflate(mLayoutInflater, R.layout.daily_task_item, parent, false))
+ }
+ }
+
+
+ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
+ when (holder) {
+ is NoviceTasksViewHolder -> {
+ val list = mEntityList[position].noviceTasks!!
+ holder.binding.taskContainer.run {
+ layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false)
+ adapter = HorizontalGnTaskAdapter(context, "光能中心", list)
+ }
+ }
+
+ is TaskTitleViewHolder -> {
+ holder.binding.run {
+ val titleStr = mEntityList[position].title!!
+ var top = if (titleStr == "新手任务") 16F.dip2px() else 32F.dip2px()
+ var bottom = if (titleStr == "新手任务") 16F.dip2px() else 5F.dip2px()
+ root.layoutParams = (root.layoutParams as ViewGroup.MarginLayoutParams).apply {
+ topMargin = top
+ bottomMargin = bottom
+ }
+ title.text = titleStr
+ }
+ }
+
+ is DailyTaskViewHolder -> {
+ val task = mEntityList[position].dailyTask!!
+ holder.binding.run {
+ entity = task
+ executePendingBindings()
+
+ taskNotice.setOnClickListener {
+ DialogUtils.showEnergyTaskNoticeDialog(mContext, task.name, task.descr)
+ }
+
+ root.setOnClickListener {
+ CheckLoginUtils.checkLogin(mContext, mEntrance) {
+ when (task.status) {
+ "normal" -> DirectUtils.directToLinkPage(mContext, task.link, mEntrance, "")
+
+ "limiting" -> {
+ DirectUtils.directToLinkPage(mContext, task.link, mEntrance, "")
+ }
+
+// "finished" -> {}
+ }
+ }
+ }
+ }
+ }
+
+ is FooterViewHolder -> {
+ holder.initItemPadding()
+ holder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver, R.string.ask_loadover_hint)
+ }
+ }
+ }
+
+ inner class NoviceTasksViewHolder(val binding: NoviceTasksItemBinding): BaseRecyclerViewHolder(binding.root)
+ inner class TaskTitleViewHolder(val binding: TaskTitleItemBinding): BaseRecyclerViewHolder(binding.root)
+ inner class DailyTaskViewHolder(val binding: DailyTaskItemBinding): BaseRecyclerViewHolder(binding.root)
+
+ companion object {
+ private const val TYPE_NOVICE = 900
+
+ private const val TYPE_TITLE = 901
+
+ private const val TYPE_NORMAL = 902
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/TaskFragment.kt b/app/src/main/java/com/gh/gamecenter/guangneng/TaskFragment.kt
new file mode 100644
index 0000000000..445649be18
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/TaskFragment.kt
@@ -0,0 +1,31 @@
+package com.gh.gamecenter.guangneng
+
+import android.os.Bundle
+import com.gh.common.util.viewModelProvider
+import com.gh.gamecenter.baselist.ListFragment
+
+class TaskFragment: ListFragment() {
+
+ private var mAdapter: TaskAdapter? = null
+
+ override fun provideListAdapter()= mAdapter
+ ?: TaskAdapter(requireContext()).apply { mAdapter = this }
+
+ override fun provideListViewModel(): TaskViewModel = viewModelProvider()
+
+ override fun getItemDecoration() = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ mListRefresh?.isNestedScrollingEnabled = false
+ }
+
+ override fun onLoadDone() {
+ super.onLoadDone()
+ mListRefresh?.isEnabled = false
+ }
+
+ fun setNestedScrollingEnabled(enable: Boolean) {
+ mListRv.isNestedScrollingEnabled = enable
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/TaskItemData.kt b/app/src/main/java/com/gh/gamecenter/guangneng/TaskItemData.kt
new file mode 100644
index 0000000000..d328edf859
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/TaskItemData.kt
@@ -0,0 +1,7 @@
+package com.gh.gamecenter.guangneng
+
+import com.gh.gamecenter.entity.TaskEntity
+
+data class TaskItemData(var noviceTasks: List? = null,
+ var title: String? = null,
+ var dailyTask: TaskEntity? = null)
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/guangneng/TaskViewModel.kt b/app/src/main/java/com/gh/gamecenter/guangneng/TaskViewModel.kt
new file mode 100644
index 0000000000..a458a315e4
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/guangneng/TaskViewModel.kt
@@ -0,0 +1,49 @@
+package com.gh.gamecenter.guangneng
+
+import android.app.Application
+import com.gh.gamecenter.baselist.ListViewModel
+import com.gh.gamecenter.entity.TaskEntity
+import com.gh.gamecenter.retrofit.BiResponse
+import com.gh.gamecenter.retrofit.RetrofitManager
+import io.reactivex.Single
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.schedulers.Schedulers
+
+class TaskViewModel(application: Application)
+ : ListViewModel(application) {
+
+ private val mApi = RetrofitManager.getInstance(getApplication()).api
+
+ override fun provideDataObservable(page: Int) = null
+
+ override fun provideDataSingle(page: Int): Single> {
+ return mApi.getDailyTasks(page)
+ }
+
+ override fun mergeResultLiveData() {
+ mResultLiveData.addSource(mListLiveData) { list ->
+
+ val itemDataList = arrayListOf()
+
+ mApi.noviceTasks
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(object : BiResponse>() {
+ override fun onSuccess(data: List) {
+ if (data.isNotEmpty()) {
+ itemDataList.add(TaskItemData(title = "新手任务"))
+ itemDataList.add(TaskItemData(noviceTasks = data))
+ }
+
+ itemDataList.add(TaskItemData(title = "日常任务"))
+
+ list.forEach {
+ itemDataList.add(TaskItemData(dailyTask = it))
+ }
+
+ mResultLiveData.postValue(itemDataList)
+ }
+ })
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/mygame/PlayedGameAdapter.kt b/app/src/main/java/com/gh/gamecenter/mygame/PlayedGameAdapter.kt
index f468d95f63..adee92cbb1 100644
--- a/app/src/main/java/com/gh/gamecenter/mygame/PlayedGameAdapter.kt
+++ b/app/src/main/java/com/gh/gamecenter/mygame/PlayedGameAdapter.kt
@@ -251,6 +251,7 @@ open class PlayedGameAdapter(context: Context,
}
fun resetListData() {
+ if (!hasHeader()) EnergyTaskHelper.postEnergyTask("open_game_time")
setListData(mEntityList)
}
diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java
index 95a72872be..b3dcada82b 100644
--- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java
@@ -42,7 +42,7 @@ import com.gh.common.util.StringUtils;
import com.gh.common.util.TimeUtils;
import com.gh.common.util.ToastUtils;
import com.gh.common.view.AvatarBorderView;
-import com.gh.common.view.VerticalItemDecoration;
+import com.gh.common.view.SpacingItemDecoration;
import com.gh.gamecenter.GameDetailActivity;
import com.gh.gamecenter.MainActivity;
import com.gh.gamecenter.MessageActivity;
@@ -64,6 +64,8 @@ import com.gh.gamecenter.eventbus.EBNetworkState;
import com.gh.gamecenter.eventbus.EBReuse;
import com.gh.gamecenter.eventbus.EBSkip;
import com.gh.gamecenter.fragment.MainWrapperFragment;
+import com.gh.gamecenter.guangneng.GuangnengCenterActivity;
+import com.gh.gamecenter.guangneng.GuangnengHouseActivity;
import com.gh.gamecenter.manager.UserManager;
import com.gh.gamecenter.message.MessageUnreadRepository;
import com.gh.gamecenter.message.MessageUnreadViewModel;
@@ -144,10 +146,8 @@ public class PersonalFragment extends BaseLazyFragment {
RecyclerView mFuncRecyclerView;
@BindView(R.id.personal_new_fans_tips)
View personalNewFansTips;
- @BindView(R.id.personal_background)
- SimpleDraweeView mPersonalBackground;
- @BindView(R.id.personal_background_shadow)
- View mPersonalBackgroundShadow;
+ @BindView(R.id.personal_guangneng_tv)
+ TextView mPersonalEnergy;
public final static String LOGIN_TAG = "login_tag"; //登入标识
public final static String LOGOUT_TAG = "logout_tag"; // 登出标识
@@ -227,7 +227,7 @@ public class PersonalFragment extends BaseLazyFragment {
mPersonalFuncGroupAdapter = new PersonalFunctionGroupAdapter(requireContext());
mFuncRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
mFuncRecyclerView.setAdapter(mPersonalFuncGroupAdapter);
- mFuncRecyclerView.addItemDecoration(new VerticalItemDecoration(requireContext(), 8f, false));
+ mFuncRecyclerView.addItemDecoration(new SpacingItemDecoration(true, false, false, false, 0, DisplayUtils.dip2px(32F), 0, 0));
int statusBarHeight = Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT ? 0 : DisplayUtils.getStatusBarHeight(getResources());
ViewGroup.LayoutParams params = toolbar.getLayoutParams();
@@ -375,6 +375,10 @@ public class PersonalFragment extends BaseLazyFragment {
}
});
+ mUserHomeViewModel.getEnergy().observe(this, energy -> {
+ mPersonalEnergy.setText(energy + "");
+ });
+
mPersonalViewModel.getHaloAddData().observe(this, datas -> {
if (!datas.isEmpty()) {
mPersonalFuncGroupAdapter.setListData(datas);
@@ -428,6 +432,9 @@ public class PersonalFragment extends BaseLazyFragment {
mUnreadViewModel.retry();
mUserHomeViewModel.getBadgeList();
mUserHomeViewModel.availableBadges();
+ if (CheckLoginUtils.isLogin()) {
+ mUserHomeViewModel.getUserEnergy();
+ }
}
int currentItem = ((MainWrapperFragment) getParentFragment()).getCurrentItem();
if (currentItem == INDEX_PERSONAL) {
@@ -497,7 +504,8 @@ public class PersonalFragment extends BaseLazyFragment {
}
@OnClick({R.id.toolbar, R.id.collapsingToolbar, R.id.iv_arrow, R.id.personal_info, R.id.personal_login, R.id.personal_user_small_icon, R.id.personal_user_icon, R.id.personal_msg,
- R.id.personal_user_name_small, R.id.personal_user_name, R.id.personal_badge, R.id.personal_home})
+ R.id.personal_user_name_small, R.id.personal_user_name, R.id.personal_badge, R.id.personal_home,
+ R.id.personal_guangneng, R.id.personal_guangneng_center, R.id.personal_guangneng_house, R.id.personal_guangneng_record})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.collapsingToolbar:
@@ -558,6 +566,30 @@ public class PersonalFragment extends BaseLazyFragment {
MtaHelper.onEvent("我的光环_新", "徽章中心", "进入徽章中心");
DirectUtils.directToBadgeWall(requireContext(), mUserInfoEntity.getUserId(), mUserInfoEntity.getName(), mUserInfoEntity.getIcon());
break;
+ case R.id.personal_guangneng:
+ if (mUserInfoEntity != null) {
+ MtaHelper.onEvent("我的光环_新", "光能值", "点击光能值");
+ DialogUtils.showEnergyDialog(requireContext(), mUserInfoEntity.getName(), mPersonalEnergy.getText().toString());
+ } else {
+ CheckLoginUtils.checkLogin(getContext(), "我的光环-光能值", null);
+ }
+ break;
+ case R.id.personal_guangneng_center:
+ MtaHelper.onEvent("我的光环_新", "光能中心", "进入光能中心");
+ requireContext().startActivity(GuangnengCenterActivity.Companion.getIntent(requireContext()));
+ break;
+ case R.id.personal_guangneng_house:
+ MtaHelper.onEvent("我的光环_新", "光能屋", "进入光能屋");
+ requireContext().startActivity(GuangnengHouseActivity.Companion.getIntent(requireContext()));
+ break;
+ case R.id.personal_guangneng_record:
+ if (mUserInfoEntity != null) {
+ MtaHelper.onEvent("我的光环_新", "光能记录", "进入光能记录");
+ DirectUtils.directToEnergyRecord(requireContext(), 0);
+ } else {
+ CheckLoginUtils.checkLogin(getContext(), "我的光环-光能记录", null);
+ }
+ break;
default:
break;
}
@@ -706,15 +738,6 @@ public class PersonalFragment extends BaseLazyFragment {
private void changeLoginState(boolean isLogin) {
if (isLogin) {
- // 设置背景
- if (mUserInfoEntity.getBackground() != null) {
- ImageUtils.display(mPersonalBackground, mUserInfoEntity.getBackground().getUrl());
- // 自定义背景才需要加阴影
- if (TextUtils.isEmpty(mUserInfoEntity.getBackground().getId())) {
- mPersonalBackgroundShadow.setVisibility(View.VISIBLE);
- }
- }
-
SignEntity signEntity = mDatabase.signDao().getSignEntityById(UserManager.getInstance().getUserId());
if (signEntity != null && !isCanSign(signEntity.getLastTime())) {
mPersonalSign.setImageDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.personal_sign_icon_yellow));
@@ -735,10 +758,10 @@ public class PersonalFragment extends BaseLazyFragment {
mUserHomeViewModel.setUserId(UserManager.getInstance().getUserId());
mUserHomeViewModel.getBadgeList();
mUserHomeViewModel.availableBadges();
+ mUserHomeViewModel.getUserEnergy();
MessageUnreadRepository.INSTANCE.loadMessageUnreadTotal(true);
} else {
- ImageUtils.display(mPersonalBackground, R.drawable.personal_top_bg);
- mPersonalBackgroundShadow.setVisibility(View.GONE);
+ mPersonalEnergy.setText("--");
mUserIcon.display("", "", "");
mUserIconSmall.setImageURI("");
mPersonalBadgeTv.setText("我的徽章");
diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt
index bb1ab34251..27ee7cd957 100644
--- a/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/personalhome/UserHomeViewModel.kt
@@ -10,9 +10,11 @@ import androidx.lifecycle.ViewModelProvider
import com.gh.gamecenter.R
import com.gh.gamecenter.entity.*
import com.gh.gamecenter.eventbus.EBUserFollow
+import com.gh.gamecenter.manager.UserManager
import com.gh.gamecenter.retrofit.BiResponse
import com.gh.gamecenter.retrofit.Response
import com.gh.gamecenter.retrofit.RetrofitManager
+import com.google.gson.JsonObject
import com.halo.assistant.HaloApp
import com.lightgame.utils.Utils
import io.reactivex.android.schedulers.AndroidSchedulers
@@ -30,6 +32,7 @@ class UserHomeViewModel(application: Application, var userId: String) : AndroidV
var availableBadge = MutableLiveData()
var availableBadgeCount = MutableLiveData()
var playGamesCount = MutableLiveData()
+ var energy = MutableLiveData()
fun getUserInfo() {
RetrofitManager.getInstance(getApplication())
@@ -152,6 +155,19 @@ class UserHomeViewModel(application: Application, var userId: String) : AndroidV
})
}
+ @SuppressLint("CheckResult")
+ fun getUserEnergy() {
+ RetrofitManager.getInstance(getApplication())
+ .api.getUserEnergies(UserManager.getInstance().userId)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(object : BiResponse() {
+ override fun onSuccess(data: JsonObject) {
+ energy.postValue(data["energy"].asInt)
+ }
+ })
+ }
+
class Factory(private val mApplication: Application,
private val mUserId: String) : ViewModelProvider.NewInstanceFactory() {
override fun create(modelClass: Class): T {
diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/background/BackgroundPreviewFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/background/BackgroundPreviewFragment.kt
index a26a9e5a46..eebe5cd7a2 100644
--- a/app/src/main/java/com/gh/gamecenter/personalhome/background/BackgroundPreviewFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/personalhome/background/BackgroundPreviewFragment.kt
@@ -58,6 +58,8 @@ class BackgroundPreviewFragment : NormalFragment() {
mUserViewModel.uploadBackground.observeNonNull(this) {
mPostDialog?.dismiss()
if (it) {
+ EnergyTaskHelper.postEnergyTask("update_user_background")
+
requireActivity().setResult(Activity.RESULT_OK)
requireActivity().finish()
mUserViewModel.uploadBackground.value = false
diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt b/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt
index 4fb048114e..f32a3241f5 100644
--- a/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/personalhome/border/AvatarBorderFragment.kt
@@ -62,6 +62,7 @@ class AvatarBorderFragment : BaseFragment_TabLayout() {
mUserViewModel.uploadAvatarBorder.observe(this, Observer {
mPostDialog?.dismiss()
if (it) {
+ EnergyTaskHelper.postEnergyTask("wear_avatar_frame")
requireActivity().finish()
mUserViewModel.uploadAvatarBorder.value = false
}
diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/excellentcomments/ExcellentCommentsViewModel.kt b/app/src/main/java/com/gh/gamecenter/personalhome/excellentcomments/ExcellentCommentsViewModel.kt
index 6330a512a2..a0cb2843cd 100644
--- a/app/src/main/java/com/gh/gamecenter/personalhome/excellentcomments/ExcellentCommentsViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/personalhome/excellentcomments/ExcellentCommentsViewModel.kt
@@ -4,6 +4,7 @@ import android.app.Application
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.gh.common.util.ErrorHelper
+import com.gh.common.util.EnergyTaskHelper
import com.gh.common.util.toObject
import com.gh.gamecenter.baselist.ListViewModel
import com.gh.gamecenter.entity.ErrorEntity
@@ -39,6 +40,8 @@ class ExcellentCommentsViewModel(application: Application, var userId: String)
override fun onResponse(response: ResponseBody?) {
Utils.toast(getApplication(), "点赞成功")
callback.invoke()
+
+ EnergyTaskHelper.postEnergyTask("vote_game_comment", commentId)
}
override fun onFailure(e: HttpException?) {
diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserCommentHistoryViewModel.kt b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserCommentHistoryViewModel.kt
index 5070eb62f7..cd49dcfffd 100644
--- a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserCommentHistoryViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserCommentHistoryViewModel.kt
@@ -3,10 +3,7 @@ package com.gh.gamecenter.personalhome.home
import android.app.Application
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
-import com.gh.common.util.ErrorHelper
-import com.gh.common.util.ToastUtils
-import com.gh.common.util.UrlFilterUtils
-import com.gh.common.util.toObject
+import com.gh.common.util.*
import com.gh.gamecenter.baselist.ListViewModel
import com.gh.gamecenter.baselist.LoadType
import com.gh.gamecenter.entity.ErrorEntity
@@ -89,6 +86,8 @@ class UserCommentHistoryViewModel(application: Application, var userId: String)
override fun onResponse(response: ResponseBody?) {
Utils.toast(getApplication(), "点赞成功")
callback.invoke()
+
+ EnergyTaskHelper.postEnergyTask("vote_game_comment", commentId)
}
override fun onFailure(e: HttpException?) {
diff --git a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryViewModel.kt b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryViewModel.kt
index e6ef2febb0..243d951da1 100644
--- a/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/personalhome/home/UserHistoryViewModel.kt
@@ -3,10 +3,7 @@ package com.gh.gamecenter.personalhome.home
import android.app.Application
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
-import com.gh.common.util.ErrorHelper
-import com.gh.common.util.ToastUtils
-import com.gh.common.util.UrlFilterUtils
-import com.gh.common.util.toObject
+import com.gh.common.util.*
import com.gh.gamecenter.baselist.ListViewModel
import com.gh.gamecenter.baselist.LoadType
import com.gh.gamecenter.entity.ErrorEntity
@@ -50,6 +47,8 @@ class UserHistoryViewModel(application: Application, var userId: String, private
override fun onResponse(response: ResponseBody?) {
Utils.toast(getApplication(), "点赞成功")
callback.invoke()
+
+ EnergyTaskHelper.postEnergyTask("vote_game_comment", commentId)
}
override fun onFailure(e: HttpException?) {
diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/BaseAnswerOrArticleItemViewHolder.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/BaseAnswerOrArticleItemViewHolder.kt
index a779c43226..3e0dd4b006 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/answer/BaseAnswerOrArticleItemViewHolder.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/answer/BaseAnswerOrArticleItemViewHolder.kt
@@ -180,8 +180,10 @@ open class BaseAnswerOrArticleItemViewHolder(itemView: View) : BaseRecyclerViewH
override fun onResponse(response: VoteEntity?) {
if (entity.type == "community_article") {
entity.me.isCommunityArticleVote = true
+ EnergyTaskHelper.postEnergyTask("vote_community_article", entity.id)
} else {
entity.me.isAnswerVoted = true
+ EnergyTaskHelper.postEnergyTask("vote_answer", entity.id)
}
Utils.toast(itemView.context, "已赞同")
}
@@ -287,6 +289,7 @@ open class BaseAnswerOrArticleItemViewHolder(itemView: View) : BaseRecyclerViewH
override fun onResponse(response: VoteEntity?) {
entity.me.isCommunityArticleVote = true
Utils.toast(itemView.context, "已赞同")
+ EnergyTaskHelper.postEnergyTask("vote_community_article", entity.id)
}
override fun onFailure(e: HttpException?) {
diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailViewModel.kt
index 617611cf52..5b3db39e39 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/answer/detail/AnswerDetailViewModel.kt
@@ -92,6 +92,8 @@ class AnswerDetailViewModel(application: Application) : AndroidViewModel(applica
mVoteLiveData.postValue(apiResponse)
syncVoteData(answerId)
+
+ EnergyTaskHelper.postEnergyTask("vote_answer", answerId)
}
override fun onFailure(e: HttpException?) {
diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt
index 18076a0ea4..26b3bea91b 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditActivity.kt
@@ -168,7 +168,7 @@ class AnswerEditActivity : BaseRichEditorActivity(), KeyboardHeightObserver {
toast("发布成功")
var answerId: String? = null
tryWithDefaultCatch {
- answerId = JSONObject(it.data?.string()).getString("_id")
+ answerId = JSONObject(it.data).getString("_id")
}
if (answerId == null) {
diff --git a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditViewModel.kt
index 66613c6b82..8444ca5df3 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/answer/edit/AnswerEditViewModel.kt
@@ -11,9 +11,7 @@ import com.gh.base.fragment.WaitingDialogFragment
import com.gh.common.syncpage.SyncDataEntity
import com.gh.common.syncpage.SyncFieldConstants
import com.gh.common.syncpage.SyncPageRepository
-import com.gh.common.util.ImageUtils
-import com.gh.common.util.UploadImageUtils
-import com.gh.common.util.UrlFilterUtils
+import com.gh.common.util.*
import com.gh.gamecenter.R
import com.gh.gamecenter.eventbus.EBReuse
import com.gh.gamecenter.manager.UserManager
@@ -52,7 +50,7 @@ class AnswerEditViewModel(application: Application,
var cacheAnswerContent: String? = null
val processDialog = MediatorLiveData()
- val postLiveData = MediatorLiveData>()
+ val postLiveData = MediatorLiveData>()
val postImageLiveData = MediatorLiveData>>()
val deleteDraftLiveDate = MediatorLiveData()
val draftsLiveData = MediatorLiveData()
@@ -88,11 +86,16 @@ class AnswerEditViewModel(application: Application,
.subscribe(object : Response() {
override fun onResponse(response: ResponseBody?) {
processDialog.postValue(WaitingDialogFragment.WaitingDialogData("提交中...", false))
- postLiveData.postValue(Resource.success(response))
+ val data = response?.string()
+ postLiveData.postValue(Resource.success(data))
EventBus.getDefault().post(EBReuse(AnswerEditActivity.ANSWER_DRAFT_CHANGE_TAG))
if (TextUtils.isEmpty(answerId)) {
syncAnswerCount()
+
+ tryWithDefaultCatch {
+ EnergyTaskHelper.postEnergyTask("post_answer", JSONObject(data).optString("_id"))
+ }
}
}
diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailViewModel.kt
index 6fef6ffd5b..84de303951 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/article/detail/ArticleDetailViewModel.kt
@@ -9,6 +9,7 @@ import com.gh.common.syncpage.SyncFieldConstants
import com.gh.common.syncpage.SyncPageRepository
import com.gh.common.util.CollectionUtils
import com.gh.common.util.ErrorHelper
+import com.gh.common.util.EnergyTaskHelper
import com.gh.gamecenter.R
import com.gh.gamecenter.entity.CommentEntity
import com.gh.gamecenter.entity.VoteEntity
@@ -111,6 +112,8 @@ class ArticleDetailViewModel(application: Application,
like.postValue(response)
syncVoteData()
+
+ EnergyTaskHelper.postEnergyTask("vote_community_article", articleId)
}
override fun onFailure(e: HttpException?) {
diff --git a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditViewModel.kt
index c76adef3cd..4b4886e796 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/article/edit/ArticleEditViewModel.kt
@@ -270,12 +270,19 @@ class ArticleEditViewModel(application: Application) : AndroidViewModel(applicat
}
processDialog.postValue(WaitingDialogFragment.WaitingDialogData("上传中...", false))
MtaHelper.onEvent("发表文章", "发布成功", UserManager.getInstance().community.name)
- postArticle.postValue(response?.string())
+ val data = response?.string()
+ postArticle.postValue(data)
EventBus.getDefault().post(EBReuse(ArticleEditActivity.ARTICLE_POSTED_TAG))
if (draftEntity?.id != null) {
EventBus.getDefault().post(EBReuse(ArticleEditActivity.ARTICLE_DRAFT_CHANGE_TAG))
}
+
+ if (detailEntity == null) {
+ tryWithDefaultCatch {
+ EnergyTaskHelper.postEnergyTask("publish_community_article", JSONObject(data).optString("_id"))
+ }
+ }
}
override fun onFailure(e: HttpException?) {
diff --git a/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentViewModel.kt
index 6ab5d191ce..fdf8965f3b 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/comment/NewCommentViewModel.kt
@@ -9,9 +9,7 @@ import androidx.lifecycle.ViewModelProvider
import com.gh.common.syncpage.SyncDataEntity
import com.gh.common.syncpage.SyncFieldConstants
import com.gh.common.syncpage.SyncPageRepository
-import com.gh.common.util.CommentDraftContainer
-import com.gh.common.util.createRequestBody
-import com.gh.common.util.tryCatchInRelease
+import com.gh.common.util.*
import com.gh.gamecenter.baselist.ListViewModel
import com.gh.gamecenter.entity.CommentDraft
import com.gh.gamecenter.entity.CommentEntity
@@ -121,6 +119,18 @@ open class NewCommentViewModel(application: Application,
SyncFieldConstants.ARTICLE_COMMENT_REPLY_COUNT,
commentEntity.reply + 1))
}
+
+ if (commentType == CommentType.COMMUNITY_ARTICLE && commentEntity == null) {
+ tryWithDefaultCatch {
+ EnergyTaskHelper.postEnergyTask("comment_community_article", JSONObject(response?.string()).optString("_id"))
+ }
+ }
+
+ if (commentType == CommentType.VIDEO && commentEntity == null) {
+ tryWithDefaultCatch {
+ EnergyTaskHelper.postEnergyTask("comment_video", JSONObject(response?.string()).optString("_id"))
+ }
+ }
}
override fun onFailure(e: HttpException?) {
diff --git a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt
index 69aaf2acc3..df2c58e014 100644
--- a/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/qa/questions/edit/QuestionEditViewModel.kt
@@ -373,9 +373,16 @@ class QuestionEditViewModel(application: Application) : AndroidViewModel(applica
override fun onResponse(response: ResponseBody?) {
processDialog.postValue(WaitingDialogFragment.WaitingDialogData("提交中...", false))
MtaHelper.onEvent("发表问题", "提交成功", communityEntity?.name)
- postLiveData.postValue(Resource.success(response?.string()))
+ val data = response?.string()
+ postLiveData.postValue(Resource.success(data))
EventBus.getDefault().post(EBReuse(QuestionEditActivity.QUESTION_POSTED_TAG))
if (questionEntity == null && !isFromSearch) cleanCurrentCommunityDraft()
+
+ if (questionEntity == null) {
+ tryWithDefaultCatch {
+ EnergyTaskHelper.postEnergyTask("post_question", JSONObject(data).optString("_id"))
+ }
+ }
}
override fun onFailure(e: HttpException?) {
diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java
index 63b9ad57e9..78389ff90b 100644
--- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java
+++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java
@@ -15,8 +15,10 @@ import com.gh.gamecenter.entity.CatalogEntity;
import com.gh.gamecenter.entity.CategoryEntity;
import com.gh.gamecenter.entity.CommentEntity;
import com.gh.gamecenter.entity.CommentnumEntity;
+import com.gh.gamecenter.entity.CommodityEntity;
import com.gh.gamecenter.entity.ConcernEntity;
import com.gh.gamecenter.entity.DeviceDialogEntity;
+import com.gh.gamecenter.entity.EnergyTaskCompleteEntity;
import com.gh.gamecenter.entity.FollowersOrFansEntity;
import com.gh.gamecenter.entity.ForumCategoryEntity;
import com.gh.gamecenter.entity.ForumDetailEntity;
@@ -55,9 +57,11 @@ import com.gh.gamecenter.entity.PrivacyPolicyEntity;
import com.gh.gamecenter.entity.Rating;
import com.gh.gamecenter.entity.RatingComment;
import com.gh.gamecenter.entity.RatingReplyEntity;
+import com.gh.gamecenter.entity.RollNoticeEntity;
import com.gh.gamecenter.entity.ServerCalendarEntity;
import com.gh.gamecenter.entity.ServersGameCategory;
import com.gh.gamecenter.entity.SettingsEntity;
+import com.gh.gamecenter.entity.CommodityCategoryEntity;
import com.gh.gamecenter.entity.SignEntity;
import com.gh.gamecenter.entity.SimpleGameEntity;
import com.gh.gamecenter.entity.SimulatorEntity;
@@ -67,6 +71,7 @@ import com.gh.gamecenter.entity.SubjectRecommendEntity;
import com.gh.gamecenter.entity.SubjectRefreshEntity;
import com.gh.gamecenter.entity.SubjectSettingEntity;
import com.gh.gamecenter.entity.TagEntity;
+import com.gh.gamecenter.entity.TaskEntity;
import com.gh.gamecenter.entity.TimeEntity;
import com.gh.gamecenter.entity.ToolBoxEntity;
import com.gh.gamecenter.entity.UnifiedUserTrendEntity;
@@ -2785,4 +2790,46 @@ public interface ApiService {
*/
@GET("catalogs/{catalog_id}/special")
Single> getSpecialCatalogs(@Path("catalog_id") String catalogId, @Query("page") int page);
+
+ /**
+ * 上报光能任务
+ */
+ @POST("devices/{device_id}/download_simulator_games")
+ Single> postEnergyTask(@Body RequestBody body);
+
+ /**
+ * 获取商品分类列表
+ */
+ @GET("shop/commodities/categories")
+ Single> getCommodityCategories();
+
+ /**
+ * 获取商品列表
+ */
+ @GET("shop/commodities")
+ Single> getCommodities(@Query("filter") String filter, @Query("page") int page);
+
+ /**
+ * 获取新手任务列表
+ */
+ @GET("novice_tasks")
+ Single> getNoviceTasks();
+
+ /**
+ * 获取日常任务列表
+ */
+ @GET("daily_tasks")
+ Single> getDailyTasks(@Query("page") int page);
+
+ /**
+ * 获取用户剩余光能
+ */
+ @GET("users/{user_id}/energies")
+ Single getUserEnergies(@Path("user_id") String userId);
+
+ /**
+ * 获取光能屋滚动通知
+ */
+ @GET("shop/orders/roll_notices")
+ Single> getRollNotices();
}
\ No newline at end of file
diff --git a/app/src/main/java/com/gh/gamecenter/security/BindPhoneFragment.kt b/app/src/main/java/com/gh/gamecenter/security/BindPhoneFragment.kt
index ffaf58198b..7533878b40 100644
--- a/app/src/main/java/com/gh/gamecenter/security/BindPhoneFragment.kt
+++ b/app/src/main/java/com/gh/gamecenter/security/BindPhoneFragment.kt
@@ -109,6 +109,9 @@ class BindPhoneFragment : NormalFragment() {
mViewModel.finishLiveData.observe(viewLifecycleOwner, Observer { isSuccess ->
if (isSuccess) {
+ // 上报光能任务
+ EnergyTaskHelper.postEnergyTask("bind_mobile")
+
// 更新本地用户已绑定手机的信息
val phoneNum: String = mBindPhoneEt.text.toString().trim { it <= ' ' }.replace(" ".toRegex(), "")
UserManager.getInstance().userInfoEntity = UserManager.getInstance().userInfoEntity?.apply {
diff --git a/app/src/main/java/com/gh/gamecenter/user/UserRepository.java b/app/src/main/java/com/gh/gamecenter/user/UserRepository.java
index 3cdb44b36b..9acdde992c 100644
--- a/app/src/main/java/com/gh/gamecenter/user/UserRepository.java
+++ b/app/src/main/java/com/gh/gamecenter/user/UserRepository.java
@@ -16,6 +16,7 @@ import com.gh.common.repository.ReservationRepository;
import com.gh.common.util.DataUtils;
import com.gh.common.util.DeviceUtils;
import com.gh.common.util.GameSubstituteRepositoryHelper;
+import com.gh.common.util.EnergyTaskHelper;
import com.gh.common.util.GsonUtils;
import com.gh.common.util.LoginHelper;
import com.gh.common.util.LoginUtils;
@@ -229,6 +230,12 @@ public class UserRepository {
PushManager.getAndSetAlias();
GameSubstituteRepositoryHelper.updateSubstitutableGames();
+
+ if (response.isFirstLogin()) {
+ EnergyTaskHelper.postEnergyTask("register");
+ } else {
+ EnergyTaskHelper.postEnergyTask("login");
+ }
}
@Override
@@ -337,6 +344,7 @@ public class UserRepository {
mCacheUserInfoEntity.setIcon(content);
break;
case UserViewModel.TYPE_ID_CARD:
+ EnergyTaskHelper.postEnergyTask("authentication");
mCacheUserInfoEntity.setIdCard(GsonUtils.fromJson(content, IdCardEntity.class));
break;
case UserViewModel.TYPE_INTRODUCE:
diff --git a/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt b/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt
index 16ef0ad21b..817710427a 100644
--- a/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/video/detail/VideoDetailContainerViewModel.kt
@@ -8,10 +8,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.gh.common.exposure.meta.MetaUtil
import com.gh.common.history.HistoryDatabase
import com.gh.common.runOnIoThread
-import com.gh.common.util.UrlFilterUtils
-import com.gh.common.util.createRequestBodyAny
-import com.gh.common.util.tryCatchInRelease
-import com.gh.common.util.tryWithDefaultCatch
+import com.gh.common.util.*
import com.gh.download.DownloadManager
import com.gh.gamecenter.entity.GameEntity
import com.gh.gamecenter.entity.MyVideoEntity
@@ -366,6 +363,7 @@ class VideoDetailContainerViewModel(application: Application) : AndroidViewModel
.subscribe(object : BiResponse() {
override fun onSuccess(data: ResponseBody) {
//Utils.toast(getApplication(), "已点赞")
+ EnergyTaskHelper.postEnergyTask("vote_video", videoDetail.id)
}
override fun onFailure(exception: Exception) {
diff --git a/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoViewModel.kt b/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoViewModel.kt
index c4655946a3..b67c018faa 100644
--- a/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoViewModel.kt
+++ b/app/src/main/java/com/gh/gamecenter/video/upload/view/UploadVideoViewModel.kt
@@ -66,6 +66,8 @@ class UploadVideoViewModel(application: Application) : AndroidViewModel(applicat
val url = jsonObject.getString("url")
val length = jsonObject.getLong("length")
postLiveData.postValue(Resource.success(MyVideoEntity(id = videoId, poster = poster, url = url, length = length, status = "pending")))
+
+ EnergyTaskHelper.postEnergyTask("upload_video", videoId)
}
}
diff --git a/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java b/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java
index ee6b471fbd..6b804e170e 100644
--- a/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java
+++ b/app/src/main/java/com/halo/assistant/fragment/SettingsFragment.java
@@ -28,6 +28,7 @@ import com.gh.common.history.HistoryHelper;
import com.gh.common.util.CheckLoginUtils;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.EntranceUtils;
+import com.gh.common.util.EnergyTaskHelper;
import com.gh.common.util.LoginUtils;
import com.gh.common.util.MtaHelper;
import com.gh.common.util.NotificationHelper;
@@ -136,6 +137,7 @@ public class SettingsFragment extends NormalFragment {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == UsageStatsHelper.USAGE_STATUS_REQUEST_CODE && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
mSettingUsageStatsSb.setChecked(UsageStatsHelper.checkForPermission());
+ if (UsageStatsHelper.checkForPermission()) EnergyTaskHelper.postEnergyTask("open_game_time");
}
// 当前登录方式为手机号登录,更换手机号后,回到该界面更新"退出账号"的手机号
diff --git a/app/src/main/res/color/text_tabbar_gh_house_style.xml b/app/src/main/res/color/text_tabbar_gh_house_style.xml
new file mode 100644
index 0000000000..e85d3084ad
--- /dev/null
+++ b/app/src/main/res/color/text_tabbar_gh_house_style.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-xxhdpi/bg_energy_dialog.png b/app/src/main/res/drawable-xxhdpi/bg_energy_dialog.png
new file mode 100755
index 0000000000..ccd36234b1
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/bg_energy_dialog.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/bg_gn_house.png b/app/src/main/res/drawable-xxhdpi/bg_gn_house.png
new file mode 100755
index 0000000000..90021a3041
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/bg_gn_house.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/bg_gncenter_card.png b/app/src/main/res/drawable-xxhdpi/bg_gncenter_card.png
new file mode 100755
index 0000000000..26030d8993
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/bg_gncenter_card.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/bg_gncenter_day.png b/app/src/main/res/drawable-xxhdpi/bg_gncenter_day.png
new file mode 100755
index 0000000000..2dc04712c5
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/bg_gncenter_day.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/bg_gncenter_night.png b/app/src/main/res/drawable-xxhdpi/bg_gncenter_night.png
new file mode 100755
index 0000000000..48d1a4a115
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/bg_gncenter_night.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/bg_personal_info.png b/app/src/main/res/drawable-xxhdpi/bg_personal_info.png
new file mode 100755
index 0000000000..b896308c2e
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/bg_personal_info.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/bg_popup_energy_task.png b/app/src/main/res/drawable-xxhdpi/bg_popup_energy_task.png
new file mode 100755
index 0000000000..f5163233c8
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/bg_popup_energy_task.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_commodity_selected.png b/app/src/main/res/drawable-xxhdpi/ic_commodity_selected.png
new file mode 100755
index 0000000000..6696c245e2
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_commodity_selected.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_energy_center_sign_gift.png b/app/src/main/res/drawable-xxhdpi/ic_energy_center_sign_gift.png
new file mode 100755
index 0000000000..b2c6fa1008
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_energy_center_sign_gift.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_energy_center_sign_normal.png b/app/src/main/res/drawable-xxhdpi/ic_energy_center_sign_normal.png
new file mode 100755
index 0000000000..fd4fd4efa3
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_energy_center_sign_normal.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_energy_center_signed.png b/app/src/main/res/drawable-xxhdpi/ic_energy_center_signed.png
new file mode 100755
index 0000000000..08273df0b2
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_energy_center_signed.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_energy_house_notice.png b/app/src/main/res/drawable-xxhdpi/ic_energy_house_notice.png
new file mode 100755
index 0000000000..df5e510c58
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_energy_house_notice.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_gn_center_lottery.png b/app/src/main/res/drawable-xxhdpi/ic_gn_center_lottery.png
new file mode 100755
index 0000000000..7132420ec2
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_gn_center_lottery.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_gn_center_record.png b/app/src/main/res/drawable-xxhdpi/ic_gn_center_record.png
new file mode 100755
index 0000000000..479181c75c
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_gn_center_record.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_gn_center_top_gn.png b/app/src/main/res/drawable-xxhdpi/ic_gn_center_top_gn.png
new file mode 100755
index 0000000000..f8fa764896
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_gn_center_top_gn.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_gn_order_center.png b/app/src/main/res/drawable-xxhdpi/ic_gn_order_center.png
new file mode 100755
index 0000000000..5484100969
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_gn_order_center.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_gncenter_done.png b/app/src/main/res/drawable-xxhdpi/ic_gncenter_done.png
new file mode 100755
index 0000000000..dc2a265763
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_gncenter_done.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_gncenter_more.png b/app/src/main/res/drawable-xxhdpi/ic_gncenter_more.png
new file mode 100755
index 0000000000..af9dd1a530
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_gncenter_more.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_gncenter_notice.png b/app/src/main/res/drawable-xxhdpi/ic_gncenter_notice.png
new file mode 100755
index 0000000000..13a1ceaf61
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_gncenter_notice.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_gncenter_sign.png b/app/src/main/res/drawable-xxhdpi/ic_gncenter_sign.png
new file mode 100755
index 0000000000..f91ab9341c
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_gncenter_sign.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_gncenter_switch_on.png b/app/src/main/res/drawable-xxhdpi/ic_gncenter_switch_on.png
new file mode 100755
index 0000000000..a38c1ca5cd
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_gncenter_switch_on.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_gncenter_verify.png b/app/src/main/res/drawable-xxhdpi/ic_gncenter_verify.png
new file mode 100755
index 0000000000..c08eebb488
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_gncenter_verify.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_gnhouse_gn.png b/app/src/main/res/drawable-xxhdpi/ic_gnhouse_gn.png
new file mode 100755
index 0000000000..703a8147b6
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_gnhouse_gn.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_guangneng.png b/app/src/main/res/drawable-xxhdpi/ic_guangneng.png
new file mode 100755
index 0000000000..9877d6bc10
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_guangneng.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_guangneng_center.png b/app/src/main/res/drawable-xxhdpi/ic_guangneng_center.png
new file mode 100755
index 0000000000..00ae9dfb61
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_guangneng_center.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_guangneng_house.png b/app/src/main/res/drawable-xxhdpi/ic_guangneng_house.png
new file mode 100755
index 0000000000..c8526b00d1
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_guangneng_house.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_guangneng_record.png b/app/src/main/res/drawable-xxhdpi/ic_guangneng_record.png
new file mode 100755
index 0000000000..17c5e207e4
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_guangneng_record.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_popup_energy_task_more.png b/app/src/main/res/drawable-xxhdpi/ic_popup_energy_task_more.png
new file mode 100755
index 0000000000..4cf0affc93
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_popup_energy_task_more.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_doubt_black.png b/app/src/main/res/drawable-xxhdpi/icon_doubt_black.png
new file mode 100755
index 0000000000..681a022723
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_doubt_black.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/icon_doubt_white.png b/app/src/main/res/drawable-xxhdpi/icon_doubt_white.png
new file mode 100755
index 0000000000..fe5c881cc8
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_doubt_white.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/bg_energy_dialog.png b/app/src/main/res/drawable-xxxhdpi/bg_energy_dialog.png
new file mode 100755
index 0000000000..2e4cb569e4
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/bg_energy_dialog.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/bg_gn_house.png b/app/src/main/res/drawable-xxxhdpi/bg_gn_house.png
new file mode 100755
index 0000000000..6751739409
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/bg_gn_house.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/bg_gncenter_card.png b/app/src/main/res/drawable-xxxhdpi/bg_gncenter_card.png
new file mode 100755
index 0000000000..c73976de20
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/bg_gncenter_card.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/bg_gncenter_day.png b/app/src/main/res/drawable-xxxhdpi/bg_gncenter_day.png
new file mode 100755
index 0000000000..d19557d9f3
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/bg_gncenter_day.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/bg_gncenter_night.png b/app/src/main/res/drawable-xxxhdpi/bg_gncenter_night.png
new file mode 100755
index 0000000000..23ba0cff48
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/bg_gncenter_night.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/bg_personal_info.png b/app/src/main/res/drawable-xxxhdpi/bg_personal_info.png
new file mode 100755
index 0000000000..3a1fcee4a0
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/bg_personal_info.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/bg_popup_energy_task.png b/app/src/main/res/drawable-xxxhdpi/bg_popup_energy_task.png
new file mode 100755
index 0000000000..f7a62d71ec
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/bg_popup_energy_task.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_commodity_selected.png b/app/src/main/res/drawable-xxxhdpi/ic_commodity_selected.png
new file mode 100755
index 0000000000..edcf970fc2
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_commodity_selected.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_energy_center_sign_gift.png b/app/src/main/res/drawable-xxxhdpi/ic_energy_center_sign_gift.png
new file mode 100755
index 0000000000..4091847aaa
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_energy_center_sign_gift.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_energy_center_sign_normal.png b/app/src/main/res/drawable-xxxhdpi/ic_energy_center_sign_normal.png
new file mode 100755
index 0000000000..e89555f8dc
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_energy_center_sign_normal.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_energy_center_signed.png b/app/src/main/res/drawable-xxxhdpi/ic_energy_center_signed.png
new file mode 100755
index 0000000000..ad27b56f27
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_energy_center_signed.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_energy_house_notice.png b/app/src/main/res/drawable-xxxhdpi/ic_energy_house_notice.png
new file mode 100755
index 0000000000..560bb42def
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_energy_house_notice.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_gn_center_lottery.png b/app/src/main/res/drawable-xxxhdpi/ic_gn_center_lottery.png
new file mode 100755
index 0000000000..84a151d657
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_gn_center_lottery.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_gn_center_record.png b/app/src/main/res/drawable-xxxhdpi/ic_gn_center_record.png
new file mode 100755
index 0000000000..0e467818e0
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_gn_center_record.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_gn_center_top_gn.png b/app/src/main/res/drawable-xxxhdpi/ic_gn_center_top_gn.png
new file mode 100755
index 0000000000..38b5184f21
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_gn_center_top_gn.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_gn_order_center.png b/app/src/main/res/drawable-xxxhdpi/ic_gn_order_center.png
new file mode 100755
index 0000000000..fe555dbaa5
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_gn_order_center.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_gncenter_done.png b/app/src/main/res/drawable-xxxhdpi/ic_gncenter_done.png
new file mode 100755
index 0000000000..242d39e7e7
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_gncenter_done.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_gncenter_notice.png b/app/src/main/res/drawable-xxxhdpi/ic_gncenter_notice.png
new file mode 100755
index 0000000000..dded6803bf
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_gncenter_notice.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_gncenter_sign.png b/app/src/main/res/drawable-xxxhdpi/ic_gncenter_sign.png
new file mode 100755
index 0000000000..5ec7e25270
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_gncenter_sign.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_gncenter_switch_on.png b/app/src/main/res/drawable-xxxhdpi/ic_gncenter_switch_on.png
new file mode 100755
index 0000000000..79b59d1d21
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_gncenter_switch_on.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_gncenter_verify.png b/app/src/main/res/drawable-xxxhdpi/ic_gncenter_verify.png
new file mode 100755
index 0000000000..670f42ce44
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_gncenter_verify.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_gnhouse_gn.png b/app/src/main/res/drawable-xxxhdpi/ic_gnhouse_gn.png
new file mode 100755
index 0000000000..99e824e540
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_gnhouse_gn.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_guangneng.png b/app/src/main/res/drawable-xxxhdpi/ic_guangneng.png
new file mode 100755
index 0000000000..5b5e0dd9a8
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_guangneng.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_guangneng_center.png b/app/src/main/res/drawable-xxxhdpi/ic_guangneng_center.png
new file mode 100755
index 0000000000..8261dd2ff3
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_guangneng_center.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_guangneng_house.png b/app/src/main/res/drawable-xxxhdpi/ic_guangneng_house.png
new file mode 100755
index 0000000000..b342d0a791
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_guangneng_house.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_guangneng_record.png b/app/src/main/res/drawable-xxxhdpi/ic_guangneng_record.png
new file mode 100755
index 0000000000..5d7eaf5f32
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_guangneng_record.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_popup_energy_task_more.png b/app/src/main/res/drawable-xxxhdpi/ic_popup_energy_task_more.png
new file mode 100755
index 0000000000..6f2c1b1f77
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_popup_energy_task_more.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_doubt_black.png b/app/src/main/res/drawable-xxxhdpi/icon_doubt_black.png
new file mode 100755
index 0000000000..c3aeef65fd
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_doubt_black.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/icon_doubt_white.png b/app/src/main/res/drawable-xxxhdpi/icon_doubt_white.png
new file mode 100755
index 0000000000..8bea2a274d
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_doubt_white.png differ
diff --git a/app/src/main/res/drawable/bg_energy_center_dotted_line.xml b/app/src/main/res/drawable/bg_energy_center_dotted_line.xml
new file mode 100644
index 0000000000..49f584cb7e
--- /dev/null
+++ b/app/src/main/res/drawable/bg_energy_center_dotted_line.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_energy_house_roll_notice.xml b/app/src/main/res/drawable/bg_energy_house_roll_notice.xml
new file mode 100644
index 0000000000..9f21c282bd
--- /dev/null
+++ b/app/src/main/res/drawable/bg_energy_house_roll_notice.xml
@@ -0,0 +1,23 @@
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/button_round_7ce7f8.xml b/app/src/main/res/drawable/button_round_7ce7f8.xml
new file mode 100644
index 0000000000..b366f13345
--- /dev/null
+++ b/app/src/main/res/drawable/button_round_7ce7f8.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/button_round_806f9cef.xml b/app/src/main/res/drawable/button_round_806f9cef.xml
new file mode 100644
index 0000000000..5e0baa7e01
--- /dev/null
+++ b/app/src/main/res/drawable/button_round_806f9cef.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/button_round_e6f8fa.xml b/app/src/main/res/drawable/button_round_e6f8fa.xml
new file mode 100644
index 0000000000..ecfd180709
--- /dev/null
+++ b/app/src/main/res/drawable/button_round_e6f8fa.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/button_round_ebfdff.xml b/app/src/main/res/drawable/button_round_ebfdff.xml
new file mode 100644
index 0000000000..268a1fd6e2
--- /dev/null
+++ b/app/src/main/res/drawable/button_round_ebfdff.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_gncenter_card_rectangle.xml b/app/src/main/res/drawable/shape_gncenter_card_rectangle.xml
new file mode 100644
index 0000000000..3f2a991d51
--- /dev/null
+++ b/app/src/main/res/drawable/shape_gncenter_card_rectangle.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/commodity_item.xml b/app/src/main/res/layout/commodity_item.xml
new file mode 100644
index 0000000000..497b859e6a
--- /dev/null
+++ b/app/src/main/res/layout/commodity_item.xml
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/daily_task_item.xml b/app/src/main/res/layout/daily_task_item.xml
new file mode 100644
index 0000000000..7948a27bce
--- /dev/null
+++ b/app/src/main/res/layout/daily_task_item.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_energy.xml b/app/src/main/res/layout/dialog_energy.xml
new file mode 100644
index 0000000000..5009fced1a
--- /dev/null
+++ b/app/src/main/res/layout/dialog_energy.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_notice.xml b/app/src/main/res/layout/dialog_notice.xml
index b6b0acc0ee..6e478db629 100644
--- a/app/src/main/res/layout/dialog_notice.xml
+++ b/app/src/main/res/layout/dialog_notice.xml
@@ -25,6 +25,8 @@
android:id="@+id/dialog_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginLeft="24dp"
+ android:layout_marginRight="24dp"
android:layout_marginBottom="24dp"
android:lineSpacingExtra="7dp"
android:gravity="center"
diff --git a/app/src/main/res/layout/fragment_commodity_list.xml b/app/src/main/res/layout/fragment_commodity_list.xml
new file mode 100644
index 0000000000..855ca2a04e
--- /dev/null
+++ b/app/src/main/res/layout/fragment_commodity_list.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_guangneng_center.xml b/app/src/main/res/layout/fragment_guangneng_center.xml
new file mode 100644
index 0000000000..875c4dd9c0
--- /dev/null
+++ b/app/src/main/res/layout/fragment_guangneng_center.xml
@@ -0,0 +1,566 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_guangneng_house.xml b/app/src/main/res/layout/fragment_guangneng_house.xml
new file mode 100644
index 0000000000..921d72f235
--- /dev/null
+++ b/app/src/main/res/layout/fragment_guangneng_house.xml
@@ -0,0 +1,307 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_personal.xml b/app/src/main/res/layout/fragment_personal.xml
index 5198672c68..014d3883c4 100644
--- a/app/src/main/res/layout/fragment_personal.xml
+++ b/app/src/main/res/layout/fragment_personal.xml
@@ -5,7 +5,8 @@
android:id="@+id/list_refresh"
android:fitsSystemWindows="false"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:background="@color/white">
-
+ android:layout_height="248dp"
+ android:paddingLeft="4dp"
+ android:paddingTop="56dp"
+ android:paddingRight="22dp"
+ android:background="@drawable/bg_personal_info"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
-
-
-
-
-
-
+
+
-
-
+
+
+
+ app:layout_constraintStart_toEndOf="@+id/personal_user_icon_container"
+ app:layout_constraintTop_toTopOf="@+id/personal_user_icon_container"
+ tools:text="姓名" />
-
+ app:layout_constraintStart_toEndOf="@+id/personal_user_icon_container">
-
-
-
-
+ android:textSize="9sp" />
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_centerHorizontal="true"
+ android:layout_marginTop="4dp"
+ android:textColor="@color/text_333333"
+ android:textSize="11sp"
+ android:text="@string/guangneng" />
+
+
+
+
+
+
+
+ android:layout_marginTop="4dp"
+ android:textColor="@color/text_333333"
+ android:textSize="11sp"
+ android:text="@string/guangneng_center" />
+
+
-
-
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:src="@drawable/ic_guangneng_house" />
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_filter_commodity_size.xml b/app/src/main/res/layout/item_filter_commodity_size.xml
new file mode 100644
index 0000000000..10a381ab71
--- /dev/null
+++ b/app/src/main/res/layout/item_filter_commodity_size.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_personal_fun_group.xml b/app/src/main/res/layout/item_personal_fun_group.xml
index eeeb97c51d..e86f0cea28 100644
--- a/app/src/main/res/layout/item_personal_fun_group.xml
+++ b/app/src/main/res/layout/item_personal_fun_group.xml
@@ -3,12 +3,10 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@drawable/bg_personal_card"
android:orientation="vertical"
- android:paddingLeft="18dp"
- android:paddingTop="16dp"
- android:paddingRight="16dp"
- android:paddingBottom="28dp">
+ android:paddingLeft="16dp"
+ android:paddingBottom="32dp"
+ android:paddingRight="16dp">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/novice_tasks_item.xml b/app/src/main/res/layout/novice_tasks_item.xml
new file mode 100644
index 0000000000..3b92c2b200
--- /dev/null
+++ b/app/src/main/res/layout/novice_tasks_item.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/popup_energy_task.xml b/app/src/main/res/layout/popup_energy_task.xml
new file mode 100644
index 0000000000..442736a11b
--- /dev/null
+++ b/app/src/main/res/layout/popup_energy_task.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/tab_item_gn_house.xml b/app/src/main/res/layout/tab_item_gn_house.xml
new file mode 100644
index 0000000000..2fd13ce3bc
--- /dev/null
+++ b/app/src/main/res/layout/tab_item_gn_house.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/task_title_item.xml b/app/src/main/res/layout/task_title_item.xml
new file mode 100644
index 0000000000..d9658bd13a
--- /dev/null
+++ b/app/src/main/res/layout/task_title_item.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index c4fec896bd..7365aefd1b 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -120,6 +120,7 @@
#FFC247
#FF9933
#F4F5F6
+ #CDF5F0
#80000000
#404040
#ededed
@@ -129,6 +130,12 @@
#EBF5FF
#3797FF
#EFF7FF
+ #806F9CEF
+ #EBFDFF
+ #7CE7F8
+ #E6F8FA
+ #91F0FD
+ #34D2EA
#b2b2b2
#9a9a9a
#3a3a3a
@@ -217,6 +224,9 @@
#757575
#0E0E0E
#F9FAFB
+ #00CDEB
+ #80EFFF
+ #00BFDB
#99666666
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cdd7bd3aee..22a6cb9d96 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -766,6 +766,16 @@
已尝试添加到桌面
如桌面未出现图标,请开启桌面快捷方式权限
+ 光能
+ 光能中心
+ 光能屋
+ 光能记录
+ 光能规则
+ 赚光能
+ 兑换规则
+ 你来晚啦,任务已经被人做完喇~
+ 前往光能屋查看更多
+