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 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> 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 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 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 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> 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 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 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 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); + } else if (viewType == ItemViewType.LOADING) { + View view = LayoutInflater.from(parent.getContext()). + inflate(R.layout.refresh_footerview, parent, false); + return new FooterViewHolder(view); + } + return null; + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder instanceof NewsDigestViewHolder) { + initNewsDigestViewHolder((NewsDigestViewHolder) holder, position); + } else if (holder instanceof FooterViewHolder) { + initFooterViewHolder((FooterViewHolder) holder); + } + } + + private void initNewsDigestViewHolder(final NewsDigestViewHolder viewHolder, int position) { + + final ConcernEntity concernEntity = concernList.get(position); + + 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(); + } + + 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(); + if (views == 0) { + viewHolder.read.setVisibility(View.GONE); + } else { + viewHolder.read.setVisibility(View.VISIBLE); + viewHolder.read.setText(String.format(Locale.getDefault(), "阅读 %d", views)); + } + + 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)); + } + } + + if (concernEntity.getLink() != null) { + viewHolder.link.setImageResource(R.drawable.ic_link); + } else { + viewHolder.link.setImageResource(R.drawable.concern_message_icon); + } + + 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); + } + }); + + 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); + } + } + }); + + viewHolder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Map kv = new HashMap<>(); + kv.put("名字", concernEntity.getTitle()); + kv.put("位置", String.valueOf(viewHolder.getPosition() + 1)); + DataUtils.onEvent(context, "点击", "资讯-关注", kv); + + DataCollectionUtils.uploadClick(context, "列表", "资讯-关注", concernEntity.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); + } + + } + }); + } + + private void initFooterViewHolder(FooterViewHolder viewHolder) { + if (isNetworkError) { + viewHolder.loading.setVisibility(View.GONE); + viewHolder.hint.setText("加载失败,点击重试"); + viewHolder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isNetworkError = false; + notifyItemChanged(getItemCount() - 1); + loadDataByKey(concernList.size()); + } + }); + } 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); + } + } + + @Override + public int getItemCount() { + if (itemCount == 0){ + return 0; + } + return itemCount + 1; + } + + //初始化获取数据库的列表 + public void initLibaoDao() { + libaoDao = new LibaoDao(context); + libaoInfo = libaoDao.getAll(); + } + + public int getConcernListSize() { + return concernList.size(); + } + + public boolean isNetworkError() { + return isNetworkError; + } + + public void setNetworkError(boolean networkError) { + isNetworkError = networkError; + } + + public boolean isOver() { + return isOver; + } + + public boolean isLoading() { + return isLoading; + } + + public int getSkipPosition() { + return skipPosition; + } + + public void setSkipPosition(int skipPosition) { + this.skipPosition = skipPosition; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java b/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java index eb2a5152d0..d56a61eae7 100644 --- a/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java @@ -37,6 +37,7 @@ public class NewsFragment extends HomeFragment implements View.OnClickListener, private TextView tv_guanzhu; private TextView tv_zixun; private TextView tv_yuanchuang; + private TextView tv_gonglve; private int width; private int currentItem; @@ -62,6 +63,7 @@ public class NewsFragment extends HomeFragment implements View.OnClickListener, list.add(new News1Fragment()); list.add(new News2Fragment()); list.add(new News3Fragment()); + list.add(new News4Fragment()); page_vp_content.setAdapter(new FragmentAdapter(getChildFragmentManager(), list)); page_vp_content.addOnPageChangeListener(this); @@ -74,7 +76,7 @@ public class NewsFragment extends HomeFragment implements View.OnClickListener, DisplayMetrics outMetrics = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); - width = outMetrics.widthPixels / 3; + width = outMetrics.widthPixels / 4; lparams = new LinearLayout.LayoutParams(width / 2, DisplayUtils.dip2px(getActivity(), 2)); lparams.leftMargin = (int) (width * (currentItem + 0.25f)); @@ -89,23 +91,9 @@ public class NewsFragment extends HomeFragment implements View.OnClickListener, } private void initTextView() { - tv_guanzhu = new TextView(getActivity()); - tv_guanzhu.setText("关注"); - if (currentItem == 0) { - tv_guanzhu.setTextColor(getResources().getColor(R.color.theme)); - } else { - tv_guanzhu.setTextColor(getResources().getColor(R.color.title)); - } - tv_guanzhu.setGravity(Gravity.CENTER); - tv_guanzhu.setOnClickListener(this); - LinearLayout.LayoutParams lparams4 = new LinearLayout.LayoutParams( - 0, DisplayUtils.dip2px(getActivity(), 35)); - lparams4.weight = 1; - slidebar_ll_top.addView(tv_guanzhu, lparams4); - tv_zixun = new TextView(getActivity()); tv_zixun.setText("资讯"); - if (currentItem == 1) { + if (currentItem == 0) { tv_zixun.setTextColor(getResources().getColor(R.color.theme)); } else { tv_zixun.setTextColor(getResources().getColor(R.color.title)); @@ -117,6 +105,20 @@ public class NewsFragment extends HomeFragment implements View.OnClickListener, lparams1.weight = 1; slidebar_ll_top.addView(tv_zixun, lparams1); + tv_gonglve = new TextView(getActivity()); + tv_gonglve.setText("攻略"); + if (currentItem == 1) { + tv_gonglve.setTextColor(getResources().getColor(R.color.theme)); + } else { + tv_gonglve.setTextColor(getResources().getColor(R.color.title)); + } + tv_gonglve.setGravity(Gravity.CENTER); + tv_gonglve.setOnClickListener(this); + LinearLayout.LayoutParams lparams2 = new LinearLayout.LayoutParams( + 0, DisplayUtils.dip2px(getActivity(), 35)); + lparams2.weight = 1; + slidebar_ll_top.addView(tv_gonglve, lparams2); + tv_yuanchuang = new TextView(getActivity()); tv_yuanchuang.setText("原创"); if (currentItem == 2) { @@ -126,21 +128,37 @@ public class NewsFragment extends HomeFragment implements View.OnClickListener, } tv_yuanchuang.setGravity(Gravity.CENTER); tv_yuanchuang.setOnClickListener(this); - LinearLayout.LayoutParams lparams2 = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams lparams3 = new LinearLayout.LayoutParams( 0, DisplayUtils.dip2px(getActivity(), 35)); - lparams2.weight = 1; - slidebar_ll_top.addView(tv_yuanchuang, lparams2); + lparams3.weight = 1; + slidebar_ll_top.addView(tv_yuanchuang, lparams3); + + tv_guanzhu = new TextView(getActivity()); + tv_guanzhu.setText("关注"); + if (currentItem == 3) { + tv_guanzhu.setTextColor(getResources().getColor(R.color.theme)); + } else { + tv_guanzhu.setTextColor(getResources().getColor(R.color.title)); + } + tv_guanzhu.setGravity(Gravity.CENTER); + tv_guanzhu.setOnClickListener(this); + LinearLayout.LayoutParams lparams4 = new LinearLayout.LayoutParams( + 0, DisplayUtils.dip2px(getActivity(), 35)); + lparams4.weight = 1; + slidebar_ll_top.addView(tv_guanzhu, lparams4); } @Override public void onClick(View v) { super.onClick(v); if (v == tv_zixun) { + page_vp_content.setCurrentItem(0); + } else if (v == tv_gonglve) { page_vp_content.setCurrentItem(1); } else if (v == tv_yuanchuang) { page_vp_content.setCurrentItem(2); } else if (v == tv_guanzhu) { - page_vp_content.setCurrentItem(0); + page_vp_content.setCurrentItem(3); } } @@ -160,17 +178,25 @@ public class NewsFragment extends HomeFragment implements View.OnClickListener, @Override public void onPageSelected(int position) { if (position == 0){ - tv_zixun.setTextColor(getResources().getColor(R.color.title)); - tv_yuanchuang.setTextColor(getResources().getColor(R.color.title)); - tv_guanzhu.setTextColor(getResources().getColor(R.color.theme)); - } else if (position == 1) { tv_zixun.setTextColor(getResources().getColor(R.color.theme)); + tv_gonglve.setTextColor(getResources().getColor(R.color.title)); + tv_yuanchuang.setTextColor(getResources().getColor(R.color.title)); + tv_guanzhu.setTextColor(getResources().getColor(R.color.title)); + } else if (position == 1) { + tv_zixun.setTextColor(getResources().getColor(R.color.title)); + tv_gonglve.setTextColor(getResources().getColor(R.color.theme)); tv_yuanchuang.setTextColor(getResources().getColor(R.color.title)); tv_guanzhu.setTextColor(getResources().getColor(R.color.title)); } else if (position == 2) { tv_zixun.setTextColor(getResources().getColor(R.color.title)); + tv_gonglve.setTextColor(getResources().getColor(R.color.title)); tv_yuanchuang.setTextColor(getResources().getColor(R.color.theme)); tv_guanzhu.setTextColor(getResources().getColor(R.color.title)); + } else if (position == 3) { + tv_zixun.setTextColor(getResources().getColor(R.color.title)); + tv_gonglve.setTextColor(getResources().getColor(R.color.title)); + tv_yuanchuang.setTextColor(getResources().getColor(R.color.title)); + tv_guanzhu.setTextColor(getResources().getColor(R.color.theme)); } } diff --git a/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java index 6000829e64..d293b63a9d 100644 --- a/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/newsdetail/NewsDetailAdapter.java @@ -22,6 +22,7 @@ import android.widget.Toast; import com.facebook.drawee.view.SimpleDraweeView; import com.gh.common.constant.Config; +import com.gh.common.util.CommentUtils; import com.gh.common.util.ConcernUtils; import com.gh.common.util.DataCollectionUtils; import com.gh.common.util.DataUtils; @@ -317,12 +318,18 @@ public class NewsDetailAdapter extends RecyclerView.Adapter { final ImageView like = (ImageView) contentView.findViewById(R.id.comment_like); likeCount.setText(String.valueOf(commentEntity.getVote())); - content.setText(commentEntity.getContent()); userName.setText(commentEntity.getUser().getName()); // userIcon.setImageURI(commentEntity.getUser().getIcon()); ImageUtils.display(userIcon, commentEntity.getUser().getIcon()); holder.list.addView(contentView); + if (commentEntity.getParent() != null) { + content.setText("回复"+ commentEntity.getParent().getUser().getName() + ": " + commentEntity.getContent()); + } else { + content.setText(commentEntity.getContent()); + } + + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); try { long today = format.parse(format.format(new Date())).getTime(); @@ -415,6 +422,12 @@ public class NewsDetailAdapter extends RecyclerView.Adapter { }); } }); + contentView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + CommentUtils.showReportDialog(commentEntity, context, null, newsDetailEntity.getId()); + } + }); } LinearLayout linearLayout = new LinearLayout(context); @@ -592,7 +605,7 @@ public class NewsDetailAdapter extends RecyclerView.Adapter { } if (viewHolder.newsdetail_item_wv_content.getTag() == null) { - viewHolder.newsdetail_item_wv_content.setBackgroundColor(0xFFEDF2F4); +// viewHolder.newsdetail_item_wv_content.setBackgroundColor(0xFFEDF2F4); viewHolder.newsdetail_item_wv_content.addJavascriptInterface(new JsInterface(context), "imagelistener"); webSettings = viewHolder.newsdetail_item_wv_content.getSettings(); webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java index 49891ed61f..605282d04e 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java @@ -36,7 +36,7 @@ import com.gh.common.util.DisplayUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.TokenUtils; import com.gh.common.util.Utils; -import com.gh.gamecenter.ConcernActivity; +import com.gh.gamecenter.LibaoActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.SelectUserIconActivity; import com.gh.gamecenter.SettingActivity; @@ -73,7 +73,7 @@ public class PersonalFragment extends BaseFragment implements View.OnClickListen @BindView(R.id.me_iv_top_icon) SimpleDraweeView me_iv_top_icon; @BindView(R.id.me_tv_top_name) TextView me_tv_top_name; @BindView(R.id.user_name_hint) ImageView userNameHint; - @BindView(R.id.personal_entrance_concern) LinearLayout entranceConcern; + @BindView(R.id.personal_entrance_libao) LinearLayout entranceLibao; @BindView(R.id.personal_entrance_setting) LinearLayout entranceSetting; @BindView(R.id.personal_entrance_share) LinearLayout entranceShare; @BindView(R.id.personal_entrance_suggest) LinearLayout entranceSuggest; @@ -175,7 +175,7 @@ public class PersonalFragment extends BaseFragment implements View.OnClickListen } @OnClick({R.id.personal_entrance_suggest, R.id.personal_entrance_share, R.id.personal_entrance_setting - , R.id.personal_entrance_concern}) + , R.id.personal_entrance_libao}) public void onEntranceClick(View v) { switch (v.getId()) { case R.id.personal_entrance_suggest: @@ -194,12 +194,11 @@ public class PersonalFragment extends BaseFragment implements View.OnClickListen intent3.putExtra("entrance", "(我的光环)"); startActivity(intent3); break; - case R.id.personal_entrance_concern: - DataUtils.onEvent(getActivity(), "主页", "关注图标"); - DataCollectionUtils.uploadClick(getActivity(), "关注图标", "我的光环"); - - Intent intent = new Intent(getActivity(), ConcernActivity.class); - intent.putExtra("entrance", "(我的光环)"); + case R.id.personal_entrance_libao: + DataUtils.onEvent(getActivity(), "主页", "礼包图标"); + DataCollectionUtils.uploadClick(getActivity(), "礼包图标", "我的光环"); + Intent intent = new Intent(getActivity(), LibaoActivity.class); + intent.putExtra("entrance", "(我的光环-礼包图标:礼包)"); startActivity(intent); break; } diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/ApiService.java index f3689b176b..ffaa11fc87 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/ApiService.java @@ -6,6 +6,8 @@ import com.gh.gamecenter.entity.GameDetailEntity; import com.gh.gamecenter.entity.GameDigestEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.GameUpdateEntity; +import com.gh.gamecenter.entity.KeFuEntity; +import com.gh.gamecenter.entity.MessageUnreadEntity; import com.gh.gamecenter.entity.NewsDetailEntity; import com.gh.gamecenter.entity.NewsEntity; import com.gh.gamecenter.entity.PackageEntity; @@ -13,6 +15,7 @@ import com.gh.gamecenter.entity.PlatformEntity; import com.gh.gamecenter.entity.SlideEntity; import com.gh.gamecenter.entity.SubjectDigestEntity; import com.gh.gamecenter.entity.SubjectEntity; +import com.gh.gamecenter.entity.SuggestionTypeEntity; import com.gh.gamecenter.entity.TagEntity; import java.util.ArrayList; @@ -22,6 +25,7 @@ import okhttp3.RequestBody; import okhttp3.ResponseBody; import retrofit2.http.Body; import retrofit2.http.GET; +import retrofit2.http.Header; import retrofit2.http.Headers; import retrofit2.http.POST; import retrofit2.http.Path; @@ -46,14 +50,14 @@ public interface ApiService { @GET("zixun/yuanchuang?limit=20") // 获取资讯-原创 Observable> getYuanChuang(@Query("offset") int offset); - @GET("news") // 获取资讯-原创 + @GET("article") // 获取资讯-原创 Observable> getNews(@Query("type_group") String type_group, @Query("limit") int limit, @Query("offset") int offset); @GET("game/{game_id}/digest") // 获取游戏摘要 Observable getGameDigest(@Path("game_id") String game_id); - @GET("game/{game_id}/news_digest") // 获取游戏新闻摘要 + @GET("game/{game_id}/article_digest") // 获取游戏新闻摘要 Observable getGameNewsDigest(@Path("game_id") String game_id); @GET("game/{game_id}/detail") // 获取游戏详情 @@ -85,31 +89,31 @@ public interface ApiService { @GET("support/upgrade") Observable getUpdate(@Query("version") String version, @Query("channel") String channel); // 获取助手更新 - @GET("news/{news_id}/detail") + @GET("article/{news_id}/detail") Observable getNewsDetail(@Path("news_id") String news_id); // 获取新闻详情 - @GET("news/{news_id}/digest") + @GET("article/{news_id}/digest") Observable getNewsDigest(@Path("news_id") String news_id); // 获取新闻摘要 - @GET("news/{news_id}/suggestion") + @GET("article/{news_id}/suggestion") Observable> getNewsSuggestion(@Path("news_id") String news_id); // 获取新闻相关推荐 @GET("skin/gameInfo/{game_id}") Observable getGameSkin(@Path("game_id") String game_id); // 获取游戏皮肤信息 - @GET("game/{game_id}/news") + @GET("game/{game_id}/article") Observable> getGameNews(@Path("game_id") String game_id, @Query("limit") int limit, @Query("offset") int offset, @Query("type") String type); // 获取游戏新闻 - @GET("game/{game_id}/news") + @GET("game/{game_id}/article") Observable> getGameNews(@Path("game_id") String game_id, @Query("limit") int limit, @Query("type_group") String type, @Query("offset") int offset); // 获取游戏攻略 - @GET("game/{game_id}/news") + @GET("game/{game_id}/article") Observable> getGameNews(@Path("game_id") String game_id, @Query("limit") int limit, @Query("offset") int offset); // 获取游戏新闻 - @GET("game/{game_id}/news") + @GET("game/{game_id}/article") Observable> getGameNews(@Path("game_id") String game_id, @Query("limit") int limit); // 获取游戏新闻 @GET("game/{game_id}/serverInfo") @@ -121,7 +125,7 @@ public interface ApiService { @GET("article/{news_id}/rich-digest") Observable getNewsRichDigest(@Path("news_id") String news_id); // 获取新闻rich摘要 - @GET("search/news") + @GET("search/article") Observable> getSearchNews(@Query("game_id") String game_id, @Query("keyword") String keyword, @Query("page") int page, @Query("limit") int limit); // 搜索新闻 @@ -150,8 +154,8 @@ public interface ApiService { Observable> getSubjectGame(@Path("subject_id") String subject_id); //获取专题游戏 用于主页换一批 @Headers({"Content-Type: application/json", "Accept: application/json"}) - @POST("support/suggestion") // 上传意见反馈 - Observable postSuggestion(@Body RequestBody body); + @POST("support/user/suggestion") // 上传意见反馈 + Observable postSuggestion(@Body RequestBody body, @Header("TOKEN") String token); @GET("support/package/in-use") Observable> getPackageUsed(@Query("since") long since, @Query("skip") long skip); // 获取有用包名 @@ -173,4 +177,22 @@ public interface ApiService { @GET("game/server") Observable> getKaiFuData(@Query("type") String type, @Query("offset") int offset, @Query("limit") int limit); // 获取开服表数据 + + @GET("message/private/new") + Observable> getKeFuDataUnread(@Header("TOKEN") String token,@Query("offset") int offset, @Query("limit") int limit); // 获取消息-客服未读数据 + + @GET("user/message/notice") + Observable> getNoticeData(@Query("version") String version + , @Query("channel") String channel, @Query("package") String packageName + , @Query("offset") int offset, @Query("limit") int limit); // 获取消息-客服数据 + + @GET("message/sync") + Observable getMessageUnread(@Header("TOKEN") String token); // 获取消息未读数据 + + @GET("game/{game_id}/article_type") + Observable> getGameArticleType(@Path("game_id") String gameId); // 获取游戏新闻类型 + + @GET("support/setting/suggestion") + Observable getSuggestionType(); // 获取意见反馈的问题选项 + } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java b/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java index bf0930209b..94a27883a3 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java @@ -83,7 +83,7 @@ public class SearchGameDetailFragment extends BaseFragment implements OnCallBack public void onClick(View v) { Intent intent = new Intent(getContext(), NewSuggestActivity.class); intent.putExtra("suggestType", 5); - intent.putExtra("suggestContent", "求收录游戏:" + key); + intent.putExtra("content", "求收录游戏:" + key); getActivity().startActivity(intent); } }); diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragment.java b/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragment.java index c674b3485e..9e2fb574b6 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragment.java +++ b/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragment.java @@ -77,7 +77,7 @@ public class SearchHistoryFragment extends Fragment { mHistoryadapter = new SearchHistoryFragmentAdapter(getActivity(), mHistorylist, dao, true); mSearchHistoryRv.setAdapter(mHistoryadapter); ViewGroup.LayoutParams params = mSearchHistoryRv.getLayoutParams(); - params.height = (int) Math.ceil(mHistorylist.size() / 3f) * DisplayUtils.dip2px(getContext(), 42); + params.height = (int) Math.ceil(mHistorylist.size() / 3f) * DisplayUtils.dip2px(getContext(), 32) + DisplayUtils.dip2px(getContext(), 10); mSearchHistoryRv.setLayoutParams(params); mSearchHotRv.setHasFixedSize(true); @@ -89,7 +89,7 @@ public class SearchHistoryFragment extends Fragment { }); mSearchHotRv.setAdapter(new SearchHistoryFragmentAdapter(getActivity(), mHotlist, dao, false)); ViewGroup.LayoutParams params2 = mSearchHotRv.getLayoutParams(); - params2.height = (int) Math.ceil(mHotlist.size() / 3f) * DisplayUtils.dip2px(getContext(), 42); + params2.height = (int) Math.ceil(mHotlist.size() / 3f) * DisplayUtils.dip2px(getContext(), 32) + DisplayUtils.dip2px(getContext(), 10); mSearchHotRv.setLayoutParams(params2); loadSearchHotData(); @@ -120,7 +120,7 @@ public class SearchHistoryFragment extends Fragment { mSearchHotTv.setVisibility(View.VISIBLE); mSearchHotRv.setAdapter(new SearchHistoryFragmentAdapter(getActivity(), mHotlist, dao, false)); ViewGroup.LayoutParams params2 = mSearchHotRv.getLayoutParams(); - params2.height = (int) Math.ceil(mHotlist.size() / 3f) * DisplayUtils.dip2px(getContext(), 42); + params2.height = (int) Math.ceil(mHotlist.size() / 3f) * DisplayUtils.dip2px(getContext(), 32) + DisplayUtils.dip2px(getContext(), 10); mSearchHotRv.setLayoutParams(params2); } }); diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragmentAdapter.java index 677658f82c..82fd42b826 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragmentAdapter.java @@ -63,7 +63,7 @@ class SearchHistoryFragmentAdapter extends RecyclerView.Adapter { textView.setTextSize(13); textView.setPadding(DisplayUtils.dip2px(context, 10), 0, DisplayUtils.dip2px(context, 10), 0); textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT - , DisplayUtils.dip2px(context, 42))); + , DisplayUtils.dip2px(context, 32))); textView.setGravity(Gravity.CENTER_VERTICAL); textView.setBackgroundResource(R.drawable.reuse_listview_item_style); return new TextViewHolder(textView); diff --git a/app/src/main/java/com/gh/gamecenter/suggest/SuggestPicAdapter.java b/app/src/main/java/com/gh/gamecenter/suggest/SuggestPicAdapter.java index c89f9f5b7a..8a9fc0ebc9 100644 --- a/app/src/main/java/com/gh/gamecenter/suggest/SuggestPicAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/suggest/SuggestPicAdapter.java @@ -85,4 +85,8 @@ public class SuggestPicAdapter extends RecyclerView.Adapter getFileList() { + return picList; + } } diff --git a/app/src/main/java/com/gh/gamecenter/suggest/SuggestTypeAdapter.java b/app/src/main/java/com/gh/gamecenter/suggest/SuggestTypeAdapter.java index b7edd960d8..e1727226ec 100644 --- a/app/src/main/java/com/gh/gamecenter/suggest/SuggestTypeAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/suggest/SuggestTypeAdapter.java @@ -15,15 +15,16 @@ import com.gh.gamecenter.R; public class SuggestTypeAdapter extends RecyclerView.Adapter { private Context mContext; private OnSelectTypeListener listener; - private String[] arrType = {"普通反馈", "功能建议", "发生闪退 ", "游戏问题", "游戏收录", "文章投稿"}; + private String[] arrType; private int curType = -1; private int lastType = -1; - public SuggestTypeAdapter(NewSuggestActivity mContext, int curType) { + public SuggestTypeAdapter(NewSuggestActivity mContext, int curType, String[] arrType) { this.mContext = mContext; this.listener = mContext; this.curType = curType - 1; + this.arrType = arrType; } @Override diff --git a/app/src/main/java/com/gh/gamecenter/wenda/WenDaFragment.java b/app/src/main/java/com/gh/gamecenter/wenda/WenDaFragment.java new file mode 100644 index 0000000000..387cd2947c --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/wenda/WenDaFragment.java @@ -0,0 +1,17 @@ +package com.gh.gamecenter.wenda; + +import com.gh.base.BaseFragment; +import com.gh.gamecenter.eventbus.EBNetworkState; + +/** + * Created by khy on 2017/4/5. + */ +public class WenDaFragment extends BaseFragment { + + //连接上网络事件 + public void onEventMainThread(EBNetworkState busNetworkState) { + if (busNetworkState.isNetworkConnected()) { + + } + } +} diff --git a/app/src/main/res/drawable-hdpi/add_vote_icon.png b/app/src/main/res/drawable-hdpi/add_vote_icon.png new file mode 100644 index 0000000000..9bd8cbd1a3 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/add_vote_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_game_select.png b/app/src/main/res/drawable-hdpi/ic_game_select.png index 53f5d61a44..1c5e7027f8 100644 Binary files a/app/src/main/res/drawable-hdpi/ic_game_select.png and b/app/src/main/res/drawable-hdpi/ic_game_select.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_game_unselect.png b/app/src/main/res/drawable-hdpi/ic_game_unselect.png index 86843a3de6..561aa5bbfe 100644 Binary files a/app/src/main/res/drawable-hdpi/ic_game_unselect.png and b/app/src/main/res/drawable-hdpi/ic_game_unselect.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_message_select.png b/app/src/main/res/drawable-hdpi/ic_message_select.png new file mode 100644 index 0000000000..97029415a6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_message_select.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_message_unselect.png b/app/src/main/res/drawable-hdpi/ic_message_unselect.png new file mode 100644 index 0000000000..271edc1a63 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_message_unselect.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_news_select.png b/app/src/main/res/drawable-hdpi/ic_news_select.png index 62b7c06ac0..e23115865e 100644 Binary files a/app/src/main/res/drawable-hdpi/ic_news_select.png and b/app/src/main/res/drawable-hdpi/ic_news_select.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_news_unselect.png b/app/src/main/res/drawable-hdpi/ic_news_unselect.png index 603f2257fa..e068070f26 100644 Binary files a/app/src/main/res/drawable-hdpi/ic_news_unselect.png and b/app/src/main/res/drawable-hdpi/ic_news_unselect.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_user_select.png b/app/src/main/res/drawable-hdpi/ic_user_select.png index 13b74c1343..d5f87a4752 100644 Binary files a/app/src/main/res/drawable-hdpi/ic_user_select.png and b/app/src/main/res/drawable-hdpi/ic_user_select.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_user_unselect.png b/app/src/main/res/drawable-hdpi/ic_user_unselect.png index 4c47e30c8e..35d723d063 100644 Binary files a/app/src/main/res/drawable-hdpi/ic_user_unselect.png and b/app/src/main/res/drawable-hdpi/ic_user_unselect.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_wenda_select.png b/app/src/main/res/drawable-hdpi/ic_wenda_select.png new file mode 100644 index 0000000000..6ab8c21b6b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_wenda_select.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_wenda_unselect.png b/app/src/main/res/drawable-hdpi/ic_wenda_unselect.png new file mode 100644 index 0000000000..0bbbe1eca9 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_wenda_unselect.png differ diff --git a/app/src/main/res/drawable-hdpi/personal_entrance_libao.png b/app/src/main/res/drawable-hdpi/personal_entrance_libao.png new file mode 100644 index 0000000000..c9d7d41582 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/personal_entrance_libao.png differ diff --git a/app/src/main/res/drawable-hdpi/platform_vote.jpg b/app/src/main/res/drawable-hdpi/platform_vote.jpg new file mode 100644 index 0000000000..792643a7db Binary files /dev/null and b/app/src/main/res/drawable-hdpi/platform_vote.jpg differ diff --git a/app/src/main/res/drawable-hdpi/suggest_pic_delete.png b/app/src/main/res/drawable-hdpi/suggest_pic_delete.png index 28630fa7ec..8156a175ef 100644 Binary files a/app/src/main/res/drawable-hdpi/suggest_pic_delete.png and b/app/src/main/res/drawable-hdpi/suggest_pic_delete.png differ diff --git a/app/src/main/res/drawable-nodpi/oval_message_hint_bg.xml b/app/src/main/res/drawable-nodpi/oval_message_hint_bg.xml new file mode 100644 index 0000000000..461ad89e7b --- /dev/null +++ b/app/src/main/res/drawable-nodpi/oval_message_hint_bg.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/progressbar_vote_style.xml b/app/src/main/res/drawable/progressbar_vote_style.xml new file mode 100644 index 0000000000..5b29c76b1e --- /dev/null +++ b/app/src/main/res/drawable/progressbar_vote_style.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/textview_all_red_dn.xml b/app/src/main/res/drawable/textview_all_red_dn.xml new file mode 100644 index 0000000000..f6716e8f51 --- /dev/null +++ b/app/src/main/res/drawable/textview_all_red_dn.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/textview_all_red_style.xml b/app/src/main/res/drawable/textview_all_red_style.xml new file mode 100644 index 0000000000..8b4ab33665 --- /dev/null +++ b/app/src/main/res/drawable/textview_all_red_style.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/textview_all_red_up.xml b/app/src/main/res/drawable/textview_all_red_up.xml new file mode 100644 index 0000000000..2efa60a7b5 --- /dev/null +++ b/app/src/main/res/drawable/textview_all_red_up.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_game_detail.xml b/app/src/main/res/layout/activity_game_detail.xml index a5fbeba5a9..7b32b0a992 100644 --- a/app/src/main/res/layout/activity_game_detail.xml +++ b/app/src/main/res/layout/activity_game_detail.xml @@ -8,7 +8,7 @@ - - + android:layout_margin="8dp"/> + android:src="@drawable/ic_game_select" /> @@ -79,6 +79,57 @@ android:textSize="10sp" /> + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_suggest_new.xml b/app/src/main/res/layout/activity_suggest_new.xml index f9347b2c79..eece92b364 100644 --- a/app/src/main/res/layout/activity_suggest_new.xml +++ b/app/src/main/res/layout/activity_suggest_new.xml @@ -18,14 +18,14 @@ + android:scrollbars="none" + android:layout_marginBottom="60dp"> + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_modify_nickname.xml b/app/src/main/res/layout/dialog_modify_nickname.xml index 36478fb725..9b17a4d660 100644 --- a/app/src/main/res/layout/dialog_modify_nickname.xml +++ b/app/src/main/res/layout/dialog_modify_nickname.xml @@ -6,6 +6,7 @@ android:orientation="vertical"> + android:layout_width="wrap_content" + android:layout_height="wrap_content"> @@ -29,6 +25,7 @@ android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_marginRight="20dp" + android:visibility="gone" android:src="@drawable/strategy_game_select"/> diff --git a/app/src/main/res/layout/fm_search_history.xml b/app/src/main/res/layout/fm_search_history.xml index e0b61e1125..9b3360f117 100644 --- a/app/src/main/res/layout/fm_search_history.xml +++ b/app/src/main/res/layout/fm_search_history.xml @@ -26,7 +26,9 @@ android:layout_height="wrap_content" android:background="@android:color/white" android:paddingLeft="15dp" - android:paddingRight="15dp" /> + android:paddingRight="15dp" + android:paddingTop="5dp" + android:paddingBottom="5dp"/> @@ -83,7 +85,9 @@ android:layout_height="wrap_content" android:background="@android:color/white" android:paddingLeft="15dp" - android:paddingRight="15dp" /> + android:paddingRight="15dp" + android:paddingTop="5dp" + android:paddingBottom="5dp"/> diff --git a/app/src/main/res/layout/fragment_message.xml b/app/src/main/res/layout/fragment_message.xml new file mode 100644 index 0000000000..8d52889279 --- /dev/null +++ b/app/src/main/res/layout/fragment_message.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_news1.xml b/app/src/main/res/layout/fragment_news1.xml index 7f9e9fc7d4..6f6e27f4c6 100644 --- a/app/src/main/res/layout/fragment_news1.xml +++ b/app/src/main/res/layout/fragment_news1.xml @@ -1,109 +1,27 @@ - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_news2.xml b/app/src/main/res/layout/fragment_news2.xml index 6f6e27f4c6..4aba769972 100644 --- a/app/src/main/res/layout/fragment_news2.xml +++ b/app/src/main/res/layout/fragment_news2.xml @@ -1,27 +1,58 @@ + android:layout_height="match_parent"> - + android:layout_height="match_parent" + android:orientation="vertical" + android:gravity="center_horizontal"> + + + + + + + + - - + android:layout_height="match_parent"/> - + - + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_news4.xml b/app/src/main/res/layout/fragment_news4.xml index c3475128c7..07f2016c2b 100644 --- a/app/src/main/res/layout/fragment_news4.xml +++ b/app/src/main/res/layout/fragment_news4.xml @@ -4,45 +4,105 @@ android:layout_height="match_parent" > + android:layout_height="wrap_content"> - - - - - + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_normal_message.xml b/app/src/main/res/layout/fragment_normal_message.xml new file mode 100644 index 0000000000..1fb0837e5d --- /dev/null +++ b/app/src/main/res/layout/fragment_normal_message.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_personal.xml b/app/src/main/res/layout/fragment_personal.xml index 5e7fcc6bd0..4ea1d28fb7 100644 --- a/app/src/main/res/layout/fragment_personal.xml +++ b/app/src/main/res/layout/fragment_personal.xml @@ -23,8 +23,8 @@ + android:src="@drawable/personal_entrance_libao"/> + android:text="礼包" /> diff --git a/app/src/main/res/layout/gamedetail_item_top.xml b/app/src/main/res/layout/gamedetail_item_top.xml index 3ed7e7e0a6..4a5d6a466e 100644 --- a/app/src/main/res/layout/gamedetail_item_top.xml +++ b/app/src/main/res/layout/gamedetail_item_top.xml @@ -6,8 +6,8 @@ android:gravity="center_vertical" android:background="@android:color/white" android:paddingBottom="15dp" - android:paddingLeft="12dp" - android:paddingRight="12dp" + android:paddingLeft="18dp" + android:paddingRight="18dp" android:paddingTop="15dp"> + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/message_comment_item_vote.xml b/app/src/main/res/layout/message_comment_item_vote.xml new file mode 100644 index 0000000000..8b22e06f52 --- /dev/null +++ b/app/src/main/res/layout/message_comment_item_vote.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/message_kefu_item.xml b/app/src/main/res/layout/message_kefu_item.xml new file mode 100644 index 0000000000..f7f47e13a8 --- /dev/null +++ b/app/src/main/res/layout/message_kefu_item.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/message_wenda_item.xml b/app/src/main/res/layout/message_wenda_item.xml new file mode 100644 index 0000000000..c0c04338ab --- /dev/null +++ b/app/src/main/res/layout/message_wenda_item.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/news_detail_comment.xml b/app/src/main/res/layout/news_detail_comment.xml index f3243529cc..0c0317cfed 100644 --- a/app/src/main/res/layout/news_detail_comment.xml +++ b/app/src/main/res/layout/news_detail_comment.xml @@ -14,8 +14,8 @@ android:text="热门评论" android:textColor="#3a3a3a" android:textSize="16dp" - android:paddingLeft="12dp" - android:paddingRight="12dp" + android:paddingLeft="18dp" + android:paddingRight="18dp" android:paddingTop="12dp" android:layout_marginBottom="12dp"/> diff --git a/app/src/main/res/layout/news_footer_item.xml b/app/src/main/res/layout/news_footer_item.xml index 854e8bea7b..c7ae44a5fa 100644 --- a/app/src/main/res/layout/news_footer_item.xml +++ b/app/src/main/res/layout/news_footer_item.xml @@ -4,7 +4,8 @@ android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" - android:paddingBottom="8dp"> + android:paddingBottom="8dp" + android:paddingTop="8dp"> + android:orientation="vertical" + android:background="@android:color/white"> + android:paddingBottom="6dp" + android:paddingTop="6dp"> + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 1025d22ef9..53ba16167b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -48,5 +48,7 @@ #000000 #1668d0 + + #ff4147 \ No newline at end of file