diff --git a/app/libs/mid-sdk-2.3.jar b/app/libs/mid-sdk-2.3.jar
deleted file mode 100644
index c57e1ab0de..0000000000
Binary files a/app/libs/mid-sdk-2.3.jar and /dev/null differ
diff --git a/app/libs/mid-sdk-3.71.jar b/app/libs/mid-sdk-3.71.jar
new file mode 100644
index 0000000000..2c0f80e8b3
Binary files /dev/null and b/app/libs/mid-sdk-3.71.jar differ
diff --git a/app/libs/mta-android-stat-sdk-2.2.0_20160504.jar b/app/libs/mta-android-stat-sdk-2.2.0_20160504.jar
deleted file mode 100644
index c77a04d051..0000000000
Binary files a/app/libs/mta-android-stat-sdk-2.2.0_20160504.jar and /dev/null differ
diff --git a/app/libs/mta-android-stat-sdk-3.0.0_20170331-jdk1.6.jar b/app/libs/mta-android-stat-sdk-3.0.0_20170331-jdk1.6.jar
new file mode 100644
index 0000000000..cace74d680
Binary files /dev/null and b/app/libs/mta-android-stat-sdk-3.0.0_20170331-jdk1.6.jar differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e739391af3..40389834a5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -63,7 +63,7 @@
android:value="81DB144D555386A38A70B833537EC256" />
+ android:value="GH_TEST"/>
@@ -74,15 +74,22 @@
android:name="InstallChannel"
android:value="GH_TEST"/>
+
+
+ android:value="58e5b0b9c62dca35a00005e6">
+
+ android:value="ca08596492f8a7fde2ab48dceab8c1f3">
+
-
-
-
+
diff --git a/app/src/main/java/com/gh/base/AppController.java b/app/src/main/java/com/gh/base/AppController.java
index ce452337fc..16bb835182 100644
--- a/app/src/main/java/com/gh/base/AppController.java
+++ b/app/src/main/java/com/gh/base/AppController.java
@@ -30,10 +30,10 @@ public class AppController extends Application {
//public class AppController extends TinkerApplication {
public static final String TAG = AppController.class.getSimpleName();
- // xiaomi push appid
- public static final String APP_ID = "2882303761517352993";
- // xiaomi push appkey
- public static final String APP_KEY = "5451735292993";
+ // TODO xiaomi push appid 2882303761517352993
+ public static final String APP_ID = "2882303761517564447";
+ // TODO xiaomi push appkey 5451735292993
+ public static final String APP_KEY = "5761756481447";
private static AppController mInstance;
private static ArrayMap objectMap = new ArrayMap<>();
diff --git a/app/src/main/java/com/gh/base/HomeFragment.java b/app/src/main/java/com/gh/base/HomeFragment.java
index 669ec7fbbf..85f040c6d1 100644
--- a/app/src/main/java/com/gh/base/HomeFragment.java
+++ b/app/src/main/java/com/gh/base/HomeFragment.java
@@ -22,6 +22,7 @@ import com.gh.common.util.DataCollectionUtils;
import com.gh.common.util.DataUtils;
import com.gh.common.util.DisplayUtils;
import com.gh.download.DownloadManager;
+import com.gh.gamecenter.ConcernActivity;
import com.gh.gamecenter.DownloadManagerActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.SearchActivity;
@@ -222,9 +223,12 @@ public class HomeFragment extends Fragment implements View.OnClickListener {
intent.putExtra("entrance", "(工具栏)");
startActivity(intent);
} else if (id == R.id.actionbar_notification) {
+ DataUtils.onEvent(getActivity(), "主页", "关注图标");
+ DataCollectionUtils.uploadClick(getActivity(), "关注图标", "主页");
-// Intent intent = new Intent(getContext(), NewGameDetailActivity.class);
-// getActivity().startActivity(intent);
+ Intent intent = new Intent(getActivity(), ConcernActivity.class);
+ intent.putExtra("entrance", "(工具栏)");
+ startActivity(intent);
}
}
diff --git a/app/src/main/java/com/gh/common/constant/Config.java b/app/src/main/java/com/gh/common/constant/Config.java
index f53114a951..cf2671945a 100644
--- a/app/src/main/java/com/gh/common/constant/Config.java
+++ b/app/src/main/java/com/gh/common/constant/Config.java
@@ -6,11 +6,11 @@ import android.content.SharedPreferences;
public class Config {
- public static final String HOST = "http://api.ghzhushou.com/v2d5/";
- public static final String USER_HOST = "http://user.ghzhushou.com/v1d2/";
- public static final String COMMENT_HOST = "http://comment2.ghzhushou.com/v1d2/";
+ public static final String HOST = "http://dev.api2.ghzhushou.com/v2d5/";
+ public static final String USER_HOST = "http://dev.user2.ghzhushou.com/v1d2/";
+ public static final String COMMENT_HOST = "http://dev.comment2.ghzhushou.com/v1d2/";
public static final String DATA_HOST = "http://data.ghzhushou.com/";
- public static final String LIBAO_HOST = "http://libao.ghzhushou.com/v1d1/";
+ public static final String LIBAO_HOST = "http://dev.libao2.ghzhushou.com/v1d2/";
public static final String PREFERENCE = "ghzhushou";
public static boolean isShow(Context context) {
diff --git a/app/src/main/java/com/gh/common/util/CommentUtils.java b/app/src/main/java/com/gh/common/util/CommentUtils.java
index 245570b5a4..4a6e61f01d 100644
--- a/app/src/main/java/com/gh/common/util/CommentUtils.java
+++ b/app/src/main/java/com/gh/common/util/CommentUtils.java
@@ -1,10 +1,30 @@
package com.gh.common.util;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.Window;
+import android.widget.LinearLayout;
import android.widget.TextView;
+import com.gh.base.AppController;
+import com.gh.gamecenter.CommentDetailActivity;
+import com.gh.gamecenter.MessageDetailActivity;
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.adapter.MessageDetailAdapter;
+import com.gh.gamecenter.entity.CommentEntity;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
import java.text.ParseException;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.List;
import java.util.Locale;
/**
@@ -42,4 +62,138 @@ public class CommentUtils {
textView.setText(format.format(time * 1000));
}
}
+
+ public static void showReportDialog(final CommentEntity commentEntity, final Context mContext
+ , final MessageDetailAdapter.OnCommentCallBackListener mCallBackListener, final String newsId) {
+
+ final Dialog dialog = new Dialog(mContext);
+
+ LinearLayout container = new LinearLayout(mContext);
+ container.setOrientation(LinearLayout.VERTICAL);
+ container.setBackgroundColor(Color.WHITE);
+ container.setPadding(0, DisplayUtils.dip2px(mContext, 12), 0, DisplayUtils.dip2px(mContext, 12));
+
+ List dialogType = new ArrayList<>();
+ dialogType.add("回复");
+ dialogType.add("复制");
+ dialogType.add("举报");
+
+ if (commentEntity.getParent() != null) {
+ dialogType.add("查看对话");
+ }
+
+ for (String s : dialogType) {
+ final TextView reportTv = new TextView(mContext);
+ reportTv.setPadding(DisplayUtils.dip2px(mContext, 20), DisplayUtils.dip2px(mContext, 12),
+ 0, DisplayUtils.dip2px(mContext, 12));
+ reportTv.setText(s);
+ reportTv.setTextSize(17);
+ reportTv.setTextColor(mContext.getResources().getColor(R.color.title));
+ reportTv.setBackgroundResource(R.drawable.textview_white_style);
+ int widthPixels = mContext.getResources().getDisplayMetrics().widthPixels;
+ reportTv.setLayoutParams(new LinearLayout.LayoutParams((widthPixels * 9)/10,
+ LinearLayout.LayoutParams.WRAP_CONTENT));
+ container.addView(reportTv);
+
+ reportTv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialog.cancel();
+ switch (reportTv.getText().toString()) {
+ case "回复":
+ if (mCallBackListener != null) {
+ mCallBackListener.showSoftInput(commentEntity);
+ } else if (!TextUtils.isEmpty(newsId)){
+ Intent intent = new Intent(mContext, MessageDetailActivity.class);
+ AppController.put("CommentEntity", commentEntity);
+ intent.putExtra("commentNum", -1);
+ intent.putExtra("newsId", newsId);
+ intent.putExtra("openSoftInput", true);
+ mContext.startActivity(intent);
+ } else {
+ Utils.toast(mContext, "缺少关键属性");
+ }
+
+ break;
+ case "复制":
+ LibaoUtils.copyLink(commentEntity.getContent(), mContext);
+ break;
+ case "举报":
+ showReportTypeDialog(commentEntity, mContext);
+ break;
+ case "查看对话":
+ Intent intent = new Intent(mContext, CommentDetailActivity.class);
+ intent.putExtra("commentId", commentEntity.getId());
+ mContext.startActivity(intent);
+ break;
+ }
+
+
+ }
+ });
+ }
+
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setContentView(container);
+ dialog.show();
+
+ }
+
+ private static void showReportTypeDialog(final CommentEntity commentEntity, final Context mContext) {
+ final String[] arrReportType = new String[]{"垃圾广告营销", "恶意攻击谩骂", "淫秽色情信息",
+ "违法有害信息", "其它"};
+ int widthPixels = mContext.getResources().getDisplayMetrics().widthPixels;
+
+ final Dialog reportTypeDialog = new Dialog(mContext);
+ LinearLayout container = new LinearLayout(mContext);
+ container.setOrientation(LinearLayout.VERTICAL);
+ container.setPadding(0, DisplayUtils.dip2px(mContext, 12), 0, DisplayUtils.dip2px(mContext, 12));
+ container.setBackgroundColor(Color.WHITE);
+
+ for (final String s : arrReportType) {
+ TextView reportTypeTv = new TextView(mContext);
+ reportTypeTv.setText(s);
+ reportTypeTv.setTextSize(17);
+ reportTypeTv.setTextColor(mContext.getResources().getColor(R.color.title));
+ reportTypeTv.setBackgroundResource(R.drawable.textview_white_style);
+ reportTypeTv.setLayoutParams(new LinearLayout.LayoutParams((widthPixels * 9)/10,
+ LinearLayout.LayoutParams.WRAP_CONTENT));
+ reportTypeTv.setPadding(DisplayUtils.dip2px(mContext, 20), DisplayUtils.dip2px(mContext, 12),
+ 0, DisplayUtils.dip2px(mContext, 12));
+ container.addView(reportTypeTv);
+
+ reportTypeTv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ JSONObject jsonObject = new JSONObject();
+ try {
+ jsonObject.put("comment_id", commentEntity.getId());
+ jsonObject.put("reason", s);
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+
+ PostCommentUtils.addReportData(mContext, jsonObject.toString(), true,
+ new PostCommentUtils.PostCommentListener() {
+ @Override
+ public void postSucced(JSONObject response) {
+ Utils.toast(mContext, "感谢您的举报");
+ }
+
+ @Override
+ public void postFailed(Throwable error) {
+ Utils.toast(mContext, "举报失败,请检查网络设置");
+ }
+ });
+ reportTypeDialog.cancel();
+ }
+ });
+ }
+
+ reportTypeDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ reportTypeDialog.setContentView(container);
+ reportTypeDialog.show();
+ }
+
+
}
diff --git a/app/src/main/java/com/gh/common/util/MessageShareUtils.java b/app/src/main/java/com/gh/common/util/MessageShareUtils.java
index 15ed1ae215..4514a8193c 100644
--- a/app/src/main/java/com/gh/common/util/MessageShareUtils.java
+++ b/app/src/main/java/com/gh/common/util/MessageShareUtils.java
@@ -447,11 +447,7 @@ public class MessageShareUtils {
if (isToast) {
Utils.toast(context,"成功保存到相册");
//刷新手机图片库
- Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
- Uri uri = Uri.fromFile(_file);
- intent.setData(uri);
- context.sendBroadcast(intent);
- Utils.log("保存分享图片路径:" + _file.getAbsolutePath());
+ refreshImage(_file, context);
}
}
}
@@ -469,4 +465,12 @@ public class MessageShareUtils {
}
}
+ public static void refreshImage(File _file, Context context) {
+ Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
+ Uri uri = Uri.fromFile(_file);
+ intent.setData(uri);
+ context.sendBroadcast(intent);
+ Utils.log("保存分享图片路径:" + _file.getAbsolutePath());
+ }
+
}
diff --git a/app/src/main/java/com/gh/common/util/NewsUtils.java b/app/src/main/java/com/gh/common/util/NewsUtils.java
index a81716772a..3ee1a6e2e9 100644
--- a/app/src/main/java/com/gh/common/util/NewsUtils.java
+++ b/app/src/main/java/com/gh/common/util/NewsUtils.java
@@ -35,6 +35,8 @@ public class NewsUtils {
return R.drawable.textview_orange_up;
} else if ("新游".equals(type)) {
return R.drawable.textview_green_up;
+ } else if ("热门".equals(type) || "置顶".equals(type)) {
+ return R.drawable.textview_all_red_up;
} else {
return R.drawable.textview_blue_up;
}
@@ -98,8 +100,17 @@ public class NewsUtils {
/**
* 设置新闻类型
*/
- public static void setNewsType(TextView textView, String type) {
- textView.setText(type);
+ public static void setNewsType(TextView textView, String type, int priority, int position) {
+ if (priority != 0) {
+ if (position == 0) {
+ textView.setText("置顶");
+ } else {
+ textView.setText("热门");
+ }
+ } else {
+ textView.setText(type);
+ }
+
textView.setTextColor(Color.WHITE);
if ("活动".equals(type)) {
textView.setBackgroundResource(R.drawable.textview_orange_style);
@@ -111,6 +122,10 @@ public class NewsUtils {
textView.setBackgroundResource(R.drawable.textview_orange_style);
} else if ("专题".equals(type)) {
textView.setBackgroundResource(R.drawable.textview_blue_style);
+ } else if ("置顶".equals(type)) {
+ textView.setBackgroundResource(R.drawable.textview_all_red_style);
+ } else if ("热门".equals(type)){
+ textView.setBackgroundResource(R.drawable.textview_all_red_style);
} else {
textView.setBackgroundResource(R.drawable.textview_blue_style);
}
diff --git a/app/src/main/java/com/gh/common/view/DownloadDialog.java b/app/src/main/java/com/gh/common/view/DownloadDialog.java
index 5411711422..d2f95d0ad5 100644
--- a/app/src/main/java/com/gh/common/view/DownloadDialog.java
+++ b/app/src/main/java/com/gh/common/view/DownloadDialog.java
@@ -250,6 +250,8 @@ public class DownloadDialog implements OnCollectionCallBackListener {
}
}
+ apkList.add(new ApkEntity()); // 添加一个跳转投票
+
dialog_ll_hint.removeAllViews();
int size = (int) Math.ceil(apkList.size() / (double) (row * column));
addHintPoint(dialog_ll_hint, size);
diff --git a/app/src/main/java/com/gh/common/view/ZoomSimpleDraweeView.java b/app/src/main/java/com/gh/common/view/ZoomSimpleDraweeView.java
index 96c588867e..6095926756 100644
--- a/app/src/main/java/com/gh/common/view/ZoomSimpleDraweeView.java
+++ b/app/src/main/java/com/gh/common/view/ZoomSimpleDraweeView.java
@@ -25,6 +25,7 @@ public class ZoomSimpleDraweeView extends SimpleDraweeView {
private float mCurrentScale = 1f;
private Matrix mCurrentMatrix;
private setOnSingleClickListener mClickListener;
+ private setOnLongClickListener mLongClickListener;
private float imgagePro = -1; // 图片宽高比
@@ -82,6 +83,14 @@ public class ZoomSimpleDraweeView extends SimpleDraweeView {
return true;
}
+ @Override
+ public void onLongPress(MotionEvent e) {
+ super.onLongPress(e);
+ if (mLongClickListener != null) {
+ mLongClickListener.onLongClick();
+ }
+ }
+
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (mCurrentScale > 1f) {
@@ -273,6 +282,14 @@ public class ZoomSimpleDraweeView extends SimpleDraweeView {
mClickListener = listener;
}
+ public void setOnLongClickListener(setOnLongClickListener listener) {
+ mLongClickListener = listener;
+ }
+
+ public interface setOnLongClickListener {
+ void onLongClick();
+ }
+
public interface setOnSingleClickListener {
void onClick();
}
diff --git a/app/src/main/java/com/gh/gamecenter/GameNewsActivity.java b/app/src/main/java/com/gh/gamecenter/GameNewsActivity.java
index ae1872e471..8fa1409215 100644
--- a/app/src/main/java/com/gh/gamecenter/GameNewsActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/GameNewsActivity.java
@@ -5,6 +5,7 @@ import android.support.v4.util.ArrayMap;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
@@ -16,10 +17,16 @@ import com.gh.common.util.DisplayUtils;
import com.gh.gamecenter.adapter.GameNewsAdapter;
import com.gh.gamecenter.adapter.GameNewsTypeListAdapter;
import com.gh.gamecenter.eventbus.EBTypeChange;
+import com.gh.gamecenter.retrofit.Response;
+import com.gh.gamecenter.retrofit.RetrofitManager;
import java.util.ArrayList;
+import java.util.List;
import butterknife.BindView;
+import retrofit2.adapter.rxjava.HttpException;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
/**
* Created by LGT on 2016/8/29.
@@ -37,7 +44,7 @@ public class GameNewsActivity extends BaseActivity implements View.OnClickListen
private ArrayMap adapterMap;
- private ArrayList typeList;
+ private List typeList;
private String gameId;
private String entrance;
@@ -71,17 +78,14 @@ public class GameNewsActivity extends BaseActivity implements View.OnClickListen
adapterMap = new ArrayMap<>();
- typeList = getIntent().getStringArrayListExtra("articleTypes");
- typeList.add(0, "全部");
+ typeList = new ArrayList<>();
gameId = getIntent().getStringExtra("gameId");
game_news_list.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
game_news_list.setLayoutManager(layoutManager);
- adapter = new GameNewsAdapter(this, typeList, game_news_list, gameId, "全部", entrance);
- adapterMap.put("全部", adapter);
- game_news_list.setAdapter(adapter);
+
game_news_list.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
@@ -100,7 +104,7 @@ public class GameNewsActivity extends BaseActivity implements View.OnClickListen
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
- if (newState == RecyclerView.SCROLL_STATE_IDLE
+ if (adapter != null && newState == RecyclerView.SCROLL_STATE_IDLE
&& layoutManager.findLastVisibleItemPosition() == adapter.getItemCount() - 1) {
if (!adapter.isRemove() && !adapter.isLoading() && !adapter.isNetworkError()) {
adapter.addList(adapter.getNewsList().size());
@@ -111,12 +115,6 @@ public class GameNewsActivity extends BaseActivity implements View.OnClickListen
game_news_top_type_list.setHasFixedSize(true);
game_news_top_type_list.setLayoutManager(new GridLayoutManager(this, 5));
- typeListAdapter = new GameNewsTypeListAdapter(typeList, "全部");
- game_news_top_type_list.setAdapter(typeListAdapter);
-
- ViewGroup.LayoutParams params = game_news_top_type_list.getLayoutParams();
- params.height = (int) Math.ceil(typeList.size() / 5f) * DisplayUtils.dip2px(this, 35)+ DisplayUtils.dip2px(this, 12);
- game_news_top_type_list.setLayoutParams(params);
//禁止由于滑动出现的阴影
game_news_top_type_list.setOnTouchListener(new View.OnTouchListener() {
@@ -132,12 +130,47 @@ public class GameNewsActivity extends BaseActivity implements View.OnClickListen
return false;
}
});
+
+ if (!TextUtils.isEmpty(gameId)) {
+ getGameArticleType();
+ }
+ }
+
+ private void getGameArticleType() {
+ RetrofitManager.getApi()
+ .getGameArticleType(gameId)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Response>(){
+ @Override
+ public void onResponse(List response) {
+ super.onResponse(response);
+ typeList = response;
+ typeList.add(0, "全部");
+ adapter = new GameNewsAdapter(GameNewsActivity.this, typeList, game_news_list, gameId, "全部", entrance);
+ adapterMap.put("全部", adapter);
+ game_news_list.setAdapter(adapter);
+
+ typeListAdapter = new GameNewsTypeListAdapter(typeList, "全部");
+ game_news_top_type_list.setAdapter(typeListAdapter);
+
+ ViewGroup.LayoutParams params = game_news_top_type_list.getLayoutParams();
+ params.height = (int) Math.ceil(typeList.size() / 5f) * DisplayUtils.dip2px(GameNewsActivity.this, 35)
+ + DisplayUtils.dip2px(GameNewsActivity.this, 12);
+ game_news_top_type_list.setLayoutParams(params);
+ }
+
+ @Override
+ public void onFailure(HttpException e) {
+ super.onFailure(e);
+ }
+ });
}
public void onEventMainThread(EBTypeChange change) {
adapter = adapterMap.get(change.getType());
if (adapter == null) {
- adapter = new GameNewsAdapter(this, typeList, game_news_list, gameId, change.getType(), entrance);
+ adapter = new GameNewsAdapter(GameNewsActivity.this, typeList, game_news_list, gameId, change.getType(), entrance);
adapterMap.put(change.getType(), adapter);
}
game_news_list.setAdapter(adapter);
diff --git a/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java b/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java
index bcfddc27a1..9bf20b5e14 100644
--- a/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/KaiFuActivity.java
@@ -38,6 +38,7 @@ import rx.functions.Action1;
/**
* Created by khy on 2017/3/16.
+ * 首页-开服表
*/
public class KaiFuActivity extends BaseActivity implements KaiFuDialogAdapter.OnKaiFuDialogCallBackListener
, KaiFuAdapter.OnScrollToKaiFuIndex, SwipeRefreshLayout.OnRefreshListener{
@@ -153,6 +154,15 @@ public class KaiFuActivity extends BaseActivity implements KaiFuDialogAdapter.O
}
});
+ mNoConnection.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mAdapter.initKaiFuOffset();
+ mNoConnection.setVisibility(View.GONE);
+ mPbLoading.setVisibility(View.VISIBLE);
+ }
+ });
+
}
private void initSelectGameDialog() {
diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java
index 35168ea80c..b760646c4d 100644
--- a/app/src/main/java/com/gh/gamecenter/MainActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java
@@ -40,6 +40,7 @@ import com.gh.common.util.PackageUtils;
import com.gh.common.util.PlatformUtils;
import com.gh.common.util.TokenUtils;
import com.gh.common.util.TrafficUtils;
+import com.gh.common.util.Utils;
import com.gh.download.DataWatcher;
import com.gh.download.DownloadEntity;
import com.gh.download.DownloadManager;
@@ -50,6 +51,7 @@ import com.gh.gamecenter.entity.ApkEntity;
import com.gh.gamecenter.entity.GameDigestEntity;
import com.gh.gamecenter.entity.GameEntity;
import com.gh.gamecenter.entity.GameUpdateEntity;
+import com.gh.gamecenter.entity.SuggestionTypeEntity;
import com.gh.gamecenter.eventbus.EBDownloadStatus;
import com.gh.gamecenter.eventbus.EBPackage;
import com.gh.gamecenter.eventbus.EBShowDialog;
@@ -62,13 +64,14 @@ import com.gh.gamecenter.manager.FilterManager;
import com.gh.gamecenter.manager.GameManager;
import com.gh.gamecenter.manager.PackageManager;
import com.gh.gamecenter.manager.UpdateManager;
+import com.gh.gamecenter.message.MessageFragment;
import com.gh.gamecenter.news.NewsFragment;
import com.gh.gamecenter.personal.PersonalFragment;
import com.gh.gamecenter.retrofit.JSONObjectResponse;
import com.gh.gamecenter.retrofit.ObservableUtil;
import com.gh.gamecenter.retrofit.Response;
import com.gh.gamecenter.retrofit.RetrofitManager;
-import com.gh.gamecenter.zixun.ZiXunFragment;
+import com.gh.gamecenter.wenda.WenDaFragment;
import org.json.JSONArray;
import org.json.JSONObject;
@@ -79,6 +82,7 @@ import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@@ -99,15 +103,21 @@ import rx.schedulers.Schedulers;
*/
public class MainActivity extends BaseFragmentActivity implements OnClickListener {
- // private NewsFragment newsFragment;
- private ZiXunFragment ziXunFragment;
+ private NewsFragment newsFragment;
+ private MessageFragment messageFragment;
+ private WenDaFragment wenDaFragment;
+// private ZiXunFragment ziXunFragment;
private PersonalFragment personalFragment;
private GameFragment gameFragment;
private ImageView ivGame;
private ImageView ivNews;
+ private ImageView ivWenDa;
+ private ImageView ivMessage;
private ImageView ivPersonal;
private TextView tvGame;
private TextView tvNews;
+ private TextView tvWenDa;
+ private TextView tvMessage;
private TextView tvPersonal;
private SharedPreferences sp;
@@ -393,6 +403,47 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene
if (sp.getBoolean("changeDefaultIcon", false) && sp.getInt("default_user_icon", 0) != 0) {
postDefaultIcon(true, sp.getInt("default_user_icon", 0));
}
+
+ getSuggestionType();
+ }
+
+ private void getSuggestionType() {
+ RetrofitManager
+ .getApi()
+ .getSuggestionType()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Response(){
+ @Override
+ public void onResponse(SuggestionTypeEntity response) {
+ super.onResponse(response);
+ Set suggestionGame = response.getGame();
+ Set suggestionLibao = response.getLibao();
+ Set suggestionPlugin = response.getPlugin();
+ Set suggestionService = response.getService();
+ SharedPreferences.Editor edit = sp.edit();
+ if (suggestionGame.size() != 0) {
+ edit.putStringSet("suggestionGame", suggestionGame);
+ }
+ if (suggestionLibao.size() != 0) {
+ edit.putStringSet("suggestionLibao", suggestionLibao);
+ }
+ if (suggestionPlugin.size() != 0) {
+ edit.putStringSet("suggestionPlugin", suggestionPlugin);
+ }
+ if (suggestionService.size() != 0) {
+ edit.putStringSet("suggestionService", suggestionService);
+ }
+ edit.apply();
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ super.onError(e);
+ Utils.log("反馈的问题选项::ERROR::" + e.toString());
+ }
+ });
+
}
// 更新用户使用的助手信息
@@ -514,12 +565,18 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene
private void initViews() {
findViewById(R.id.main_ll_game).setOnClickListener(this);
findViewById(R.id.main_ll_news).setOnClickListener(this);
+ findViewById(R.id.main_ll_wenda).setOnClickListener(this);
+ findViewById(R.id.main_ll_message).setOnClickListener(this);
findViewById(R.id.main_ll_personal).setOnClickListener(this);
ivGame = (ImageView) findViewById(R.id.main_iv_game);
ivNews = (ImageView) findViewById(R.id.main_iv_news);
+ ivWenDa = (ImageView) findViewById(R.id.main_iv_wenda);
+ ivMessage = (ImageView) findViewById(R.id.main_iv_message);
ivPersonal = (ImageView) findViewById(R.id.main_iv_personal);
tvGame = (TextView) findViewById(R.id.main_tv_game);
tvNews = (TextView) findViewById(R.id.main_tv_news);
+ tvWenDa = (TextView) findViewById(R.id.main_tv_wenda);
+ tvMessage = (TextView) findViewById(R.id.main_tv_message);
tvPersonal = (TextView) findViewById(R.id.main_tv_personal);
}
@@ -895,8 +952,8 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene
if (gameFragment != null) {
gameFragment.setHint(searchHint);
}
- if (ziXunFragment != null) {
- ziXunFragment.setHint(searchHint);
+ if (newsFragment != null) {
+ newsFragment.setHint(searchHint);
}
}
}
@@ -946,9 +1003,13 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene
} else if (id == R.id.main_ll_news) {
EventBus.getDefault().post(new EBUISwitch("MainActivity", 1));
setTabSelection(1);
+ } else if (id == R.id.main_ll_wenda) {
+ setTabSelection(2);
+ } else if (id == R.id.main_ll_message){
+ setTabSelection(3);
} else if (id == R.id.main_ll_personal) {
EventBus.getDefault().post(new EBUISwitch("MainActivity", 2));
- setTabSelection(2);
+ setTabSelection(4);
}
}
@@ -986,30 +1047,78 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene
case 1:
ivNews.setImageResource(R.drawable.ic_news_select);
tvNews.setTextColor(getResources().getColor(R.color.theme));
- if (ziXunFragment == null) {
+ if (newsFragment == null) {
List list = getSupportFragmentManager().getFragments();
if (list != null) {
for (Fragment fragment : list) {
if (fragment.getClass().equals(NewsFragment.class)) {
- ziXunFragment = (ZiXunFragment) fragment;
- transaction.show(ziXunFragment);
+ newsFragment = (NewsFragment) fragment;
+ transaction.show(newsFragment);
break;
}
}
}
- if (ziXunFragment == null) {
- ziXunFragment = new ZiXunFragment();
+ if (newsFragment == null) {
+ newsFragment = new NewsFragment();
if (searchHint != null && searchHint.size() > 0) {
- ziXunFragment.setHint(searchHint);
+ newsFragment.setHint(searchHint);
}
- transaction.add(R.id.main_content, ziXunFragment);
+ transaction.add(R.id.main_content, newsFragment);
}
} else {
- transaction.show(ziXunFragment);
+ transaction.show(newsFragment);
}
currentTab = 1;
break;
case 2:
+ ivWenDa.setImageResource(R.drawable.ic_wenda_select);
+ tvWenDa.setTextColor(getResources().getColor(R.color.theme));
+ if (wenDaFragment == null) {
+ List list = getSupportFragmentManager().getFragments();
+ if (list != null) {
+ for (Fragment fragment : list) {
+ if (fragment.getClass().equals(WenDaFragment.class)) {
+ wenDaFragment = (WenDaFragment) fragment;
+ transaction.show(wenDaFragment);
+ break;
+ }
+ }
+ }
+ if (wenDaFragment == null) {
+ wenDaFragment = new WenDaFragment();
+ transaction.add(R.id.main_content, wenDaFragment);
+ }
+ } else {
+ transaction.show(wenDaFragment);
+ }
+ currentTab = 2;
+ break;
+
+ case 3:
+ ivMessage.setImageResource(R.drawable.ic_message_select);
+ tvMessage.setTextColor(getResources().getColor(R.color.theme));
+ if (messageFragment == null) {
+ List list = getSupportFragmentManager().getFragments();
+ if (list != null) {
+ for (Fragment fragment : list) {
+ if (fragment.getClass().equals(MessageFragment.class)) {
+ messageFragment = (MessageFragment) fragment;
+ transaction.show(messageFragment);
+ break;
+ }
+ }
+ }
+ if (messageFragment == null) {
+ messageFragment = new MessageFragment();
+ transaction.add(R.id.main_content, messageFragment);
+ }
+ } else {
+ transaction.show(messageFragment);
+ }
+ currentTab = 3;
+ break;
+
+ case 4:
ivPersonal.setImageResource(R.drawable.ic_user_select);
tvPersonal.setTextColor(getResources().getColor(R.color.theme));
if (personalFragment == null) {
@@ -1030,7 +1139,7 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene
} else {
transaction.show(personalFragment);
}
- currentTab = 2;
+ currentTab = 4;
break;
default:
break;
@@ -1042,9 +1151,13 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene
private void clearSelection() {
ivGame.setImageResource(R.drawable.ic_game_unselect);
ivNews.setImageResource(R.drawable.ic_news_unselect);
+ ivWenDa.setImageResource(R.drawable.ic_wenda_unselect);
+ ivMessage.setImageResource(R.drawable.ic_message_unselect);
ivPersonal.setImageResource(R.drawable.ic_user_unselect);
tvGame.setTextColor(Color.parseColor("#a7a8b2"));
tvNews.setTextColor(Color.parseColor("#a7a8b2"));
+ tvWenDa.setTextColor(Color.parseColor("#a7a8b2"));
+ tvMessage.setTextColor(Color.parseColor("#a7a8b2"));
tvPersonal.setTextColor(Color.parseColor("#a7a8b2"));
}
@@ -1056,8 +1169,14 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene
if (gameFragment != null) {
transaction.hide(gameFragment);
}
- if (ziXunFragment != null) {
- transaction.hide(ziXunFragment);
+ if (wenDaFragment != null) {
+ transaction.hide(wenDaFragment);
+ }
+ if (messageFragment != null) {
+ transaction.hide(messageFragment);
+ }
+ if (newsFragment != null) {
+ transaction.hide(newsFragment);
}
List list = getSupportFragmentManager().getFragments();
diff --git a/app/src/main/java/com/gh/gamecenter/MessageDetailActivity.java b/app/src/main/java/com/gh/gamecenter/MessageDetailActivity.java
index 3b7c51cb3f..3bd027ed0e 100644
--- a/app/src/main/java/com/gh/gamecenter/MessageDetailActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/MessageDetailActivity.java
@@ -107,6 +107,8 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail
mConcernEntity = (ConcernEntity) AppController.get("ConcernEntity", true);
+ mCommentEntity = (CommentEntity) AppController.get("CommentEntity", true); // 来自新闻详情-评论回复
+
Intent intent = getIntent();
newsId = intent.getExtras().getString("newsId");
commentNum = intent.getExtras().getInt("commentNum");
diff --git a/app/src/main/java/com/gh/gamecenter/NewGameDetailActivity.java b/app/src/main/java/com/gh/gamecenter/NewGameDetailActivity.java
index 023ebcc7ea..1753125089 100644
--- a/app/src/main/java/com/gh/gamecenter/NewGameDetailActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/NewGameDetailActivity.java
@@ -64,6 +64,7 @@ import rx.schedulers.Schedulers;
/**
* Created by khy on 2017/3/24.
+ * 游戏详情适配器
*/
public class NewGameDetailActivity extends BaseFragmentActivity {
@@ -82,7 +83,6 @@ public class NewGameDetailActivity extends BaseFragmentActivity {
@BindView(R.id.gamedetail_tabbar_xinxi) TextView mTanBarXinXi;
@BindView(R.id.gamedetail_tabbar_fuli_tv) TextView mTanBarFuLiTv;
@BindView(R.id.gamedetail_tabbar_xinxi_tv) TextView mTanBarXinXiTv;
- @BindView(R.id.gamedetail_suggest) ImageView mSuggestIv;
@BindView(R.id.gamedetail_share) ImageView mShareIv;
@BindView(R.id.detail_ll_bottom) LinearLayout mDownloadBottom;
@@ -398,7 +398,7 @@ public class NewGameDetailActivity extends BaseFragmentActivity {
}
- @OnClick({R.id.detail_tv_download, R.id.detail_pb_progressbar, R.id.gamedetail_suggest
+ @OnClick({R.id.detail_tv_download, R.id.detail_pb_progressbar
, R.id.detail_tv_per, R.id.gamedetail_tabbar_xinxi, R.id.gamedetail_tabbar_xinxi_tv
, R.id.gamedetail_tabbar_fuli, R.id.gamedetail_tabbar_fuli_tv, R.id.gamedetail_share})
public void onClick(View v) {
@@ -471,10 +471,6 @@ public class NewGameDetailActivity extends BaseFragmentActivity {
showShare(url, mGameEntity.getName(), mGameEntity.getIcon(), null, mGameEntity.getTag());
}
});
- } else if (v == mSuggestIv) {
- Intent intent = new Intent(this, NewSuggestActivity.class);
- intent.putExtra("suggestType", 1);
- startActivity(intent);
}
}
diff --git a/app/src/main/java/com/gh/gamecenter/NewSuggestActivity.java b/app/src/main/java/com/gh/gamecenter/NewSuggestActivity.java
index a1fc27c2f7..308678043e 100644
--- a/app/src/main/java/com/gh/gamecenter/NewSuggestActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/NewSuggestActivity.java
@@ -1,8 +1,13 @@
package com.gh.gamecenter;
import android.app.Dialog;
+import android.content.Context;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Color;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Build;
@@ -11,10 +16,12 @@ import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
+import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.Window;
+import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
@@ -23,21 +30,53 @@ import android.widget.ScrollView;
import android.widget.TextView;
import com.gh.base.BaseActivity;
+import com.gh.common.constant.Config;
+import com.gh.common.util.DialogUtils;
+import com.gh.common.util.DisplayUtils;
+import com.gh.common.util.FileUtils;
+import com.gh.common.util.PackageUtils;
+import com.gh.common.util.TokenUtils;
import com.gh.common.util.Utils;
import com.gh.gamecenter.entity.InstallGameEntity;
+import com.gh.gamecenter.retrofit.JSONObjectResponse;
+import com.gh.gamecenter.retrofit.RetrofitManager;
import com.gh.gamecenter.suggest.SuggestPicAdapter;
import com.gh.gamecenter.suggest.SuggestSelectGameAdapter;
import com.gh.gamecenter.suggest.SuggestTypeAdapter;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import butterknife.BindView;
import butterknife.OnClick;
+import okhttp3.MediaType;
+import okhttp3.RequestBody;
+import okhttp3.ResponseBody;
+import retrofit2.adapter.rxjava.HttpException;
+import rx.Observable;
+import rx.Observer;
+import rx.Subscriber;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.functions.Func1;
+import rx.schedulers.Schedulers;
/**
* Created by khy on 2017/3/31.
@@ -71,9 +110,14 @@ public class NewSuggestActivity extends BaseActivity implements SuggestTypeAdapt
private SuggestPicAdapter mAdapter;
+ private Dialog selectGameDialog;
+ private Dialog postDialog;
+
+ private String[] arrType = {"普通反馈", "功能建议", "发生闪退", "游戏问题", "游戏收录", "文章投稿"};
+
private int curType = -1;
- private Dialog dialog;
+ private SharedPreferences sp;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
@@ -107,17 +151,23 @@ public class NewSuggestActivity extends BaseActivity implements SuggestTypeAdapt
super.onCreate(savedInstanceState);
View view = View.inflate(this, R.layout.activity_suggest_new, null);
init(view, "意见反馈");
- curType = getIntent().getExtras().getInt("suggestType");
- String suggestContent = getIntent().getExtras().getString("suggestContent");
+ curType = getIntent().getExtras().getInt("suggestType");
+ String suggestContent = getIntent().getExtras().getString("content");
+ String suggestHintType = getIntent().getExtras().getString("suggestHintType");
+
+ sp = getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE);
+
+ // 意见反馈类型
mTypeRv.setLayoutManager(new GridLayoutManager(this, 2){
@Override
public boolean canScrollVertically() {
return false;
}
});
- mTypeRv.setAdapter(new SuggestTypeAdapter(this, curType));
+ mTypeRv.setAdapter(new SuggestTypeAdapter(this, curType, arrType));
+ // 意见反馈上传图片列表
mSuggestPicRv.setLayoutManager(new GridLayoutManager(this, 5){
@Override
public boolean canScrollVertically() {
@@ -154,14 +204,106 @@ public class NewSuggestActivity extends BaseActivity implements SuggestTypeAdapt
} else {
initSuggest(curType);
}
+
+ if (TextUtils.isEmpty(suggestHintType)) {
+ return;
+ }
+
+ switch (suggestHintType) {
+ case "plugin":
+ Set plugin = sp.getStringSet("suggestionPlugin", null);
+ if (plugin != null) {
+ showHintDialog(plugin);
+ }
+ break;
+ case "game":
+ Set game = sp.getStringSet("suggestionGame", null);
+ if (game != null) {
+ showHintDialog(game);
+ }
+ break;
+ case "libao":
+ Set libao = sp.getStringSet("suggestionLibao", null);
+ if (libao != null) {
+ showHintDialog(libao);
+ }
+ break;
+ case "service":
+ Set service = sp.getStringSet("suggestionService", null);
+ if (service != null) {
+ showHintDialog(service);
+ }
+ break;
+ }
+ }
+
+ private void showHintDialog(Set dialogType) {
+ final Dialog dialog = new Dialog(NewSuggestActivity.this);
+
+ LinearLayout container = new LinearLayout(NewSuggestActivity.this);
+ container.setOrientation(LinearLayout.VERTICAL);
+ container.setBackgroundColor(Color.WHITE);
+ container.setPadding(0, DisplayUtils.dip2px(NewSuggestActivity.this, 12), 0, DisplayUtils.dip2px(NewSuggestActivity.this, 12));
+
+ for (String s : dialogType) {
+ final TextView reportTv = new TextView(NewSuggestActivity.this);
+ reportTv.setPadding(DisplayUtils.dip2px(NewSuggestActivity.this, 20), DisplayUtils.dip2px(NewSuggestActivity.this, 12),
+ 0, DisplayUtils.dip2px(NewSuggestActivity.this, 12));
+ reportTv.setText(s);
+ reportTv.setTextSize(17);
+ reportTv.setTextColor(NewSuggestActivity.this.getResources().getColor(R.color.title));
+ reportTv.setBackgroundResource(R.drawable.textview_white_style);
+ int widthPixels = NewSuggestActivity.this.getResources().getDisplayMetrics().widthPixels;
+ reportTv.setLayoutParams(new LinearLayout.LayoutParams((widthPixels * 9)/10,
+ LinearLayout.LayoutParams.WRAP_CONTENT));
+ container.addView(reportTv);
+
+ reportTv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialog.cancel();
+ mSuggestContentEt.setText(mSuggestContentEt.getText().toString() + reportTv.getText().toString());
+ }
+ });
+ }
+
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setContentView(container);
+ dialog.show();
}
@OnClick({ R.id.suggest_post_btn, R.id.suggest_select_game, R.id.suggest_game_text})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.suggest_post_btn:
- Utils.log("=====" + readFromFile());
+ if (TextUtils.isEmpty(mSuggestContentEt.getText().toString())) {
+ return;
+ }
+ String email = mSuggestEmailEt.getText().toString().trim();
+ if (TextUtils.isEmpty(email)) {
+ showConfirmDialog(email);
+ } else if (isEmailAddress(email)) {
+ postDialog = new Dialog(NewSuggestActivity.this);
+ View content = View.inflate(NewSuggestActivity.this, R.layout.set_wait_dialog, null);
+ TextView message = (TextView) content
+ .findViewById(R.id.set_wait_message);
+ message.setText("正在反馈...");
+ postDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ postDialog.setContentView(content);
+ postDialog.setCanceledOnTouchOutside(false);
+ postDialog.setCancelable(false);
+ postDialog.show();
+
+ List fileList = mAdapter.getFileList();
+ if (fileList != null && fileList.size() > 0) {
+ postPic(email);
+ } else {
+ initPostData(email, null);
+ }
+ } else {
+ toast("邮箱错误");
+ }
break;
case R.id.suggest_select_game:
showSelectDialog();
@@ -173,6 +315,233 @@ public class NewSuggestActivity extends BaseActivity implements SuggestTypeAdapt
}
}
+ // 弹出确认对话框
+ private void showConfirmDialog(final String email) {
+
+ DialogUtils.showWarningDialog(this, "温馨提示", "填写联系方式有助于我们更好地一对一解决您的问题,确定不填写吗?",
+ "直接提交", "我要填写",
+ new DialogUtils.ConfiremListener() {
+ @Override
+ public void onConfirem() {
+ mSuggestEmailEt.requestFocus();
+ new Thread() {
+ public void run() {
+ try {
+ sleep(300);
+ } catch (InterruptedException e) {
+
+ e.printStackTrace();
+ }
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.showSoftInput(mSuggestEmailEt, 0);
+ }
+ }.start();
+ }
+ },
+ new DialogUtils.CancelListener() {
+ @Override
+ public void onCancel() {
+ postDialog = new Dialog(NewSuggestActivity.this);
+ View view = View.inflate(NewSuggestActivity.this,
+ R.layout.set_wait_dialog, null);
+ TextView message = (TextView) view
+ .findViewById(R.id.set_wait_message);
+ message.setText("正在反馈...");
+ postDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ postDialog.setContentView(view);
+ postDialog.setCanceledOnTouchOutside(false);
+ postDialog.setCancelable(false);
+ postDialog.show();
+
+ List fileList = mAdapter.getFileList();
+ if (fileList != null && fileList.size() > 0) {
+ postPic(email);
+ } else {
+ initPostData(email, null);
+ }
+ }
+ });
+ }
+
+ public boolean savePicture(String newPath, String filePath) {
+ BitmapFactory.Options options = new BitmapFactory.Options();
+// options.inSampleSize = 2;
+ Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);
+
+ File file = new File(newPath);
+ int quality = 80;
+ do {
+ try {
+ BufferedOutputStream bos = new BufferedOutputStream(
+ new FileOutputStream(file));
+ bitmap.compress(Bitmap.CompressFormat.JPEG, quality, bos);
+ bos.flush();
+ bos.close();
+ } catch (IOException e) {
+ file.delete();
+ e.printStackTrace();
+ return false;
+ }
+ quality -= 10;
+ } while (file.length() > 81920);
+ return true;
+ }
+
+ private void postPic(final String email) {
+
+ final JSONArray picArray = new JSONArray();
+ Observable.create(new Observable.OnSubscribe() {
+ @Override
+ public void call(Subscriber super JSONObject> subscriber) {
+ String path;
+ int index = 0;
+ for (String s : mAdapter.getFileList()) {
+ path = getCacheDir() + File.separator + System.currentTimeMillis() + index + ".jpg";
+ if (savePicture(path, s)) {
+ subscriber.onNext(FileUtils.uploadFile(Config.HOST + "support/user/suggestion/img", path, null));
+ index ++;
+ } else {
+ subscriber.onNext(FileUtils.uploadFile(Config.HOST + "support/user/suggestion/img", s, null));
+ }
+ }
+ subscriber.onCompleted();
+ }
+ }).subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer() {
+ @Override
+ public void onCompleted() {
+ Utils.log("=========完成" );
+ initPostData(email, picArray);
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ Utils.log("=========错误" + e.toString());
+ }
+
+ @Override
+ public void onNext(JSONObject result) {
+ if (result != null) {
+ try {
+ Utils.log("===========" + result);
+ int statusCode = result.getInt("statusCode");
+ if (statusCode == HttpURLConnection.HTTP_OK) {
+ picArray.put(result.getString("img"));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ });
+ }
+
+ private void initPostData(String email, JSONArray picArray) {
+ Map params = new HashMap<>();
+ params.put("message", mSuggestContentEt.getText().toString().trim());
+ params.put("from", email);
+ params.put("ghversion", PackageUtils.getVersionName(this));
+ params.put("channel", (String) PackageUtils.getMetaData(this, getPackageName(), "TD_CHANNEL_ID"));
+ params.put("type", android.os.Build.MODEL);
+ params.put("sdk", String.valueOf(android.os.Build.VERSION.SDK_INT));
+ params.put("version", android.os.Build.VERSION.RELEASE);
+ params.put("source", "光环助手");
+ params.put("imei", ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId());
+ if (curType > 0) {
+ params.put("suggestion_type", arrType[curType - 1]);
+ }
+ if (curType == 3) {
+ params.put("log", readFromFile());
+ }
+
+ JSONObject jsonObject = new JSONObject(params);
+
+ if (picArray != null && picArray.length() > 0) {
+ try {
+ jsonObject.put("pic", picArray);
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+
+ RequestBody body = RequestBody.create(MediaType.parse("application/json"),
+ jsonObject.toString());
+
+ Utils.log("=======postBody" + jsonObject.toString());
+
+ sendSuggestion(body, true);
+ }
+
+
+ private void sendSuggestion(final RequestBody body, boolean isCheck) {
+
+ TokenUtils.getToken(NewSuggestActivity.this, isCheck).flatMap(new Func1>() {
+ @Override
+ public Observable call(String token) {
+ return RetrofitManager.getApi().postSuggestion(body, token);
+ }
+ }).subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new JSONObjectResponse(){
+ @Override
+ public void onResponse(JSONObject response) {
+ if (postDialog != null) {
+ postDialog.dismiss();
+ }
+ Utils.log("======onResponse" + response.toString());
+ if (response.length() != 0) {
+ try {
+ if ("ok".equals(response.getString("status"))) {
+
+ toast("提交成功,感谢您的反馈!");
+ setResult(0x122);
+ finish();
+ } else {
+ toast("提交失败,请稍后尝试!");
+ }
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ } else {
+ toast("提交失败,请稍后尝试!");
+ }
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ super.onError(e);
+ Utils.log("======ERROR" + e.toString());
+
+ }
+
+ @Override
+ public void onFailure(HttpException e) {
+ try {
+ if (e != null) {
+ String string = e.response().errorBody().string();
+ Utils.log("===========onFailure" + string);
+ }
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ }
+
+
+ if (e != null && e.code() == 401) {
+ sendSuggestion(body, false);
+ return;
+ } else {
+ if (postDialog != null) {
+ postDialog.dismiss();
+ }
+
+ toast("提交失败,请检查网络状态");
+ }
+ }
+ });
+
+ }
+
private void showSelectDialog() {
View view = View.inflate(this, R.layout.dialog_suggest_select_game, null);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.dialog_suggest_game_rv);
@@ -181,16 +550,16 @@ public class NewSuggestActivity extends BaseActivity implements SuggestTypeAdapt
recyclerView.setLayoutManager(new GridLayoutManager(this, 4));
recyclerView.setAdapter(new SuggestSelectGameAdapter(this, pb));
- dialog = new Dialog(this);
- dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
- dialog.setCanceledOnTouchOutside(false);
- dialog.setContentView(view);
- dialog.show();
+ selectGameDialog = new Dialog(this);
+ selectGameDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ selectGameDialog.setCanceledOnTouchOutside(false);
+ selectGameDialog.setContentView(view);
+ selectGameDialog.show();
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- dialog.cancel();
+ selectGameDialog.cancel();
}
});
}
@@ -254,8 +623,8 @@ public class NewSuggestActivity extends BaseActivity implements SuggestTypeAdapt
@Override
public void loadDone(Object obj) {
super.loadDone(obj);
- if (dialog != null) {
- dialog.cancel();
+ if (selectGameDialog != null) {
+ selectGameDialog.cancel();
}
mSuggestGameLl.setVisibility(View.GONE);
@@ -298,4 +667,11 @@ public class NewSuggestActivity extends BaseActivity implements SuggestTypeAdapt
return "SD Card error";
}
}
+
+ private boolean isEmailAddress(String email) {
+ Pattern p = Pattern
+ .compile("^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$");
+ Matcher m = p.matcher(email);
+ return m.matches();
+ }
}
diff --git a/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java b/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java
index c549d72f03..dc2bd656b4 100644
--- a/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/NewsDetailActivity.java
@@ -34,6 +34,7 @@ import com.gh.common.util.NetworkUtils;
import com.gh.common.util.PackageUtils;
import com.gh.common.util.ShareUtils;
import com.gh.common.view.DownloadDialog;
+import com.gh.common.view.VerticalItemDecoration;
import com.gh.download.DataWatcher;
import com.gh.download.DownloadEntity;
import com.gh.download.DownloadManager;
@@ -157,6 +158,7 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener
detail_rv_show.setHasFixedSize(true);
detail_rv_show.setLayoutManager(new LinearLayoutManager(this));
+ detail_rv_show.addItemDecoration(new VerticalItemDecoration(this, 8, false));
adapter = new NewsDetailAdapter(this, entrance);
detail_rv_show.setAdapter(adapter);
diff --git a/app/src/main/java/com/gh/gamecenter/SkipActivity.java b/app/src/main/java/com/gh/gamecenter/SkipActivity.java
index 25a78dec8f..1f67f98846 100644
--- a/app/src/main/java/com/gh/gamecenter/SkipActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/SkipActivity.java
@@ -47,7 +47,8 @@ public class SkipActivity extends BaseActivity {
+ "-" + PlatformUtils.getInstance(this).getPlatformName(uri.getQueryParameter("platform"))
+ "-V" + uri.getQueryParameter("version") + "】";
intent.putExtra("content", content);
- intent.setClass(this, SuggestionActivity.class);
+ intent.putExtra("suggestHintType", "plugin");
+ intent.setClass(this, NewSuggestActivity.class);
} else if ("download".equals(host)) {
intent.setClass(this, DownloadManagerActivity.class);
intent.putExtra("gameId", id);
diff --git a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java
index c3655d2374..c0c9e553dc 100644
--- a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java
@@ -172,6 +172,9 @@ public class SubjectActivity extends BaseActivity implements SubjectTypeAdapter
@Override
public void loadDone(Object obj) {
super.loadDone(obj);
+ // 初始化顶部分类标签
+ if (!type.equals("全部")) return;
+
ArrayList gameType = (ArrayList) obj;
gameType.add(0, "全部");
ViewGroup.LayoutParams params = subject_type_list.getLayoutParams();
diff --git a/app/src/main/java/com/gh/gamecenter/SuggestSelectActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestSelectActivity.java
index eba69ca6d1..ca9cdd43ce 100644
--- a/app/src/main/java/com/gh/gamecenter/SuggestSelectActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/SuggestSelectActivity.java
@@ -21,6 +21,14 @@ public class SuggestSelectActivity extends BaseActivity {
@BindView(R.id.suggest_type5) RelativeLayout mType5;
@BindView(R.id.suggest_type6) RelativeLayout mType6;
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == 0x121 && resultCode == 0x122) {
+ finish();
+ }
+ }
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -55,7 +63,7 @@ public class SuggestSelectActivity extends BaseActivity {
Intent intent = new Intent(this, NewSuggestActivity.class);
intent.putExtra("suggestType", type);
- startActivity(intent);
+ startActivityForResult(intent, 0x121);
}
}
diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java
index 3998031a4b..71ba6608b3 100644
--- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java
@@ -182,7 +182,7 @@ public class SuggestionActivity extends BaseActivity implements OnClickListener
RequestBody body = RequestBody.create(MediaType.parse("application/json"),
new JSONObject(params).toString());
- RetrofitManager.getApi().postSuggestion(body)
+ RetrofitManager.getApi().postSuggestion(body, null) // TODO 接口改变
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new JSONObjectResponse() {
diff --git a/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java b/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java
index 24d51595ba..8a62797405 100644
--- a/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java
@@ -1,9 +1,13 @@
package com.gh.gamecenter;
+import android.app.Dialog;
import android.content.res.Configuration;
+import android.graphics.Bitmap;
+import android.graphics.Color;
import android.graphics.drawable.Animatable;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
@@ -11,23 +15,37 @@ import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
+import android.view.Window;
+import android.widget.LinearLayout;
import android.widget.RelativeLayout;
+import android.widget.TextView;
+import com.facebook.common.executors.CallerThreadExecutor;
+import com.facebook.common.references.CloseableReference;
+import com.facebook.datasource.DataSource;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.controller.BaseControllerListener;
import com.facebook.drawee.drawable.ScalingUtils;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.imagepipeline.core.ImagePipeline;
+import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber;
+import com.facebook.imagepipeline.image.CloseableImage;
import com.facebook.imagepipeline.image.ImageInfo;
+import com.facebook.imagepipeline.request.ImageRequest;
+import com.facebook.imagepipeline.request.ImageRequestBuilder;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
import com.gh.base.BaseActivity;
import com.gh.common.util.DisplayUtils;
import com.gh.common.util.ImageUtils;
+import com.gh.common.util.MessageShareUtils;
+import com.gh.common.util.Utils;
import com.gh.common.view.Gh_RelativeLayout;
import com.gh.common.view.Gh_RelativeLayout.OnSingleTapListener;
import com.gh.common.view.Gh_ViewPager;
import com.gh.common.view.ZoomSimpleDraweeView;
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
@@ -188,11 +206,110 @@ public class ViewImageActivity extends BaseActivity implements OnPageChangeListe
}
});
+ //长按
+ imageView.setOnLongClickListener(new ZoomSimpleDraweeView.setOnLongClickListener() {
+ @Override
+ public void onLongClick() {
+ final Dialog dialog = new Dialog(ViewImageActivity.this);
+
+ LinearLayout container = new LinearLayout(ViewImageActivity.this);
+ container.setOrientation(LinearLayout.VERTICAL);
+ container.setBackgroundColor(Color.WHITE);
+
+ final TextView reportTv = new TextView(ViewImageActivity.this);
+ reportTv.setPadding(DisplayUtils.dip2px(ViewImageActivity.this, 20), DisplayUtils.dip2px(ViewImageActivity.this, 12),
+ 0, DisplayUtils.dip2px(ViewImageActivity.this, 12));
+ reportTv.setText("保存图片");
+ reportTv.setTextSize(17);
+ reportTv.setTextColor(ViewImageActivity.this.getResources().getColor(R.color.title));
+ reportTv.setBackgroundResource(R.drawable.textview_white_style);
+ int widthPixels = ViewImageActivity.this.getResources().getDisplayMetrics().widthPixels;
+ reportTv.setLayoutParams(new LinearLayout.LayoutParams((widthPixels * 9)/10,
+ LinearLayout.LayoutParams.WRAP_CONTENT));
+ container.addView(reportTv);
+
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setContentView(container);
+ dialog.show();
+
+ reportTv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ findImageBM();
+ dialog.cancel();
+ }
+ });
+ }
+ });
+
view.setTag(position);
container.addView(view);
return view;
}
+ private void findImageBM() {
+ String key = urls.get(viewimage_vp_show.getCurrentItem());
+ String hdKey = "http://image.ghzhushou.com/pic/hq" + key.substring(key.lastIndexOf("/"));
+ ImagePipeline imagePipeline = Fresco.getImagePipeline();
+ String curUrl = null;
+
+ if (imagePipeline.isInBitmapMemoryCache(Uri.parse(hdKey))) {
+ curUrl = hdKey;
+ } else if (imagePipeline.isInBitmapMemoryCache(Uri.parse(key))){
+ curUrl = key;
+ } else {
+ return;
+ }
+
+ ImageRequest imageRequest = ImageRequestBuilder
+ .newBuilderWithSource(Uri.parse(key))
+ .setProgressiveRenderingEnabled(true)
+ .build();
+
+ DataSource>
+ dataSource = imagePipeline.fetchDecodedImage(imageRequest, ViewImageActivity.this);
+ final String finalCurUrl = curUrl;
+ dataSource.subscribe(new BaseBitmapDataSubscriber() {
+ @Override
+ protected void onNewResultImpl(Bitmap bitmap) {
+ saveImage(bitmap, finalCurUrl);
+ }
+
+ @Override
+ protected void onFailureImpl(DataSource> dataSource) {
+
+ }
+ }, CallerThreadExecutor.getInstance());
+ }
+
+ private void saveImage(Bitmap bitmap, String curUrl) {
+
+ String fileName = curUrl.substring(curUrl.lastIndexOf("/"));
+ String savePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/ghzhushou/";
+
+ try {
+ File file = new File(savePath);
+ if (!file.exists()) {
+ file.mkdirs();
+ }
+
+ File f = new File(savePath, fileName);
+ if (f.exists()) {
+ f.delete();
+ }
+
+ FileOutputStream out = new FileOutputStream(f);
+ bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
+ out.flush();
+ out.close();
+ Utils.log("========保存成功");
+ MessageShareUtils.refreshImage(new File(savePath), ViewImageActivity.this);
+ } catch (IOException e) {
+ Utils.log("========保存失败" + e.toString());
+ System.out.println(e);
+ }
+ }
+
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
diff --git a/app/src/main/java/com/gh/gamecenter/VoteActivity.java b/app/src/main/java/com/gh/gamecenter/VoteActivity.java
new file mode 100644
index 0000000000..a61392b7ec
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/VoteActivity.java
@@ -0,0 +1,172 @@
+package com.gh.gamecenter;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.Window;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
+import com.gh.base.BaseActivity;
+import com.gh.common.util.DisplayUtils;
+import com.gh.gamecenter.adapter.VoteAdapter;
+
+import butterknife.BindView;
+
+/**
+ * Created by khy on 2017/4/11.
+ * 求版本投票页面
+ */
+public class VoteActivity extends BaseActivity {
+
+ @BindView(R.id.vote_rv)
+ RecyclerView mVoteRv;
+ @BindView(R.id.vote_refresh)
+ SwipeRefreshLayout mVoteRefresh;
+ @BindView(R.id.vote_loading)
+ ProgressBarCircularIndeterminate mVoteLoading;
+ @BindView(R.id.reuse_no_connection)
+ LinearLayout mNoConnection;
+ @BindView(R.id.vote_add_tv)
+ TextView mAddTv;
+
+ private ImageView addVote;
+
+ private VoteAdapter mAdapter;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ String gameName = getIntent().getExtras().getString("gameName");
+
+ View view = View.inflate(this, R.layout.activity_vote, null);
+
+ // 添加添加图标
+ addVote = new ImageView(this);
+ addVote.setImageResource(R.drawable.add_vote_icon);
+ addVote.setPadding(DisplayUtils.dip2px(this, 13), DisplayUtils.dip2px(this, 15)
+ , DisplayUtils.dip2px(this, 15), DisplayUtils.dip2px(this, 15));
+ RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
+ DisplayUtils.dip2px(this, 48), DisplayUtils.dip2px(this, 48));
+ params.addRule(RelativeLayout.CENTER_VERTICAL);
+ params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
+ RelativeLayout reuse_actionbar = (RelativeLayout) view.findViewById(
+ R.id.reuse_actionbar);
+ reuse_actionbar.addView(addVote, params);
+ init(view, gameName + " - 求版本");
+
+
+ addVote.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showAddVoteDialog();
+ }
+ });
+
+
+ mVoteRv.setLayoutManager(new LinearLayoutManager(this));
+ mAdapter = new VoteAdapter(this);
+ mVoteRv.setAdapter(mAdapter);
+
+ mAddTv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showAddVoteDialog();
+ }
+ });
+
+ }
+
+ private void showAddVoteDialog() {
+ final Dialog dialog = new Dialog(VoteActivity.this);
+
+ View view = View.inflate(VoteActivity.this, R.layout.dialog_modify_nickname, null);
+
+ TextView title = (TextView) view.findViewById(R.id.dialog_nickname_title);
+ title.setText("输入选项名字");
+
+ final EditText input = (EditText) view.findViewById(R.id.dialog_nickname_input);
+ input.setHint("");
+ input.setSelection(input.getText().length());
+
+ input.setOnEditorActionListener(new TextView.OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ if (actionId == EditorInfo.IME_ACTION_DONE) {
+ String nickname = input.getText().toString().trim();
+ if (TextUtils.isEmpty(nickname)) {
+ Toast.makeText(VoteActivity.this, "请输入名字", Toast.LENGTH_SHORT).show();
+ return true;
+ }
+
+ dialog.dismiss();
+ return true;
+ }
+ return false;
+ }
+ });
+
+ // 取消按钮
+ TextView cancel = (TextView) view.findViewById(R.id.dialog_nickname_cannel);
+ cancel.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dialog.dismiss();
+ }
+ });
+
+ // 确定按钮
+ TextView confirm = (TextView) view.findViewById(R.id.dialog_nickname_confirm);
+ confirm.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ String nickname = input.getText().toString().trim();
+ if (TextUtils.isEmpty(nickname)) {
+ Toast.makeText(VoteActivity.this, "请输入名字", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ dialog.dismiss();
+ }
+ });
+
+ dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ InputMethodManager imm = (InputMethodManager) VoteActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
+ }
+ });
+
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setContentView(view);
+ dialog.show();
+
+ new Thread() {
+ @Override
+ public void run() {
+ try {
+ sleep(300);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ InputMethodManager imm = (InputMethodManager) VoteActivity.this
+ .getSystemService(Context.INPUT_METHOD_SERVICE);
+ imm.showSoftInput(input, InputMethodManager.SHOW_FORCED);
+ }
+ }.start();
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/adapter/GameNewsAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/GameNewsAdapter.java
index a0d9048ca7..a9380f0785 100644
--- a/app/src/main/java/com/gh/gamecenter/adapter/GameNewsAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/adapter/GameNewsAdapter.java
@@ -46,7 +46,7 @@ public class GameNewsAdapter extends RecyclerView.Adapter {
private RecyclerView game_news_list;
private ArrayList newsList;
- private ArrayList typeList;
+ private List typeList;
private String gameId;
private String newsType;
@@ -58,7 +58,7 @@ public class GameNewsAdapter extends RecyclerView.Adapter {
private boolean isOpenKeyBoard;
public GameNewsAdapter(Context context,
- ArrayList tList,
+ List tList,
RecyclerView game_news_list,
String id,
String type,
diff --git a/app/src/main/java/com/gh/gamecenter/adapter/GameNewsTypeListAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/GameNewsTypeListAdapter.java
index 01caa6d3d0..be44f847ba 100644
--- a/app/src/main/java/com/gh/gamecenter/adapter/GameNewsTypeListAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/adapter/GameNewsTypeListAdapter.java
@@ -12,7 +12,7 @@ import com.gh.gamecenter.R;
import com.gh.gamecenter.adapter.viewholder.GameNewsTypeViewHolder;
import com.gh.gamecenter.eventbus.EBTypeChange;
-import java.util.ArrayList;
+import java.util.List;
import de.greenrobot.event.EventBus;
@@ -21,13 +21,13 @@ import de.greenrobot.event.EventBus;
*/
public class GameNewsTypeListAdapter extends RecyclerView.Adapter {
- private ArrayList typeList;
+ private List typeList;
private String newsType;
private int currentPosition;
- public GameNewsTypeListAdapter(ArrayList tList, String type) {
+ public GameNewsTypeListAdapter(List tList, String type) {
typeList = tList;
diff --git a/app/src/main/java/com/gh/gamecenter/adapter/LibaoDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/LibaoDetailAdapter.java
index 0eb26e67e6..c398bca249 100644
--- a/app/src/main/java/com/gh/gamecenter/adapter/LibaoDetailAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/adapter/LibaoDetailAdapter.java
@@ -1,6 +1,7 @@
package com.gh.gamecenter.adapter;
import android.content.Context;
+import android.content.Intent;
import android.graphics.Color;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -18,7 +19,9 @@ import com.gh.common.util.ImageUtils;
import com.gh.common.util.LibaoUtils;
import com.gh.common.util.PlatformUtils;
import com.gh.gamecenter.LibaoDetailActivity;
+import com.gh.gamecenter.NewSuggestActivity;
import com.gh.gamecenter.R;
+import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
import com.gh.gamecenter.adapter.viewholder.LibaoDetailTopViewHolder;
import com.gh.gamecenter.db.LibaoDao;
import com.gh.gamecenter.db.info.LibaoInfo;
@@ -93,6 +96,9 @@ public class LibaoDetailAdapter extends RecyclerView.Adapter dialogType = new ArrayList<>();
- dialogType.add("回复");
- dialogType.add("复制");
- dialogType.add("举报");
-
- if (commentEntity.getParent() != null) {
- dialogType.add("查看对话");
- }
-
- for (String s : dialogType) {
- final TextView reportTv = new TextView(mContext);
- reportTv.setPadding(DisplayUtils.dip2px(mContext, 20), DisplayUtils.dip2px(mContext, 12),
- 0, DisplayUtils.dip2px(mContext, 12));
- reportTv.setText(s);
- reportTv.setTextSize(17);
- reportTv.setTextColor(mContext.getResources().getColor(R.color.title));
- reportTv.setBackgroundResource(R.drawable.textview_white_style);
- int widthPixels = mContext.getResources().getDisplayMetrics().widthPixels;
- reportTv.setLayoutParams(new LinearLayout.LayoutParams((widthPixels * 9)/10,
- LinearLayout.LayoutParams.WRAP_CONTENT));
- container.addView(reportTv);
-
- reportTv.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- dialog.cancel();
- switch (reportTv.getText().toString()) {
- case "回复":
- mCallBackListener.showSoftInput(commentEntity);
- break;
- case "复制":
- LibaoUtils.copyLink(commentEntity.getContent(), mContext);
- break;
- case "举报":
- showReportTypeDialog(commentEntity);
- break;
- case "查看对话":
- Intent intent = new Intent(mContext, CommentDetailActivity.class);
- intent.putExtra("commentId", commentEntity.getId());
- mContext.startActivity(intent);
- break;
- }
- }
- });
- }
- dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
- dialog.setContentView(container);
- dialog.show();
-
- }
-
- private void showReportTypeDialog(final CommentEntity commentEntity) {
- final String[] arrReportType = new String[]{"垃圾广告营销", "恶意攻击谩骂", "淫秽色情信息",
- "违法有害信息", "其它"};
- int widthPixels = mContext.getResources().getDisplayMetrics().widthPixels;
-
- final Dialog reportTypeDialog = new Dialog(mContext);
- LinearLayout container = new LinearLayout(mContext);
- container.setOrientation(LinearLayout.VERTICAL);
- container.setPadding(0, DisplayUtils.dip2px(mContext, 12), 0, DisplayUtils.dip2px(mContext, 12));
- container.setBackgroundColor(Color.WHITE);
-
- for (final String s : arrReportType) {
- TextView reportTypeTv = new TextView(mContext);
- reportTypeTv.setText(s);
- reportTypeTv.setTextSize(17);
- reportTypeTv.setTextColor(mContext.getResources().getColor(R.color.title));
- reportTypeTv.setBackgroundResource(R.drawable.textview_white_style);
- reportTypeTv.setLayoutParams(new LinearLayout.LayoutParams((widthPixels * 9)/10,
- LinearLayout.LayoutParams.WRAP_CONTENT));
- reportTypeTv.setPadding(DisplayUtils.dip2px(mContext, 20), DisplayUtils.dip2px(mContext, 12),
- 0, DisplayUtils.dip2px(mContext, 12));
- container.addView(reportTypeTv);
-
- reportTypeTv.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- JSONObject jsonObject = new JSONObject();
- try {
- jsonObject.put("comment_id", commentEntity.getId());
- jsonObject.put("reason", s);
- } catch (JSONException e) {
- e.printStackTrace();
- }
-
- PostCommentUtils.addReportData(mContext, jsonObject.toString(), true,
- new PostCommentUtils.PostCommentListener() {
- @Override
- public void postSucced(JSONObject response) {
- Utils.toast(mContext, "感谢您的举报");
- }
-
- @Override
- public void postFailed(Throwable error) {
- Utils.toast(mContext, "举报失败,请检查网络设置");
- }
- });
- reportTypeDialog.cancel();
- }
- });
- }
-
- reportTypeDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
- reportTypeDialog.setContentView(container);
- reportTypeDialog.show();
- }
private void statNewsViews(final String news_id) {
RetrofitManager.getData().postNewsViews(news_id)
diff --git a/app/src/main/java/com/gh/gamecenter/adapter/NewsNormalAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/NewsNormalAdapter.java
index e582b8f04f..5d0bbf2e98 100644
--- a/app/src/main/java/com/gh/gamecenter/adapter/NewsNormalAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/adapter/NewsNormalAdapter.java
@@ -263,7 +263,7 @@ public class NewsNormalAdapter extends RecyclerView.Adapter {
public void onBindViewHolder(final PlatformViewHolder viewHolder, int position) {
final ApkEntity apkEntity = platforms.get((row * column) * adapterPosition + position);
+ if (apkEntity == null || TextUtils.isEmpty(apkEntity.getPackageName())) {
+ viewHolder.download_item_iv_pic.setVisibility(View.VISIBLE);
+ viewHolder.download_item_tv_hint.setVisibility(View.GONE);
+ viewHolder.download_item_progressbar.setVisibility(View.GONE);
+ viewHolder.download_item_tv_name.setVisibility(View.GONE);
+ viewHolder.download_item_tv_status.setVisibility(View.GONE);
+ viewHolder.download_item_iv_pic.setImageURI(Uri.parse("res:///" + R.drawable.platform_vote));
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(context, VoteActivity.class);
+ intent.putExtra("gameName", gameEntity.getName());
+ context.startActivity(intent);
+ }
+ });
+ return;
+ }
+
if (apkEntity.getApkCollection() == null) {
// 非合集
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
diff --git a/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java
index df3b1e3484..335a47af20 100644
--- a/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java
@@ -139,7 +139,7 @@ public class SubjectAdapter extends RecyclerView.Adapter {
+
+ private Context mContext;
+
+ private float mPbwidth; //进度条原始最大宽度
+
+ private List voteList;
+
+
+ public VoteAdapter(VoteActivity activity) {
+ this.mContext = activity;
+ mPbwidth = (float) (activity.getResources().getDisplayMetrics().widthPixels * 0.65);
+
+ voteList = new ArrayList<>();
+
+ float max = 1000;
+ for (int i = 0; i < 50; i++) {
+ voteList.add(max);
+ max = max - 20;
+ }
+ }
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.vote_item, parent, false);
+ if (mPbwidth == -1) {
+ final View pb = view.findViewById(R.id.progressbar);
+ pb.post(new Runnable() {
+ @Override
+ public void run() {
+ mPbwidth = pb.getWidth();
+ }
+ });
+ }
+ return new VoteViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ if (holder instanceof VoteViewHolder) {
+ VoteViewHolder viewHolder = (VoteViewHolder) holder;
+
+ viewHolder.voteBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ }
+ });
+
+ View progressbar = viewHolder.progressbar;
+ ViewGroup.LayoutParams layoutParams = progressbar.getLayoutParams();
+ if (position > 0) {
+
+ float maxSize = voteList.get(0);
+
+ float curSize = voteList.get(position);
+
+ float f = curSize/maxSize;
+ Utils.log(maxSize + "======="+ curSize +"=======" + f + "====" + (int) (mPbwidth/f));
+ layoutParams.width = (int) (mPbwidth * f);
+
+ } else {
+ layoutParams.width = (int) mPbwidth;
+ Utils.log("==============" + mPbwidth);
+ }
+
+ viewHolder.count.setText(voteList.get(position) + "票");
+ progressbar.setLayoutParams(layoutParams);
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return voteList.size();
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/VoteViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/VoteViewHolder.java
new file mode 100644
index 0000000000..b6f43500db
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/VoteViewHolder.java
@@ -0,0 +1,31 @@
+package com.gh.gamecenter.adapter.viewholder;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.TextView;
+
+import com.gh.gamecenter.R;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * Created by khy on 2017/4/11.
+ * 投票ITEM
+ */
+public class VoteViewHolder extends RecyclerView.ViewHolder {
+
+ @BindView(R.id.vote_item_name)
+ public TextView name;
+ @BindView(R.id.vote_item_btn)
+ public TextView voteBtn;
+ @BindView(R.id.progressbar)
+ public View progressbar;
+ @BindView(R.id.vote_item_count)
+ public TextView count;
+
+ public VoteViewHolder(View itemView) {
+ super(itemView);
+ ButterKnife.bind(this, itemView);
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/db/DatabaseHelper.java b/app/src/main/java/com/gh/gamecenter/db/DatabaseHelper.java
index 2327fa3d6a..1c71d4c2e1 100644
--- a/app/src/main/java/com/gh/gamecenter/db/DatabaseHelper.java
+++ b/app/src/main/java/com/gh/gamecenter/db/DatabaseHelper.java
@@ -11,6 +11,7 @@ import com.gh.gamecenter.db.info.ConcernInfo;
import com.gh.gamecenter.db.info.DataCollectionInfo;
import com.gh.gamecenter.db.info.FilterInfo;
import com.gh.gamecenter.db.info.GameInfo;
+import com.gh.gamecenter.db.info.KeFuInfo;
import com.gh.gamecenter.db.info.LibaoInfo;
import com.gh.gamecenter.db.info.PackageInfo;
import com.gh.gamecenter.db.info.SearchHistoryInfo;
@@ -25,7 +26,7 @@ import java.sql.SQLException;
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String DATABASE_NAME = "gh_assist.db";
- private static final int DATABASE_VERSION = 5;
+ private static final int DATABASE_VERSION = 6;
private static DatabaseHelper instance;
private ArrayMap daos = new ArrayMap<>();
@@ -65,6 +66,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
TableUtils.createTable(connectionSource, LibaoInfo.class);
TableUtils.createTable(connectionSource, AppRunTimeInfo.class);
TableUtils.createTable(connectionSource, PackageInfo.class);
+ TableUtils.createTable(connectionSource, KeFuInfo.class);
} catch (SQLException e) {
e.printStackTrace();
}
@@ -84,6 +86,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
TableUtils.dropTable(connectionSource, LibaoInfo.class, true);
TableUtils.dropTable(connectionSource, AppRunTimeInfo.class, true);
TableUtils.dropTable(connectionSource, PackageInfo.class, true);
+ TableUtils.dropTable(connectionSource, KeFuInfo.class, true);
onCreate(database, connectionSource);
} catch (SQLException e) {
e.printStackTrace();
diff --git a/app/src/main/java/com/gh/gamecenter/db/KeFuDao.java b/app/src/main/java/com/gh/gamecenter/db/KeFuDao.java
new file mode 100644
index 0000000000..1335c689f6
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/db/KeFuDao.java
@@ -0,0 +1,40 @@
+package com.gh.gamecenter.db;
+
+import android.content.Context;
+
+import com.gh.gamecenter.db.info.KeFuInfo;
+import com.j256.ormlite.dao.Dao;
+
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * Created by khy on 2017/4/12.
+ */
+public class KeFuDao {
+
+ private DatabaseHelper helper;
+ private Dao dao;
+
+ public KeFuDao(Context context) {
+ try {
+ helper = DatabaseHelper.getHelper(context);
+ dao = helper.getDao(KeFuInfo.class);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 获取客服信息
+ */
+ public List getAll() {
+ try {
+ return dao.queryForAll();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+}
diff --git a/app/src/main/java/com/gh/gamecenter/db/info/KeFuInfo.java b/app/src/main/java/com/gh/gamecenter/db/info/KeFuInfo.java
new file mode 100644
index 0000000000..c2220d45d9
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/db/info/KeFuInfo.java
@@ -0,0 +1,129 @@
+package com.gh.gamecenter.db.info;
+
+import com.j256.ormlite.field.DatabaseField;
+import com.j256.ormlite.table.DatabaseTable;
+
+import java.io.Serializable;
+
+/**
+ * Created by khy on 2017/4/12.
+ */
+
+@DatabaseTable(tableName = "tb_kefu")
+public class KeFuInfo implements Serializable {
+
+ @DatabaseField(id = true, columnName = "id")
+ private String id;
+
+ @DatabaseField(columnName = "isRead")
+ private boolean isRead;
+
+ @DatabaseField(columnName = "message")
+ private String message;
+
+ @DatabaseField(columnName = "time")
+ private long time;
+
+ @DatabaseField(columnName = "suggestion")
+ private String suggestion;
+
+ @DatabaseField(columnName = "document")
+ private String document;
+
+ @DatabaseField(columnName = "type")
+ private String type;
+
+ @DatabaseField(columnName = "url")
+ private String url;
+
+ @DatabaseField(columnName = "qq")
+ private String qq;
+
+ @DatabaseField(columnName = "key")
+ private String key;
+
+
+ public KeFuInfo() {
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public boolean isRead() {
+ return isRead;
+ }
+
+ public void setRead(boolean read) {
+ isRead = read;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public long getTime() {
+ return time;
+ }
+
+ public void setTime(long time) {
+ this.time = time;
+ }
+
+ public String getSuggestion() {
+ return suggestion;
+ }
+
+ public void setSuggestion(String suggestion) {
+ this.suggestion = suggestion;
+ }
+
+ public String getDocument() {
+ return document;
+ }
+
+ public void setDocument(String document) {
+ this.document = document;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getQq() {
+ return qq;
+ }
+
+ public void setQq(String qq) {
+ this.qq = qq;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+}
diff --git a/app/src/main/java/com/gh/gamecenter/entity/GameDetailEntity.java b/app/src/main/java/com/gh/gamecenter/entity/GameDetailEntity.java
index f5fd778dd4..fddb23d696 100644
--- a/app/src/main/java/com/gh/gamecenter/entity/GameDetailEntity.java
+++ b/app/src/main/java/com/gh/gamecenter/entity/GameDetailEntity.java
@@ -228,6 +228,8 @@ public class GameDetailEntity {
private String qq;
+ private String key;
+
public void setDes(String des) {
this.des = des;
}
@@ -243,6 +245,14 @@ public class GameDetailEntity {
public String getQq() {
return qq;
}
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
}
public class Notice {
diff --git a/app/src/main/java/com/gh/gamecenter/entity/KeFuEntity.java b/app/src/main/java/com/gh/gamecenter/entity/KeFuEntity.java
new file mode 100644
index 0000000000..1f0a5db18e
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/entity/KeFuEntity.java
@@ -0,0 +1,120 @@
+package com.gh.gamecenter.entity;
+
+/**
+ * Created by khy on 2017/4/10.
+ */
+public class KeFuEntity {
+
+ private String id;
+
+ private boolean isRead;
+
+ private String message;
+
+ private long time;
+
+ private String suggestion;
+
+ private LinkEntity link;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public boolean isRead() {
+ return isRead;
+ }
+
+ public void setRead(boolean read) {
+ isRead = read;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public long getTime() {
+ return time;
+ }
+
+ public void setTime(long time) {
+ this.time = time;
+ }
+
+ public String getSuggestion() {
+ return suggestion;
+ }
+
+ public void setSuggestion(String suggestion) {
+ this.suggestion = suggestion;
+ }
+
+ public LinkEntity getLink() {
+ return link;
+ }
+
+ public void setLink(LinkEntity link) {
+ this.link = link;
+ }
+
+ public class LinkEntity {
+
+ private String document;
+
+ private String type;
+
+ private String url;
+
+ private String qq;
+
+ private String key;
+
+ public String getDocument() {
+ return document;
+ }
+
+ public void setDocument(String document) {
+ this.document = document;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getQq() {
+ return qq;
+ }
+
+ public void setQq(String qq) {
+ this.qq = qq;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/entity/MessageUnreadEntity.java b/app/src/main/java/com/gh/gamecenter/entity/MessageUnreadEntity.java
new file mode 100644
index 0000000000..f5bf5573ef
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/entity/MessageUnreadEntity.java
@@ -0,0 +1,103 @@
+package com.gh.gamecenter.entity;
+
+import com.google.gson.annotations.SerializedName;
+
+import java.util.List;
+
+/**
+ * Created by khy on 2017/4/12.
+ * 消息未读数据实体
+ */
+public class MessageUnreadEntity {
+
+ private int comment;
+
+ private Notice notice;
+
+ private int question;
+
+ private Service service;
+
+ public void setComment(int comment) {
+ this.comment = comment;
+ }
+
+ public int getComment() {
+ return comment;
+ }
+
+ public void setNotice(Notice notice) {
+ this.notice = notice;
+ }
+
+ public Notice getNotice() {
+ return notice;
+ }
+
+ public void setQuestion(int question) {
+ this.question = question;
+ }
+
+ public int getQuestion() {
+ return question;
+ }
+
+ public void setService(Service service) {
+ this.service = service;
+ }
+
+ public Service getService() {
+ return service;
+ }
+
+ public class Notice {
+
+ @SerializedName("message_id")
+ private List messageId;
+
+ private int num;
+
+ public void setMessageId(List messageId) {
+ this.messageId = messageId;
+ }
+
+ public List getMessageId() {
+ return messageId;
+ }
+
+ public void setNum(int num) {
+ this.num = num;
+ }
+
+ public int getNum() {
+ return num;
+ }
+
+ }
+
+ public class Service {
+
+ @SerializedName("message_id")
+ private List messageId;
+
+ private int num;
+
+ public void setMessageId(List messageId) {
+ this.messageId = messageId;
+ }
+
+ public List getMessageId() {
+ return messageId;
+ }
+
+ public void setNum(int num) {
+ this.num = num;
+ }
+
+ public int getNum() {
+ return num;
+ }
+
+ }
+
+}
diff --git a/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.java b/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.java
index 6b34952af2..94f114c828 100644
--- a/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.java
+++ b/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.java
@@ -29,6 +29,8 @@ public class NewsEntity {
private long overtime;
+ private int priority;
+
public int getViews() {
return views;
}
@@ -116,4 +118,12 @@ public class NewsEntity {
public void setOvertime(long overtime) {
this.overtime = overtime;
}
+
+ public int getPriority() {
+ return priority;
+ }
+
+ public void setPriority(int priority) {
+ this.priority = priority;
+ }
}
diff --git a/app/src/main/java/com/gh/gamecenter/entity/NoticeEntity.java b/app/src/main/java/com/gh/gamecenter/entity/NoticeEntity.java
new file mode 100644
index 0000000000..d4605fe6c3
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/entity/NoticeEntity.java
@@ -0,0 +1,9 @@
+package com.gh.gamecenter.entity;
+
+/**
+ * Created by khy on 2017/4/10.
+ */
+public class NoticeEntity {
+
+
+}
diff --git a/app/src/main/java/com/gh/gamecenter/entity/SuggestionTypeEntity.java b/app/src/main/java/com/gh/gamecenter/entity/SuggestionTypeEntity.java
new file mode 100644
index 0000000000..0419a10ac6
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/entity/SuggestionTypeEntity.java
@@ -0,0 +1,49 @@
+package com.gh.gamecenter.entity;
+
+import java.util.Set;
+
+/**
+ * Created by khy on 2017/4/14.
+ */
+public class SuggestionTypeEntity {
+
+ private Set game ;
+
+ private Set libao ;
+
+ private Set plugin ;
+
+ private Set service ;
+
+ public Set getGame() {
+ return game;
+ }
+
+ public void setGame(Set game) {
+ this.game = game;
+ }
+
+ public Set getLibao() {
+ return libao;
+ }
+
+ public void setLibao(Set libao) {
+ this.libao = libao;
+ }
+
+ public Set getPlugin() {
+ return plugin;
+ }
+
+ public void setPlugin(Set plugin) {
+ this.plugin = plugin;
+ }
+
+ public Set getService() {
+ return service;
+ }
+
+ public void setService(Set service) {
+ this.service = service;
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java
index 95ef4ddd8a..02d505122f 100644
--- a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java
@@ -38,7 +38,6 @@ import com.gh.common.util.Utils;
import com.gh.common.view.AutoScrollViewPager;
import com.gh.download.DownloadManager;
import com.gh.gamecenter.KaiFuActivity;
-import com.gh.gamecenter.LibaoActivity;
import com.gh.gamecenter.NewsDetailActivity;
import com.gh.gamecenter.PluginActivity;
import com.gh.gamecenter.R;
@@ -178,7 +177,7 @@ class GameFragmentAdapter extends RecyclerView.Adapter
.subscribe(new Response>(){
@Override
public void onResponse(List response) {
- if (response.size() == 3) {
+ if (response.size() == 5) {
subjectDigestList = response;
} else {
isSubjectDigestError = true;
@@ -688,23 +687,11 @@ class GameFragmentAdapter extends RecyclerView.Adapter
contentView.setLayoutParams(lp);
viewHolder.subjectLl.addView(contentView);
- if (subjectDigestList.size() == 3 && i < 3) {
+ if (subjectDigestList.size() >= 5 && i < 5) {
ImageUtils.display(subjectIcon, subjectDigestList.get(i).getIcon());
subjectName.setText(subjectDigestList.get(i).getName());
}
- if (i == 3) {
-
- }
-
- if (i == 4) {
- subjectName.setText("礼包");
- subjectIcon.setImageURI(Uri.parse("res:///" + R.drawable.home_entrance_libao));
- if (sp.getBoolean("showGiftNewIcon", true)) {
- subjectNewIcon.setVisibility(View.VISIBLE);
- }
- }
-
if (i == 5) {
subjectName.setText("开服表");
subjectIcon.setImageURI(Uri.parse("res:///" + R.drawable.home_entrance_kaifu));
@@ -714,19 +701,13 @@ class GameFragmentAdapter extends RecyclerView.Adapter
contentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- if (finalI < 4 && !isSubjectDigestError) {
+ if (finalI < 5 && !isSubjectDigestError) {
Intent intent = new Intent(context, SubjectActivity.class);
intent.putExtra("id", subjectDigestList.get(finalI).getColumnId());
intent.putExtra("name", subjectDigestList.get(finalI).getColumnName());
intent.putExtra("order", subjectDigestList.get(finalI).getOrder());
intent.putExtra("entrance", "(游戏-专题:" + subjectDigestList.get(finalI).getName() + ")");
context.startActivity(intent);
- } else if (finalI == 4) {
- subjectNewIcon.setVisibility(View.GONE);
- sp.edit().putBoolean("showGiftNewIcon", false).apply();
- Intent intent = new Intent(context, LibaoActivity.class);
- intent.putExtra("entrance", "(游戏-专题:礼包)");
- context.startActivity(intent);
} else if (finalI == 5){
Intent intent = new Intent(context, KaiFuActivity.class);
intent.putExtra("entrance", "(游戏-专题:开服表)");
diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java
index 7a323d1e28..3552fdf7b7 100644
--- a/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java
@@ -1,12 +1,14 @@
package com.gh.gamecenter.gamedetail;
import android.content.Context;
+import android.content.Intent;
import android.graphics.Color;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Html;
import android.text.TextUtils;
+import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -23,7 +25,9 @@ import com.gh.common.util.QQUtils;
import com.gh.common.util.Utils;
import com.gh.common.view.GridDivider;
import com.gh.common.view.MarqueeView;
+import com.gh.gamecenter.NewSuggestActivity;
import com.gh.gamecenter.R;
+import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder;
import com.gh.gamecenter.db.LibaoDao;
import com.gh.gamecenter.db.info.LibaoInfo;
@@ -45,6 +49,7 @@ import rx.schedulers.Schedulers;
/**
* Created by khy on 2017/3/27.
+ * 游戏详情 - 福利适配器
*/
public class FuLiAdapter extends RecyclerView.Adapter{
@@ -211,8 +216,8 @@ public class FuLiAdapter extends RecyclerView.Adapter{
view = LayoutInflater.from(mContext).inflate(R.layout.gamedetail_item_kaifu, parent, false);
return new GameDetailKaiFuViewHolder(view);
case 6:
- RelativeLayout bottomRl = new RelativeLayout(mContext);
- return new BottomViewHolder(bottomRl);
+ view = LayoutInflater.from(mContext).inflate(R.layout.refresh_footerview, parent, false);
+ return new FooterViewHolder(view);
}
return null;
}
@@ -235,14 +240,33 @@ public class FuLiAdapter extends RecyclerView.Adapter{
} else if (holder instanceof GameDetailKaiFuViewHolder) {
GameDetailKaiFuViewHolder viewHolder = (GameDetailKaiFuViewHolder) holder;
initKaiFuViewHolder(viewHolder);
- } else if (holder instanceof BottomViewHolder) {
- BottomViewHolder viewHolder = (BottomViewHolder) holder;
+ } else if (holder instanceof FooterViewHolder) {
+ FooterViewHolder viewHolder = (FooterViewHolder) holder;
+ viewHolder.loading.setVisibility(View.GONE);
+ viewHolder.hint.setText("此游戏有问题?点击反馈");
+
int height = fuLiFragment.getHeight();
int i = height - mRecyclerView.getHeight() - DisplayUtils.dip2px(mContext, 75);
if (offsetH == 0 && i < 0 || i<0 &&offsetH < i) {
offsetH = i;
}
- viewHolder.bottomRl.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, -offsetH));
+
+ if (-offsetH > DisplayUtils.dip2px(mContext, 37)) {
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, -offsetH);
+ params.gravity = Gravity.CENTER;
+ viewHolder.itemView.setLayoutParams(params);
+ }
+
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(mContext, NewSuggestActivity.class);
+ intent.putExtra("suggestType", 4);
+ intent.putExtra("suggestHintType", "game");
+ intent.putExtra("content", mGameEntity.getName() + ",问题反馈:");
+ mContext.startActivity(intent);
+ }
+ });
}
}
@@ -355,7 +379,7 @@ public class FuLiAdapter extends RecyclerView.Adapter{
if (viewHolder.kaifuRv.getAdapter() == null) {
viewHolder.kaifuRv.setLayoutManager(new GridLayoutManager(mContext, 7));
viewHolder.kaifuRv.addItemDecoration(new GridDivider(mContext,1, Color.BLACK));
- viewHolder.kaifuRv.setAdapter(new GameDetailKaiFuAdapter(mContext, mGameDetailEntity.getKaiFuServer(), viewHolder));
+ viewHolder.kaifuRv.setAdapter(new GameDetailKaiFuAdapter(mContext, mGameDetailEntity.getKaiFuServer(), viewHolder, mGameEntity.getName()));
}
}
@@ -369,7 +393,7 @@ public class FuLiAdapter extends RecyclerView.Adapter{
}
if (contact != null && contact.getService() != null){
viewHolder.fuliQqunRl.setVisibility(View.VISIBLE);
- viewHolder.fuliQqunDes.setText(contact.getPlayer().getDes() + ":" + contact.getPlayer().getQq());
+ viewHolder.fuliQqunDes.setText(contact.getService().getDes() + ":" + contact.getService().getQq());
} else {
viewHolder.fuliQqunRl.setVisibility(View.GONE);
}
@@ -391,7 +415,7 @@ public class FuLiAdapter extends RecyclerView.Adapter{
viewHolder.fuliQqBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- boolean b = QQUtils.joinQQGroup(mContext, "Op7gxygPvGwdN4rYUj8alatXGIHgX6J8");
+ boolean b = QQUtils.joinQQGroup(mContext, mGameDetailEntity.getContact().getPlayer().getKey());
Utils.toast(mContext, b + "");
}
});
diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuAdapter.java
index 49f472ec7f..804efe48b2 100644
--- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuAdapter.java
@@ -31,6 +31,7 @@ import de.greenrobot.event.EventBus;
/**
* Created by khy on 2017/3/28.
+ * 游戏详情-日历表适配器
*/
public class GameDetailKaiFuAdapter extends RecyclerView.Adapter {
private Context mContext;
@@ -43,6 +44,9 @@ public class GameDetailKaiFuAdapter extends RecyclerView.Adapter curDayData;
private List mServerList;
@@ -66,10 +70,11 @@ public class GameDetailKaiFuAdapter extends RecyclerView.Adapter serverInfo, GameDetailKaiFuViewHolder viewHolder) {
+ public GameDetailKaiFuAdapter(Context context, List serverInfo, GameDetailKaiFuViewHolder viewHolder, String gameName) {
this.mContext = context;
this.mServerList = serverInfo;
this.viewHolder = viewHolder;
+ this.gameName = gameName;
isNextMonth = false;
@@ -149,6 +154,8 @@ public class GameDetailKaiFuAdapter extends RecyclerView.Adapter {
private Context mContext;
@@ -159,6 +162,8 @@ public class XinXiAdapter extends RecyclerView.Adapter
return 5;
} else if (position_game != -1 && position_game == position) {
return 6;
+ } else if (position == getItemCount() - 1) {
+ return 101;
} else if (position_game != -1 && mGameList != null &&mGameList.size()>0) {
return 100;
}
@@ -208,6 +213,9 @@ public class XinXiAdapter extends RecyclerView.Adapter
view = LayoutInflater.from(mContext).inflate(
R.layout.game_normal_item, parent, false);
return new GameNormalViewHolder(view);
+ case 101:
+ view = LayoutInflater.from(mContext).inflate(R.layout.refresh_footerview, parent, false);
+ return new FooterViewHolder(view);
}
return null;
}
@@ -231,13 +239,28 @@ public class XinXiAdapter extends RecyclerView.Adapter
} else if (holder instanceof GameDetailGameViewHolder) {
} else if (holder instanceof GameNormalViewHolder) {
initGameNormalViewHolder((GameNormalViewHolder) holder, position);
+ } else if (holder instanceof FooterViewHolder) {
+ FooterViewHolder viewHolder = (FooterViewHolder) holder;
+ viewHolder.loading.setVisibility(View.GONE);
+ viewHolder.hint.setText("此游戏有问题?点击反馈");
+
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(mContext, NewSuggestActivity.class);
+ intent.putExtra("suggestType", 4);
+ intent.putExtra("content", mGameEntity.getName() + ",问题反馈:");
+ intent.putExtra("suggestHintType", "game");
+ mContext.startActivity(intent);
+ }
+ });
}
}
@Override
public int getItemCount() {
- int index = 1;
+ int index = 2;
if (position_notice != -1) {
index++;
diff --git a/app/src/main/java/com/gh/gamecenter/message/AnswerFragment.java b/app/src/main/java/com/gh/gamecenter/message/AnswerFragment.java
new file mode 100644
index 0000000000..0936102606
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/AnswerFragment.java
@@ -0,0 +1,26 @@
+package com.gh.gamecenter.message;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+
+import com.gh.base.BaseFragment;
+import com.gh.gamecenter.eventbus.EBUISwitch;
+
+/**
+ * Created by khy on 2017/4/5.
+ */
+public class AnswerFragment extends BaseFragment {
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+// init(R.layout.fragment_news4);
+ }
+
+ // Fragment界面切换事件
+ public void onEventMainThread(EBUISwitch swith) {
+ if ("MessageFragment".equals(swith.getFrom()) && swith.getPosition() == 0) {
+
+ }
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/message/AnswerFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/message/AnswerFragmentAdapter.java
new file mode 100644
index 0000000000..03159c16ec
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/AnswerFragmentAdapter.java
@@ -0,0 +1,41 @@
+package com.gh.gamecenter.message;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.view.ViewGroup;
+
+import com.gh.gamecenter.entity.KeFuEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by khy on 2017/4/10.
+ */
+public class AnswerFragmentAdapter extends RecyclerView.Adapter {
+
+ private Context mContext;
+
+ private List mKeFuList;
+
+ public AnswerFragmentAdapter(Context mContext) {
+ this.mContext = mContext;
+
+ mKeFuList = new ArrayList<>();
+ }
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ return null;
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+
+ }
+
+ @Override
+ public int getItemCount() {
+ return mKeFuList.size();
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java b/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java
new file mode 100644
index 0000000000..174086b32c
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java
@@ -0,0 +1,74 @@
+package com.gh.gamecenter.message;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
+import com.gh.base.BaseFragment;
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.eventbus.EBUISwitch;
+
+import butterknife.BindView;
+
+/**
+ * Created by khy on 2017/4/5.
+ * 消息-评论
+ */
+public class CommentFragment extends BaseFragment {
+
+
+ @BindView(R.id.recyclerview)
+ RecyclerView mRecyclerview;
+ @BindView(R.id.refresh)
+ SwipeRefreshLayout mRefresh;
+ @BindView(R.id.loading_pb)
+ ProgressBarCircularIndeterminate mLoadingPb;
+ @BindView(R.id.reuse_no_connection)
+ LinearLayout mNoConnection;
+ @BindView(R.id.reuse_none_data)
+ LinearLayout mNoneData;
+
+ private LinearLayoutManager layoutManager;
+
+ private CommentFragmentAdapter mAdapter;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ init(R.layout.fragment_normal_message);
+
+ mRefresh.setColorSchemeResources(R.color.theme);
+
+ mAdapter = new CommentFragmentAdapter(getContext());
+ layoutManager = new LinearLayoutManager(getContext());
+ mRecyclerview.setLayoutManager(layoutManager);
+ mRecyclerview.setAdapter(mAdapter);
+
+ mRecyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+ if (newState == RecyclerView.SCROLL_STATE_IDLE && mAdapter.isLoaded() && !mAdapter.isRemove()
+ && mAdapter.getItemCount() == layoutManager.findLastVisibleItemPosition() + 1) {
+ mAdapter.addList(mAdapter.getItemCount() - 1);
+ }
+ }
+ });
+
+ }
+
+ // Fragment界面切换事件
+ public void onEventMainThread(EBUISwitch swith) {
+ if ("MessageFragment".equals(swith.getFrom()) && swith.getPosition() == 1) {
+ if (mLoadingPb.getVisibility() == View.VISIBLE) {
+ mAdapter.addList(0);
+ }
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/gh/gamecenter/message/CommentFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/message/CommentFragmentAdapter.java
new file mode 100644
index 0000000000..017010f55e
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/CommentFragmentAdapter.java
@@ -0,0 +1,126 @@
+package com.gh.gamecenter.message;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
+import com.gh.gamecenter.entity.KeFuEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by khy on 2017/4/10.
+ * 消息-评论适配器
+ */
+public class CommentFragmentAdapter extends RecyclerView.Adapter {
+
+ private Context mContext;
+
+ private List mKeFuList;
+
+ private boolean isRemove;
+ private boolean isNetworkError;
+ private boolean isLoaded;
+
+ public CommentFragmentAdapter(Context mContext) {
+ this.mContext = mContext;
+
+ mKeFuList = new ArrayList<>();
+
+ addList(0);
+ }
+
+ public void addList(int offset) {
+
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ if (position == getItemCount() - 1) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ if (viewType == 0) {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.refresh_footerview, parent, false);
+ return new FooterViewHolder(view);
+ } else {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.message_kefu_item, parent, false);
+ return new KeFuViewHolder(view);
+ }
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ if (holder instanceof KeFuViewHolder) {
+ KeFuEntity keFuEntity = mKeFuList.get(position);
+ KeFuViewHolder viewHolder = (KeFuViewHolder) holder;
+ initKeFuViewHolder(viewHolder, keFuEntity);
+ } else if (holder instanceof FooterViewHolder) {
+ FooterViewHolder viewHolder = (FooterViewHolder) holder;
+ initFooterViewHolder(viewHolder);
+ }
+
+ }
+
+ private void initFooterViewHolder(FooterViewHolder viewHolder) {
+ if (isNetworkError) {
+ viewHolder.loading.setVisibility(View.GONE);
+ viewHolder.hint.setText("加载失败,点击重试");
+ viewHolder.itemView.setClickable(true);
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ isNetworkError = false;
+ notifyDataSetChanged();
+ addList(mKeFuList.size());
+ }
+ });
+ } else if (isRemove) {
+ viewHolder.loading.setVisibility(View.GONE);
+ viewHolder.hint.setText("加载完毕");
+ viewHolder.itemView.setClickable(false);
+ viewHolder.lineLeft.setVisibility(View.VISIBLE);
+ viewHolder.lineRight.setVisibility(View.VISIBLE);
+ } else {
+ viewHolder.loading.setVisibility(View.VISIBLE);
+ viewHolder.hint.setText("加载中...");
+ viewHolder.itemView.setClickable(false);
+ }
+ }
+
+
+ private void initKeFuViewHolder(KeFuViewHolder viewHolder, KeFuEntity keFuEntity) {
+ viewHolder.content.setText(keFuEntity.getMessage());
+ if (!TextUtils.isEmpty(keFuEntity.getSuggestion())) {
+ viewHolder.suggestion.setVisibility(View.VISIBLE);
+ viewHolder.suggestion.setText(keFuEntity.getSuggestion());
+ } else {
+ viewHolder.suggestion.setVisibility(View.GONE);
+ }
+ viewHolder.skip.setText(keFuEntity.getLink().getDocument());
+ }
+
+ @Override
+ public int getItemCount() {
+ return mKeFuList.size();
+ }
+
+ public boolean isLoaded() {
+ return isLoaded;
+ }
+
+ public boolean isRemove() {
+ return isRemove;
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/message/CommentNormalViewHolder.java b/app/src/main/java/com/gh/gamecenter/message/CommentNormalViewHolder.java
new file mode 100644
index 0000000000..c1ed8ea5b0
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/CommentNormalViewHolder.java
@@ -0,0 +1,35 @@
+package com.gh.gamecenter.message;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.TextView;
+
+import com.facebook.drawee.view.SimpleDraweeView;
+import com.gh.gamecenter.R;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * Created by khy on 2017/4/6.
+ */
+public class CommentNormalViewHolder extends RecyclerView.ViewHolder {
+
+ @BindView(R.id.message_comment_user_icon)
+ public SimpleDraweeView userIcon;
+ @BindView(R.id.message_comment_user_name)
+ public TextView userName;
+ @BindView(R.id.message_comment_request_control)
+ public TextView requestControl;
+ @BindView(R.id.message_comment_content)
+ public TextView commentContent;
+ @BindView(R.id.message_comment_answer)
+ public TextView commentAnswer;
+ @BindView(R.id.message_comment_time)
+ public TextView commentTime;
+
+ public CommentNormalViewHolder(View itemView) {
+ super(itemView);
+ ButterKnife.bind(this, itemView);
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/message/CommentVoteViewHolder.java b/app/src/main/java/com/gh/gamecenter/message/CommentVoteViewHolder.java
new file mode 100644
index 0000000000..28272736e6
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/CommentVoteViewHolder.java
@@ -0,0 +1,31 @@
+package com.gh.gamecenter.message;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.TextView;
+
+import com.facebook.drawee.view.SimpleDraweeView;
+import com.gh.gamecenter.R;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * Created by khy on 2017/4/6.
+ */
+public class CommentVoteViewHolder extends RecyclerView.ViewHolder {
+
+ @BindView(R.id.message_comment_user_icon)
+ public SimpleDraweeView userIcon;
+ @BindView(R.id.comment_like_count)
+ public TextView likeCountTv;
+ @BindView(R.id.message_comment_time)
+ public TextView commentTime;
+ @BindView(R.id.message_comment_content)
+ public TextView commentContent;
+
+ public CommentVoteViewHolder(View itemView) {
+ super(itemView);
+ ButterKnife.bind(this, itemView);
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java b/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java
new file mode 100644
index 0000000000..648a47605c
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java
@@ -0,0 +1,106 @@
+package com.gh.gamecenter.message;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
+import com.gh.base.BaseFragment;
+import com.gh.common.view.VerticalItemDecoration;
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.eventbus.EBUISwitch;
+
+import butterknife.BindView;
+
+/**
+ * Created by khy on 2017/4/5.
+ * 消息-客服
+ */
+public class KeFuFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener{
+
+ @BindView(R.id.recyclerview)
+ RecyclerView mRecyclerview;
+ @BindView(R.id.refresh)
+ SwipeRefreshLayout mRefresh;
+ @BindView(R.id.loading_pb)
+ ProgressBarCircularIndeterminate mLoadingPb;
+ @BindView(R.id.reuse_no_connection)
+ LinearLayout mNoConnection;
+ @BindView(R.id.reuse_none_data)
+ LinearLayout mNoneData;
+
+ private LinearLayoutManager layoutManager;
+
+ private KeFuFragmentAdapter mAdapter;
+
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ mAdapter = new KeFuFragmentAdapter(KeFuFragment.this);
+ mRecyclerview.setAdapter(mAdapter);
+ mAdapter.addList(0, true);
+ }
+ };
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ init(R.layout.fragment_normal_message);
+
+ mRefresh.setColorSchemeResources(R.color.theme);
+ mRefresh.setOnRefreshListener(this);
+
+ mAdapter = new KeFuFragmentAdapter(this);
+ layoutManager = new LinearLayoutManager(getContext());
+ mRecyclerview.setLayoutManager(layoutManager);
+ mRecyclerview.addItemDecoration(new VerticalItemDecoration(getContext(), 8, true));
+ mRecyclerview.setAdapter(mAdapter);
+
+ mRecyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+ if (newState == RecyclerView.SCROLL_STATE_IDLE && mAdapter.isLoaded() && !mAdapter.isRemove()
+ && mAdapter.getItemCount() == layoutManager.findLastVisibleItemPosition() + 1) {
+ mAdapter.addList(mAdapter.getItemCount() - 1, true);
+ }
+ }
+ });
+
+ }
+
+ @Override
+ public void loadDone() {
+ super.loadDone();
+ mRefresh.setRefreshing(false);
+ mLoadingPb.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void loadError() {
+ super.loadError();
+ }
+
+ @Override
+ public void loadEmpty() {
+ super.loadEmpty();
+ }
+
+ // Fragment界面切换事件
+ public void onEventMainThread(EBUISwitch swith) {
+ if ("MessageFragment".equals(swith.getFrom()) && swith.getPosition() == 2) {
+ if (mLoadingPb.getVisibility() == View.VISIBLE) {
+ mAdapter.addList(0, true);
+ }
+ }
+ }
+
+ @Override
+ public void onRefresh() {
+ handler.postDelayed(runnable, 1000);
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java
new file mode 100644
index 0000000000..5a55f04aee
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/KeFuFragmentAdapter.java
@@ -0,0 +1,201 @@
+package com.gh.gamecenter.message;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.gh.common.util.CommentUtils;
+import com.gh.common.util.TokenUtils;
+import com.gh.common.util.Utils;
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
+import com.gh.gamecenter.entity.KeFuEntity;
+import com.gh.gamecenter.listener.OnCallBackListener;
+import com.gh.gamecenter.retrofit.Response;
+import com.gh.gamecenter.retrofit.RetrofitManager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import retrofit2.adapter.rxjava.HttpException;
+import rx.Observable;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.functions.Func1;
+import rx.schedulers.Schedulers;
+
+/**
+ * Created by khy on 2017/4/10.
+ * 消息-客服适配器
+ */
+public class KeFuFragmentAdapter extends RecyclerView.Adapter {
+
+ private Context mContext;
+
+ private OnCallBackListener mCallBackListener;
+
+ private List mKeFuList;
+
+ private boolean isRemove;
+ private boolean isNetworkError;
+ private boolean isLoaded;
+
+ public KeFuFragmentAdapter(KeFuFragment fragment) {
+ this.mContext = fragment.getContext();
+ this.mCallBackListener = fragment;
+ mKeFuList = new ArrayList<>();
+ }
+
+ public void addList(final int offset, boolean isCheck) {
+ isLoaded = false;
+ TokenUtils.getToken(mContext, isCheck)
+ .flatMap(new Func1>>() {
+ @Override
+ public Observable> call(String token) {
+ return RetrofitManager.getApi().getKeFuDataUnread(token, offset, 10);
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Response>(){
+ @Override
+ public void onResponse(List response) {
+ super.onResponse(response);
+ Utils.log("======onResponse");
+ if (response.size() < 10) {
+ isRemove = true;
+ }
+
+ isLoaded = true;
+ mKeFuList.addAll(response);
+ notifyDataSetChanged();
+
+ if (mKeFuList.size() == 0) {
+ mCallBackListener.loadEmpty();
+ } else {
+ mCallBackListener.loadDone();
+ }
+
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ super.onError(e);
+ Utils.log("======" + e.toString());
+ }
+
+ @Override
+ public void onFailure(HttpException e) {
+
+ if (e != null && e.code() == 401) {
+ addList(offset, false);
+ } else {
+ isLoaded = true;
+ isNetworkError = true;
+ }
+ }
+ });
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ if (position == getItemCount() - 1) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ if (viewType == 0) {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.refresh_footerview, parent, false);
+ return new FooterViewHolder(view);
+ } else {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.message_kefu_item, parent, false);
+ return new KeFuViewHolder(view);
+ }
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ if (holder instanceof KeFuViewHolder) {
+ KeFuEntity keFuEntity = mKeFuList.get(position);
+ KeFuViewHolder viewHolder = (KeFuViewHolder) holder;
+ initKeFuViewHolder(viewHolder, keFuEntity);
+ } else if (holder instanceof FooterViewHolder) {
+ FooterViewHolder viewHolder = (FooterViewHolder) holder;
+ initFooterViewHolder(viewHolder);
+ }
+
+ }
+
+ private void initFooterViewHolder(FooterViewHolder viewHolder) {
+ if (isNetworkError) {
+ viewHolder.loading.setVisibility(View.GONE);
+ viewHolder.hint.setText("加载失败,点击重试");
+ viewHolder.itemView.setClickable(true);
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ isNetworkError = false;
+ notifyDataSetChanged();
+ addList(mKeFuList.size(), true);
+ }
+ });
+ } else if (isRemove) {
+ viewHolder.loading.setVisibility(View.GONE);
+ viewHolder.hint.setText("加载完毕");
+ viewHolder.itemView.setClickable(false);
+ viewHolder.lineLeft.setVisibility(View.VISIBLE);
+ viewHolder.lineRight.setVisibility(View.VISIBLE);
+ } else {
+ viewHolder.loading.setVisibility(View.VISIBLE);
+ viewHolder.hint.setText("加载中...");
+ viewHolder.itemView.setClickable(false);
+ }
+ }
+
+
+ private void initKeFuViewHolder(KeFuViewHolder viewHolder, KeFuEntity keFuEntity) {
+ viewHolder.content.setText(keFuEntity.getMessage());
+ if (!TextUtils.isEmpty(keFuEntity.getSuggestion())) {
+ viewHolder.suggestion.setVisibility(View.VISIBLE);
+ viewHolder.suggestion.setText(keFuEntity.getSuggestion());
+ } else {
+ viewHolder.suggestion.setVisibility(View.GONE);
+ }
+ viewHolder.skip.setText(keFuEntity.getLink().getDocument());
+
+ CommentUtils.setCommentTime(viewHolder.time, keFuEntity.getTime());
+
+ if (!TextUtils.isEmpty(keFuEntity.getSuggestion())) {
+ viewHolder.suggestion.setVisibility(View.VISIBLE);
+ viewHolder.suggestion.setText(keFuEntity.getSuggestion());
+ } else {
+ viewHolder.suggestion.setVisibility(View.GONE);
+ }
+
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return mKeFuList.size();
+ }
+
+ public boolean isLoaded(){
+ return isLoaded;
+ }
+
+ public boolean isRemove(){
+ return isRemove;
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/message/KeFuViewHolder.java b/app/src/main/java/com/gh/gamecenter/message/KeFuViewHolder.java
new file mode 100644
index 0000000000..9522a73f1e
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/KeFuViewHolder.java
@@ -0,0 +1,32 @@
+package com.gh.gamecenter.message;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.TextView;
+
+import com.gh.gamecenter.R;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * Created by khy on 2017/4/10.
+ */
+public class KeFuViewHolder extends RecyclerView.ViewHolder {
+
+ @BindView(R.id.message_kefu_time)
+ public TextView time;
+ @BindView(R.id.message_kefu_hint)
+ public View hint;
+ @BindView(R.id.message_kefu_content)
+ public TextView content;
+ @BindView(R.id.message_kefu_suggestion)
+ public TextView suggestion;
+ @BindView(R.id.message_kefu_skip)
+ public TextView skip;
+
+ public KeFuViewHolder(View itemView) {
+ super(itemView);
+ ButterKnife.bind(this, itemView);
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java
new file mode 100644
index 0000000000..391f0f5964
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java
@@ -0,0 +1,209 @@
+package com.gh.gamecenter.message;
+
+import android.os.Build;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.view.ViewPager;
+import android.util.DisplayMetrics;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.gh.base.BaseFragment;
+import com.gh.common.util.DisplayUtils;
+import com.gh.common.util.TokenUtils;
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.adapter.FragmentAdapter;
+import com.gh.gamecenter.entity.MessageUnreadEntity;
+import com.gh.gamecenter.eventbus.EBNetworkState;
+import com.gh.gamecenter.eventbus.EBUISwitch;
+import com.gh.gamecenter.retrofit.Response;
+import com.gh.gamecenter.retrofit.RetrofitManager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+import de.greenrobot.event.EventBus;
+import retrofit2.adapter.rxjava.HttpException;
+import rx.Observable;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.functions.Func1;
+import rx.schedulers.Schedulers;
+
+/**
+ * Created by khy on 2017/4/5.
+ * 首页-消息
+ */
+public class MessageFragment extends BaseFragment implements ViewPager.OnPageChangeListener {
+
+ @BindView(R.id.message_wenda_tv) TextView mMessageWendaTv;
+ @BindView(R.id.message_wenda_hint) TextView mMessageWendaHint;
+ @BindView(R.id.message_wenda_ll) LinearLayout mMessageWendaLl;
+ @BindView(R.id.message_comment_tv) TextView mMessageCommentTv;
+ @BindView(R.id.message_comment_hint) TextView mMessageCommentHint;
+ @BindView(R.id.message_comment_ll) LinearLayout mMessageCommentLl;
+ @BindView(R.id.message_kefu_tv) TextView mMessageKefuTv;
+ @BindView(R.id.message_kefu_hint) View mMessageKefuHint;
+ @BindView(R.id.message_kefu_rl) RelativeLayout mMessageKefuRl;
+ @BindView(R.id.message_notice_tv) TextView mMessageNoticeTv;
+ @BindView(R.id.message_notice_hint) View mMessageNoticeHint;
+ @BindView(R.id.message_notice_rl) RelativeLayout mMessageNoticeRl;
+ @BindView(R.id.message_slide_line) View mMessageSlideLine;
+ @BindView(R.id.meaasge_viewPager) ViewPager mMeaasgeViewPager;
+
+ private LinearLayout.LayoutParams lparams;
+
+ private int width;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ init(R.layout.fragment_message);
+
+ LinearLayout title = (LinearLayout) view.findViewById(R.id.actionbar_title_ll);
+ LinearLayout.LayoutParams tparams = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(getActivity(), 55));
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ int top = DisplayUtils.getStatusBarHeight(getResources());
+ title.setPadding(0, top, 0, 0);
+ tparams.height += top;
+ }
+ title.setLayoutParams(tparams);
+
+ DisplayMetrics outMetrics = new DisplayMetrics();
+ getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
+ width = outMetrics.widthPixels / 4;
+ lparams = new LinearLayout.LayoutParams((int) (width * 0.6),
+ DisplayUtils.dip2px(getContext(), 2));
+ lparams.leftMargin = (int) (width * (0 + 0.2f));
+ mMessageSlideLine.setLayoutParams(lparams);
+
+ List list = new ArrayList<>();
+ list.add(new AnswerFragment());
+ list.add(new CommentFragment());
+ list.add(new KeFuFragment());
+ list.add(new NoticeFragment());
+ mMeaasgeViewPager.setAdapter(new FragmentAdapter(getChildFragmentManager(), list));
+ mMeaasgeViewPager.addOnPageChangeListener(this);
+ mMeaasgeViewPager.setCurrentItem(0);
+
+ initMessageUnread(true);
+ }
+
+ private void initMessageUnread(boolean isCheck) {
+ TokenUtils.getToken(getContext(), isCheck)
+ .flatMap(new Func1>() {
+ @Override
+ public Observable call(String token) {
+ return RetrofitManager.getApi().getMessageUnread(token);
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Response(){
+ @Override
+ public void onResponse(MessageUnreadEntity response) {
+ super.onResponse(response);
+ if (response.getComment() > 0) {
+ mMessageCommentHint.setVisibility(View.VISIBLE);
+ mMessageCommentHint.setText(response.getComment() + "");
+ }
+ if (response.getQuestion() > 0) {
+ mMessageWendaHint.setVisibility(View.VISIBLE);
+ mMessageWendaHint.setText(response.getQuestion() + "");
+ }
+ if (response.getNotice() != null && response.getNotice().getNum() > 0) {
+ mMessageNoticeHint.setVisibility(View.VISIBLE);
+ if (response.getNotice().getMessageId().size() > 0) {
+ // TODO 删除数据库内容
+ }
+ }
+ if (response.getService() != null && response.getService().getNum() > 0) {
+ mMessageKefuHint.setVisibility(View.VISIBLE);
+ if (response.getService().getMessageId().size() > 0) {
+ // TODO 删除数据库内容
+ }
+ }
+ }
+ @Override
+ public void onFailure(HttpException e) {
+ if (e != null && e.code() == 401) {
+ initMessageUnread(false);
+ }
+ }
+ });
+ }
+
+ //连接上网络事件
+ public void onEventMainThread(EBNetworkState busNetworkState) {
+ if (busNetworkState.isNetworkConnected()) {
+
+ }
+ }
+
+
+ @OnClick({R.id.message_wenda_ll, R.id.message_comment_ll, R.id.message_kefu_rl, R.id.message_notice_rl})
+ public void onViewClicked(View view) {
+ switch (view.getId()) {
+ case R.id.message_wenda_ll:
+ mMeaasgeViewPager.setCurrentItem(0);
+ break;
+ case R.id.message_comment_ll:
+ mMeaasgeViewPager.setCurrentItem(1);
+ break;
+ case R.id.message_kefu_rl:
+ mMeaasgeViewPager.setCurrentItem(2);
+ break;
+ case R.id.message_notice_rl:
+ mMeaasgeViewPager.setCurrentItem(3);
+ break;
+ }
+ }
+
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ if (positionOffset != 0) {
+ lparams.leftMargin = (int) (width * (position + positionOffset + 0.2f));
+ mMessageSlideLine.setLayoutParams(lparams);
+ }
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ if (position == 0){
+ EventBus.getDefault().post(new EBUISwitch("MessageFragment", 0));
+ mMessageWendaTv.setTextColor(getResources().getColor(R.color.theme));
+ mMessageCommentTv.setTextColor(getResources().getColor(R.color.title));
+ mMessageKefuTv.setTextColor(getResources().getColor(R.color.title));
+ mMessageNoticeTv.setTextColor(getResources().getColor(R.color.title));
+ } else if (position == 1) {
+ EventBus.getDefault().post(new EBUISwitch("MessageFragment", 1));
+ mMessageWendaTv.setTextColor(getResources().getColor(R.color.title));
+ mMessageCommentTv.setTextColor(getResources().getColor(R.color.theme));
+ mMessageKefuTv.setTextColor(getResources().getColor(R.color.title));
+ mMessageNoticeTv.setTextColor(getResources().getColor(R.color.title));
+ } else if (position == 2){
+ EventBus.getDefault().post(new EBUISwitch("MessageFragment", 2));
+ mMessageWendaTv.setTextColor(getResources().getColor(R.color.title));
+ mMessageCommentTv.setTextColor(getResources().getColor(R.color.title));
+ mMessageKefuTv.setTextColor(getResources().getColor(R.color.theme));
+ mMessageNoticeTv.setTextColor(getResources().getColor(R.color.title));
+ } else if (position == 3) {
+ EventBus.getDefault().post(new EBUISwitch("MessageFragment", 3));
+ mMessageWendaTv.setTextColor(getResources().getColor(R.color.title));
+ mMessageCommentTv.setTextColor(getResources().getColor(R.color.title));
+ mMessageKefuTv.setTextColor(getResources().getColor(R.color.title));
+ mMessageNoticeTv.setTextColor(getResources().getColor(R.color.theme));
+ }
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/message/NoticeFragment.java b/app/src/main/java/com/gh/gamecenter/message/NoticeFragment.java
new file mode 100644
index 0000000000..363c5e8d6e
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/NoticeFragment.java
@@ -0,0 +1,73 @@
+package com.gh.gamecenter.message;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
+import com.gh.base.BaseFragment;
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.eventbus.EBUISwitch;
+
+import butterknife.BindView;
+
+/**
+ * Created by khy on 2017/4/5.
+ * 消息-公告
+ */
+public class NoticeFragment extends BaseFragment {
+
+ @BindView(R.id.recyclerview)
+ RecyclerView mRecyclerview;
+ @BindView(R.id.refresh)
+ SwipeRefreshLayout mRefresh;
+ @BindView(R.id.loading_pb)
+ ProgressBarCircularIndeterminate mLoadingPb;
+ @BindView(R.id.reuse_no_connection)
+ LinearLayout mNoConnection;
+ @BindView(R.id.reuse_none_data)
+ LinearLayout mNoneData;
+
+ private LinearLayoutManager layoutManager;
+
+ private NoticeFragmentAdapter mAdapter;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ init(R.layout.fragment_normal_message);
+
+ mRefresh.setColorSchemeResources(R.color.theme);
+
+ mAdapter = new NoticeFragmentAdapter(getContext());
+ layoutManager = new LinearLayoutManager(getContext());
+ mRecyclerview.setLayoutManager(layoutManager);
+ mRecyclerview.setAdapter(mAdapter);
+
+ mRecyclerview.setOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+ if (newState == RecyclerView.SCROLL_STATE_IDLE && mAdapter.isLoaded() && !mAdapter.isRemove()
+ && mAdapter.getItemCount() == layoutManager.findLastVisibleItemPosition() + 1) {
+ mAdapter.addList(mAdapter.getItemCount() - 1);
+ }
+ }
+ });
+
+ }
+
+ // Fragment界面切换事件
+ public void onEventMainThread(EBUISwitch swith) {
+ if ("MessageFragment".equals(swith.getFrom()) && swith.getPosition() == 3) {
+ if (mLoadingPb.getVisibility() == View.VISIBLE) {
+ mAdapter.addList(0);
+ }
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/gh/gamecenter/message/NoticeFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/message/NoticeFragmentAdapter.java
new file mode 100644
index 0000000000..a0a71fac3c
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/NoticeFragmentAdapter.java
@@ -0,0 +1,126 @@
+package com.gh.gamecenter.message;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
+import com.gh.gamecenter.entity.KeFuEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by khy on 2017/4/10.
+ * 消息-公告适配器
+ */
+public class NoticeFragmentAdapter extends RecyclerView.Adapter {
+
+ private Context mContext;
+
+ private List mKeFuList;
+
+ private boolean isRemove;
+ private boolean isNetworkError;
+ private boolean isLoaded;
+
+ public NoticeFragmentAdapter(Context mContext) {
+ this.mContext = mContext;
+
+ mKeFuList = new ArrayList<>();
+
+ addList(0);
+ }
+
+ public void addList(int offset) {
+
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ if (position == getItemCount() - 1) {
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ if (viewType == 0) {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.refresh_footerview, parent, false);
+ return new FooterViewHolder(view);
+ } else {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.message_kefu_item, parent, false);
+ return new KeFuViewHolder(view);
+ }
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ if (holder instanceof KeFuViewHolder) {
+ KeFuEntity keFuEntity = mKeFuList.get(position);
+ KeFuViewHolder viewHolder = (KeFuViewHolder) holder;
+ initKeFuViewHolder(viewHolder, keFuEntity);
+ } else if (holder instanceof FooterViewHolder) {
+ FooterViewHolder viewHolder = (FooterViewHolder) holder;
+ initFooterViewHolder(viewHolder);
+ }
+
+ }
+
+ private void initFooterViewHolder(FooterViewHolder viewHolder) {
+ if (isNetworkError) {
+ viewHolder.loading.setVisibility(View.GONE);
+ viewHolder.hint.setText("加载失败,点击重试");
+ viewHolder.itemView.setClickable(true);
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ isNetworkError = false;
+ notifyDataSetChanged();
+ addList(mKeFuList.size());
+ }
+ });
+ } else if (isRemove) {
+ viewHolder.loading.setVisibility(View.GONE);
+ viewHolder.hint.setText("加载完毕");
+ viewHolder.itemView.setClickable(false);
+ viewHolder.lineLeft.setVisibility(View.VISIBLE);
+ viewHolder.lineRight.setVisibility(View.VISIBLE);
+ } else {
+ viewHolder.loading.setVisibility(View.VISIBLE);
+ viewHolder.hint.setText("加载中...");
+ viewHolder.itemView.setClickable(false);
+ }
+ }
+
+
+ private void initKeFuViewHolder(KeFuViewHolder viewHolder, KeFuEntity keFuEntity) {
+ viewHolder.content.setText(keFuEntity.getMessage());
+ if (!TextUtils.isEmpty(keFuEntity.getSuggestion())) {
+ viewHolder.suggestion.setVisibility(View.VISIBLE);
+ viewHolder.suggestion.setText(keFuEntity.getSuggestion());
+ } else {
+ viewHolder.suggestion.setVisibility(View.GONE);
+ }
+ viewHolder.skip.setText(keFuEntity.getLink().getDocument());
+ }
+
+ @Override
+ public int getItemCount() {
+ return mKeFuList.size();
+ }
+
+ public boolean isLoaded() {
+ return isLoaded;
+ }
+
+ public boolean isRemove() {
+ return isRemove;
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/message/WenDaViewHolder.java b/app/src/main/java/com/gh/gamecenter/message/WenDaViewHolder.java
new file mode 100644
index 0000000000..06b710a335
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/message/WenDaViewHolder.java
@@ -0,0 +1,39 @@
+package com.gh.gamecenter.message;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.TextView;
+
+import com.facebook.drawee.view.SimpleDraweeView;
+import com.gh.gamecenter.R;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * Created by khy on 2017/4/5.
+ */
+public class WenDaViewHolder extends RecyclerView.ViewHolder {
+
+ @BindView(R.id.wenda_user_icon)
+ public SimpleDraweeView userIcon;
+ @BindView(R.id.wenda_user_name)
+ public TextView userName;
+ @BindView(R.id.wenda_request_control)
+ public TextView requestControl;
+ @BindView(R.id.wenda_comment_answer)
+ public TextView commentAnswer;
+ @BindView(R.id.wenda_game_icon)
+ public SimpleDraweeView gameIcon;
+ @BindView(R.id.wenda_content)
+ public TextView wendaContent;
+ @BindView(R.id.wenda_comment)
+ public TextView wendaComment;
+ @BindView(R.id.wenda_time)
+ public TextView wendaTime;
+
+ public WenDaViewHolder(View itemView) {
+ super(itemView);
+ ButterKnife.bind(this, itemView);
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java
index b856c47114..9503c6f38f 100644
--- a/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java
+++ b/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java
@@ -1,77 +1,36 @@
package com.gh.gamecenter.news;
-import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
-import android.support.v4.util.ArrayMap;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
import android.widget.LinearLayout;
-import android.widget.TextView;
-import com.facebook.drawee.view.SimpleDraweeView;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
import com.gh.base.BaseFragment;
-import com.gh.common.util.ImageUtils;
-import com.gh.common.util.PackageUtils;
+import com.gh.common.view.VerticalItemDecoration;
import com.gh.gamecenter.R;
-import com.gh.gamecenter.db.info.ConcernInfo;
-import com.gh.gamecenter.entity.GameEntity;
-import com.gh.gamecenter.eventbus.EBConcernChanged;
import com.gh.gamecenter.eventbus.EBNetworkState;
import com.gh.gamecenter.eventbus.EBUISwitch;
-import com.gh.gamecenter.manager.ConcernManager;
-import com.gh.gamecenter.retrofit.ObservableUtil;
-import com.gh.gamecenter.retrofit.Response;
-import com.gh.gamecenter.retrofit.RetrofitManager;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
import butterknife.BindView;
import butterknife.OnClick;
-import rx.Observable;
-import rx.Subscriber;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.functions.Action1;
-import rx.functions.Func1;
-import rx.schedulers.Schedulers;
/**
- * Created by khy on 2016/8/15.
- * 资讯-关注界面
+ * Created by LGT on 2016/6/29.
+ * 资讯-资讯界面
*/
public class News1Fragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener {
- @BindView(R.id.news1_srl_refresh) SwipeRefreshLayout refreshLayout;
- @BindView(R.id.news1_rv_list) RecyclerView recyclerView;
- @BindView(R.id.news1_pb_loading) ProgressBarCircularIndeterminate loadingLayout;
+ @BindView(R.id.news2_srl_refresh) SwipeRefreshLayout refreshLayout;
+ @BindView(R.id.news2_rv_list) RecyclerView recyclerView;
+ @BindView(R.id.news2_pb_loading) ProgressBarCircularIndeterminate loadingLayout;
@BindView(R.id.reuse_no_connection) LinearLayout noConnectionLayout;
- @BindView(R.id.news1_ll_empty) LinearLayout emptyLayout;
- @BindView(R.id.news1_tv_concern) TextView concern;
- @BindView(R.id.news1_ll_concern) LinearLayout concernLayout;
- @BindView(R.id.news1_ll_concern_list) LinearLayout concernListLayout;
- private News1FragmentAdapter adapter;
private LinearLayoutManager layoutManager;
-
- private List recommendGameList; // 推荐关注的游戏
- private List installGameList; // 安装的游戏
-
- private Map concernMap; // 记录选择关注
-
- private ConcernManager concernManager;
-
- private boolean isInitConcernOcer;
- private boolean isInitInstallOver;
+ private News1FragmentAdapter adapter;
Runnable runnable = new Runnable() {
@Override
@@ -88,17 +47,13 @@ public class News1Fragment extends BaseFragment implements SwipeRefreshLayout.On
init(R.layout.fragment_news1);
- recommendGameList = new ArrayList<>();
- installGameList = new ArrayList<>();
- concernManager = new ConcernManager(getActivity());
- concernMap = new ArrayMap<>();
-
refreshLayout.setColorSchemeResources(R.color.theme);
refreshLayout.setOnRefreshListener(this);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
+ recyclerView.addItemDecoration(new VerticalItemDecoration(getContext(), 8, true));
adapter = new News1FragmentAdapter(News1Fragment.this);
recyclerView.setAdapter(adapter);
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@@ -107,43 +62,13 @@ public class News1Fragment extends BaseFragment implements SwipeRefreshLayout.On
if (newState == RecyclerView.SCROLL_STATE_IDLE
&& layoutManager.findLastVisibleItemPosition() + 1 == adapter.getItemCount()) {
if (!adapter.isOver() && !adapter.isLoading() && !adapter.isNetworkError()) {
- adapter.addList(adapter.getConcernListSize());
+ adapter.addList(adapter.getNewsListSize());
}
}
}
});
}
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == 0x125 && adapter.getSkipPosition() != -1) {
- // 更新对应位置
- adapter.notifyItemChanged(adapter.getSkipPosition());
- adapter.setSkipPosition(-1);
- } else if (requestCode == 0x122 && adapter.getSkipPosition() != -1) {
- adapter.initLibaoDao();
- adapter.notifyItemChanged(adapter.getSkipPosition());
- adapter.setSkipPosition(-1);
- }
- }
-
- @OnClick(R.id.news1_tv_concern)
- public void concern() { // 关注 推荐关注的游戏
- ArrayList list = new ArrayList<>();
- for (int key : concernMap.keySet()) {
- if (concernMap.get(key)) {
- list.add(recommendGameList.get(key));
- }
- }
- if (list.size() != 0) {
- if (list.size() == 1) {
- concernManager.addByEntity(list.get(0));
- } else {
- concernManager.addByList(list);
- }
- }
- }
-
@OnClick(R.id.reuse_no_connection)
public void reconnection() { // 重新连接
refreshLayout.setRefreshing(true);
@@ -156,10 +81,7 @@ public class News1Fragment extends BaseFragment implements SwipeRefreshLayout.On
@Override
public void loadDone() { // 数据加载成功回调
refreshLayout.setRefreshing(false);
- emptyLayout.setVisibility(View.GONE);
- concernLayout.setVisibility(View.GONE);
loadingLayout.setVisibility(View.GONE);
- recyclerView.setVisibility(View.VISIBLE);
}
@Override
@@ -170,17 +92,6 @@ public class News1Fragment extends BaseFragment implements SwipeRefreshLayout.On
noConnectionLayout.setVisibility(View.VISIBLE);
}
- @Override
- public void loadEmpty() { // 数据为空回调
- refreshLayout.setRefreshing(false);
- loadingLayout.setVisibility(View.GONE);
- recyclerView.setVisibility(View.GONE);
- emptyLayout.setVisibility(View.VISIBLE);
- refreshLayout.setEnabled(false);
-
- initInstallGame();
- }
-
// 连接上网络事件
public void onEventMainThread(EBNetworkState busNetworkState) {
if (busNetworkState.isNetworkConnected()) {
@@ -189,248 +100,25 @@ public class News1Fragment extends BaseFragment implements SwipeRefreshLayout.On
} else if (adapter.isNetworkError()) {
adapter.setNetworkError(false);
adapter.notifyItemChanged(adapter.getItemCount() - 1);
- adapter.addList(adapter.getConcernListSize());
+ adapter.addList(adapter.getNewsListSize());
}
}
}
- // Fragment界面切换事件
- public void onEventMainThread(EBUISwitch swith) {
- if ("NewsFragment".equals(swith.getFrom())) {
- if (swith.getPosition() == 0) {
+ // 资讯Fragment界面切换事件
+ public void onEventMainThread(EBUISwitch busNine) {
+ if ("NewsFragment".equals(busNine.getFrom())) {
+ if (busNine.getPosition() == 0) {
if (loadingLayout.getVisibility() == View.VISIBLE) {
adapter.addList(0);
}
- } else if (swith.getPosition() == -2 || swith.getPosition() == -1) {
- if (swith.getPosition() == -1) {
- isInitInstallOver = true;
- } else if (swith.getPosition() == -2) {
- isInitConcernOcer = true;
- }
-
- if (isInitConcernOcer && isInitInstallOver) { // 没有关注且初始化安装完成,显示推荐小版块
- refreshLayout.setRefreshing(false);
- loadingLayout.setVisibility(View.GONE);
- recyclerView.setVisibility(View.GONE);
- emptyLayout.setVisibility(View.VISIBLE);
- refreshLayout.setEnabled(false);
- initInstallGame();
- }
}
}
}
- // 关注事件
- public void onEventMainThread(EBConcernChanged changed) {
- emptyLayout.setVisibility(View.GONE);
- refreshLayout.setEnabled(true);
- refreshLayout.setRefreshing(true);
- recyclerView.setVisibility(View.VISIBLE);
- loadingLayout.setVisibility(View.VISIBLE);
- adapter = new News1FragmentAdapter(News1Fragment.this);
- recyclerView.setAdapter(adapter);
- adapter.addList(0);
- }
-
@Override
- public void onRefresh() {
+ public void onRefresh() { // 刷新
handler.postDelayed(runnable, 1000);
}
- // 推荐关注改为手机安装的游戏+光环助手
- private void initInstallGame() {
- recommendGameList.clear();//清除上一次记录
- concern.setEnabled(true);//防止上一次关注按钮不可以,导致重新刷新后也不可用
-
- ObservableUtil.computation(new Observable.OnSubscribe>() {
- @Override
- public void call(Subscriber super List> subscriber) {
- List installedList = concernManager.getInstalledGame();
- // 获取第一次安装时间
- HashMap packageNames;
- for (ConcernInfo concernInfo : installedList) {
- long time = 0;
- packageNames = concernInfo.getPackageNames();
- for (String packageName : packageNames.keySet()) {
- long installedTime = PackageUtils.getInstalledTime(getActivity(), packageName);
- if (installedTime > time) { // 多版本获取最近安装版本时间
- time = installedTime;
- }
- }
- concernInfo.setTime(time);
- }
-
- // 对已安装的游戏排序
- Collections.sort(installedList, new Comparator() {
- @Override
- public int compare(ConcernInfo lhs, ConcernInfo rhs) {
- return lhs.getTime() < rhs.getTime() ? -1 : (lhs.getTime() == rhs.getTime() ? 0 : 1);
- }
- });
-
- subscriber.onNext(installedList);
- subscriber.onCompleted();
- }
- }, new Action1>() {
- @Override
- public void call(final List installedList) {
- final List gameList = new ArrayList<>();
-
- List> sequences = new ArrayList<>();
- for (int i = 0, size = installedList.size() + 1; i < size; i++) {
- if (i == size - 1) {
- sequences.add(RetrofitManager.getApi().getGameDigest("5618b86e8ab49e17088b4575"));// 光环助手ID
- } else {
- sequences.add(RetrofitManager.getApi().getGameDigest(installedList.get(i).getId()));
- }
- }
- Observable.merge(sequences)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Response() {
- @Override
- public void onNext(GameEntity response) {
- if (response.getId().equals("5618b86e8ab49e17088b4575")) {
- recommendGameList.add(response);
- } else {
- gameList.add(response);
- }
- }
-
- @Override
- public void onCompleted() {
- initRecommendConcern(installedList, gameList);
- }
- });
- }
- });
- }
-
- private void initRecommendConcern(List list, List gameList) {
- for (ConcernInfo info : list) {
- for (int i = 0; i < gameList.size(); i++) {
- if (info.getId().equals(gameList.get(i).getId())) {
- installGameList.add(gameList.get(i));
- break;
- }
- }
- }
-
- RetrofitManager.getApi()
- .getRemenkapai()
- .map(new Func1, String>() {
- @Override
- public String call(List list) {
- // 根据热门卡牌顺序进行排序
- for (int i = 0; i < installGameList.size(); i++) {
- if (recommendGameList.size() >= 4) {
- break;
- }
- for (int j = 0; j < list.size(); j++) {
- if (list.get(j).getId().equals(installGameList.get(i).getId())) {
- recommendGameList.add(installGameList.get(i));
- installGameList.remove(i);
- i--;
- break;
- }
- }
- }
-
- // 推荐关注列表不足4个时,剩下的从已安装列表选取
- if (recommendGameList.size() < 4) {
- for (GameEntity gameEntity : installGameList) {
- if (recommendGameList.size() < 4
- && !concernManager.isConcern(gameEntity.getId())) {
- recommendGameList.add(gameEntity);
- }
- }
- }
-
- return null;
- }
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Response(){
- @Override
- public void onResponse(String response) {
- initRecommendConcernView();
- }
- });
- }
-
- private void initRecommendConcernView() {
- if (recommendGameList.isEmpty()) {
- return;
- }
- concernLayout.setVisibility(View.VISIBLE);
- concernListLayout.removeAllViews();
-
- SimpleDraweeView icon;
- TextView name;
- ImageView concern;
-
- GameEntity gameEntity;
- for (int i = 0, size = recommendGameList.size(); i < size; i++) {
- concernMap.put(i, true);
-
- gameEntity = recommendGameList.get(i);
-
- View view = View.inflate(getActivity(), R.layout.concern_item, null);
-
- icon = (SimpleDraweeView) view.findViewById(R.id.concern_item_icon);
- name = (TextView) view.findViewById(R.id.concern_item_name);
- concern = (ImageView) view.findViewById(R.id.concern_item_concern_iv);
- view.findViewById(R.id.concern_item_concern).setVisibility(View.GONE);
-
- concern.setVisibility(View.VISIBLE);
-// icon.setImageURI(gameEntity.getIcon());
- ImageUtils.display(icon, gameEntity.getIcon());
- name.setText(gameEntity.getName());
- concern.setImageResource(R.drawable.concern_select_true);
-
- final int finalI = i;
- concern.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (concernMap.get(finalI)){
- ((ImageView) v).setImageResource(R.drawable.concern_select_false);
- concernMap.put(finalI, false);
- } else {
- ((ImageView) v).setImageResource(R.drawable.concern_select_true);
- concernMap.put(finalI, true);
- }
-
- // 判断关注按钮是否可用
- isConcernAvailable();
- }
- });
-
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
- 0, ViewGroup.LayoutParams.MATCH_PARENT);
- params.weight = 1;
- concernListLayout.addView(view, params);
- }
-
- concernListLayout.setVisibility(View.VISIBLE);
- }
-
- // 判断关注按钮是否可用
- private void isConcernAvailable() {
- boolean isEnabled = false;
- for (int key : concernMap.keySet()) {
- if (concernMap.get(key)){
- isEnabled = true;
- break;
- }
- }
- if (isEnabled) {
- concern.setTextColor(getResources().getColor(R.color.theme));
- concern.setEnabled(true);
- } else {
- concern.setTextColor(getResources().getColor(R.color.btn_pause));
- concern.setEnabled(false);
- }
- }
-
}
diff --git a/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java
index 891c40949d..e5490921a2 100644
--- a/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java
@@ -1,62 +1,38 @@
package com.gh.gamecenter.news;
import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
-import android.text.Html;
-import android.text.TextUtils;
+import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.LinearLayout;
import android.widget.Toast;
-import com.gh.base.AppController;
import com.gh.common.constant.ItemViewType;
-import com.gh.common.util.ConcernContentUtils;
-import com.gh.common.util.ConcernUtils;
import com.gh.common.util.DataCollectionUtils;
import com.gh.common.util.DataUtils;
import com.gh.common.util.DisplayUtils;
import com.gh.common.util.ImageUtils;
-import com.gh.common.util.LibaoUtils;
-import com.gh.common.util.MD5Utils;
import com.gh.common.util.NewsUtils;
-import com.gh.common.util.PlatformUtils;
-import com.gh.common.view.CardLinearLayout;
-import com.gh.gamecenter.LibaoDetailActivity;
-import com.gh.gamecenter.MessageDetailActivity;
-import com.gh.gamecenter.NewsDetailActivity;
import com.gh.gamecenter.R;
-import com.gh.gamecenter.ShareCardActivity;
-import com.gh.gamecenter.ShareCardPicActivity;
-import com.gh.gamecenter.WebActivity;
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
-import com.gh.gamecenter.adapter.viewholder.NewsDigestViewHolder;
-import com.gh.gamecenter.db.LibaoDao;
-import com.gh.gamecenter.db.info.ConcernInfo;
-import com.gh.gamecenter.db.info.LibaoInfo;
-import com.gh.gamecenter.entity.CommentnumEntity;
-import com.gh.gamecenter.entity.ConcernEntity;
-import com.gh.gamecenter.entity.LibaoEntity;
-import com.gh.gamecenter.entity.LibaoStatusEntity;
+import com.gh.gamecenter.adapter.viewholder.NewsImage1ViewHolder;
+import com.gh.gamecenter.adapter.viewholder.NewsImage2ViewHolder;
+import com.gh.gamecenter.adapter.viewholder.NewsImage3ViewHolder;
+import com.gh.gamecenter.entity.NewsEntity;
import com.gh.gamecenter.entity.ViewsEntity;
import com.gh.gamecenter.listener.OnCallBackListener;
-import com.gh.gamecenter.manager.CommentManager;
-import com.gh.gamecenter.manager.ConcernManager;
import com.gh.gamecenter.manager.VisitManager;
import com.gh.gamecenter.retrofit.JSONObjectResponse;
import com.gh.gamecenter.retrofit.ObservableUtil;
import com.gh.gamecenter.retrofit.Response;
import com.gh.gamecenter.retrofit.RetrofitManager;
-import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
@@ -71,28 +47,18 @@ import rx.functions.Func1;
import rx.schedulers.Schedulers;
/**
- * Created by khy on 2016/8/15.
- * 资讯-关注-数据适配器
+ * Created by khy on 2016/6/30.
+ * 资讯-资讯-数据适配器
*/
-public class News1FragmentAdapter extends RecyclerView.Adapter {
+public class News1FragmentAdapter extends RecyclerView.Adapter{
private News1Fragment fragment;
private Context context;
-
private OnCallBackListener listener;
- private List concernList;
- private List gameIdList;
- private List libaoStatusList;
-
- private List libaoInfo;
- private LibaoDao libaoDao;
-
- private String key;
- private String ids;
+ private List newsList;
private int itemCount;
- private int skipPosition;
private int cardMargin;
@@ -105,21 +71,15 @@ public class News1FragmentAdapter extends RecyclerView.Adapter();
- gameIdList = new ArrayList<>();
- libaoStatusList = new ArrayList<>();
+ newsList = new ArrayList<>();
itemCount = 0;
- skipPosition = -1;
- isNetworkError = false;
- isOver = false;
isLoading = false;
+ isOver = false;
+ isNetworkError = false;
- libaoDao = new LibaoDao(context);
- libaoInfo = libaoDao.getAll();
-
- cardMargin = (int) context.getResources().getDimension(R.dimen.cardview_margin);
+ cardMargin = (int)context.getResources().getDimension(R.dimen.cardview_margin);
}
// 加载数据
@@ -128,172 +88,46 @@ public class News1FragmentAdapter extends RecyclerView.Adapter() {
- @Override
- public void call(Subscriber super String> subscriber) {
- ConcernManager concernManager = new ConcernManager(context);
- List concernList = concernManager.getConcernGame();
- if (concernList == null || concernList.isEmpty()) {
- subscriber.onNext(null);
- } else {
- for (ConcernInfo concernInfo : concernList) {
- gameIdList.add(concernInfo.getId());
- }
-
- // 对数据进行排序
- Collections.sort(gameIdList, new Comparator() {
- @Override
- public int compare(String lhs, String rhs) {
- return lhs.compareTo(rhs);
- }
- });
-
- StringBuilder keyBuilder = new StringBuilder();
- StringBuilder idsBuilder = new StringBuilder();
- for (int i = 0; i < gameIdList.size(); i++) {
- keyBuilder.append(gameIdList.get(i));
- if (i < 5) {
- idsBuilder.append(gameIdList.get(i));
- idsBuilder.append("-");
- }
- }
- key = MD5Utils.getContentMD5(keyBuilder.toString());
- ids = idsBuilder.substring(0, idsBuilder.length() - 1);
- subscriber.onNext("");
- }
- subscriber.onCompleted();
- }
- }, new Action1() {
- @Override
- public void call(String s) {
- if (s == null) {
- listener.loadEmpty();
- } else {
- loadDataByKey(offset);
- }
- }
- });
- } else {
- loadDataByKey(offset);
- }
- }
-
- private void loadDataByKey(final int offset) {
RetrofitManager.getApi()
- .getGuanZhuByKey(key, offset)
- .map(new Func1, List>() {
+ .getZiXun(offset)
+ .map(new Func1, List>() {
@Override
- public List call(List list) {
- // 去除重复数据
- return removeDuplicateData(concernList, list);
+ public List call(List list) {
+ // 去掉重复数据
+ return NewsUtils.removeDuplicateData(newsList, list);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Response>() {
- @Override
- public void onResponse(List response) {
- isLoading = false;
-
- if (response.size() != 0) {
- concernList.addAll(response);
- itemCount += response.size();
- if (!fragment.isHidden() && !fragment.isEverpause()) {
- notifyItemRangeInserted(concernList.size() - response.size(), response.size());
- } else {
- notifyDataSetChanged();
- }
-
- getLibaoStatus(response);
- getNewsViews(response, offset);
- getNewsCommentnum(response, offset);
-
- } else {
- isOver = true;
- notifyItemChanged(getItemCount() - 1);
- }
-
- if (offset == 0 && listener != null) {
- if (concernList.isEmpty()) {
- listener.loadEmpty();
- } else {
- listener.loadDone();
- }
- }
- }
-
- @Override
- public void onFailure(HttpException e) {
- if (e != null && e.code() == 409) {
- loadDataByGameId(offset);
- ConcernUtils.updateConcernData(context, new JSONArray(gameIdList));
- return;
- }
-
- isLoading = false;
-
- // 网络错误
- if (offset == 0) {
- if (listener != null) {
- listener.loadError();
- }
- } else {
- Toast.makeText(context, "加载失败,请检查网络状态", Toast.LENGTH_SHORT).show();
- isNetworkError = true;
- notifyItemChanged(getItemCount() - 1);
- }
- }
- });
- }
-
- private void loadDataByGameId(final int offset) {
- RetrofitManager.getApi()
- .getGuanZhuById(ids, offset)
- .map(new Func1, List>() {
+ .subscribe(new Response>(){
@Override
- public List call(List list) {
- // 去除重复数据
- return removeDuplicateData(concernList, list);
- }
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Response>() {
- @Override
- public void onResponse(List response) {
+ public void onResponse(List response) {
isLoading = false;
if (response.size() != 0) {
- concernList.addAll(response);
+ newsList.addAll(response);
itemCount += response.size();
if (!fragment.isHidden() && !fragment.isEverpause()) {
- notifyItemRangeInserted(concernList.size() - response.size(), response.size());
+ notifyItemRangeInserted(newsList.size() - response.size(), response.size());
} else {
notifyDataSetChanged();
}
-
- getNewsViews(response, offset);
- getNewsCommentnum(response, offset);
- getLibaoStatus(response);
} else {
isOver = true;
notifyItemChanged(getItemCount() - 1);
}
if (offset == 0 && listener != null) {
- if (concernList.isEmpty()) {
- listener.loadEmpty();
- } else {
- listener.loadDone();
- }
+ listener.loadDone();
}
+
+ // 获取新闻阅读量
+ getNewsViews(response, offset);
}
@Override
public void onFailure(HttpException e) {
isLoading = false;
-
// 网络错误
if (offset == 0) {
if (listener != null) {
@@ -308,56 +142,8 @@ public class News1FragmentAdapter extends RecyclerView.Adapter response) {
- StringBuilder builder = new StringBuilder();
- for (int i = 0, size = response.size(); i < size; i++) {
- if ("libao".equals(response.get(i).getType())){
- builder.append(response.get(i).getId());
- builder.append("-");
- }
- }
- if (builder.length() == 0) return;
- builder.deleteCharAt(builder.length() - 1);
- String ids = builder.toString();
-
- LibaoUtils.getLibaoStatus(ids, new LibaoUtils.PostLibaoListener() {
- @Override
- public void postSucced(Object response) {
- libaoStatusList.addAll((List)response);
- notifyDataSetChanged();
- }
-
- @Override
- public void postFailed(Throwable error) {
-
- }
- });
- }
-
-
- // 去除重复数据
- private static List removeDuplicateData(List sourceList, List rawList) {
- if (sourceList == null || sourceList.isEmpty()
- || rawList == null || rawList.isEmpty()) {
- return rawList;
- }
- String id;
- for (int i = 0; i < rawList.size(); i++) {
- id = rawList.get(i).getId();
- for (ConcernEntity concernEntity : sourceList) {
- if (id.equals(concernEntity.getId())) {
- rawList.remove(i);
- i--;
- break;
- }
- }
- }
- return rawList;
- }
-
// 获取新闻阅读量
- private void getNewsViews(final List list, final int start) {
+ private void getNewsViews(final List list, final int start) {
if (list == null || list.isEmpty()) {
return;
}
@@ -384,9 +170,9 @@ public class News1FragmentAdapter extends RecyclerView.Adapter list) {
for (ViewsEntity viewsEntity : list) {
- for (ConcernEntity concernEntity : concernList) {
- if (viewsEntity.getId().equals(concernEntity.getId())) {
- concernEntity.setViews(viewsEntity.getViews());
+ for (NewsEntity newsEntity : newsList) {
+ if (viewsEntity.getId().equals(newsEntity.getId())) {
+ newsEntity.setViews(viewsEntity.getViews());
break;
}
}
@@ -406,99 +192,23 @@ public class News1FragmentAdapter extends RecyclerView.Adapter list, final int start) {
- if (list == null || list.isEmpty()) {
- return;
- }
- ObservableUtil.computation(new Observable.OnSubscribe() {
- @Override
- public void call(Subscriber super String> subscriber) {
- StringBuilder builder = new StringBuilder();
- for (int i = 0, size = list.size(); i < size; i++) {
- builder.append(list.get(i).getId());
- builder.append("-");
- }
- builder.deleteCharAt(builder.length() - 1);
- CommentManager.getInstance().addUrl(builder.toString());
- subscriber.onNext(builder.toString());
- subscriber.onCompleted();
- }
- }, new Action1() {
- @Override
- public void call(String ids) {
- RetrofitManager.getComment()
- .getNewsCommentnum(ids)
- .map(new Func1, String>() {
- @Override
- public String call(List list) {
- for (CommentnumEntity commentnumEntity : list) {
- for (ConcernEntity concernEntity : concernList) {
- if (commentnumEntity.getId().equals(concernEntity.getId())) {
- concernEntity.setCommentnum(commentnumEntity.getNum());
- break;
- }
- }
- }
- return null;
- }
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Response() {
- @Override
- public void onResponse(String response) {
- notifyItemRangeChanged(start, list.size());
- }
- });
- }
- });
- }
-
- // 统计新闻阅读量
- private void statNewsViews(final ConcernEntity concernEntity, final int position) {
- RetrofitManager.getData().postNewsViews(concernEntity.getId())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new JSONObjectResponse(){
- @Override
- public void onResponse(JSONObject response) {
- if (response.length() != 0) {
- try {
- if ("success".equals(response.getString("status"))) {
- concernEntity.setViews(concernEntity.getViews() + 1);
-
- notifyItemChanged(position);
-
- // 更新okhttp缓存数据
- VisitManager.updateOkhttpCache(concernEntity.getId());
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- }
- });
- }
-
- @Override
- public int getItemViewType(int position) {
- if (position == concernList.size()) {
- return ItemViewType.LOADING;
- } else {
- return ItemViewType.NEWS_DIGEST;
- }
- }
-
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- if (viewType == ItemViewType.NEWS_DIGEST) {
- View view = LayoutInflater.from(parent.getContext()).
- inflate(R.layout.news_digest_item, parent, false);
- return new NewsDigestViewHolder(view);
+ if (viewType == ItemViewType.NEWS_IMAGE1) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(
+ R.layout.news_image1_item, parent, false);
+ return new NewsImage1ViewHolder(view);
+ } else if (viewType == ItemViewType.NEWS_IMAGE2) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(
+ R.layout.news_image2_item, parent, false);
+ return new NewsImage2ViewHolder(view);
+ } else if (viewType == ItemViewType.NEWS_IMAGE3) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(
+ R.layout.news_image3_item, parent, false);
+ return new NewsImage3ViewHolder(view);
} else if (viewType == ItemViewType.LOADING) {
- View view = LayoutInflater.from(parent.getContext()).
- inflate(R.layout.refresh_footerview, parent, false);
+ View view = LayoutInflater.from(parent.getContext()).inflate(
+ R.layout.refresh_footerview, parent, false);
return new FooterViewHolder(view);
}
return null;
@@ -506,241 +216,144 @@ public class News1FragmentAdapter extends RecyclerView.Adapter kv = new HashMap<>();
+ kv.put("名字", newsEntity.getTitle());
+ kv.put("位置", String.valueOf(viewHolder.getPosition() + 1));
+ DataUtils.onEvent(context, "点击", "资讯-资讯", kv);
- // 最后一个
- if (position == concernList.size() - 1) {
- ((CardLinearLayout) viewHolder.itemView).setBottom(true);
- } else {
- ((CardLinearLayout) viewHolder.itemView).setBottom(false);
- }
+ DataCollectionUtils.uploadClick(context, "列表", "资讯-资讯", newsEntity.getTitle());
-// viewHolder.thumb.setImageURI(concernEntity.getGameIcon());
- ImageUtils.display(viewHolder.thumb, concernEntity.getGameIcon());
- viewHolder.title.setText(concernEntity.getGameName());
- NewsUtils.setNewsPublishOn(viewHolder.time, concernEntity.getTime());
-
- if ("libao".equals(concernEntity.getType())) {
- String content ;
- if (concernEntity.getContent().contains("
")) {
- content = concernEntity.getContent().replaceAll("
", " ");
- } else {
- content = concernEntity.getContent();
+ //统计阅读量
+ statNewsViews(newsEntity, viewHolder.getPosition());
+ NewsUtils.startNewsDetailActivity(context, newsEntity, "(资讯-资讯)");
}
-
- String libaoCode = null;
- viewHolder.imgLayout.removeAllViews();
-
- if (TextUtils.isEmpty(concernEntity.getPlatform())) {
- viewHolder.content.setText(concernEntity.getName() + "\n礼包内容:" + content );
- } else {
- viewHolder.content.setText(concernEntity.getName() + "(限" + PlatformUtils.getInstance(context)
- .getPlatformName(concernEntity.getPlatform()) + "版)\n礼包内容:" + content );
- }
- viewHolder.comment.setVisibility(View.GONE);
- viewHolder.share.setVisibility(View.GONE);
- viewHolder.link.setImageResource(R.drawable.ic_libao);
-
- for (LibaoStatusEntity libaoStatusEntity : libaoStatusList) {
- if (libaoStatusEntity.getId().equals(concernEntity.getId())) {
-
- if ("finish".equals(libaoStatusEntity.getStatus())) {
- viewHolder.read.setText("已结束");
- } else {
- viewHolder.read.setText("点击查看");
- }
-
- if (libaoInfo != null) {
- for (LibaoInfo info : libaoInfo) {
- if (info.getLibaoId().equals(concernEntity.getId()) || "linged".equals(info.getStatus())) {
- if ("ling".equals(info.getStatus())) {
- viewHolder.read.setText("已领取");
- } else {
- viewHolder.read.setText("已淘号");
- }
-
- libaoCode = info.getCode();
- break;
- }
- }
- }
- }
- }
-
- final String finalLibaoCode = libaoCode;
- viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- for (LibaoStatusEntity libaoStatusEntity : libaoStatusList) {
- if (concernEntity.getId().equals(libaoStatusEntity.getId())) {
- AppController.put("libaoEntity", LibaoEntity.createLibaoEntity(
- concernEntity, libaoStatusEntity, finalLibaoCode));
- }
- }
- skipPosition = viewHolder.getPosition();
- Intent intent = new Intent(context, LibaoDetailActivity.class);
- intent.putExtra("entrance", "(资讯-关注)");
- fragment.startActivityForResult(intent, 0x122);
- }
- });
- return;
- }
-
- viewHolder.comment.setVisibility(View.VISIBLE);
- viewHolder.share.setVisibility(View.VISIBLE);
-
- if (concernEntity.getBrief() != null) {
- viewHolder.content.setText(Html.fromHtml(concernEntity.getBrief()));
- viewHolder.content.setMaxLines(100);
- } else {
- viewHolder.content.setText(Html.fromHtml(concernEntity.getContent()));
- viewHolder.content.setMaxLines(5);
- }
-
- if (concernEntity.getImg().isEmpty()) {
- viewHolder.imgLayout.setVisibility(View.GONE);
- viewHolder.imgLayout.removeAllViews();
- } else {
- viewHolder.imgLayout.setVisibility(View.VISIBLE);
- viewHolder.imgLayout.removeAllViews();
- ConcernContentUtils.addContentPic(context, viewHolder.imgLayout, concernEntity.getImg(), "(资讯-关注)",
- context.getResources().getDisplayMetrics().widthPixels - DisplayUtils.dip2px(context, 34));
- }
-
- int views = concernEntity.getViews();
+ });
+// viewHolder.thumb.setImageURI(newsEntity.getThumbnail().getUrl().get(0));
+ ImageUtils.display(viewHolder.thumb, newsEntity.getThumbnail().getUrl().get(0));
+ viewHolder.title.setText(newsEntity.getTitle());
+ int views = newsEntity.getViews();
if (views == 0) {
viewHolder.read.setVisibility(View.GONE);
} else {
viewHolder.read.setVisibility(View.VISIBLE);
viewHolder.read.setText(String.format(Locale.getDefault(), "阅读 %d", views));
}
+ NewsUtils.setNewsType(viewHolder.type, newsEntity.getType(), newsEntity.getPriority(), position);
+ }
- int commentnum = concernEntity.getCommentnum();
- if (commentnum == 0) {
- viewHolder.commentnum.setVisibility(View.GONE);
- } else {
- viewHolder.commentnum.setVisibility(View.VISIBLE);
- if (commentnum > 999) {
- viewHolder.commentnum.setText(R.string.thousand);
- } else {
- viewHolder.commentnum.setText(String.valueOf(commentnum));
- }
- }
+ private void initNewsImage2ViewHolder(final NewsImage2ViewHolder viewHolder, int position) {
- if (concernEntity.getLink() != null) {
- viewHolder.link.setImageResource(R.drawable.ic_link);
- } else {
- viewHolder.link.setImageResource(R.drawable.concern_message_icon);
- }
+ final NewsEntity newsEntity = newsList.get(position);
- viewHolder.comment.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- skipPosition = viewHolder.getPosition();
- concernEntity.setItemHeight(viewHolder.itemView.getHeight());
- AppController.put("ConcernEntity", concernEntity);
- Intent intent = new Intent(context, MessageDetailActivity.class);
- intent.putExtra("entrance", "(资讯-关注)");
- fragment.startActivityForResult(intent, 0x125);
- }
- });
+ DisplayMetrics outMetrics = new DisplayMetrics();
+ fragment.getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
+ int width = (outMetrics.widthPixels - DisplayUtils.dip2px(context, 56)) / 3;
+ int height = (int) (width * 3 / 4f);
- viewHolder.share.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- String shareContent;
- if (concernEntity.getBrief() != null) {
- shareContent = concernEntity.getBrief();
- } else {
- shareContent = concernEntity.getContent();
- }
- if (concernEntity.getImg() != null && concernEntity.getImg().size() > 0) {
- Intent intent = new Intent(context, ShareCardPicActivity.class);
- Bundle bundle = new Bundle();
- bundle.putString("gameName", concernEntity.getGameName());
- bundle.putString("gameIconUrl", concernEntity.getGameIcon());
- bundle.putString("shareContent", shareContent);
- if (concernEntity.getLink() == null){
- bundle.putString("newsId", concernEntity.getId());
- }
- bundle.putStringArrayList("shareArrImg", (ArrayList) concernEntity.getImg());
- intent.putExtras(bundle);
- intent.putExtra("entrance", "(资讯-关注)");
- context.startActivity(intent);
- } else {
- Intent intent = new Intent(context, ShareCardActivity.class);
- Bundle bundle = new Bundle();
- bundle.putString("gameName", concernEntity.getGameName());
- bundle.putString("gameIconUrl", concernEntity.getGameIcon());
- bundle.putString("shareContent", shareContent);
- if (concernEntity.getLink() == null){
- bundle.putString("newsId", concernEntity.getId());
- }
- intent.putExtras(bundle);
- intent.putExtra("entrance", "(资讯-关注)");
- context.startActivity(intent);
- }
- }
- });
+ LinearLayout.LayoutParams lparams1 = new LinearLayout.LayoutParams(width, height);
+ viewHolder.thumb1.setLayoutParams(lparams1);
+
+ LinearLayout.LayoutParams lparams2 = new LinearLayout.LayoutParams(width, height);
+ lparams2.leftMargin = DisplayUtils.dip2px(context, 8);
+ viewHolder.thumb2.setLayoutParams(lparams2);
+
+ LinearLayout.LayoutParams lparams3 = new LinearLayout.LayoutParams(width, height);
+ lparams3.leftMargin = DisplayUtils.dip2px(context, 8);
+ viewHolder.thumb3.setLayoutParams(lparams3);
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Map kv = new HashMap<>();
- kv.put("名字", concernEntity.getTitle());
+ kv.put("名字", newsEntity.getTitle());
kv.put("位置", String.valueOf(viewHolder.getPosition() + 1));
- DataUtils.onEvent(context, "点击", "资讯-关注", kv);
+ DataUtils.onEvent(context, "点击", "资讯-资讯", kv);
- DataCollectionUtils.uploadClick(context, "列表", "资讯-关注", concernEntity.getTitle());
+ DataCollectionUtils.uploadClick(context, "列表", "资讯-资讯", newsEntity.getTitle());
//统计阅读量
- statNewsViews(concernEntity, viewHolder.getPosition());
- AppController.put("ConcernEntity", concernEntity);
- skipPosition = viewHolder.getPosition();
- if (concernEntity.getLink() != null){
- Intent intent = new Intent(context, WebActivity.class);
- intent.putExtra("url", concernEntity.getLink());
- intent.putExtra("gameName", concernEntity.getGameName());
- intent.putExtra("newsId", concernEntity.getId());
- intent.putExtra("entrance", "(资讯-关注)");
- fragment.startActivityForResult(intent, 0x125);
- }else {
- Intent intent = new Intent(context, NewsDetailActivity.class);
- intent.putExtra("newsId", concernEntity.getId());
- intent.putExtra("entrance", "(资讯-关注)");
- fragment.startActivityForResult(intent, 0x125);
- }
-
+ statNewsViews(newsEntity, viewHolder.getPosition());
+ NewsUtils.startNewsDetailActivity(context, newsEntity, "(资讯-资讯)");
}
});
+ viewHolder.title.setText(newsEntity.getTitle());
+// viewHolder.thumb1.setImageURI(newsEntity.getThumbnail().getUrl().get(0));
+// viewHolder.thumb2.setImageURI(newsEntity.getThumbnail().getUrl().get(1));
+// viewHolder.thumb3.setImageURI(newsEntity.getThumbnail().getUrl().get(2));
+ ImageUtils.display(viewHolder.thumb1, newsEntity.getThumbnail().getUrl().get(0));
+ ImageUtils.display(viewHolder.thumb2, newsEntity.getThumbnail().getUrl().get(1));
+ ImageUtils.display(viewHolder.thumb3, newsEntity.getThumbnail().getUrl().get(2));
+ int views = newsEntity.getViews();
+ if (views == 0) {
+ viewHolder.read.setVisibility(View.GONE);
+ } else {
+ viewHolder.read.setVisibility(View.VISIBLE);
+ viewHolder.read.setText(String.format(Locale.getDefault(), "阅读 %d", views));
+ }
+ NewsUtils.setNewsType(viewHolder.type, newsEntity.getType(), newsEntity.getPriority(), position);
+ }
+
+ private void initNewsImage3ViewHolder(final NewsImage3ViewHolder viewHolder, int position) {
+
+ final NewsEntity newsEntity = newsList.get(position);
+
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Map kv = new HashMap<>();
+ kv.put("名字", newsEntity.getTitle());
+ kv.put("位置", String.valueOf(viewHolder.getPosition() + 1));
+ DataUtils.onEvent(context, "点击", "资讯-资讯", kv);
+
+ DataCollectionUtils.uploadClick(context, "列表", "资讯-资讯", newsEntity.getTitle());
+
+ //统计阅读量
+ statNewsViews(newsEntity, viewHolder.getPosition());
+ NewsUtils.startNewsDetailActivity(context, newsEntity, "(资讯-资讯)");
+ }
+ });
+ viewHolder.title.setText(newsEntity.getTitle());
+ ImageUtils.getInstance().display(viewHolder.thumb, newsEntity.getThumbnail().getUrl().get(0),
+ context.getResources().getDisplayMetrics().widthPixels - DisplayUtils.dip2px(context, 40));
+ int views = newsEntity.getViews();
+ if (views == 0) {
+ viewHolder.read.setVisibility(View.GONE);
+ } else {
+ viewHolder.read.setVisibility(View.VISIBLE);
+ viewHolder.read.setText(String.format(Locale.getDefault(), "阅读 %d", views));
+ }
+ NewsUtils.setNewsType(viewHolder.type, newsEntity.getType(), newsEntity.getPriority(), position);
}
private void initFooterViewHolder(FooterViewHolder viewHolder) {
if (isNetworkError) {
viewHolder.loading.setVisibility(View.GONE);
viewHolder.hint.setText("加载失败,点击重试");
+ viewHolder.itemView.setClickable(true);
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isNetworkError = false;
notifyItemChanged(getItemCount() - 1);
- loadDataByKey(concernList.size());
+ addList(newsList.size());
}
});
} else if (isOver) {
@@ -756,28 +369,51 @@ public class News1FragmentAdapter extends RecyclerView.Adapter concernGame;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
init(R.layout.fragment_news2);
- refreshLayout.setColorSchemeResources(R.color.theme);
- refreshLayout.setOnRefreshListener(this);
- recyclerView.setHasFixedSize(true);
- layoutManager = new LinearLayoutManager(getActivity());
- recyclerView.setLayoutManager(layoutManager);
- adapter = new News2FragmentAdapter(News2Fragment.this);
- recyclerView.setAdapter(adapter);
- recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
+ mStrategyAdapter = new News2FragmentAdapter(this, mNoData);
+ final LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
+ mStrategyRv.setLayoutManager(layoutManager);
+ mStrategyRv.setAdapter(mStrategyAdapter);
+
+ mStrategyRv.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
- if (newState == RecyclerView.SCROLL_STATE_IDLE
- && layoutManager.findLastVisibleItemPosition() + 1 == adapter.getItemCount()) {
- if (!adapter.isOver() && !adapter.isLoading() && !adapter.isNetworkError()) {
- adapter.addList(adapter.getNewsListSize());
- }
+ super.onScrollStateChanged(recyclerView, newState);
+ if(layoutManager.findLastVisibleItemPosition() + 1 == mStrategyAdapter.getItemCount()
+ && newState == RecyclerView.SCROLL_STATE_IDLE && mStrategyAdapter.isCanLoading()) {
+ mStrategyAdapter.addList(mStrategyAdapter.getItemCount()-1);
}
}
});
+
+ // 防抖处理
+ RxView.clicks(mSelectGameRl)
+ .throttleFirst(1, TimeUnit.SECONDS)
+ .subscribe(new Action1() {
+ @Override
+ public void call(Void aVoid) {
+ ConcernManager concernManager = new ConcernManager(getContext());
+ concernGame = concernManager.getConcernGame();
+
+ if (concernGame.size() >1 || (concernGame.size() == 1
+ && !concernGame.get(0).getId().equals("5618b86e8ab49e17088b4575"))) {
+ OnSelectGameClickListener();
+ } else {
+ Intent intent = new Intent(getContext(), ConcernActivity.class);
+ intent.putExtra("entrance", "资讯(攻略-我关注的游戏)");
+ getContext().startActivity(intent);
+ }
+ }
+ });
+ }
+
+ public void OnSelectGameClickListener() {
+ isShowPopupBg(true);
+
+ View contentView = View.inflate(getContext(), R.layout.dialog_strategy_select_game, null);
+ RecyclerView selectGameRv = (RecyclerView) contentView.findViewById(R.id.dialog_strategy_select_game_rv);
+ RelativeLayout allGameRl = (RelativeLayout) contentView.findViewById(R.id.dialog_strategy_select_game_rl);
+
+ if (concernGame.size() > 7) {
+ ViewGroup.LayoutParams params = selectGameRv.getLayoutParams();
+ params.height = DisplayUtils.dip2px(getContext(), 43 * 6);
+ selectGameRv.setLayoutParams(params);
+ }
+
+ int widthPixels = getContext().getResources().getDisplayMetrics().widthPixels;
+ allGameRl.setLayoutParams(new LinearLayout.LayoutParams((widthPixels * 9)/10,
+ DisplayUtils.dip2px(getContext(), 50)));
+
+ allGameRl.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ isShowPopupBg(false);
+ Intent intent = new Intent(getContext(), ConcernActivity.class);
+ intent.putExtra("entrance", "资讯(攻略-我关注的游戏)");
+ getContext().startActivity(intent);
+ }
+ });
+
+ selectGameRv.setLayoutManager(new MeasureHeightLayoutManager(getContext()));
+ selectGameRv.setAdapter(new News2FragmentDialogAdapter(News2Fragment.this));
+
+
+ dialog = new Dialog(getContext());
+
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ dialog.setContentView(contentView);
+ dialog.show();
+
+
+ contentView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ isShowPopupBg(false);
+ }
+ });
}
- @OnClick(R.id.reuse_no_connection)
- public void reconnection() { // 重新连接
- refreshLayout.setRefreshing(true);
- recyclerView.setVisibility(View.VISIBLE);
- loadingLayout.setVisibility(View.VISIBLE);
- noConnectionLayout.setVisibility(View.GONE);
- handler.postDelayed(runnable, 1000);
- }
-
- @Override
- public void loadDone() { // 数据加载成功回调
- refreshLayout.setRefreshing(false);
- loadingLayout.setVisibility(View.GONE);
- }
-
- @Override
- public void loadError() { // 数据加载失败回调
- refreshLayout.setRefreshing(false);
- loadingLayout.setVisibility(View.GONE);
- recyclerView.setVisibility(View.GONE);
- noConnectionLayout.setVisibility(View.VISIBLE);
- }
-
- // 连接上网络事件
- public void onEventMainThread(EBNetworkState busNetworkState) {
- if (busNetworkState.isNetworkConnected()) {
- if (noConnectionLayout.getVisibility() == View.VISIBLE) {
- reconnection();
- } else if (adapter.isNetworkError()) {
- adapter.setNetworkError(false);
- adapter.notifyItemChanged(adapter.getItemCount() - 1);
- adapter.addList(adapter.getNewsListSize());
- }
- }
- }
-
- // 资讯Fragment界面切换事件
- public void onEventMainThread(EBUISwitch busNine) {
- if ("NewsFragment".equals(busNine.getFrom())) {
- if (busNine.getPosition() == 1) {
- if (loadingLayout.getVisibility() == View.VISIBLE) {
- adapter.addList(0);
- }
+ public void isShowPopupBg(boolean isShow) {
+ if(!isShow) {
+ if (dialog != null) {
+ dialog.cancel();
}
}
}
@Override
- public void onRefresh() { // 刷新
- handler.postDelayed(runnable, 1000);
+ public void selectPosition(int position, ConcernInfo concernInfo) {
+ isShowPopupBg(false);
+ Intent intent = new Intent(getContext(), GameNewsActivity.class);
+ intent.putExtra("gameName", concernInfo.getGameName());
+ intent.putExtra("gameId", concernInfo.getId());
+ getContext().startActivity(intent);
}
+ // 关注事件
+ public void onEventMainThread(EBConcernChanged changed) {
+
+ }
}
diff --git a/app/src/main/java/com/gh/gamecenter/news/News2FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/news/News2FragmentAdapter.java
index fc8775ec5e..83a04c2bdf 100644
--- a/app/src/main/java/com/gh/gamecenter/news/News2FragmentAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/news/News2FragmentAdapter.java
@@ -2,100 +2,82 @@ package com.gh.gamecenter.news;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
-import android.util.DisplayMetrics;
+import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
-import android.widget.Toast;
-import com.gh.common.constant.ItemViewType;
-import com.gh.common.util.DataCollectionUtils;
import com.gh.common.util.DataUtils;
-import com.gh.common.util.DisplayUtils;
-import com.gh.common.util.ImageUtils;
import com.gh.common.util.NewsUtils;
-import com.gh.common.view.CardLinearLayout;
import com.gh.gamecenter.R;
-import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
-import com.gh.gamecenter.adapter.viewholder.NewsImage1ViewHolder;
-import com.gh.gamecenter.adapter.viewholder.NewsImage2ViewHolder;
-import com.gh.gamecenter.adapter.viewholder.NewsImage3ViewHolder;
+import com.gh.gamecenter.adapter.viewholder.NewsFooterViewHolder;
+import com.gh.gamecenter.adapter.viewholder.NewsTextViewHolder;
import com.gh.gamecenter.entity.NewsEntity;
-import com.gh.gamecenter.entity.ViewsEntity;
-import com.gh.gamecenter.listener.OnCallBackListener;
-import com.gh.gamecenter.manager.VisitManager;
-import com.gh.gamecenter.retrofit.JSONObjectResponse;
-import com.gh.gamecenter.retrofit.ObservableUtil;
+import com.gh.gamecenter.manager.DataCollectionManager;
import com.gh.gamecenter.retrofit.Response;
import com.gh.gamecenter.retrofit.RetrofitManager;
-import org.json.JSONException;
-import org.json.JSONObject;
-
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import retrofit2.adapter.rxjava.HttpException;
-import rx.Observable;
-import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
-import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
/**
- * Created by khy on 2016/6/30.
- * 资讯-资讯-数据适配器
+ * Created by khy on 2017/4/7.
+ * 资讯-攻略适配器
*/
-public class News2FragmentAdapter extends RecyclerView.Adapter{
+public class News2FragmentAdapter extends RecyclerView.Adapter {
+ private Context mContext;
- private News2Fragment fragment;
- private Context context;
- private OnCallBackListener listener;
+ private News2Fragment news2Fragment;
- private List newsList;
+ private LinearLayout mNoData;
- private int itemCount;
+ private List mNewsList;
- private int cardMargin;
+ private String entrance;
+ private boolean isRemove;
private boolean isLoading;
- private boolean isOver;
private boolean isNetworkError;
- public News2FragmentAdapter(News2Fragment fragment) {
- this.fragment = fragment;
- this.context = fragment.getActivity();
- this.listener = fragment;
+ public News2FragmentAdapter(News2Fragment news2Fragment, LinearLayout noData) {
+ this.news2Fragment = news2Fragment;
+ this.mContext = news2Fragment.getContext();
+ this.mNoData = noData;
- newsList = new ArrayList<>();
+ entrance = "";
- itemCount = 0;
+ mNewsList = new ArrayList<>();
isLoading = false;
- isOver = false;
+ isRemove = false;
isNetworkError = false;
- cardMargin = (int)context.getResources().getDimension(R.dimen.cardview_margin);
+ addList(0);
}
- // 加载数据
public void addList(final int offset) {
- if (isLoading) {
- return;
- }
isLoading = true;
- RetrofitManager.getApi()
- .getZiXun(offset)
+ if (offset == 0) {
+ mNewsList.clear();
+ notifyDataSetChanged();
+ }
+
+ RetrofitManager
+ .getApi()
+ .getNews("攻略", 20, offset)
.map(new Func1, List>() {
@Override
- public List call(List list) {
- // 去掉重复数据
- return NewsUtils.removeDuplicateData(newsList, list);
+ public List call(List newsEntities) {
+ return NewsUtils.removeDuplicateData(mNewsList, newsEntities);
+
}
})
.subscribeOn(Schedulers.io())
@@ -103,379 +85,137 @@ public class News2FragmentAdapter extends RecyclerView.Adapter>(){
@Override
public void onResponse(List response) {
- isLoading = false;
-
if (response.size() != 0) {
- newsList.addAll(response);
- itemCount += response.size();
- if (!fragment.isHidden() && !fragment.isEverpause()) {
- notifyItemRangeInserted(newsList.size() - response.size(), response.size());
- } else {
+ mNewsList.addAll(response);
+ if (mNewsList.size() <= 20) {
notifyDataSetChanged();
+ } else {
+ notifyItemRangeInserted(mNewsList.size() - response.size(), response.size());
}
- } else {
- isOver = true;
+ notifyItemChanged(getItemCount() - response.size() - 2);
+ }
+
+ if (response.size() < 20) {
+ isRemove = true;
notifyItemChanged(getItemCount() - 1);
}
- if (offset == 0 && listener != null) {
- listener.loadDone();
+ if (mNewsList.size() == 0) {
+ mNoData.setVisibility(View.VISIBLE);
+ notifyItemChanged(0);
+ } else {
+ mNoData.setVisibility(View.GONE);
}
-
- // 获取新闻阅读量
- getNewsViews(response, offset);
+ isLoading = false;
}
@Override
public void onFailure(HttpException e) {
+ isNetworkError = true;
isLoading = false;
- // 网络错误
- if (offset == 0) {
- if (listener != null) {
- listener.loadError();
- }
- } else {
- Toast.makeText(context, "加载失败,请检查网络状态", Toast.LENGTH_SHORT).show();
- isNetworkError = true;
- notifyItemChanged(getItemCount() - 1);
- }
+ notifyItemChanged(getItemCount() - 1);
}
});
}
- // 获取新闻阅读量
- private void getNewsViews(final List list, final int start) {
- if (list == null || list.isEmpty()) {
- return;
+ @Override
+ public int getItemViewType(int position) {
+ if (position == getItemCount() - 1) {
+ return 0;
+ } else {
+ return 1;
}
- ObservableUtil.computation(new Observable.OnSubscribe() {
- @Override
- public void call(Subscriber super String> subscriber) {
- StringBuilder builder = new StringBuilder();
- for (int i = 0, size = list.size(); i < size; i++) {
- builder.append(list.get(i).getId());
- builder.append("-");
- }
- builder.deleteCharAt(builder.length() - 1);
- String ids = builder.toString();
- VisitManager.getInstance().addUrl(ids);
- subscriber.onNext(ids);
- subscriber.onCompleted();
- }
- }, new Action1() {
- @Override
- public void call(String ids) {
- RetrofitManager.getData()
- .getNewsViews(ids)
- .map(new Func1, String>() {
- @Override
- public String call(List list) {
- for (ViewsEntity viewsEntity : list) {
- for (NewsEntity newsEntity : newsList) {
- if (viewsEntity.getId().equals(newsEntity.getId())) {
- newsEntity.setViews(viewsEntity.getViews());
- break;
- }
- }
- }
- return null;
- }
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Response() {
- @Override
- public void onResponse(String response) {
- notifyItemRangeChanged(start, list.size());
- }
- });
- }
- });
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- if (viewType == ItemViewType.NEWS_IMAGE1) {
- View view = LayoutInflater.from(parent.getContext()).inflate(
- R.layout.news_image1_item, parent, false);
- return new NewsImage1ViewHolder(view);
- } else if (viewType == ItemViewType.NEWS_IMAGE2) {
- View view = LayoutInflater.from(parent.getContext()).inflate(
- R.layout.news_image2_item, parent, false);
- return new NewsImage2ViewHolder(view);
- } else if (viewType == ItemViewType.NEWS_IMAGE3) {
- View view = LayoutInflater.from(parent.getContext()).inflate(
- R.layout.news_image3_item, parent, false);
- return new NewsImage3ViewHolder(view);
- } else if (viewType == ItemViewType.LOADING) {
- View view = LayoutInflater.from(parent.getContext()).inflate(
- R.layout.refresh_footerview, parent, false);
- return new FooterViewHolder(view);
+ if (viewType == 1) {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.news_text_item, parent, false);
+ return new NewsTextViewHolder(view);
+ } else {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.news_footer_item, parent, false);
+ return new NewsFooterViewHolder(view);
}
- return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
- if (holder instanceof NewsImage1ViewHolder) {
- initNewsImage1ViewHolder((NewsImage1ViewHolder) holder, position);
- } else if (holder instanceof NewsImage2ViewHolder) {
- initNewsImage2ViewHolder((NewsImage2ViewHolder) holder, position);
- } else if (holder instanceof NewsImage3ViewHolder) {
- initNewsImage3ViewHolder((NewsImage3ViewHolder) holder, position);
- } else if (holder instanceof FooterViewHolder) {
- initFooterViewHolder((FooterViewHolder) holder);
- }
- }
+ if (holder instanceof NewsTextViewHolder) {
+ final NewsTextViewHolder viewHolder = (NewsTextViewHolder) holder;
+ final NewsEntity newsEntity = mNewsList.get(position);
- private void initNewsImage1ViewHolder(final NewsImage1ViewHolder viewHolder, int position) {
-
- final NewsEntity newsEntity = newsList.get(position);
-
- // 第一个
- if (position == 0) {
- ((CardLinearLayout) viewHolder.itemView).setmTop(cardMargin);
- } else {
- ((CardLinearLayout) viewHolder.itemView).setmTop(0);
- }
-
- // 最后一个
- if (position + 1 == newsList.size()) {
- ((CardLinearLayout) viewHolder.itemView).setBottom(true);
- } else {
- ((CardLinearLayout) viewHolder.itemView).setBottom(false);
- }
-
- viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Map kv = new HashMap<>();
- kv.put("名字", newsEntity.getTitle());
- kv.put("位置", String.valueOf(viewHolder.getPosition() + 1));
- DataUtils.onEvent(context, "点击", "资讯-资讯", kv);
-
- DataCollectionUtils.uploadClick(context, "列表", "资讯-资讯", newsEntity.getTitle());
-
- //统计阅读量
- statNewsViews(newsEntity, viewHolder.getPosition());
- NewsUtils.startNewsDetailActivity(context, newsEntity, "(资讯-资讯)");
+ if (!TextUtils.isEmpty(newsEntity.getType())) {
+ if (position == 0 && newsEntity.getPriority() != 0) {
+ viewHolder.type.setText("置顶");
+ } else if (newsEntity.getPriority() != 0) {
+ viewHolder.type.setText("热门");
+ } else {
+ viewHolder.type.setText(newsEntity.getType());
+ }
+ viewHolder.type.setVisibility(View.VISIBLE);
+ } else {
+ viewHolder.type.setVisibility(View.GONE);
}
- });
-// viewHolder.thumb.setImageURI(newsEntity.getThumbnail().getUrl().get(0));
- ImageUtils.display(viewHolder.thumb, newsEntity.getThumbnail().getUrl().get(0));
- viewHolder.title.setText(newsEntity.getTitle());
- int views = newsEntity.getViews();
- if (views == 0) {
- viewHolder.read.setVisibility(View.GONE);
- } else {
- viewHolder.read.setVisibility(View.VISIBLE);
- viewHolder.read.setText(String.format(Locale.getDefault(), "阅读 %d", views));
- }
- NewsUtils.setNewsType(viewHolder.type, newsEntity.getType());
- }
- private void initNewsImage2ViewHolder(final NewsImage2ViewHolder viewHolder, int position) {
-
- final NewsEntity newsEntity = newsList.get(position);
-
- // 第一个
- if (position == 0) {
- ((CardLinearLayout) viewHolder.itemView).setmTop(cardMargin);
- } else {
- ((CardLinearLayout) viewHolder.itemView).setmTop(0);
- }
-
- // 最后一个
- if (position + 1 == newsList.size()) {
- ((CardLinearLayout) viewHolder.itemView).setBottom(true);
- } else {
- ((CardLinearLayout) viewHolder.itemView).setBottom(false);
- }
-
- DisplayMetrics outMetrics = new DisplayMetrics();
- fragment.getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
- int width = (outMetrics.widthPixels - DisplayUtils.dip2px(context, 56)) / 3;
- int height = (int) (width * 3 / 4f);
-
- LinearLayout.LayoutParams lparams1 = new LinearLayout.LayoutParams(width, height);
- viewHolder.thumb1.setLayoutParams(lparams1);
-
- LinearLayout.LayoutParams lparams2 = new LinearLayout.LayoutParams(width, height);
- lparams2.leftMargin = DisplayUtils.dip2px(context, 8);
- viewHolder.thumb2.setLayoutParams(lparams2);
-
- LinearLayout.LayoutParams lparams3 = new LinearLayout.LayoutParams(width, height);
- lparams3.leftMargin = DisplayUtils.dip2px(context, 8);
- viewHolder.thumb3.setLayoutParams(lparams3);
-
- viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Map kv = new HashMap<>();
- kv.put("名字", newsEntity.getTitle());
- kv.put("位置", String.valueOf(viewHolder.getPosition() + 1));
- DataUtils.onEvent(context, "点击", "资讯-资讯", kv);
-
- DataCollectionUtils.uploadClick(context, "列表", "资讯-资讯", newsEntity.getTitle());
-
- //统计阅读量
- statNewsViews(newsEntity, viewHolder.getPosition());
- NewsUtils.startNewsDetailActivity(context, newsEntity, "(资讯-资讯)");
- }
- });
- viewHolder.title.setText(newsEntity.getTitle());
-// viewHolder.thumb1.setImageURI(newsEntity.getThumbnail().getUrl().get(0));
-// viewHolder.thumb2.setImageURI(newsEntity.getThumbnail().getUrl().get(1));
-// viewHolder.thumb3.setImageURI(newsEntity.getThumbnail().getUrl().get(2));
- ImageUtils.display(viewHolder.thumb1, newsEntity.getThumbnail().getUrl().get(0));
- ImageUtils.display(viewHolder.thumb2, newsEntity.getThumbnail().getUrl().get(1));
- ImageUtils.display(viewHolder.thumb3, newsEntity.getThumbnail().getUrl().get(2));
- int views = newsEntity.getViews();
- if (views == 0) {
- viewHolder.read.setVisibility(View.GONE);
- } else {
- viewHolder.read.setVisibility(View.VISIBLE);
- viewHolder.read.setText(String.format(Locale.getDefault(), "阅读 %d", views));
- }
- NewsUtils.setNewsType(viewHolder.type, newsEntity.getType());
- }
-
- private void initNewsImage3ViewHolder(final NewsImage3ViewHolder viewHolder, int position) {
-
- final NewsEntity newsEntity = newsList.get(position);
-
- // 第一个
- if (position == 0) {
- ((CardLinearLayout) viewHolder.itemView).setmTop(cardMargin);
- } else {
- ((CardLinearLayout) viewHolder.itemView).setmTop(0);
- }
-
- // 最后一个
- if (position + 1 == newsList.size()) {
- ((CardLinearLayout) viewHolder.itemView).setBottom(true);
- } else {
- ((CardLinearLayout) viewHolder.itemView).setBottom(false);
- }
-
- viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Map kv = new HashMap<>();
- kv.put("名字", newsEntity.getTitle());
- kv.put("位置", String.valueOf(viewHolder.getPosition() + 1));
- DataUtils.onEvent(context, "点击", "资讯-资讯", kv);
-
- DataCollectionUtils.uploadClick(context, "列表", "资讯-资讯", newsEntity.getTitle());
-
- //统计阅读量
- statNewsViews(newsEntity, viewHolder.getPosition());
- NewsUtils.startNewsDetailActivity(context, newsEntity, "(资讯-资讯)");
- }
- });
- viewHolder.title.setText(newsEntity.getTitle());
- ImageUtils.getInstance().display(viewHolder.thumb, newsEntity.getThumbnail().getUrl().get(0),
- context.getResources().getDisplayMetrics().widthPixels - DisplayUtils.dip2px(context, 40));
- int views = newsEntity.getViews();
- if (views == 0) {
- viewHolder.read.setVisibility(View.GONE);
- } else {
- viewHolder.read.setVisibility(View.VISIBLE);
- viewHolder.read.setText(String.format(Locale.getDefault(), "阅读 %d", views));
- }
- NewsUtils.setNewsType(viewHolder.type, newsEntity.getType());
- }
-
- private void initFooterViewHolder(FooterViewHolder viewHolder) {
- if (isNetworkError) {
- viewHolder.loading.setVisibility(View.GONE);
- viewHolder.hint.setText("加载失败,点击重试");
- viewHolder.itemView.setClickable(true);
+ viewHolder.type.setBackgroundResource(NewsUtils.getDrawableIdByType(newsEntity.getType()));
+ viewHolder.type.setText(newsEntity.getType());
+ viewHolder.title.setText(newsEntity.getTitle());
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- isNetworkError = false;
- notifyItemChanged(getItemCount() - 1);
- addList(newsList.size());
+ Map kv = new HashMap<>();
+ kv.put("名字", newsEntity.getTitle());
+ kv.put("位置", String.valueOf(viewHolder.getPosition() + 1));
+ DataUtils.onEvent(mContext, "点击", "游戏新闻详情", kv);
+
+ Map map = new HashMap<>();
+ map.put("page", "游戏新闻详情");
+ map.put("news", newsEntity.getTitle());
+ map.put("news_id", newsEntity.getId());
+ DataCollectionManager.onEvent(mContext, "click-item", map);
+
+ // 统计阅读量
+ NewsUtils.statNewsViews(newsEntity.getId());
+ NewsUtils.startNewsDetailActivity(mContext, newsEntity, entrance + "+(攻略[" + newsEntity.getTitle() + "])");
}
});
- } else if (isOver) {
- viewHolder.loading.setVisibility(View.GONE);
- viewHolder.hint.setText("加载完毕");
- viewHolder.itemView.setClickable(false);
} else {
- viewHolder.loading.setVisibility(View.VISIBLE);
- viewHolder.hint.setText("加载中...");
- viewHolder.itemView.setClickable(false);
+ final NewsFooterViewHolder footerViewHolder = ((NewsFooterViewHolder) holder);
+ if (mNoData.getVisibility() == View.VISIBLE) {
+ footerViewHolder.itemView.setVisibility(View.GONE);
+ }else{
+ footerViewHolder.itemView.setVisibility(View.VISIBLE);
+ }
+ if (isRemove){
+ footerViewHolder.hint.setText("加载完毕");
+ footerViewHolder.loading.setVisibility(View.GONE);
+ }else if (isNetworkError){
+ footerViewHolder.hint.setText("网络错误,点击重试!");
+ footerViewHolder.loading.setVisibility(View.GONE);
+ } else {
+ footerViewHolder.hint.setText("加载中...");
+ footerViewHolder.loading.setVisibility(View.VISIBLE);
+ }
+ footerViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (isNetworkError) {
+ isNetworkError = false;
+ footerViewHolder.hint.setText("加载中...");
+ footerViewHolder.loading.setVisibility(View.VISIBLE);
+ addList(mNewsList.size());
+ }
+ }
+ });
}
}
@Override
public int getItemCount() {
- if (itemCount == 0) {
- return 0;
- }
- return itemCount + 1;
+ return mNewsList.size() + 1;
}
- @Override
- public int getItemViewType(int position) {
- if (position == newsList.size()) {
- return ItemViewType.LOADING;
- }
- NewsEntity newsEntity = newsList.get(position);
- if ("4x3".equals(newsEntity.getThumbnail().getType()) && newsEntity.getThumbnail().getUrl().size() == 3){
- return ItemViewType.NEWS_IMAGE2;
- }
- if ("3x1".equals(newsEntity.getThumbnail().getType())) {
- return ItemViewType.NEWS_IMAGE3;
- }
- return ItemViewType.NEWS_IMAGE1;
- }
-
- // 统计新闻阅读量
- private void statNewsViews(final NewsEntity newsEntity, final int position) {
- RetrofitManager.getData().postNewsViews(newsEntity.getId())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new JSONObjectResponse(){
- @Override
- public void onResponse(JSONObject response) {
- if (response.length() != 0) {
- try {
- if ("success".equals(response.getString("status"))) {
- newsEntity.setViews(newsEntity.getViews() + 1);
-
- notifyItemChanged(position);
-
- // 更新okhttp缓存数据
- VisitManager.updateOkhttpCache(newsEntity.getId());
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- }
- });
- }
-
- public boolean isOver() {
- return isOver;
- }
-
- public boolean isLoading() {
- return isLoading;
- }
-
- public boolean isNetworkError() {
- return isNetworkError;
- }
-
- public void setNetworkError(boolean networkError) {
- isNetworkError = networkError;
- }
-
- public int getNewsListSize() {
- return newsList.size();
+ public boolean isCanLoading() {
+ return (!isNetworkError && !isLoading && !isRemove);
}
}
diff --git a/app/src/main/java/com/gh/gamecenter/news/News2FragmentDialogAdapter.java b/app/src/main/java/com/gh/gamecenter/news/News2FragmentDialogAdapter.java
new file mode 100644
index 0000000000..c8f2a933b6
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/news/News2FragmentDialogAdapter.java
@@ -0,0 +1,87 @@
+package com.gh.gamecenter.news;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import com.gh.common.util.DisplayUtils;
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.adapter.viewholder.StrategyDialogViewHolder;
+import com.gh.gamecenter.db.info.ConcernInfo;
+import com.gh.gamecenter.manager.ConcernManager;
+
+import java.util.List;
+
+/**
+ * Created by khy on 2016/12/5.
+ * 资讯-攻略关注的游戏弹窗适配器
+ */
+public class News2FragmentDialogAdapter extends RecyclerView.Adapter {
+
+ private Context mContext;
+
+ private OnStrategyDialogCallBackListener callBackListener;
+
+ private List mConcernGame;
+
+ public News2FragmentDialogAdapter(News2Fragment fragment) {
+ this.mContext = fragment.getContext();
+ this.callBackListener = fragment;
+
+ ConcernManager concernManager = new ConcernManager(fragment.getContext());
+ List concernGame = concernManager.getConcernGame();
+ for (int i = 0; i < concernGame.size(); i++) {
+ if ("5618b86e8ab49e17088b4575".equals(concernGame.get(i).getId())) {
+ concernGame.remove(i);
+ }
+ }
+ mConcernGame = concernGame;
+ }
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(mContext).inflate(R.layout.dialog_strategy_item, parent, false);
+ return new StrategyDialogViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
+ if (holder instanceof StrategyDialogViewHolder) {
+ StrategyDialogViewHolder viewHolder = ((StrategyDialogViewHolder) holder);
+ viewHolder.gameName.setText(mConcernGame.get(position).getGameName());
+ viewHolder.selectIcon.setVisibility(View.GONE);
+
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+ if (getItemCount() == 1) {
+ params.setMargins(0, DisplayUtils.dip2px(mContext, 12), 0, DisplayUtils.dip2px(mContext, 12));
+ } else if (position == 0) {
+ params.setMargins(0, DisplayUtils.dip2px(mContext, 12), 0, 0);
+ } else if (position == getItemCount() - 1){
+ params.setMargins(0, 0, 0, DisplayUtils.dip2px(mContext, 12));
+ } else {
+ params.setMargins(0, 0, 0, 0);
+ }
+ viewHolder.itemView.setLayoutParams(params);
+
+ viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ callBackListener.selectPosition(position, mConcernGame.get(position));
+ }
+ });
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return mConcernGame.size();
+ }
+
+ public interface OnStrategyDialogCallBackListener{
+ void selectPosition(int position, ConcernInfo concernInfo);
+ }
+}
diff --git a/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java
index 8ad96f0202..e68f93b8c3 100644
--- a/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java
+++ b/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java
@@ -10,6 +10,7 @@ import android.widget.LinearLayout;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
import com.gh.base.BaseFragment;
+import com.gh.common.view.VerticalItemDecoration;
import com.gh.gamecenter.R;
import com.gh.gamecenter.eventbus.EBNetworkState;
import com.gh.gamecenter.eventbus.EBUISwitch;
@@ -53,6 +54,7 @@ public class News3Fragment extends BaseFragment implements SwipeRefreshLayout.On
layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
adapter = new News3FragmentAdapter(News3Fragment.this);
+ recyclerView.addItemDecoration(new VerticalItemDecoration(getContext(), 8, true));
recyclerView.setAdapter(adapter);
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
diff --git a/app/src/main/java/com/gh/gamecenter/news/News3FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/news/News3FragmentAdapter.java
index 1ffba5ea2b..997ad918c8 100644
--- a/app/src/main/java/com/gh/gamecenter/news/News3FragmentAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/news/News3FragmentAdapter.java
@@ -15,7 +15,6 @@ import com.gh.common.util.DataUtils;
import com.gh.common.util.DisplayUtils;
import com.gh.common.util.ImageUtils;
import com.gh.common.util.NewsUtils;
-import com.gh.common.view.CardLinearLayout;
import com.gh.gamecenter.R;
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
import com.gh.gamecenter.adapter.viewholder.NewsImage1ViewHolder;
@@ -230,20 +229,6 @@ public class News3FragmentAdapter extends RecyclerView.Adapter recommendGameList; // 推荐关注的游戏
+ private List installGameList; // 安装的游戏
+
+ private Map concernMap; // 记录选择关注
+
+ private ConcernManager concernManager;
+
+ private boolean isInitConcernOcer;
+ private boolean isInitInstallOver;
+
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ adapter = new News4FragmentAdapter(News4Fragment.this);
+ recyclerView.setAdapter(adapter);
+ adapter.addList(0);
+ }
+ };
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ init(R.layout.fragment_news4);
+
+ recommendGameList = new ArrayList<>();
+ installGameList = new ArrayList<>();
+ concernManager = new ConcernManager(getActivity());
+ concernMap = new ArrayMap<>();
+
+ refreshLayout.setColorSchemeResources(R.color.theme);
+ refreshLayout.setOnRefreshListener(this);
+
+ recyclerView.setHasFixedSize(true);
+ layoutManager = new LinearLayoutManager(getActivity());
+ recyclerView.setLayoutManager(layoutManager);
+ recyclerView.addItemDecoration(new VerticalItemDecoration(getContext(), 8, true));
+ adapter = new News4FragmentAdapter(News4Fragment.this);
+ recyclerView.setAdapter(adapter);
+ recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ if (newState == RecyclerView.SCROLL_STATE_IDLE
+ && layoutManager.findLastVisibleItemPosition() + 1 == adapter.getItemCount()) {
+ if (!adapter.isOver() && !adapter.isLoading() && !adapter.isNetworkError()) {
+ adapter.addList(adapter.getConcernListSize());
+ }
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == 0x125 && adapter.getSkipPosition() != -1) {
+ // 更新对应位置
+ adapter.notifyItemChanged(adapter.getSkipPosition());
+ adapter.setSkipPosition(-1);
+ } else if (requestCode == 0x122 && adapter.getSkipPosition() != -1) {
+ adapter.initLibaoDao();
+ adapter.notifyItemChanged(adapter.getSkipPosition());
+ adapter.setSkipPosition(-1);
+ }
+ }
+
+ @OnClick(R.id.news1_tv_concern)
+ public void concern() { // 关注 推荐关注的游戏
+ ArrayList list = new ArrayList<>();
+ for (int key : concernMap.keySet()) {
+ if (concernMap.get(key)) {
+ list.add(recommendGameList.get(key));
+ }
+ }
+ if (list.size() != 0) {
+ if (list.size() == 1) {
+ concernManager.addByEntity(list.get(0));
+ } else {
+ concernManager.addByList(list);
+ }
+ }
+ }
+
+ @OnClick(R.id.reuse_no_connection)
+ public void reconnection() { // 重新连接
+ refreshLayout.setRefreshing(true);
+ recyclerView.setVisibility(View.VISIBLE);
+ loadingLayout.setVisibility(View.VISIBLE);
+ noConnectionLayout.setVisibility(View.GONE);
+ handler.postDelayed(runnable, 1000);
+ }
+
+ @Override
+ public void loadDone() { // 数据加载成功回调
+ refreshLayout.setRefreshing(false);
+ emptyLayout.setVisibility(View.GONE);
+ concernLayout.setVisibility(View.GONE);
+ loadingLayout.setVisibility(View.GONE);
+ recyclerView.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void loadError() { // 数据加载失败回调
+ refreshLayout.setRefreshing(false);
+ loadingLayout.setVisibility(View.GONE);
+ recyclerView.setVisibility(View.GONE);
+ noConnectionLayout.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void loadEmpty() { // 数据为空回调
+ refreshLayout.setRefreshing(false);
+ loadingLayout.setVisibility(View.GONE);
+ recyclerView.setVisibility(View.GONE);
+ emptyLayout.setVisibility(View.VISIBLE);
+ refreshLayout.setEnabled(false);
+
+ initInstallGame();
+ }
+
+ // 连接上网络事件
+ public void onEventMainThread(EBNetworkState busNetworkState) {
+ if (busNetworkState.isNetworkConnected()) {
+ if (noConnectionLayout.getVisibility() == View.VISIBLE) {
+ reconnection();
+ } else if (adapter.isNetworkError()) {
+ adapter.setNetworkError(false);
+ adapter.notifyItemChanged(adapter.getItemCount() - 1);
+ adapter.addList(adapter.getConcernListSize());
+ }
+ }
+ }
+
+ // Fragment界面切换事件
+ public void onEventMainThread(EBUISwitch swith) {
+ if ("NewsFragment".equals(swith.getFrom())) {
+ if (swith.getPosition() == 3) {
+ if (loadingLayout.getVisibility() == View.VISIBLE) {
+ adapter.addList(0);
+ }
+ } else if (swith.getPosition() == -2 || swith.getPosition() == -1) {
+ if (swith.getPosition() == -1) {
+ isInitInstallOver = true;
+ } else if (swith.getPosition() == -2) {
+ isInitConcernOcer = true;
+ }
+
+ if (isInitConcernOcer && isInitInstallOver) { // 没有关注且初始化安装完成,显示推荐小版块
+ refreshLayout.setRefreshing(false);
+ loadingLayout.setVisibility(View.GONE);
+ recyclerView.setVisibility(View.GONE);
+ emptyLayout.setVisibility(View.VISIBLE);
+ refreshLayout.setEnabled(false);
+ initInstallGame();
+ }
+ }
+ }
+ }
+
+ // 关注事件
+ public void onEventMainThread(EBConcernChanged changed) {
+ emptyLayout.setVisibility(View.GONE);
+ refreshLayout.setEnabled(true);
+ refreshLayout.setRefreshing(true);
+ recyclerView.setVisibility(View.VISIBLE);
+ loadingLayout.setVisibility(View.VISIBLE);
+ adapter = new News4FragmentAdapter(News4Fragment.this);
+ recyclerView.setAdapter(adapter);
+ adapter.addList(0);
+ }
+
+ @Override
+ public void onRefresh() {
+ handler.postDelayed(runnable, 1000);
+ }
+
+ // 推荐关注改为手机安装的游戏+光环助手
+ private void initInstallGame() {
+ recommendGameList.clear();//清除上一次记录
+ concern.setEnabled(true);//防止上一次关注按钮不可以,导致重新刷新后也不可用
+
+ ObservableUtil.computation(new Observable.OnSubscribe>() {
+ @Override
+ public void call(Subscriber super List> subscriber) {
+ List installedList = concernManager.getInstalledGame();
+ // 获取第一次安装时间
+ HashMap packageNames;
+ for (ConcernInfo concernInfo : installedList) {
+ long time = 0;
+ packageNames = concernInfo.getPackageNames();
+ for (String packageName : packageNames.keySet()) {
+ long installedTime = PackageUtils.getInstalledTime(getActivity(), packageName);
+ if (installedTime > time) { // 多版本获取最近安装版本时间
+ time = installedTime;
+ }
+ }
+ concernInfo.setTime(time);
+ }
+
+ // 对已安装的游戏排序
+ Collections.sort(installedList, new Comparator() {
+ @Override
+ public int compare(ConcernInfo lhs, ConcernInfo rhs) {
+ return lhs.getTime() < rhs.getTime() ? -1 : (lhs.getTime() == rhs.getTime() ? 0 : 1);
+ }
+ });
+
+ subscriber.onNext(installedList);
+ subscriber.onCompleted();
+ }
+ }, new Action1>() {
+ @Override
+ public void call(final List installedList) {
+ final List gameList = new ArrayList<>();
+
+ List> sequences = new ArrayList<>();
+ for (int i = 0, size = installedList.size() + 1; i < size; i++) {
+ if (i == size - 1) {
+ sequences.add(RetrofitManager.getApi().getGameDigest("5618b86e8ab49e17088b4575"));// 光环助手ID
+ } else {
+ sequences.add(RetrofitManager.getApi().getGameDigest(installedList.get(i).getId()));
+ }
+ }
+ Observable.merge(sequences)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Response() {
+ @Override
+ public void onNext(GameEntity response) {
+ if (response.getId().equals("5618b86e8ab49e17088b4575")) {
+ recommendGameList.add(response);
+ } else {
+ gameList.add(response);
+ }
+ }
+
+ @Override
+ public void onCompleted() {
+ initRecommendConcern(installedList, gameList);
+ }
+ });
+ }
+ });
+ }
+
+ private void initRecommendConcern(List list, List gameList) {
+ for (ConcernInfo info : list) {
+ for (int i = 0; i < gameList.size(); i++) {
+ if (info.getId().equals(gameList.get(i).getId())) {
+ installGameList.add(gameList.get(i));
+ break;
+ }
+ }
+ }
+
+ RetrofitManager.getApi()
+ .getRemenkapai()
+ .map(new Func1, String>() {
+ @Override
+ public String call(List list) {
+ // 根据热门卡牌顺序进行排序
+ for (int i = 0; i < installGameList.size(); i++) {
+ if (recommendGameList.size() >= 4) {
+ break;
+ }
+ for (int j = 0; j < list.size(); j++) {
+ if (list.get(j).getId().equals(installGameList.get(i).getId())) {
+ recommendGameList.add(installGameList.get(i));
+ installGameList.remove(i);
+ i--;
+ break;
+ }
+ }
+ }
+
+ // 推荐关注列表不足4个时,剩下的从已安装列表选取
+ if (recommendGameList.size() < 4) {
+ for (GameEntity gameEntity : installGameList) {
+ if (recommendGameList.size() < 4
+ && !concernManager.isConcern(gameEntity.getId())) {
+ recommendGameList.add(gameEntity);
+ }
+ }
+ }
+
+ return null;
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Response(){
+ @Override
+ public void onResponse(String response) {
+ initRecommendConcernView();
+ }
+ });
+ }
+
+ private void initRecommendConcernView() {
+ if (recommendGameList.isEmpty()) {
+ return;
+ }
+ concernLayout.setVisibility(View.VISIBLE);
+ concernListLayout.removeAllViews();
+
+ SimpleDraweeView icon;
+ TextView name;
+ ImageView concern;
+
+ GameEntity gameEntity;
+ for (int i = 0, size = recommendGameList.size(); i < size; i++) {
+ concernMap.put(i, true);
+
+ gameEntity = recommendGameList.get(i);
+
+ View view = View.inflate(getActivity(), R.layout.concern_item, null);
+
+ icon = (SimpleDraweeView) view.findViewById(R.id.concern_item_icon);
+ name = (TextView) view.findViewById(R.id.concern_item_name);
+ concern = (ImageView) view.findViewById(R.id.concern_item_concern_iv);
+ view.findViewById(R.id.concern_item_concern).setVisibility(View.GONE);
+
+ concern.setVisibility(View.VISIBLE);
+// icon.setImageURI(gameEntity.getIcon());
+ ImageUtils.display(icon, gameEntity.getIcon());
+ name.setText(gameEntity.getName());
+ concern.setImageResource(R.drawable.concern_select_true);
+
+ final int finalI = i;
+ concern.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (concernMap.get(finalI)){
+ ((ImageView) v).setImageResource(R.drawable.concern_select_false);
+ concernMap.put(finalI, false);
+ } else {
+ ((ImageView) v).setImageResource(R.drawable.concern_select_true);
+ concernMap.put(finalI, true);
+ }
+
+ // 判断关注按钮是否可用
+ isConcernAvailable();
+ }
+ });
+
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
+ 0, ViewGroup.LayoutParams.MATCH_PARENT);
+ params.weight = 1;
+ concernListLayout.addView(view, params);
+ }
+
+ concernListLayout.setVisibility(View.VISIBLE);
+ }
+
+ // 判断关注按钮是否可用
+ private void isConcernAvailable() {
+ boolean isEnabled = false;
+ for (int key : concernMap.keySet()) {
+ if (concernMap.get(key)){
+ isEnabled = true;
+ break;
+ }
+ }
+ if (isEnabled) {
+ concern.setTextColor(getResources().getColor(R.color.theme));
+ concern.setEnabled(true);
+ } else {
+ concern.setTextColor(getResources().getColor(R.color.btn_pause));
+ concern.setEnabled(false);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/gh/gamecenter/news/News4FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/news/News4FragmentAdapter.java
new file mode 100644
index 0000000000..d0ddba2b9a
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/news/News4FragmentAdapter.java
@@ -0,0 +1,782 @@
+package com.gh.gamecenter.news;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.widget.RecyclerView;
+import android.text.Html;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Toast;
+
+import com.gh.base.AppController;
+import com.gh.common.constant.ItemViewType;
+import com.gh.common.util.ConcernContentUtils;
+import com.gh.common.util.ConcernUtils;
+import com.gh.common.util.DataCollectionUtils;
+import com.gh.common.util.DataUtils;
+import com.gh.common.util.DisplayUtils;
+import com.gh.common.util.ImageUtils;
+import com.gh.common.util.LibaoUtils;
+import com.gh.common.util.MD5Utils;
+import com.gh.common.util.NewsUtils;
+import com.gh.common.util.PlatformUtils;
+import com.gh.gamecenter.LibaoDetailActivity;
+import com.gh.gamecenter.MessageDetailActivity;
+import com.gh.gamecenter.NewsDetailActivity;
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.ShareCardActivity;
+import com.gh.gamecenter.ShareCardPicActivity;
+import com.gh.gamecenter.WebActivity;
+import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
+import com.gh.gamecenter.adapter.viewholder.NewsDigestViewHolder;
+import com.gh.gamecenter.db.LibaoDao;
+import com.gh.gamecenter.db.info.ConcernInfo;
+import com.gh.gamecenter.db.info.LibaoInfo;
+import com.gh.gamecenter.entity.CommentnumEntity;
+import com.gh.gamecenter.entity.ConcernEntity;
+import com.gh.gamecenter.entity.LibaoEntity;
+import com.gh.gamecenter.entity.LibaoStatusEntity;
+import com.gh.gamecenter.entity.ViewsEntity;
+import com.gh.gamecenter.listener.OnCallBackListener;
+import com.gh.gamecenter.manager.CommentManager;
+import com.gh.gamecenter.manager.ConcernManager;
+import com.gh.gamecenter.manager.VisitManager;
+import com.gh.gamecenter.retrofit.JSONObjectResponse;
+import com.gh.gamecenter.retrofit.ObservableUtil;
+import com.gh.gamecenter.retrofit.Response;
+import com.gh.gamecenter.retrofit.RetrofitManager;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import retrofit2.adapter.rxjava.HttpException;
+import rx.Observable;
+import rx.Subscriber;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.functions.Action1;
+import rx.functions.Func1;
+import rx.schedulers.Schedulers;
+
+/**
+ * Created by khy on 2016/8/15.
+ * 资讯-关注-数据适配器
+ */
+public class News4FragmentAdapter extends RecyclerView.Adapter {
+
+ private News4Fragment fragment;
+ private Context context;
+
+ private OnCallBackListener listener;
+
+ private List concernList;
+ private List gameIdList;
+ private List libaoStatusList;
+
+ private List libaoInfo;
+ private LibaoDao libaoDao;
+
+ private String key;
+ private String ids;
+
+ private int itemCount;
+ private int skipPosition;
+
+ private int cardMargin;
+
+ private boolean isLoading;
+ private boolean isOver;
+ private boolean isNetworkError;
+
+ public News4FragmentAdapter(News4Fragment fragment) {
+ this.fragment = fragment;
+ this.context = fragment.getActivity();
+ this.listener = fragment;
+
+ concernList = new ArrayList<>();
+ gameIdList = new ArrayList<>();
+ libaoStatusList = new ArrayList<>();
+
+ itemCount = 0;
+ skipPosition = -1;
+
+ isNetworkError = false;
+ isOver = false;
+ isLoading = false;
+
+ libaoDao = new LibaoDao(context);
+ libaoInfo = libaoDao.getAll();
+
+ cardMargin = (int) context.getResources().getDimension(R.dimen.cardview_margin);
+ }
+
+ // 加载数据
+ public void addList(final int offset) {
+ if (isLoading) {
+ return;
+ }
+ isLoading = true;
+ if (TextUtils.isEmpty(key) || TextUtils.isEmpty(ids)) {
+ ObservableUtil.computation(new Observable.OnSubscribe() {
+ @Override
+ public void call(Subscriber super String> subscriber) {
+ ConcernManager concernManager = new ConcernManager(context);
+ List concernList = concernManager.getConcernGame();
+ if (concernList == null || concernList.isEmpty()) {
+ subscriber.onNext(null);
+ } else {
+ for (ConcernInfo concernInfo : concernList) {
+ gameIdList.add(concernInfo.getId());
+ }
+
+ // 对数据进行排序
+ Collections.sort(gameIdList, new Comparator() {
+ @Override
+ public int compare(String lhs, String rhs) {
+ return lhs.compareTo(rhs);
+ }
+ });
+
+ StringBuilder keyBuilder = new StringBuilder();
+ StringBuilder idsBuilder = new StringBuilder();
+ for (int i = 0; i < gameIdList.size(); i++) {
+ keyBuilder.append(gameIdList.get(i));
+ if (i < 5) {
+ idsBuilder.append(gameIdList.get(i));
+ idsBuilder.append("-");
+ }
+ }
+ key = MD5Utils.getContentMD5(keyBuilder.toString());
+ ids = idsBuilder.substring(0, idsBuilder.length() - 1);
+ subscriber.onNext("");
+ }
+ subscriber.onCompleted();
+ }
+ }, new Action1() {
+ @Override
+ public void call(String s) {
+ if (s == null) {
+ listener.loadEmpty();
+ } else {
+ loadDataByKey(offset);
+ }
+ }
+ });
+ } else {
+ loadDataByKey(offset);
+ }
+ }
+
+ private void loadDataByKey(final int offset) {
+ RetrofitManager.getApi()
+ .getGuanZhuByKey(key, offset)
+ .map(new Func1, List>() {
+ @Override
+ public List call(List list) {
+ // 去除重复数据
+ return removeDuplicateData(concernList, list);
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Response>() {
+ @Override
+ public void onResponse(List response) {
+ isLoading = false;
+
+ if (response.size() != 0) {
+ concernList.addAll(response);
+ itemCount += response.size();
+ if (!fragment.isHidden() && !fragment.isEverpause()) {
+ notifyItemRangeInserted(concernList.size() - response.size(), response.size());
+ } else {
+ notifyDataSetChanged();
+ }
+
+ getLibaoStatus(response);
+ getNewsViews(response, offset);
+ getNewsCommentnum(response, offset);
+
+ } else {
+ isOver = true;
+ notifyItemChanged(getItemCount() - 1);
+ }
+
+ if (offset == 0 && listener != null) {
+ if (concernList.isEmpty()) {
+ listener.loadEmpty();
+ } else {
+ listener.loadDone();
+ }
+ }
+ }
+
+ @Override
+ public void onFailure(HttpException e) {
+ if (e != null && e.code() == 409) {
+ loadDataByGameId(offset);
+ ConcernUtils.updateConcernData(context, new JSONArray(gameIdList));
+ return;
+ }
+
+ isLoading = false;
+
+ // 网络错误
+ if (offset == 0) {
+ if (listener != null) {
+ listener.loadError();
+ }
+ } else {
+ Toast.makeText(context, "加载失败,请检查网络状态", Toast.LENGTH_SHORT).show();
+ isNetworkError = true;
+ notifyItemChanged(getItemCount() - 1);
+ }
+ }
+ });
+ }
+
+ private void loadDataByGameId(final int offset) {
+ RetrofitManager.getApi()
+ .getGuanZhuById(ids, offset)
+ .map(new Func1, List>() {
+ @Override
+ public List call(List list) {
+ // 去除重复数据
+ return removeDuplicateData(concernList, list);
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Response>() {
+ @Override
+ public void onResponse(List response) {
+ isLoading = false;
+
+ if (response.size() != 0) {
+ concernList.addAll(response);
+ itemCount += response.size();
+ if (!fragment.isHidden() && !fragment.isEverpause()) {
+ notifyItemRangeInserted(concernList.size() - response.size(), response.size());
+ } else {
+ notifyDataSetChanged();
+ }
+
+ getNewsViews(response, offset);
+ getNewsCommentnum(response, offset);
+ getLibaoStatus(response);
+ } else {
+ isOver = true;
+ notifyItemChanged(getItemCount() - 1);
+ }
+
+ if (offset == 0 && listener != null) {
+ if (concernList.isEmpty()) {
+ listener.loadEmpty();
+ } else {
+ listener.loadDone();
+ }
+ }
+ }
+
+ @Override
+ public void onFailure(HttpException e) {
+ isLoading = false;
+
+ // 网络错误
+ if (offset == 0) {
+ if (listener != null) {
+ listener.loadError();
+ }
+ } else {
+ Toast.makeText(context, "加载失败,请检查网络状态", Toast.LENGTH_SHORT).show();
+ isNetworkError = true;
+ notifyItemChanged(getItemCount() - 1);
+ }
+ }
+ });
+ }
+
+ //获取礼包状态
+ private void getLibaoStatus(List response) {
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0, size = response.size(); i < size; i++) {
+ if ("libao".equals(response.get(i).getType())){
+ builder.append(response.get(i).getId());
+ builder.append("-");
+ }
+ }
+ if (builder.length() == 0) return;
+ builder.deleteCharAt(builder.length() - 1);
+ String ids = builder.toString();
+
+ LibaoUtils.getLibaoStatus(ids, new LibaoUtils.PostLibaoListener() {
+ @Override
+ public void postSucced(Object response) {
+ libaoStatusList.addAll((List)response);
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public void postFailed(Throwable error) {
+
+ }
+ });
+ }
+
+
+ // 去除重复数据
+ private static List removeDuplicateData(List sourceList, List rawList) {
+ if (sourceList == null || sourceList.isEmpty()
+ || rawList == null || rawList.isEmpty()) {
+ return rawList;
+ }
+ String id;
+ for (int i = 0; i < rawList.size(); i++) {
+ id = rawList.get(i).getId();
+ for (ConcernEntity concernEntity : sourceList) {
+ if (id.equals(concernEntity.getId())) {
+ rawList.remove(i);
+ i--;
+ break;
+ }
+ }
+ }
+ return rawList;
+ }
+
+ // 获取新闻阅读量
+ private void getNewsViews(final List list, final int start) {
+ if (list == null || list.isEmpty()) {
+ return;
+ }
+ ObservableUtil.computation(new Observable.OnSubscribe() {
+ @Override
+ public void call(Subscriber super String> subscriber) {
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0, size = list.size(); i < size; i++) {
+ builder.append(list.get(i).getId());
+ builder.append("-");
+ }
+ builder.deleteCharAt(builder.length() - 1);
+ String ids = builder.toString();
+ VisitManager.getInstance().addUrl(ids);
+ subscriber.onNext(ids);
+ subscriber.onCompleted();
+ }
+ }, new Action1() {
+ @Override
+ public void call(String ids) {
+ RetrofitManager.getData()
+ .getNewsViews(ids)
+ .map(new Func1, String>() {
+ @Override
+ public String call(List list) {
+ for (ViewsEntity viewsEntity : list) {
+ for (ConcernEntity concernEntity : concernList) {
+ if (viewsEntity.getId().equals(concernEntity.getId())) {
+ concernEntity.setViews(viewsEntity.getViews());
+ break;
+ }
+ }
+ }
+ return null;
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Response() {
+ @Override
+ public void onResponse(String response) {
+ notifyItemRangeChanged(start, list.size());
+ }
+ });
+ }
+ });
+ }
+
+ // 获取新闻评论数
+ private void getNewsCommentnum(final List list, final int start) {
+ if (list == null || list.isEmpty()) {
+ return;
+ }
+ ObservableUtil.computation(new Observable.OnSubscribe() {
+ @Override
+ public void call(Subscriber super String> subscriber) {
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0, size = list.size(); i < size; i++) {
+ builder.append(list.get(i).getId());
+ builder.append("-");
+ }
+ builder.deleteCharAt(builder.length() - 1);
+ CommentManager.getInstance().addUrl(builder.toString());
+ subscriber.onNext(builder.toString());
+ subscriber.onCompleted();
+ }
+ }, new Action1() {
+ @Override
+ public void call(String ids) {
+ RetrofitManager.getComment()
+ .getNewsCommentnum(ids)
+ .map(new Func1, String>() {
+ @Override
+ public String call(List