diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fa5ed9b5ce..e739391af3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -111,7 +111,7 @@ + android:configChanges="keyboardHidden" /> @@ -195,11 +195,21 @@ android:name="com.gh.gamecenter.AboutActivity" android:screenOrientation="portrait"/> + + + + diff --git a/app/src/main/java/com/gh/base/HomeFragment.java b/app/src/main/java/com/gh/base/HomeFragment.java index 93747b4eeb..669ec7fbbf 100644 --- a/app/src/main/java/com/gh/base/HomeFragment.java +++ b/app/src/main/java/com/gh/base/HomeFragment.java @@ -22,7 +22,6 @@ 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; @@ -55,7 +54,7 @@ public class HomeFragment extends Fragment implements View.OnClickListener { @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - if (!hintList.isEmpty()) { + if (hintList != null && !hintList.isEmpty()) { outState.putStringArrayList("hint", hintList); } } @@ -223,12 +222,9 @@ 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(getActivity(), ConcernActivity.class); - intent.putExtra("entrance", "(工具栏)"); - startActivity(intent); +// Intent intent = new Intent(getContext(), NewGameDetailActivity.class); +// getActivity().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 390a837162..f53114a951 100644 --- a/app/src/main/java/com/gh/common/constant/Config.java +++ b/app/src/main/java/com/gh/common/constant/Config.java @@ -8,7 +8,7 @@ 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://comment.ghzhushou.com/v1d1/"; + public static final String COMMENT_HOST = "http://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 PREFERENCE = "ghzhushou"; diff --git a/app/src/main/java/com/gh/common/util/CommentUtils.java b/app/src/main/java/com/gh/common/util/CommentUtils.java new file mode 100644 index 0000000000..245570b5a4 --- /dev/null +++ b/app/src/main/java/com/gh/common/util/CommentUtils.java @@ -0,0 +1,45 @@ +package com.gh.common.util; + +import android.widget.TextView; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +/** + * Created by khy on 2017/3/22. + */ +public class CommentUtils { + + public static void setCommentTime(TextView textView, long time) { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); + try { + long today = format.parse(format.format(new Date())).getTime(); + long day = time * 1000; + if (day >= today && day < today + 86400 * 1000) { + long min = new Date().getTime()/1000 - day/1000; + int hour = (int) (min/ (60 * 60)); + if (hour == 0) { + if (min < 60) { + textView.setText("刚刚"); + } else { + textView.setText(String.format(Locale.getDefault(), "%d分钟前", (int) (min / 60))); + } + } else { + textView.setText(String.format(Locale.getDefault(), "%d小时前", hour)); + } + } else if (day >= today - 86400 * 1000 && day < today) { + format.applyPattern("HH:mm"); + textView.setText("昨天 "); + } else { + format.applyPattern("yyyy-MM-dd"); + textView.setText(format.format(day)); + } + } catch (ParseException e) { + e.printStackTrace(); + format.applyPattern("yyyy-MM-dd"); + textView.setText(format.format(time * 1000)); + } + } +} diff --git a/app/src/main/java/com/gh/common/util/GameUtils.java b/app/src/main/java/com/gh/common/util/GameUtils.java index 7853aefdfa..7d932bbeba 100644 --- a/app/src/main/java/com/gh/common/util/GameUtils.java +++ b/app/src/main/java/com/gh/common/util/GameUtils.java @@ -9,7 +9,7 @@ import com.gh.base.AppController; import com.gh.download.DownloadEntity; import com.gh.download.DownloadManager; import com.gh.download.DownloadStatus; -import com.gh.gamecenter.GameDetailActivity; +import com.gh.gamecenter.NewGameDetailActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.entity.ApkEntity; import com.gh.gamecenter.entity.GameEntity; @@ -48,7 +48,7 @@ public class GameUtils { */ public static void startGameDetailActivity(Context context, GameEntity gameEntity, String entrance) { AppController.put("GameEntity", gameEntity); - Intent intent = new Intent(context, GameDetailActivity.class); + Intent intent = new Intent(context, NewGameDetailActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("entrance", entrance); context.startActivity(intent); @@ -58,7 +58,7 @@ public class GameUtils { * 启动游戏详情页面 */ public static void startGameDetailActivity(Context context, String gameId, String entrance) { - Intent intent = new Intent(context, GameDetailActivity.class); + Intent intent = new Intent(context, NewGameDetailActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("gameId", gameId); intent.putExtra("entrance", entrance); diff --git a/app/src/main/java/com/gh/common/util/LibaoUtils.java b/app/src/main/java/com/gh/common/util/LibaoUtils.java index c93f5276ea..13b3ee8c46 100644 --- a/app/src/main/java/com/gh/common/util/LibaoUtils.java +++ b/app/src/main/java/com/gh/common/util/LibaoUtils.java @@ -80,6 +80,13 @@ public class LibaoUtils { public void onResponse(List response) { LibaoDao libaoDao = new LibaoDao(context); for (LibaoEntity libaoEntity : response) { + + if ("ling".equals(libaoEntity.getStatus())) { + libaoEntity.setStatus("linged"); + } else { + libaoEntity.setStatus("taoed"); + } + LibaoInfo libaoInfo = LibaoInfo.createLibaoInfo(libaoEntity); libaoInfo.setActive(libaoEntity.isActive()); libaoDao.add(libaoInfo); @@ -327,6 +334,8 @@ public class LibaoUtils { Utils.toast(libaoBtn.getContext(), "淘号成功"); + libaoEntity.setStatus("taoed"); + LibaoInfo libaoInfo = LibaoInfo.createLibaoInfo(libaoEntity); libaoInfo.setCode(libaoCode); // libaoInfo.setTime(String.valueOf(new Date().getTime())); @@ -334,7 +343,6 @@ public class LibaoUtils { EventBus.getDefault().post(new EBReuse("libaoChanged")); - libaoEntity.setStatus("taoed"); adapter.initLibaoDao(); adapter.notifyDataSetChanged(); @@ -432,13 +440,14 @@ public class LibaoUtils { } libaoEntity.setAvailable(libaoEntity.getAvailable() - 1); + libaoEntity.setStatus("linged"); + LibaoInfo libaoInfo = LibaoInfo.createLibaoInfo(libaoEntity); libaoInfo.setCode(libaoCode); libaoDao.add(libaoInfo); EventBus.getDefault().post(new EBReuse("libaoChanged")); - libaoEntity.setStatus("linged"); adapter.initLibaoDao(); adapter.notifyDataSetChanged(); diff --git a/app/src/main/java/com/gh/common/util/PostCommentUtils.java b/app/src/main/java/com/gh/common/util/PostCommentUtils.java index b3711d7bc3..29c4ec3232 100644 --- a/app/src/main/java/com/gh/common/util/PostCommentUtils.java +++ b/app/src/main/java/com/gh/common/util/PostCommentUtils.java @@ -2,6 +2,7 @@ package com.gh.common.util; import android.content.Context; +import com.gh.gamecenter.entity.CommentEntity; import com.gh.gamecenter.retrofit.JSONObjectResponse; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; @@ -24,13 +25,19 @@ import rx.schedulers.Schedulers; public class PostCommentUtils { public static void addCommentData(final Context context, final String newsId, final String content, - final boolean isCheck, final PostCommentListener listener) { + final boolean isCheck, final CommentEntity commentEntity, + final PostCommentListener listener) { TokenUtils.getToken(context, isCheck) .flatMap(new Func1>() { @Override public Observable call(String token) { RequestBody body = RequestBody.create(MediaType.parse("application/json"), content); - return RetrofitManager.getComment().postNewsComment(token, newsId, body); + + if (commentEntity != null) { + return RetrofitManager.getComment().postReplyComment(token, commentEntity.getId(), body); + } else { + return RetrofitManager.getComment().postNewsComment(token, newsId, body); + } } }) .subscribeOn(Schedulers.io()) @@ -47,10 +54,16 @@ public class PostCommentUtils { } } + @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) { - addCommentData(context, newsId, content, false, listener); + addCommentData(context, newsId, content, false, commentEntity, listener); return; } if (listener != null){ diff --git a/app/src/main/java/com/gh/common/util/QQUtils.java b/app/src/main/java/com/gh/common/util/QQUtils.java new file mode 100644 index 0000000000..f047c12481 --- /dev/null +++ b/app/src/main/java/com/gh/common/util/QQUtils.java @@ -0,0 +1,38 @@ +package com.gh.common.util; + +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; + +/** + * Created by khy on 2017/3/30. + */ +public class QQUtils { + + public static void startQQSession(Context context, String qq) { + if (ShareUtils.isQQClientAvailable(context)) { + //安装了QQ会直接调用QQ,打开手机QQ进行会话 QQ号:2586716223 + String str = "mqqwpa://im/chat?chat_type=wpa&uin=" + qq + "&version=1&src_type=web&web_src=oicqzone.com"; + context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(str))); + } else { + //没有安装QQ 复制账号 + ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); + cmb.setText(qq); + Utils.toast(context, "已复制" + qq); + } + } + + public static boolean joinQQGroup(Context context, String key) { + Intent intent = new Intent(); + intent.setData(Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26k%3D" + key)); + // 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + try { + context. startActivity(intent); + return true; + } catch (Exception e) { + // 未安装手Q或安装的版本不支持 + return false; + } + } +} diff --git a/app/src/main/java/com/gh/common/view/GridDivider.java b/app/src/main/java/com/gh/common/view/GridDivider.java new file mode 100644 index 0000000000..56c26889b8 --- /dev/null +++ b/app/src/main/java/com/gh/common/view/GridDivider.java @@ -0,0 +1,134 @@ +package com.gh.common.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.drawable.Drawable; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +/** + * Created by khy on 2017/3/28. + */ +public class GridDivider extends RecyclerView.ItemDecoration { + private Drawable mDividerDarwable; + private int mDividerHight = 1; + private Paint mColorPaint; + + + public final int[] ATRRS = new int[]{android.R.attr.listDivider}; + + public GridDivider(Context context) { + final TypedArray ta = context.obtainStyledAttributes(ATRRS); + this.mDividerDarwable = ta.getDrawable(0); + ta.recycle(); + } + + /* + int dividerHight 分割线的线宽 + int dividerColor 分割线的颜色 + */ + public GridDivider(Context context, int dividerHight, int dividerColor) { + this(context); + mDividerHight = dividerHight; + mColorPaint = new Paint(); + mColorPaint.setColor(dividerColor); + } + + /* + int dividerHight 分割线的线宽 + Drawable dividerDrawable 图片分割线 + */ + public GridDivider(Context context, int dividerHight, Drawable dividerDrawable) { + this(context); + mDividerHight = dividerHight; + mDividerDarwable = dividerDrawable; + } + + @Override + public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { + super.onDraw(c, parent, state); + //画水平和垂直分割线 + drawHorizontalDivider(c, parent); + drawVerticalDivider(c, parent); + } + + public void drawVerticalDivider(Canvas c, RecyclerView parent) { + final int childCount = parent.getChildCount(); + for (int i = 0; i < childCount; i++) { + final View child = parent.getChildAt(i); + final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); + + final int top = child.getTop() - params.topMargin; + final int bottom = child.getBottom() + params.bottomMargin; + + int left = 0; + int right = 0; + + //左边第一列 + if ((i % 7) == 0) { + //item左边分割线 + left = child.getLeft(); + right = left + mDividerHight; + mDividerDarwable.setBounds(left, top, right, bottom); + mDividerDarwable.draw(c); + if (mColorPaint != null) { + c.drawRect(left, top, right, bottom, mColorPaint); + } + //item右边分割线 + left = child.getRight() + params.rightMargin - mDividerHight; + right = left + mDividerHight; + } else { + //非左边第一列 + left = child.getRight() + params.rightMargin - mDividerHight; + right = left + mDividerHight; + } + //画分割线 + mDividerDarwable.setBounds(left, top, right, bottom); + mDividerDarwable.draw(c); + if (mColorPaint != null) { + c.drawRect(left, top, right, bottom, mColorPaint); + } + + } + } + + public void drawHorizontalDivider(Canvas c, RecyclerView parent) { + + final int childCount = parent.getChildCount(); + for (int i = 0; i < childCount; i++) { + final View child = parent.getChildAt(i); + RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); + + final int left = child.getLeft() - params.leftMargin - mDividerHight; + final int right = child.getRight() + params.rightMargin; + int top = 0; + int bottom = 0; + + // 最上面一行 + if ((i / 7) == 0) { + //当前item最上面的分割线 + top = child.getTop(); + //当前item下面的分割线 + bottom = top + mDividerHight; + mDividerDarwable.setBounds(left, top, right, bottom); + mDividerDarwable.draw(c); + if (mColorPaint != null) { + c.drawRect(left, top, right, bottom, mColorPaint); + } + top = child.getBottom() + params.bottomMargin; + bottom = top + mDividerHight; + } else { + top = child.getBottom() + params.bottomMargin; + bottom = top + mDividerHight; + } + //画分割线 + mDividerDarwable.setBounds(left, top, right, bottom); + mDividerDarwable.draw(c); + if (mColorPaint != null) { + c.drawRect(left, top, right, bottom, mColorPaint); + } + } + } +} diff --git a/app/src/main/java/com/gh/common/view/MarqueeView.java b/app/src/main/java/com/gh/common/view/MarqueeView.java new file mode 100644 index 0000000000..c5bdca21a3 --- /dev/null +++ b/app/src/main/java/com/gh/common/view/MarqueeView.java @@ -0,0 +1,138 @@ +package com.gh.common.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.ViewTreeObserver; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.TextView; +import android.widget.ViewFlipper; + +import com.gh.common.util.DisplayUtils; +import com.gh.gamecenter.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by khy on 2017/3/29. + */ +public class MarqueeView extends ViewFlipper { + + private Context mContext; + private List notices; + private boolean isSetAnimDuration = false; + + private int interval = 2000; + private int animDuration = 500; + private int textSize = 14; + private int textColor = 0xffffffff; + + public MarqueeView(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs, 0); + } + + private void init(Context context, AttributeSet attrs, int defStyleAttr) { + this.mContext = context; + if (notices == null) { + notices = new ArrayList<>(); + } + + TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.MarqueeViewStyle, defStyleAttr, 0); + interval = typedArray.getInteger(R.styleable.MarqueeViewStyle_mvInterval, interval); + isSetAnimDuration = typedArray.hasValue(R.styleable.MarqueeViewStyle_mvAnimDuration); + animDuration = typedArray.getInteger(R.styleable.MarqueeViewStyle_mvAnimDuration, animDuration); + if (typedArray.hasValue(R.styleable.MarqueeViewStyle_mvTextSize)) { + textSize = (int) typedArray.getDimension(R.styleable.MarqueeViewStyle_mvTextSize, textSize); + textSize = DisplayUtils.px2sp(mContext, textSize); + } + textColor = typedArray.getColor(R.styleable.MarqueeViewStyle_mvTextColor, textColor); + typedArray.recycle(); + + setFlipInterval(interval); + + Animation animIn = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_in); + if (isSetAnimDuration) animIn.setDuration(animDuration); + setInAnimation(animIn); + + Animation animOut = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_out); + if (isSetAnimDuration) animOut.setDuration(animDuration); + setOutAnimation(animOut); + } + + // 根据公告字符串启动轮播 + public void startWithText(final String notice) { + if (TextUtils.isEmpty(notice)) return; + getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + getViewTreeObserver().removeGlobalOnLayoutListener(this); + startWithFixedWidth(notice, getWidth()); + } + }); + } + + // 根据公告字符串列表启动轮播 + public void startWithList(List notices) { + setNotices(notices); + start(); + } + + // 根据宽度和公告字符串启动轮播 + private void startWithFixedWidth(String notice, int width) { + int noticeLength = notice.length(); + int dpW = DisplayUtils.px2dip(mContext, width); + int limit = dpW/textSize; + if (dpW == 0) { + throw new RuntimeException("Please set MarqueeView width !"); + } + + if (noticeLength <= limit) { + notices.add(notice); + } else { + int size = noticeLength/limit + (noticeLength%limit != 0? 1:0); + for (int i=0; i= noticeLength? noticeLength:(i+1)*limit); + notices.add(notice.substring(startIndex, endIndex)); + } + } + start(); + } + + // 启动轮播 + public boolean start() { + if (notices == null || notices.size() == 0) return false; + removeAllViews(); + for (String notice:notices) { + addView(createTextView(notice)); + } + if (notices.size() > 1) { + startFlipping(); + } + return true; + } + + // 创建ViewFlipper下的TextView + private TextView createTextView(String text) { + TextView tv = new TextView(mContext); + tv.setGravity(Gravity.LEFT|Gravity.CENTER_VERTICAL); + tv.setText(text); + tv.setTextColor(textColor); + tv.setTextSize(textSize); + return tv; + } + + public List getNotices() { + return notices; + } + + public void setNotices(List notices) { + this.notices = notices; + } + +} diff --git a/app/src/main/java/com/gh/common/view/MeasureLinearLayoutManager.java b/app/src/main/java/com/gh/common/view/MeasureLinearLayoutManager.java new file mode 100644 index 0000000000..2b14240984 --- /dev/null +++ b/app/src/main/java/com/gh/common/view/MeasureLinearLayoutManager.java @@ -0,0 +1,63 @@ +package com.gh.common.view; + +import android.content.Context; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; + +/** + * Created by khy on 2017/3/30. + */ +public class MeasureLinearLayoutManager extends LinearLayoutManager { + int height; + + public MeasureLinearLayoutManager(Context context) { + super(context); + } + + private int[] mMeasuredDimension = new int[1]; + + @Override + public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, + int widthSpec, int heightSpec) { + super.onMeasure(recycler, state, widthSpec, heightSpec); + height = 0; + + try { + for (int i = 0; i < getItemCount(); i++) { + measureScrapChild(recycler, i, + View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), + View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), + mMeasuredDimension); + height = height + mMeasuredDimension[0]; + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec, + int heightSpec, int[] measuredDimension) throws Exception { + View view = recycler.getViewForPosition(position); + if (view.getVisibility() == View.GONE) { + measuredDimension[0] = 0; + return; + } + super.measureChildWithMargins(view, 0, 0); + RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams(); + int childHeightSpec = ViewGroup.getChildMeasureSpec( + heightSpec, + getPaddingTop() + getPaddingBottom() + getDecoratedTop(view) + getDecoratedBottom(view), + p.height); + + view.measure(0, childHeightSpec); + measuredDimension[0] = getDecoratedMeasuredHeight(view) + p.bottomMargin + p.topMargin; + recycler.recycleView(view); + } + + public int getRvHeight() { + return height; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/CommentDetailActivity.java b/app/src/main/java/com/gh/gamecenter/CommentDetailActivity.java new file mode 100644 index 0000000000..e187184170 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/CommentDetailActivity.java @@ -0,0 +1,46 @@ +package com.gh.gamecenter; + +import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import com.gh.base.BaseActivity; +import com.gh.gamecenter.adapter.CommentDetailAdapter; + +import butterknife.BindView; + +/** + * Created by khy on 2017/3/22. + */ +public class CommentDetailActivity extends BaseActivity { + + @BindView(R.id.comment_detail_rv) RecyclerView mRecyclerView; + + private CommentDetailAdapter mAdapter; + private LinearLayoutManager mLayoutManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + View view = View.inflate(this, R.layout.activity_comment_detail, null); + init(view, "查看对话"); + + String commentId = getIntent().getExtras().getString("commentId"); + + mAdapter = new CommentDetailAdapter(this, commentId); + mLayoutManager = new LinearLayoutManager(this); + mRecyclerView.setLayoutManager(mLayoutManager); + 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.isOver() && !mAdapter.isLoading()) { + mAdapter.loadData(mAdapter.getItemCount()); + } + } + }); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/LibaoDetailActivity.java b/app/src/main/java/com/gh/gamecenter/LibaoDetailActivity.java index c68fb4ad20..7d8f4e59b0 100644 --- a/app/src/main/java/com/gh/gamecenter/LibaoDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/LibaoDetailActivity.java @@ -21,12 +21,14 @@ import rx.schedulers.Schedulers; * Created by khy on 2016/12/13. * */ -public class LibaoDetailActivity extends BaseDetailActivity { +public class LibaoDetailActivity extends BaseDetailActivity implements LibaoDetailAdapter.OnCodeScrollListener{ private LibaoDetailAdapter mAdapter; private LibaoEntity mLibaoEntity; + private boolean mIsScroll; + @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -43,8 +45,15 @@ public class LibaoDetailActivity extends BaseDetailActivity { iv_share.setVisibility(View.GONE); + mIsScroll = true; + mAdapter = new LibaoDetailAdapter(this, mLibaoEntity, detail_tv_download); - detail_rv_show.setLayoutManager(new LinearLayoutManager(this)); + detail_rv_show.setLayoutManager(new LinearLayoutManager(this){ + @Override + public boolean canScrollVertically() { + return mIsScroll; + } + }); detail_rv_show.addItemDecoration(new VerticalItemDecoration(this, 8, true)); detail_rv_show.setAdapter(mAdapter); @@ -123,4 +132,9 @@ public class LibaoDetailActivity extends BaseDetailActivity { reuse_tv_none_data.setText("天了噜~页面不见了"); reuse_none_data.setVisibility(View.VISIBLE); } + + @Override + public void isScroll(boolean isScroll) { + mIsScroll = isScroll; + } } diff --git a/app/src/main/java/com/gh/gamecenter/MessageDetailActivity.java b/app/src/main/java/com/gh/gamecenter/MessageDetailActivity.java index f3eb98ad94..3b7c51cb3f 100644 --- a/app/src/main/java/com/gh/gamecenter/MessageDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MessageDetailActivity.java @@ -89,6 +89,7 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail private CommentDao mCommentDao; private ConcernEntity mConcernEntity; + private CommentEntity mCommentEntity; // 回复评论的实体 用完马上清空 private String newsId; @@ -346,14 +347,13 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail newsId = mConcernEntity.getId(); } - PostCommentUtils.addCommentData(MessageDetailActivity.this, newsId, jsonObject.toString(), true, + PostCommentUtils.addCommentData(MessageDetailActivity.this, newsId, jsonObject.toString(), true, mCommentEntity, new PostCommentUtils.PostCommentListener() { @Override public void postSucced(JSONObject response) { mSendingDialog.dismiss(); toast("发表成功"); mMessageDetailEt.setText(""); - setSoftInput(false); try { mCommentDao.add(new CommentInfo(response.getString("_id")));//添加评论id到数据库, 后续判断是否是自身评论 @@ -368,6 +368,15 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail cacheObject.put("vote", 0); cacheObject.put("user", cacheUser); + if (mCommentEntity != null) { + JSONObject cacheParent = new JSONObject(); + JSONObject cacheParentUser = new JSONObject(); + cacheParentUser.put("_id", mCommentEntity.getId()); + cacheParentUser.put("name", mCommentEntity.getUser().getName()); + cacheParent.put("user", cacheParentUser); + cacheObject.put("parent", cacheParent); + } + CommentEntity commentEntity = new Gson().fromJson(cacheObject.toString(), CommentEntity.class); if (mConcernEntity != null) { adapter.addNormalComment(commentEntity); @@ -390,6 +399,8 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail showNoConnection(false); } + setSoftInput(false); + } @Override @@ -480,6 +491,12 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail mMessageDetailEt.requestFocus(); mColseCommentV.setVisibility(View.VISIBLE); + if (mCommentEntity != null && mCommentEntity.getUser() != null) { + mMessageDetailEt.setHint("回复 " + mCommentEntity.getUser().getName() + ":"); + } else { + mMessageDetailEt.setHint("优质评论会被优先展示"); + } + } else { imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); mMessageDetailCommentHintRl.setVisibility(View.VISIBLE); @@ -487,11 +504,18 @@ public class MessageDetailActivity extends BaseActivity implements MessageDetail mMessageDetailCommentRl.setVisibility(View.GONE); mMessageDetailUserRl.setVisibility(View.GONE); mColseCommentV.setVisibility(View.GONE); + + if (mCommentEntity != null) { + mCommentEntity = null; // 清空当前评论实体 + mMessageDetailEt.setHint("优质评论会被优先展示"); + mMessageDetailEt.setText(""); + } } } @Override - public void showSoftInput() { + public void showSoftInput(CommentEntity entity) { + mCommentEntity = entity; setSoftInput(true); } diff --git a/app/src/main/java/com/gh/gamecenter/NewGameDetailActivity.java b/app/src/main/java/com/gh/gamecenter/NewGameDetailActivity.java new file mode 100644 index 0000000000..023ebcc7ea --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/NewGameDetailActivity.java @@ -0,0 +1,651 @@ +package com.gh.gamecenter; + +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.facebook.drawee.view.SimpleDraweeView; +import com.gh.base.AppController; +import com.gh.base.BaseFragmentActivity; +import com.gh.common.constant.Config; +import com.gh.common.util.ConcernUtils; +import com.gh.common.util.DataCollectionUtils; +import com.gh.common.util.DataUtils; +import com.gh.common.util.DialogUtils; +import com.gh.common.util.FileUtils; +import com.gh.common.util.GameUtils; +import com.gh.common.util.ImageUtils; +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.NoScrollableViewPager; +import com.gh.download.DataWatcher; +import com.gh.download.DownloadEntity; +import com.gh.download.DownloadManager; +import com.gh.gamecenter.adapter.FragmentAdapter; +import com.gh.gamecenter.entity.ApkEntity; +import com.gh.gamecenter.entity.GameDetailEntity; +import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.eventbus.EBDownloadStatus; +import com.gh.gamecenter.eventbus.EBMoveTop; +import com.gh.gamecenter.eventbus.EBPackage; +import com.gh.gamecenter.gamedetail.FuLiFragment; +import com.gh.gamecenter.gamedetail.XinXiFragment; +import com.gh.gamecenter.manager.ConcernManager; +import com.gh.gamecenter.manager.PackageManager; +import com.gh.gamecenter.retrofit.Response; +import com.gh.gamecenter.retrofit.RetrofitManager; +import com.jakewharton.rxbinding.view.RxView; +import com.tencent.tauth.Tencent; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import butterknife.BindView; +import butterknife.OnClick; +import retrofit2.adapter.rxjava.HttpException; +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Action1; +import rx.schedulers.Schedulers; + +/** + * Created by khy on 2017/3/24. + */ +public class NewGameDetailActivity extends BaseFragmentActivity { + + @BindView(R.id.gamedetail_vp) NoScrollableViewPager mViewPager; + @BindView(R.id.gamedetail_top) RelativeLayout mTopLl; + @BindView(R.id.gamedetail_tabbar_rl) RelativeLayout mTabBarRl; + @BindView(R.id.reuse_ll_loading) LinearLayout mLoading; + @BindView(R.id.reuse_no_connection) LinearLayout mNoConnection; + @BindView(R.id.actionbar_tv_title) TextView mTitle; + @BindView(R.id.gamedetail_iv_thumb) SimpleDraweeView mGameIcon; + @BindView(R.id.gamedetail_tv_name) TextView mGameName; + @BindView(R.id.gamedetail_tv_info) TextView mGameInfo; + @BindView(R.id.gamedetail_tv_concern) TextView mGameConcern; + @BindView(R.id.gamedetail_tabbar) LinearLayout mTabBar; + @BindView(R.id.gamedetail_tabbar_fuli) TextView mTanBarFuLi; + @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; + @BindView(R.id.detail_tv_download) TextView mDownloadTv; + @BindView(R.id.detail_tv_per) TextView mDownloadPer; + @BindView(R.id.detail_pb_progressbar) ProgressBar mDownloadPb; + + private RelativeLayout.LayoutParams top_rparams; + + private ConcernManager mConcernManager; + + private String mGameId; + + private GameEntity mGameEntity; + private DownloadEntity mDownloadEntity; + + private String downloadAddWord; + private String downloadOffText; + + private String name; + private String title; + private String shareCode; + + private DataWatcher dataWatcher = new DataWatcher() { + @Override + public void onDataChanged(DownloadEntity downloadEntity) { + if (mGameEntity != null && mGameEntity.getApk().size() == 1) { + String url = mGameEntity.getApk().get(0).getUrl(); + if (url.equals(downloadEntity.getUrl())) { + if (!"pause".equals(DownloadManager.getInstance(NewGameDetailActivity.this). + getStatus(downloadEntity.getUrl()))) { + mDownloadEntity = downloadEntity; + invalidate(); + } + } + } + } + }; + + //接收QQ或者QQ空间分享回调 + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == com.tencent.connect.common.Constants.REQUEST_QQ_SHARE + || requestCode == com.tencent.connect.common.Constants.REQUEST_QZONE_SHARE) { + Tencent.onActivityResultData(requestCode, resultCode, data, ShareUtils.getInstance(this).QqShareListener); + } + + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + View view = View.inflate(NewGameDetailActivity.this, R.layout.activity_game_detail, null); + init(view); + + mViewPager.setScrollable(false); + + mConcernManager = new ConcernManager(NewGameDetailActivity.this); + + name = "游戏详情"; + + mGameId = getIntent().getStringExtra("gameId"); + if (getIntent().getBundleExtra("data") != null) { + mGameId = getIntent().getBundleExtra("data").getString("gameId"); + } + + if (mGameId == null) { + mGameEntity = (GameEntity) AppController.get("GameEntity", false); + if (mGameEntity != null) { + mGameId = mGameEntity.getId(); + mTitle.setText(mGameEntity.getName()); + name = mGameEntity.getName(); + } + } + if (mGameEntity != null) { + getGameDetail(); + } else if (mGameId != null) { + getGameDigest(); + } else { + mLoading.setVisibility(View.GONE); + mNoConnection.setVisibility(View.VISIBLE); + } + + } + + private void initGameDetailTop() { + + mLoading.setVisibility(View.GONE); + mTopLl.setVisibility(View.VISIBLE); + + top_rparams = (RelativeLayout.LayoutParams) mTopLl.getLayoutParams(); + + if (mConcernManager.isConcern(mGameEntity.getId())) { + mGameConcern.setText("取消关注"); + mGameConcern.setBackgroundResource(R.drawable.border_red_bg); + mGameConcern.setTextColor(Color.parseColor("#ff4147")); + } else { + mGameConcern.setText("关注"); + mGameConcern.setBackgroundResource(R.drawable.textview_concern_red_style); + mGameConcern.setTextColor(0xffffffff); + } + + mGameName.setText(mGameEntity.getName()); + ImageUtils.display(mGameIcon, mGameEntity.getIcon()); + if (mGameEntity.getApk() == null || mGameEntity.getApk().isEmpty()) { + mGameInfo.setText(""); + } else { + ApkEntity apkEntity = mGameEntity.getApk().get(0); + mGameInfo.setText(String.format("V%s | %s", apkEntity.getVersion(), apkEntity.getSize())); + } + mGameConcern.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + final TextView concern = (TextView) v; + if ("关注".equals(concern.getText().toString())) { + + Map kv = new HashMap<>(); + kv.put("状态", "关注"); + DataUtils.onEvent(NewGameDetailActivity.this, "游戏关注", mGameEntity.getName(), kv); + + Map kv2 = new HashMap<>(); + kv2.put("点击", "关注"); + DataUtils.onEvent(NewGameDetailActivity.this, "插件数据", mGameEntity.getName(), kv2); + + DataCollectionUtils.uploadConcern(NewGameDetailActivity.this, mGameEntity.getName(), mGameEntity.getId(), "关注"); + + mConcernManager.addByEntity(mGameEntity); + concern.setText("取消关注"); + concern.setBackgroundResource(R.drawable.border_red_bg); + concern.setTextColor(Color.parseColor("#ff4147")); + + Toast.makeText(NewGameDetailActivity.this, "关注成功", Toast.LENGTH_SHORT).show(); + + // 添加关注 + ConcernUtils.postConcernGameId(NewGameDetailActivity.this, mGameEntity.getId()); + } else { + Map kv2 = new HashMap<>(); + kv2.put("点击", "取消关注"); + DataUtils.onEvent(NewGameDetailActivity.this, "插件数据", mGameEntity.getName(), kv2); + + DialogUtils.showCancelDialog(NewGameDetailActivity.this, new DialogUtils.ConfiremListener() { + @Override + public void onConfirem() { + Map kv = new HashMap<>(); + kv.put("状态", "取消关注"); + DataUtils.onEvent(NewGameDetailActivity.this, "游戏关注", mGameEntity.getName(), kv); + + DataCollectionUtils.uploadConcern(NewGameDetailActivity.this, + mGameEntity.getName(), mGameEntity.getId(), "取消关注"); + + mConcernManager.deleteConcern(mGameEntity.getId()); + concern.setText("关注"); + concern.setBackgroundResource(R.drawable.textview_concern_red_style); + concern.setTextColor(0xffffffff); + + // 取消关注 + ConcernUtils.deleteConcernData(NewGameDetailActivity.this, mGameEntity.getId()); + } + }); + } + } + }); + + } + + // 获取游戏摘要 + private void getGameDigest() { + RetrofitManager.getApi().getGameDigest(mGameId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(GameEntity response) { + mGameEntity = response; + AppController.put("GameEntity", response); + + mTitle.setText(mGameEntity.getName()); + mGameId = response.getId(); + name = mGameEntity.getName(); + getGameDetail(); + } + + @Override + public void onFailure(HttpException e) { + mLoading.setVisibility(View.GONE); + mNoConnection.setVisibility(View.VISIBLE); + } + }); + } + + // 获取游戏详情 + public void getGameDetail() { + RetrofitManager.getApi().getGameDetail(mGameId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(GameDetailEntity response) { + // 过滤过期公告 + if (response.getNotice() != null && response.getNotice().size() > 0) { + long l = System.currentTimeMillis(); + for (int i = 0; i < response.getNotice().size(); i++) { + if (l > (response.getNotice().get(i).getOvertime()*1000)) { + response.getNotice().remove(i); + i --; + } + } + } + + AppController.put("GameDetailEntity", response); + + downloadAddWord = response.getDownloadAddWord(); + downloadOffText = response.getDownloadOffText(); + shareCode = response.getShareCode(); + + List list = new ArrayList<>(); + if (mGameEntity != null && !mGameEntity.isLibaoExists() + && TextUtils.isEmpty(response.getFulishuoming()) + && (response.getKaiFuServer() == null + || (response.getKaiFuServer() != null + && response.getKaiFuServer().size() == 0))) { + XinXiFragment xinXiFragment = new XinXiFragment(); + xinXiFragment.setIsTabBar(true); + list.add(xinXiFragment); + mTabBar.setVisibility(View.GONE); + } else { + list.add(new FuLiFragment()); + list.add(new XinXiFragment()); + } + + mViewPager.setAdapter(new FragmentAdapter(getSupportFragmentManager(), list)); + initGameDetailTop(); + + initDownload(true); + } + + @Override + public void onError(Throwable e) { + super.onError(e); + } + + @Override + public void onFailure(HttpException e) { + + } + }); + } + + public void onEventMainThread(EBMoveTop moveTop) { + if (moveTop.getType().equals("top")) { + if (moveTop.getVisibility() == View.VISIBLE && mTabBar.getVisibility() == View.VISIBLE) { + mTabBarRl.setVisibility(View.VISIBLE); + } else { + mTabBarRl.setVisibility( View.GONE); + } + int topMargin = moveTop.getTopMargin(); + if (top_rparams != null && top_rparams.topMargin != topMargin) { + if (topMargin > -120) { + mTitle.setVisibility(View.GONE); + } else { + mTitle.setVisibility(View.VISIBLE); + } + top_rparams.topMargin = moveTop.getTopMargin(); + mTopLl.setLayoutParams(top_rparams); + } + } + } + + // 接收下载被删除消息 + public void onEvent(EBDownloadStatus status) { + if ("delete".equals(status.getStatus()) + && mGameEntity != null + && mGameEntity.getApk() != null + && mGameEntity.getApk().size() == 1) { + String url = mGameEntity.getApk().get(0).getUrl(); + if (url.equals(status.getUrl())) { + initDownload(false); + } + } + } + + // 接受安装、卸载消息 + public void onEventMainThread(EBPackage busFour) { + if (mGameEntity != null + && mGameEntity.getApk() != null + && mGameEntity.getApk().size() == 1) { + String packageName = mGameEntity.getApk().get(0).getPackageName(); + if (packageName.equals(busFour.getPackageName())) { + initDownload(false); + } + } + } + + + @Override + protected void onResume() { + super.onResume(); + if (mGameEntity != null + && mGameEntity.getApk() != null + && mGameEntity.getApk().size() == 1) { + initDownload(true); + } + DownloadManager.getInstance(this).addObserver(dataWatcher); + } + + @Override + protected void onPause() { + super.onPause(); + DownloadManager.getInstance(this).removeObserver(dataWatcher); + } + + + @OnClick({R.id.detail_tv_download, R.id.detail_pb_progressbar, R.id.gamedetail_suggest + , 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) { + if (v == mDownloadTv) { + if (mGameEntity != null && !mGameEntity.getApk().isEmpty()) { + if (mGameEntity.getApk().size() == 1) { + if (NetworkUtils.isWifiConnected(this)) { + download(); + } else { + DialogUtils.showDownloadDialog(this, new DialogUtils.ConfiremListener() { + @Override + public void onConfirem() { + download(); + } + }); + } + } else { + DownloadDialog.getInstance(this).showPopupWindow(v, mGameEntity, entrance, name + ":" + title); + } + } else { + toast("稍等片刻~!游戏正在上传中..."); + } + } else if (v == mDownloadPb || v == mDownloadPer) { + String str = mDownloadPer.getText().toString(); + if ("下载中".equals(str)) { + Intent intent = new Intent(this, DownloadManagerActivity.class); + intent.putExtra("currentItem", 1); + intent.putExtra("url", mGameEntity.getApk().get(0).getUrl()); + intent.putExtra("entrance", entrance + "+(" + name + "[" + title + "])"); + startActivity(intent); + } else if ("安装".equals(str)) { + PackageUtils.launchSetup(this, mDownloadEntity.getPath()); + } + } else if (v == mTanBarFuLi || v == mTanBarFuLiTv) { + mTanBarFuLi.setTextColor(Color.WHITE); + mTanBarFuLiTv.setTextColor(Color.WHITE); + mTanBarFuLi.setBackgroundResource(R.drawable.gamedetail_tag_select_bg); + mTanBarFuLiTv.setBackgroundResource(R.drawable.gamedetail_tag_select_bg); + mTanBarXinXi.setTextColor(Color.BLACK); + mTanBarXinXiTv.setTextColor(Color.BLACK); + mTanBarXinXi.setBackgroundDrawable(new ColorDrawable(0)); + mTanBarXinXiTv.setBackgroundDrawable(new ColorDrawable(0)); + mViewPager.setCurrentItem(0); + + } else if (v == mTanBarXinXi || v == mTanBarXinXiTv) { + mTanBarXinXiTv.setTextColor(Color.WHITE); + mTanBarXinXi.setTextColor(Color.WHITE); + mTanBarXinXiTv.setBackgroundResource(R.drawable.gamedetail_tag_unselect_bg); + mTanBarXinXi.setBackgroundResource(R.drawable.gamedetail_tag_unselect_bg); + mTanBarFuLi.setTextColor(Color.BLACK); + mTanBarFuLiTv.setTextColor(Color.BLACK); + mTanBarFuLi.setBackgroundDrawable(new ColorDrawable(0)); + mTanBarFuLiTv.setBackgroundDrawable(new ColorDrawable(0)); + mViewPager.setCurrentItem(1); + } else if (v == mShareIv) { + if (TextUtils.isEmpty(shareCode)) return; + // 防抖处理 + RxView.clicks(mShareIv) + .throttleFirst(1, TimeUnit.SECONDS) + .subscribe(new Action1() { + @Override + public void call(Void aVoid) { + Map kv = new HashMap<>(); + kv.put("点击", "分享"); + DataUtils.onEvent(NewGameDetailActivity.this, "插件数据", mGameEntity.getName(), kv); + + DataCollectionUtils.uploadClick(NewGameDetailActivity.this, "分享", "游戏详情", mGameEntity.getName()); + + String url = "http://www.ghzhushou.com/game/" + shareCode; + 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); + } + } + + private void download() { + String str = mDownloadTv.getText().toString(); + if (str.contains("启动")) { + DataUtils.onGameLaunchEvent(this, mGameEntity.getName(), mGameEntity.getApk().get(0).getPlatform(), name); + + PackageUtils.launchApplicationByPackageName(this, mGameEntity.getApk().get(0).getPackageName()); + } else { + String method; + if (str.contains("更新")) { + method = "更新"; + } else if (str.contains("插件化")) { + method = "插件化"; + } else { + method = "下载"; + } + ApkEntity apkEntity = mGameEntity.getApk().get(0); + String msg = FileUtils.isCanDownload(this, apkEntity.getSize()); + if (TextUtils.isEmpty(msg)) { + DataUtils.onGameDownloadEvent(this, mGameEntity.getName(), apkEntity.getPlatform(), entrance, "下载开始"); + + DownloadManager.createDownload(this, apkEntity, mGameEntity, method, entrance, name + ":" + title); + + mDownloadTv.setVisibility(View.GONE); + mDownloadPb.setVisibility(View.VISIBLE); + mDownloadPer.setVisibility(View.VISIBLE); + mDownloadPb.setProgress(0); + mDownloadPer.setText("0.0%"); + + DownloadManager.getInstance(NewGameDetailActivity.this).putStatus(apkEntity.getUrl(), "downloading"); + } else { + toast(msg); + } + } + } + + private void invalidate() { + mDownloadPb.setProgress((int) (mDownloadEntity.getPercent() * 10)); + mDownloadPer.setTextColor(0xFFFFFFFF); + switch (mDownloadEntity.getStatus()) { + case downloading: + case pause: + case timeout: + case neterror: + case waiting: + mDownloadPer.setText("下载中"); + break; + case done: + mDownloadPer.setText("安装"); + if (mDownloadEntity.isPluggable() + && PackageManager.isInstalled(mDownloadEntity.getPackageName())) { + mDownloadPb.setProgressDrawable(getResources().getDrawable(R.drawable.progressbar_plugin_radius_style)); + } else { + mDownloadPb.setProgressDrawable(getResources().getDrawable(R.drawable.progressbar_normal_radius_style)); + } + break; + case cancel: + case hijack: + case notfound: + initDownload(false); + break; + default: + break; + } + } + + protected void initDownload(boolean isCheck) { + if (Config.isShow(this)) { + mDownloadBottom.setVisibility(View.VISIBLE); + } else { + mDownloadBottom.setVisibility(View.GONE); + } + if (mGameEntity != null && "光环助手".equals(mGameEntity.getName())) { + mDownloadBottom.setVisibility(View.GONE); + } else if (mGameEntity == null || mGameEntity.getApk().isEmpty()) { + mDownloadTv.setVisibility(View.VISIBLE); + mDownloadPb.setVisibility(View.GONE); + mDownloadPer.setVisibility(View.GONE); + if (TextUtils.isEmpty(downloadOffText)) { + mDownloadTv.setText("暂无下载"); + } else { + mDownloadTv.setText(downloadOffText); + } + mDownloadTv.setBackgroundResource(R.drawable.game_item_btn_pause_style); + mDownloadTv.setTextColor(0xFF999999); + mDownloadTv.setClickable(false); + } else { + mDownloadTv.setVisibility(View.VISIBLE); + mDownloadPb.setVisibility(View.GONE); + mDownloadPer.setVisibility(View.GONE); + boolean isInstalled = false; + if (mGameEntity.getApk() != null && mGameEntity.getApk().size() == 1 + && PackageManager.isInstalled(mGameEntity.getApk().get(0).getPackageName())) { + isInstalled = true; + } + if (isInstalled) { + if (PackageManager.isCanUpdate(mGameEntity.getId(), mGameEntity.getApk().get(0).getPackageName())) { + if (TextUtils.isEmpty(downloadAddWord)) { + mDownloadTv.setBackgroundResource( + R.drawable.game_item_btn_download_style); + mDownloadTv.setText(String.format("更新《%s》", + mGameEntity.getName())); + } else { + mDownloadTv.setBackgroundResource( + R.drawable.game_item_btn_download_style); + mDownloadTv.setText(String.format("更新《%s》%s", + mGameEntity.getName(), downloadAddWord)); + } + } else { + if (mGameEntity.getTag() != null && mGameEntity.getTag().size() != 0 + && !TextUtils.isEmpty(mGameEntity.getApk().get(0).getGhVersion()) + && !PackageUtils.isSignature(this, mGameEntity.getApk().get(0).getPackageName())) { + if (TextUtils.isEmpty(downloadAddWord)) { + mDownloadTv.setBackgroundResource( + R.drawable.game_item_btn_plugin_style); + mDownloadTv.setText(String.format("插件化《%s》", + mGameEntity.getName())); + } else { + mDownloadTv.setBackgroundResource( + R.drawable.game_item_btn_plugin_style); + mDownloadTv.setText(String.format("插件化《%s》%s", + mGameEntity.getName(), downloadAddWord)); + } + } else { + if (TextUtils.isEmpty(downloadAddWord)) { + mDownloadTv.setBackgroundResource( + R.drawable.game_item_btn_launch_style); + mDownloadTv.setText(String.format("启动《%s》", + mGameEntity.getName())); + } else { + mDownloadTv.setBackgroundResource( + R.drawable.game_item_btn_launch_style); + mDownloadTv.setText(String.format("启动《%s》%s", + mGameEntity.getName(), downloadAddWord)); + } + } + } + } else { + String status = GameUtils.getDownloadBtnText(this, mGameEntity); + if ("插件化".equals(status)) { + mDownloadTv.setBackgroundResource(R.drawable.game_item_btn_plugin_style); + } else if ("打开".equals(status)) { + mDownloadTv.setBackgroundResource(R.drawable.game_item_btn_launch_style); + } else { + mDownloadTv.setBackgroundResource(R.drawable.game_item_btn_download_style); + } + + if (TextUtils.isEmpty(downloadAddWord)) { + mDownloadTv.setText(String.format(status + "《%s》", + mGameEntity.getName())); + } else { + mDownloadTv.setText(String.format(status + "《%s》%s", + mGameEntity.getName(), downloadAddWord)); + } + } + } + if (isCheck && mGameEntity != null + && mGameEntity.getApk() != null + && mGameEntity.getApk().size() == 1) { + String url = mGameEntity.getApk().get(0).getUrl(); + DownloadEntity downloadEntity = DownloadManager.getInstance(getApplicationContext()).get(url); + if (downloadEntity != null) { + mDownloadEntity = downloadEntity; + mDownloadTv.setVisibility(View.GONE); + mDownloadPb.setVisibility(View.VISIBLE); + mDownloadPer.setVisibility(View.VISIBLE); + invalidate(); + } + } + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/NewSuggestActivity.java b/app/src/main/java/com/gh/gamecenter/NewSuggestActivity.java new file mode 100644 index 0000000000..a1fc27c2f7 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/NewSuggestActivity.java @@ -0,0 +1,301 @@ +package com.gh.gamecenter; + +import android.app.Dialog; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Rect; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.provider.MediaStore; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewTreeObserver; +import android.view.Window; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; + +import com.gh.base.BaseActivity; +import com.gh.common.util.Utils; +import com.gh.gamecenter.entity.InstallGameEntity; +import com.gh.gamecenter.suggest.SuggestPicAdapter; +import com.gh.gamecenter.suggest.SuggestSelectGameAdapter; +import com.gh.gamecenter.suggest.SuggestTypeAdapter; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * Created by khy on 2017/3/31. + */ +public class NewSuggestActivity extends BaseActivity implements SuggestTypeAdapter.OnSelectTypeListener { + + @BindView(R.id.suggest_content_et) + EditText mSuggestContentEt; + @BindView(R.id.suggest_pic_rv) + RecyclerView mSuggestPicRv; + @BindView(R.id.suggest_news_link_et) + EditText mSuggestNewsLinkEt; + @BindView(R.id.suggest_news_link_ll) + LinearLayout mSuggestNewsLinkLl; + @BindView(R.id.suggest_email_et) + EditText mSuggestEmailEt; + @BindView(R.id.suggest_post_btn) + TextView mSuggestPostBtn; + @BindView(R.id.suggest_post_ll) + LinearLayout suggestPostLl; + @BindView(R.id.suggest_type_rv) + RecyclerView mTypeRv; + @BindView(R.id.suggest_select_game) + TextView mSuggestSelectGame; + @BindView(R.id.suggest_game_text) + TextView mSuggestGameText; + @BindView(R.id.suggest_game_ll) + LinearLayout mSuggestGameLl; + @BindView(R.id.suggest_scrollview) + ScrollView mScrollView; + + private SuggestPicAdapter mAdapter; + + private int curType = -1; + + private Dialog dialog; + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (data != null && requestCode == 0x233) { + Uri selectedImage = data.getData(); + if (selectedImage == null) { + return; + } + String[] filePathColumn = { MediaStore.Images.Media.DATA }; + + Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); + if (cursor == null) { + return; + } + cursor.moveToFirst(); + + int columnIndex = cursor.getColumnIndex(filePathColumn[0]); + String picturePath = cursor.getString(columnIndex); + cursor.close(); + + Utils.log("picturePath = " + picturePath); + + mAdapter.addFileList(picturePath); + + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + 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"); + + mTypeRv.setLayoutManager(new GridLayoutManager(this, 2){ + @Override + public boolean canScrollVertically() { + return false; + } + }); + mTypeRv.setAdapter(new SuggestTypeAdapter(this, curType)); + + mSuggestPicRv.setLayoutManager(new GridLayoutManager(this, 5){ + @Override + public boolean canScrollVertically() { + return false; + } + }); + mAdapter = new SuggestPicAdapter(this); + mSuggestPicRv.setAdapter(mAdapter); + + if (Build.VERSION.SDK_INT >= 19) { + //解决透明沉浸栏和软键盘冲突(重置ScrollView高度) + final View decorView=getWindow().getDecorView(); + decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + Rect rect=new Rect(); + decorView.getWindowVisibleDisplayFrame(rect); + int screenHeight = decorView.getRootView().getHeight(); + int heightDifference = screenHeight-rect.bottom;//计算软键盘占有的高度 = 屏幕高度 - 视图可见高度 + RelativeLayout.LayoutParams layoutParams= (RelativeLayout.LayoutParams) mScrollView.getLayoutParams(); + layoutParams.setMargins(0,0,0,heightDifference);//设置ScrollView的marginBottom的值为软键盘占有的高度即可 + mScrollView.requestLayout(); + } + }); + } + + if (!TextUtils.isEmpty(suggestContent)) { + mSuggestContentEt.setText(suggestContent); + } + + if (curType == 5) { + mSuggestGameLl.setVisibility(View.GONE); + mSuggestContentEt.setVisibility(View.VISIBLE); + } else { + initSuggest(curType); + } + } + + @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()); + + break; + case R.id.suggest_select_game: + showSelectDialog(); + break; + case R.id.suggest_game_text: + mSuggestGameLl.setVisibility(View.GONE); + mSuggestContentEt.setVisibility(View.VISIBLE); + break; + } + } + + 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); + TextView back = (TextView) view.findViewById(R.id.dialog_suggest_game_back); + ProgressBar pb = (ProgressBar) view.findViewById(R.id.dialog_suggest_game_load); + 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(); + + back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.cancel(); + } + }); + } + + + @Override + public void onType(int type) { + curType = type; + + mSuggestPicRv.postDelayed(new Runnable() { + + @Override + public void run() { + //将ScrollView滚动到底 + mScrollView.fullScroll(View.FOCUS_DOWN); + } + }, 100); + initSuggest(type); + } + + private void initSuggest(int type) { + switch (type) { + case 1: + mSuggestContentEt.setHint("请详细描述你遇到的问题... \n ↓↓你还可以上传截图"); + mSuggestNewsLinkLl.setVisibility(View.GONE); + mSuggestContentEt.setVisibility(View.VISIBLE); + mSuggestGameLl.setVisibility(View.GONE); + break; + case 2: + mSuggestContentEt.setHint("请详细描述你的建议... \n ↓↓你还可以上传截图"); + mSuggestNewsLinkLl.setVisibility(View.GONE); + mSuggestContentEt.setVisibility(View.VISIBLE); + mSuggestGameLl.setVisibility(View.GONE); + break; + case 3: + mSuggestContentEt.setHint("请详细描述闪退之前你所进行的操作... \n ↓↓你还可以上传截图"); + mSuggestNewsLinkLl.setVisibility(View.GONE); + mSuggestContentEt.setVisibility(View.VISIBLE); + mSuggestGameLl.setVisibility(View.GONE); + break; + case 4: + mSuggestContentEt.setHint("请写上游戏名字,以及具体遇到的问题... \n ↓↓你还可以上传截图"); + mSuggestNewsLinkLl.setVisibility(View.GONE); + mSuggestContentEt.setVisibility(View.VISIBLE); + mSuggestGameLl.setVisibility(View.GONE); + break; + case 5: + mSuggestNewsLinkLl.setVisibility(View.GONE); + mSuggestGameLl.setVisibility(View.VISIBLE); + mSuggestContentEt.setVisibility(View.GONE); + break; + case 6: + mSuggestContentEt.setHint("简单介绍文章内容,然后在下面填写文章链接... \n ↓↓你还可以上传截图"); + mSuggestNewsLinkLl.setVisibility(View.VISIBLE); + mSuggestContentEt.setVisibility(View.VISIBLE); + mSuggestGameLl.setVisibility(View.GONE); + break; + } + } + + @Override + public void loadDone(Object obj) { + super.loadDone(obj); + if (dialog != null) { + dialog.cancel(); + } + + mSuggestGameLl.setVisibility(View.GONE); + mSuggestContentEt.setVisibility(View.VISIBLE); + InstallGameEntity entity = (InstallGameEntity) obj; + mSuggestContentEt.setText("推荐收录:" + entity.getGameName() + "(" + entity.getPackageName() + ", " + entity.getGameVersion() + ")"); + } + + public String readFromFile(){ + + if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { + + File file = new File(getExternalFilesDir(null).getPath() + "/log"); + if (file.isFile()) return "检测log文件夹是文件"; + + File[] files = file.listFiles(); + if (files == null || files.length == 0) return "log文件夹为空" + file.getPath(); + File targetFile = files[files.length - 1]; + + try{ + if(!targetFile.exists()){ + targetFile.createNewFile(); + return "No File error "; + }else{ + InputStream in = new BufferedInputStream(new FileInputStream(targetFile)); + BufferedReader br= new BufferedReader(new InputStreamReader(in, "UTF-8")); + String tmp; + StringBuffer string = new StringBuffer(); + while((tmp=br.readLine())!=null){ + string.append(tmp); + } + br.close(); + in.close(); + return string.toString(); + } + } catch (Exception e) { + return e.toString(); + } + }else{ + return "SD Card error"; + } + } +} diff --git a/app/src/main/java/com/gh/gamecenter/SettingActivity.java b/app/src/main/java/com/gh/gamecenter/SettingActivity.java index fd0edd837e..8a92be828d 100644 --- a/app/src/main/java/com/gh/gamecenter/SettingActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SettingActivity.java @@ -71,7 +71,7 @@ public class SettingActivity extends BaseActivity implements OnClickListener { findViewById(R.id.setting_rl_autoinstall).setOnClickListener(this); findViewById(R.id.setting_rl_autodelete).setOnClickListener(this); findViewById(R.id.setting_rl_deletedata).setOnClickListener(this); - findViewById(R.id.setting_rl_feedback).setOnClickListener(this); +// findViewById(R.id.setting_rl_feedback).setOnClickListener(this); findViewById(R.id.setting_rl_cache).setOnClickListener(this); findViewById(R.id.setting_cv_font_size).setOnClickListener(this); findViewById(R.id.setting_rl_concerngame).setOnClickListener(this); @@ -189,11 +189,11 @@ public class SettingActivity extends BaseActivity implements OnClickListener { } }); break; - case R.id.setting_rl_feedback: - Intent intent = new Intent(SettingActivity.this, SuggestionActivity.class); - intent.putExtra("entrance", "(设置)"); - startActivity(intent); - break; +// case R.id.setting_rl_feedback: +// Intent intent = new Intent(SettingActivity.this, SuggestionActivity.class); +// intent.putExtra("entrance", "(设置)"); +// startActivity(intent); +// break; case R.id.setting_cv_font_size: fontSize(); break; diff --git a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java index 14a02e08aa..c3655d2374 100644 --- a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java @@ -14,6 +14,7 @@ import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; import com.gh.base.BaseActivity; import com.gh.common.util.DisplayUtils; import com.gh.common.util.DownloadItemUtils; +import com.gh.common.util.Utils; import com.gh.common.view.VerticalItemDecoration; import com.gh.download.DataWatcher; import com.gh.download.DownloadEntity; @@ -49,6 +50,8 @@ public class SubjectActivity extends BaseActivity implements SubjectTypeAdapter private int page = 1; + private String type; + private boolean isEverpause = false; // 黄壮华 添加观察者 修改2015/8/15 @@ -82,13 +85,15 @@ public class SubjectActivity extends BaseActivity implements SubjectTypeAdapter } init(contentView, name); + type = "全部"; + reuse_no_connection.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { subject_pb_loading.setVisibility(View.VISIBLE); subject_list.setVisibility(View.VISIBLE); reuse_no_connection.setVisibility(View.GONE); - adapter = new SubjectAdapter(SubjectActivity.this); + adapter = new SubjectAdapter(SubjectActivity.this, type); subject_list.setAdapter(adapter); } }); @@ -98,17 +103,16 @@ public class SubjectActivity extends BaseActivity implements SubjectTypeAdapter subject_list.addItemDecoration(new VerticalItemDecoration(this, 8, true)); subject_list.setHasFixedSize(true); subject_list.setLayoutManager(layoutManager); - adapter = new SubjectAdapter(this); + adapter = new SubjectAdapter(this, type); subject_list.setAdapter(adapter); subject_list.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); - if (adapter.isLoaded() && newState == RecyclerView.SCROLL_STATE_IDLE + if (!adapter.isRemove() && adapter.isLoaded() && newState == RecyclerView.SCROLL_STATE_IDLE && adapter.getItemCount() == layoutManager.findLastVisibleItemPosition() + 1){ - page++; - adapter.initList(page); + adapter.initList(page, type); } } }); @@ -162,6 +166,7 @@ public class SubjectActivity extends BaseActivity implements SubjectTypeAdapter if (subject_pb_loading != null && subject_pb_loading.getVisibility() == View.VISIBLE) { subject_pb_loading.setVisibility(View.GONE); } + page ++; } @Override @@ -225,7 +230,7 @@ public class SubjectActivity extends BaseActivity implements SubjectTypeAdapter subject_list.setVisibility(View.VISIBLE); subject_pb_loading.setVisibility(View.VISIBLE); reuse_no_connection.setVisibility(View.GONE); - adapter = new SubjectAdapter(SubjectActivity.this); + adapter = new SubjectAdapter(SubjectActivity.this, type); subject_list.setAdapter(adapter); } } @@ -252,6 +257,13 @@ public class SubjectActivity extends BaseActivity implements SubjectTypeAdapter @Override public void onSelectType(String type) { - + Utils.toast(this, type); + page = 1; + this.type = type; + subject_list.setVisibility(View.VISIBLE); + subject_pb_loading.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + adapter = new SubjectAdapter(this, type); + subject_list.setAdapter(adapter); } } diff --git a/app/src/main/java/com/gh/gamecenter/SuggestSelectActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestSelectActivity.java new file mode 100644 index 0000000000..eba69ca6d1 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/SuggestSelectActivity.java @@ -0,0 +1,61 @@ +package com.gh.gamecenter; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.RelativeLayout; + +import com.gh.base.BaseActivity; + +import butterknife.BindView; +import butterknife.OnClick; + +/** + * Created by khy on 2017/3/31. + */ +public class SuggestSelectActivity extends BaseActivity { + @BindView(R.id.suggest_type1) RelativeLayout mType1; + @BindView(R.id.suggest_type2) RelativeLayout mType2; + @BindView(R.id.suggest_type3) RelativeLayout mType3; + @BindView(R.id.suggest_type4) RelativeLayout mType4; + @BindView(R.id.suggest_type5) RelativeLayout mType5; + @BindView(R.id.suggest_type6) RelativeLayout mType6; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + View view = View.inflate(this, R.layout.activity_suggest_select, null); + init(view, "意见反馈"); + } + + @OnClick({R.id.suggest_type1, R.id.suggest_type2, R.id.suggest_type3 + , R.id.suggest_type4, R.id.suggest_type5, R.id.suggest_type6}) + public void OnClick(View view){ + int type = 1; + switch (view.getId()) { + case R.id.suggest_type1: + type = 1; + break; + case R.id.suggest_type2: + type = 2; + break; + case R.id.suggest_type3: + type = 3; + break; + case R.id.suggest_type4: + type = 4; + break; + case R.id.suggest_type5: + type = 5; + break; + case R.id.suggest_type6: + type = 6; + break; + } + + Intent intent = new Intent(this, NewSuggestActivity.class); + intent.putExtra("suggestType", type); + startActivity(intent); + + } +} diff --git a/app/src/main/java/com/gh/gamecenter/adapter/CommentDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/CommentDetailAdapter.java new file mode 100644 index 0000000000..56ddbe7e1b --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/adapter/CommentDetailAdapter.java @@ -0,0 +1,259 @@ +package com.gh.gamecenter.adapter; + +import android.content.Context; +import android.content.SharedPreferences; +import android.net.Uri; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.gh.common.constant.Config; +import com.gh.common.constant.ItemViewType; +import com.gh.common.util.CommentUtils; +import com.gh.common.util.ImageUtils; +import com.gh.common.util.PostCommentUtils; +import com.gh.common.util.Utils; +import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.CommentViewHolder; +import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.db.CommentDao; +import com.gh.gamecenter.db.VoteDao; +import com.gh.gamecenter.db.info.VoteInfo; +import com.gh.gamecenter.entity.CommentEntity; +import com.gh.gamecenter.retrofit.Response; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import retrofit2.adapter.rxjava.HttpException; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * Created by khy on 2017/3/22. + */ +public class CommentDetailAdapter extends RecyclerView.Adapter { + + private Context mContext; + + private SharedPreferences sp; + + private List mCommentList; + + private VoteDao mVoteDao; + private CommentDao mCommentDao; + + private String userName; //用户名 + private String userIcon; //用户icon + + private String commentId; + + private boolean isOver; + private boolean isLoading; + private boolean isNetworkError; + + public CommentDetailAdapter(Context context, String commentId) { + this.mContext = context; + this.commentId = commentId; + + mVoteDao = new VoteDao(context); + mCommentDao = new CommentDao(context); + + sp = context.getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE); + + userName = sp.getString("user_name", null); + userIcon = sp.getString("user_icon", null); + + mCommentList = new ArrayList<>(); + + loadData(0); + } + + public void loadData(int offset) { + isLoading = true; + RetrofitManager.getComment() + .getCommentTrace(commentId, 20, offset) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response>(){ + @Override + public void onResponse(List response) { + super.onResponse(response); + mCommentList.addAll(response); + + if (response.size() < 20) { + isOver = true; + } + + isLoading = false; + notifyItemRangeChanged(0, getItemCount() - 1); + } + + @Override + public void onFailure(HttpException e) { + super.onFailure(e); + Utils.toast(mContext, "评论加载失败, 请检查网络设置"); + isNetworkError = true; + isLoading = false; + notifyItemChanged(getItemCount() - 1); + } + }); + } + + @Override + public int getItemViewType(int position) { + if (position == getItemCount() - 1) { + return ItemViewType.LOADING; + } + + return 100; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + if (viewType == ItemViewType.LOADING) { + 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.comment_item, parent, false); + return new CommentViewHolder(view); + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder instanceof CommentViewHolder) { + initCommentViewHolder((CommentViewHolder) holder, position); + } else if (holder instanceof FooterViewHolder) { + initFooterViewHolder((FooterViewHolder) holder); + } + } + + private void initFooterViewHolder(FooterViewHolder holder) { + if(isNetworkError) { + holder.loading.setVisibility(View.GONE); + holder.hint.setText("网络错误,点击重试!"); + }else if (!isOver) { + holder.hint.setText("加载中..."); + holder.loading.setVisibility(View.VISIBLE); + } else if (mCommentList.size() == 0) { + holder.loading.setVisibility(View.GONE); + holder.hint.setText("目前还没有评论"); + } else { + holder.hint.setText("没有更多评论啦"); + holder.loading.setVisibility(View.GONE); + } + + } + + private void initCommentViewHolder(final CommentViewHolder holder, int position) { + final CommentEntity commentEntity = mCommentList.get(position); + + ImageUtils.display(holder.commentUserIconDv, commentEntity.getUser().getIcon()); + + holder.commentLikeCountTv.setTextColor(mContext.getResources().getColor(R.color.hint)); + holder.commentLikeIv.setImageResource(R.drawable.ic_like_unselect); + + if (commentEntity.getVote() == 0) { + holder.commentLikeCountTv.setVisibility(View.GONE); + } else { // 检查是否已点赞 + if (mVoteDao.isVote(commentEntity.getId()) && commentEntity.getVote() >= 1) { + holder.commentLikeCountTv.setTextColor(mContext.getResources().getColor(R.color.theme)); + holder.commentLikeIv.setImageResource(R.drawable.ic_like_select); + } + holder.commentLikeCountTv.setVisibility(View.VISIBLE); + holder.commentLikeCountTv.setText(String.valueOf(commentEntity.getVote())); + } + + //检查是否是自身评论 + if (userName != null && userIcon != null && !userIcon.isEmpty()&& + !userIcon.isEmpty() && mCommentDao.isMyComment(commentEntity.getId())){ + holder.commentUserNameTv.setText(sp.getString("user_name", null)); + ImageUtils.display(holder.commentUserIconDv, sp.getString("user_icon", null)); + } else { + holder.commentUserNameTv.setText(commentEntity.getUser().getName()); + if(commentEntity.getUser().getIcon().isEmpty()) { + holder.commentUserIconDv.setImageURI(Uri.parse("res:///" + R.drawable.user_default_icon_comment)); + } else { + ImageUtils.display(holder.commentUserIconDv, commentEntity.getUser().getIcon()); + } + } + + CommentUtils.setCommentTime(holder.commentTimeTv, commentEntity.getTime()); + if (commentEntity.getParent() != null) { + holder.commentContentTv.setText("@"+ commentEntity.getParent().getUser().getName() + ": " + commentEntity.getContent()); + } else { + holder.commentContentTv.setText(commentEntity.getContent()); + } + + holder.commentLikeIv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (holder.commentLikeCountTv.getCurrentTextColor() == mContext.getResources().getColor(R.color.theme)) { + Utils.toast(mContext, "已经点过赞啦!"); + return; + } + commentEntity.setVote(commentEntity.getVote() + 1); + holder.commentLikeCountTv.setTextColor(mContext.getResources().getColor(R.color.theme)); + holder.commentLikeIv.setImageResource(R.drawable.ic_like_select); + holder.commentLikeCountTv.setText(String.valueOf(commentEntity.getVote())); + holder.commentLikeCountTv.setVisibility(View.VISIBLE); + + PostCommentUtils.addCommentVoto(mContext, commentEntity.getId(), true, + new PostCommentUtils.PostCommentListener() { + @Override + public void postSucced(JSONObject response) { + mVoteDao.add(new VoteInfo(commentEntity.getId())); + } + + @Override + public void postFailed(Throwable error) { + commentEntity.setVote(commentEntity.getVote() - 1); + holder.commentLikeCountTv.setTextColor(mContext.getResources().getColor(R.color.hint)); + holder.commentLikeIv.setImageResource(R.drawable.ic_like_unselect); + holder.commentLikeCountTv.setText(String.valueOf(commentEntity.getVote())); + if (commentEntity.getVote() == 0) { + holder.commentLikeCountTv.setVisibility(View.GONE); + } else { + holder.commentLikeCountTv.setVisibility(View.VISIBLE); + } + if (error instanceof HttpException) { + HttpException exception = (HttpException) error; + if (exception.code() == 403) { + try { + if (new JSONObject(exception.response().errorBody().string()) + .getString("detail").equals("voted")) { + Utils.toast(mContext, "已经点过赞啦!"); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + return; + } + } + Utils.toast(mContext, "网络异常,点赞失败"); + + } + }); + } + }); + + } + + @Override + public int getItemCount() { + return mCommentList.size() + 1; + } + + public boolean isOver() { + return isOver; + } + + public boolean isLoading() { + return isLoading; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/adapter/LiBaoCodeAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/LiBaoCodeAdapter.java new file mode 100644 index 0000000000..09511640bf --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/adapter/LiBaoCodeAdapter.java @@ -0,0 +1,63 @@ +package com.gh.gamecenter.adapter; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.gh.common.util.LibaoUtils; +import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.LiBaoCodeViewHolder; +import com.gh.gamecenter.db.info.LibaoInfo; + +import java.util.List; + +/** + * Created by khy on 2017/3/23. + */ +public class LiBaoCodeAdapter extends RecyclerView.Adapter { + + private Context mContext; + + private List mCodeMap; + + public LiBaoCodeAdapter(Context context, List codes) { + this.mContext = context; + + mCodeMap = codes; + } + + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(mContext).inflate(R.layout.libao_code_item, parent, false); + return new LiBaoCodeViewHolder(view); + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + final LibaoInfo libaoInfo = mCodeMap.get(position); + if (holder instanceof LiBaoCodeViewHolder) { + LiBaoCodeViewHolder viewHolder = (LiBaoCodeViewHolder) holder; + if ("ling".equals(libaoInfo.getStatus()) || "linged".equals(libaoInfo.getStatus())) { + viewHolder.code.setText(Html.fromHtml(" "+ position +"   已领取:" + "" +libaoInfo.getCode()+ "")); + } else { + viewHolder.code.setText(Html.fromHtml(" "+ position +"   已淘号:" + "" +libaoInfo.getCode()+ "")); + } + + viewHolder.copy.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + LibaoUtils.copyLink(libaoInfo.getCode(), mContext); + } + }); + } + } + + @Override + public int getItemCount() { + return mCodeMap.size(); + } +} 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 a74b79de9d..0eb26e67e6 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/LibaoDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/LibaoDetailAdapter.java @@ -2,11 +2,13 @@ package com.gh.gamecenter.adapter; import android.content.Context; import android.graphics.Color; +import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.Html; import android.text.Spanned; import android.text.TextUtils; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -43,6 +45,7 @@ public class LibaoDetailAdapter extends RecyclerView.Adapter" + libaoInfo.getCode() + "" + " 复制成功" + - "
请尽快进入游戏兑换"); - } else { - msg = Html.fromHtml("礼包码:" +"" + libaoInfo.getCode() + "" + " 复制成功" + - "
淘号礼包不保证可用,请尽快进入游戏尝试兑换"); - } + LibaoUtils.initLibaoBtn(holder.libaoCopyBtn, mLibaoEntity, mLibaoDao, + mLibaoDetailEntity.getInstallRequired(), this, entrance + "+(礼包详情[" + mLibaoEntity.getName() + "])"); - LibaoUtils.lunningAppDialog(mContext, msg, mLibaoEntity); +// holder.libaoCopyBtn.setBackgroundResource(R.drawable.textview_blue_style); +// holder.libaoCopyBtn.setTextColor(Color.WHITE); +// holder.libaoCopyBtn.setText("复制"); +// holder.libaoCopyBtn.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if (mLibaoDetailEntity != null && mLibaoDetailEntity.getInstallRequired()) { +// Spanned msg; +// if ("ling".equals(libaoInfo.getStatus())) { +// msg = Html.fromHtml("礼包码:" + "" + libaoInfo.getCode() + "" + " 复制成功" + +// "
请尽快进入游戏兑换"); +// } else { +// msg = Html.fromHtml("礼包码:" +"" + libaoInfo.getCode() + "" + " 复制成功" + +// "
淘号礼包不保证可用,请尽快进入游戏尝试兑换"); +// } +// +// LibaoUtils.lunningAppDialog(mContext, msg, mLibaoEntity); +// } +// LibaoUtils.copyLink(libaoInfo.getCode(), mContext); +// } +// }); + +// Spanned libaoCode; +// if ("ling".equals(libaoInfo.getStatus())) { +// libaoCode = Html.fromHtml("已领取:" + "" +libaoInfo.getCode()+ ""); +// if (count == 0) { +// content = Html.fromHtml("剩余:" + count + "%"); +// } else { +// content = Html.fromHtml("剩余:" + "" + count + "%" + ""); +// } +// } else { +// libaoCode = Html.fromHtml("已淘号:" + "" +libaoInfo.getCode()+ ""); +// content = Html.fromHtml("剩余:" + count + "%" ); +// } +// holder.libaoCode.setVisibility(View.VISIBLE); +// holder.libaoCode.setText(libaoCode); + holder.libaoDes.setText(content); + + final List codes = mLibaoDao.findCodes(mLibaoEntity.getId()); + + if (codes == null && codes.isEmpty()) return; + + holder.libaoCodeRv.setVisibility(View.VISIBLE); + holder.libaoCodeRv.setAdapter(new LiBaoCodeAdapter(mContext, codes)); + ViewGroup.LayoutParams params = holder.libaoCodeRv.getLayoutParams(); + if (codes.size() <= 3) { + params.height = codes.size() * DisplayUtils.dip2px(mContext, 40); + } else { + params.height = 3 * DisplayUtils.dip2px(mContext, 40); + } + holder.libaoCodeRv.setLayoutParams(params); + + holder.libaoCodeRv.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + + if (event.getAction() == MotionEvent.ACTION_DOWN) { + scrollListener.isScroll(false); + } else if (event.getAction() == MotionEvent.ACTION_UP) { + scrollListener.isScroll(true); } - LibaoUtils.copyLink(libaoInfo.getCode(), mContext); + return false; } }); - - Spanned libaoCode; - if ("ling".equals(libaoInfo.getStatus())) { - libaoCode = Html.fromHtml("已领取:" + "" +libaoInfo.getCode()+ ""); - if (count == 0) { - content = Html.fromHtml("剩余:" + count + "%"); - } else { - content = Html.fromHtml("剩余:" + "" + count + "%" + ""); - } - } else { - libaoCode = Html.fromHtml("已淘号:" + "" +libaoInfo.getCode()+ ""); - content = Html.fromHtml("剩余:" + count + "%" ); - } - holder.libaoCode.setVisibility(View.VISIBLE); - holder.libaoCode.setText(libaoCode); - holder.libaoDes.setText(content); return; } } @@ -299,4 +335,8 @@ public class LibaoDetailAdapter extends RecyclerView.Adapter position - mHotCommentList.size() - index) { commentPosition = position - mHotCommentList.size() - index; commentEntity = mNormalCommentList.get(position - mHotCommentList.size() - index); isHotComment = false; -// if ( mNormalCommentList.size() == position - mHotCommentList.size() - index + 1) { -// ((CardLinearLayout) holder.itemView).setmBottom(DisplayUtils.dip2px(mContext, 4)); -// } else { -// ((CardLinearLayout) holder.itemView).setmBottom(0); -// } } if (commentEntity == null) { return; } - holder.commentContentTv.setText(commentEntity.getContent()); + if (commentEntity.getParent() != null) { + holder.commentContentTv.setText("回复"+ commentEntity.getParent().getUser().getName() + ": " + commentEntity.getContent()); + } else { + holder.commentContentTv.setText(commentEntity.getContent()); + } + holder.commentLikeCountTv.setTextColor(mContext.getResources().getColor(R.color.hint)); holder.commentLikeIv.setImageResource(R.drawable.ic_like_unselect); @@ -534,34 +529,7 @@ public class MessageDetailAdapter extends RecyclerView.Adapter= today && day < today + 86400 * 1000) { - long min = new Date().getTime()/1000 - day/1000; - int hour = (int) (min/ (60 * 60)); - if (hour == 0) { - if (min < 60) { - holder.commentTimeTv.setText("刚刚"); - } else { - holder.commentTimeTv.setText(String.format(Locale.getDefault(), "%d分钟前", (int) (min / 60))); - } - } else { - holder.commentTimeTv.setText(String.format(Locale.getDefault(), "%d小时前", hour)); - } - } else if (day >= today - 86400 * 1000 && day < today) { - format.applyPattern("HH:mm"); - holder.commentTimeTv.setText("昨天 "); - } else { - format.applyPattern("yyyy-MM-dd"); - holder.commentTimeTv.setText(format.format(day)); - } - } catch (ParseException e) { - e.printStackTrace(); - format.applyPattern("yyyy-MM-dd"); - holder.commentTimeTv.setText(format.format(commentEntity.getTime() * 1000)); - } + CommentUtils.setCommentTime(holder.commentTimeTv, commentEntity.getTime()); final CommentEntity finalCommentEntity = commentEntity; final boolean finalIsHotComment = isHotComment; @@ -636,42 +604,74 @@ public class MessageDetailAdapter 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(); - reportTv.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - dialog.cancel(); - showReportTypeDialog(commentId); - - } - }); - } - private void showReportTypeDialog(final String commentId) { + private void showReportTypeDialog(final CommentEntity commentEntity) { final String[] arrReportType = new String[]{"垃圾广告营销", "恶意攻击谩骂", "淫秽色情信息", "违法有害信息", "其它"}; int widthPixels = mContext.getResources().getDisplayMetrics().widthPixels; @@ -699,7 +699,7 @@ public class MessageDetailAdapter extends RecyclerView.Adapter, List>() { @Override public List call(List list) { @@ -143,6 +148,8 @@ public class SubjectAdapter extends RecyclerView.Adapter findCodes(String libaoId) { + List list = new ArrayList<>(); + try { + list.addAll(dao.queryBuilder().where().eq("libaoId", libaoId).query()); + return list; + } catch (SQLException e) { + e.printStackTrace(); + } + return list; + } } diff --git a/app/src/main/java/com/gh/gamecenter/db/info/LibaoInfo.java b/app/src/main/java/com/gh/gamecenter/db/info/LibaoInfo.java index 498b5e14db..bb6509c113 100644 --- a/app/src/main/java/com/gh/gamecenter/db/info/LibaoInfo.java +++ b/app/src/main/java/com/gh/gamecenter/db/info/LibaoInfo.java @@ -7,6 +7,7 @@ import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; import java.io.Serializable; +import java.util.UUID; /** * Created by khy on 2016/12/18. @@ -15,7 +16,10 @@ import java.io.Serializable; @DatabaseTable(tableName = "tb_libao") public class LibaoInfo implements Serializable { - @DatabaseField(id = true, columnName = "libaoId") + @DatabaseField(id = true, columnName = "id") + private String id; + + @DatabaseField(columnName = "libaoId") private String libaoId; @DatabaseField(columnName = "content") @@ -58,6 +62,14 @@ public class LibaoInfo implements Serializable { } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getPackName() { return packName; } @@ -169,6 +181,7 @@ public class LibaoInfo implements Serializable { } else { libaoInfo.setLibaoId(libaoEntity.getId()); } + libaoInfo.setId(UUID.randomUUID().toString().replaceAll("-", "")); libaoInfo.setContent(libaoEntity.getContent()); libaoInfo.setIcon(libaoEntity.getIcon()); libaoInfo.setName(libaoEntity.getName()); diff --git a/app/src/main/java/com/gh/gamecenter/entity/CalendarEntity.java b/app/src/main/java/com/gh/gamecenter/entity/CalendarEntity.java new file mode 100644 index 0000000000..abc2806238 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/entity/CalendarEntity.java @@ -0,0 +1,29 @@ +package com.gh.gamecenter.entity; + +import java.util.List; + +/** + * Created by khy on 2017/3/28. + */ +public class CalendarEntity { + + private int day; + + private List server; + + public int getDay() { + return day; + } + + public void setDay(int day) { + this.day = day; + } + + public List getServer() { + return server; + } + + public void setServer(List server) { + this.server = server; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/entity/CommentEntity.java b/app/src/main/java/com/gh/gamecenter/entity/CommentEntity.java index 5b4fd13b2e..692ab463e9 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/CommentEntity.java +++ b/app/src/main/java/com/gh/gamecenter/entity/CommentEntity.java @@ -12,6 +12,8 @@ public class CommentEntity { private UserEntity user; + private ParentEntity parent; + private String content; private int vote; @@ -57,4 +59,24 @@ public class CommentEntity { public void setTime(long time) { this.time = time; } + + public ParentEntity getParent() { + return parent; + } + + public void setParent(ParentEntity parent) { + this.parent = parent; + } + + public class ParentEntity { + private UserEntity user; + + public UserEntity getUser() { + return user; + } + + public void setUser(UserEntity user) { + this.user = user; + } + } } 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 1fa355808e..f5fd778dd4 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/GameDetailEntity.java +++ b/app/src/main/java/com/gh/gamecenter/entity/GameDetailEntity.java @@ -8,22 +8,44 @@ import java.util.List; public class GameDetailEntity { private List serverInfo; + private ArrayList tag; + private TipsEntity tips; + private List news; + private ArrayList gallery; + private String des; + @SerializedName("d_button_add_word") private String downloadAddWord; + @SerializedName("article_types") private ArrayList articleTypes; + @SerializedName("share_code") private String shareCode; + @SerializedName("download_off_text") private String downloadOffText; + @SerializedName("skin_test") private boolean isSkinTest; + private Contact contact; + + private List notice; + + @SerializedName("type_tag") + private List gameTag; + + @SerializedName("server") + private List kaiFuServer; + + private String fulishuoming; + public boolean isSkinTest() { return isSkinTest; } @@ -111,4 +133,139 @@ public class GameDetailEntity { public void setTips(TipsEntity tips) { this.tips = tips; } + + public List getNotice() { + return notice; + } + + public void setNotice(List notice) { + this.notice = notice; + } + + public String getFulishuoming() { + return fulishuoming; + } + + public void setFulishuoming(String fulishuoming) { + this.fulishuoming = fulishuoming; + } + + public Contact getContact() { + return contact; + } + + public void setContact(Contact contact) { + this.contact = contact; + } + + public List getGameTag() { + return gameTag; + } + + public void setGameTag(List gameTag) { + this.gameTag = gameTag; + } + + public List getKaiFuServer() { + return kaiFuServer; + } + + public void setKaiFuServer(List kaiFuServer) { + this.kaiFuServer = kaiFuServer; + } + + public class Contact { + + private Service service; + + private Player player; + + public void setService(Service service) { + this.service = service; + } + + public Service getService() { + return service; + } + + public void setPlayer(Player player) { + this.player = player; + } + + public Player getPlayer() { + return player; + } + + } + + public class Service { + + private String des; + + private String qq; + + public void setDes(String des) { + this.des = des; + } + + public String getDes() { + return des; + } + + public void setQq(String qq) { + this.qq = qq; + } + + public String getQq() { + return qq; + } + + } + + public class Player { + + private String des; + + private String qq; + + public void setDes(String des) { + this.des = des; + } + + public String getDes() { + return des; + } + + public void setQq(String qq) { + this.qq = qq; + } + + public String getQq() { + return qq; + } + } + + public class Notice { + + @SerializedName("article_id") + private String articleId; + + private String title; + + public String getArticleId() { + return articleId; + } + + public void setArticleId(String articleId) { + this.articleId = articleId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + } } diff --git a/app/src/main/java/com/gh/gamecenter/entity/KaiFuServerEntity.java b/app/src/main/java/com/gh/gamecenter/entity/KaiFuServerEntity.java index f370ea9876..33e5431877 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/KaiFuServerEntity.java +++ b/app/src/main/java/com/gh/gamecenter/entity/KaiFuServerEntity.java @@ -7,7 +7,7 @@ public class KaiFuServerEntity { private String note; - private int time; + private long time; private String type; @@ -19,11 +19,11 @@ public class KaiFuServerEntity { return note; } - public void setTime(int time) { + public void setTime(long time) { this.time = time; } - public int getTime() { + public long getTime() { return time; } 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 74a1ced460..6b34952af2 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.java +++ b/app/src/main/java/com/gh/gamecenter/entity/NewsEntity.java @@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName; public class NewsEntity { - @SerializedName("_id") + @SerializedName(value = "_id", alternate = "article_id") private String id; private String type; @@ -27,6 +27,8 @@ public class NewsEntity { @SerializedName("game_name") private String gameName; + private long overtime; + public int getViews() { return views; } @@ -106,4 +108,12 @@ public class NewsEntity { public void setGameName(String gameName) { this.gameName = gameName; } + + public long getOvertime() { + return overtime; + } + + public void setOvertime(long overtime) { + this.overtime = overtime; + } } diff --git a/app/src/main/java/com/gh/gamecenter/entity/UserEntity.java b/app/src/main/java/com/gh/gamecenter/entity/UserEntity.java index f76e97664b..5922e40c57 100644 --- a/app/src/main/java/com/gh/gamecenter/entity/UserEntity.java +++ b/app/src/main/java/com/gh/gamecenter/entity/UserEntity.java @@ -1,5 +1,7 @@ package com.gh.gamecenter.entity; +import com.google.gson.annotations.SerializedName; + /** * Created by khy on 2016/11/8. */ @@ -9,6 +11,9 @@ public class UserEntity { private String name; + @SerializedName("_id") + private String id; // 用于parent的user + public void setIcon(String icon) { this.icon = icon; } @@ -24,4 +29,12 @@ public class UserEntity { public String getName() { return name; } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } } diff --git a/app/src/main/java/com/gh/gamecenter/eventbus/EBMoveTop.java b/app/src/main/java/com/gh/gamecenter/eventbus/EBMoveTop.java new file mode 100644 index 0000000000..c4335777b0 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/eventbus/EBMoveTop.java @@ -0,0 +1,43 @@ +package com.gh.gamecenter.eventbus; + +/** + * Created by khy on 2017/3/24. + */ +public class EBMoveTop { + + private String type; + private int visibility; + private int topMargin; + + public EBMoveTop(String type, int visibility, int topMargin) { + super(); + this.type = type; + this.visibility = visibility; + this.topMargin = topMargin; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public int getVisibility() { + return visibility; + } + + public void setVisibility(int visibility) { + this.visibility = visibility; + } + + public int getTopMargin() { + return topMargin; + } + + public void setTopMargin(int topMargin) { + this.topMargin = topMargin; + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/eventbus/EBSlide.java b/app/src/main/java/com/gh/gamecenter/eventbus/EBSlide.java new file mode 100644 index 0000000000..e99a5a85e2 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/eventbus/EBSlide.java @@ -0,0 +1,39 @@ +package com.gh.gamecenter.eventbus; + +public class EBSlide { + private int distance; + private int position; + private boolean isReset; + + public EBSlide(int distance, int position, boolean isReset) { + super(); + this.distance = distance; + this.position = position; + this.isReset = isReset; + } + + public int getDistance() { + return distance; + } + + public void setDistance(int distance) { + this.distance = distance; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + public boolean isReset() { + return isReset; + } + + public void setReset(boolean isReset) { + this.isReset = isReset; + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java new file mode 100644 index 0000000000..7a323d1e28 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/FuLiAdapter.java @@ -0,0 +1,522 @@ +package com.gh.gamecenter.gamedetail; + +import android.content.Context; +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.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.facebook.drawee.view.SimpleDraweeView; +import com.gh.base.AppController; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.ImageUtils; +import com.gh.common.util.NewsUtils; +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.R; +import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder; +import com.gh.gamecenter.db.LibaoDao; +import com.gh.gamecenter.db.info.LibaoInfo; +import com.gh.gamecenter.entity.GameDetailEntity; +import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.entity.LibaoEntity; +import com.gh.gamecenter.entity.LibaoStatusEntity; +import com.gh.gamecenter.entity.NewsEntity; +import com.gh.gamecenter.entity.TagEntity; +import com.gh.gamecenter.retrofit.Response; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.util.ArrayList; +import java.util.List; + +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Func1; +import rx.schedulers.Schedulers; + +/** + * Created by khy on 2017/3/27. + */ +public class FuLiAdapter extends RecyclerView.Adapter{ + + private Context mContext; + + private RecyclerView mRecyclerView; + + private FuLiFragment fuLiFragment; + + private GameDetailEntity mGameDetailEntity; + private GameEntity mGameEntity; + + private List mLibaoList; + + private int position_plugin = -1; + private int position_fuli = -1; + private int position_libao = -1; + private int position_kaifu = -1; + private int position_notice = -1; + + private boolean isOpenLibaoList; + + public FuLiAdapter(Context context, RecyclerView recyclerView, FuLiFragment fuLiFragment) { + this.mContext = context; + this.mRecyclerView = recyclerView; + this.fuLiFragment = fuLiFragment; + + isOpenLibaoList = false; + + mGameDetailEntity = (GameDetailEntity) AppController.get("GameDetailEntity", false); + mGameEntity = (GameEntity) AppController.get("GameEntity", false); + initPosition(); + addLibaoList(); + } + + private void addLibaoList(){ + if (mGameEntity == null) return; + + RetrofitManager.getLibao().getLibaoByGame(mGameEntity.getId(), 0 , 128) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response>(){ + @Override + public void onResponse(List response) { + getLibaoStatus(response); + } + + @Override + public void onError(Throwable e) { + super.onError(e); + } + }); + } + + //获取礼包状态 + private void getLibaoStatus(final List response) { + StringBuilder builder = new StringBuilder(); + for (int i = 0, size = response.size(); i < size; i++) { + builder.append(response.get(i).getId()); + builder.append("-"); + } + if (builder.length() == 0) { + return; + } + + builder.deleteCharAt(builder.length() - 1); + String ids = builder.toString(); + + RetrofitManager.getLibao().getLibaoStatus(ids) + .map(new Func1, Object>() { + @Override + public Object call(List list) { + LibaoDao libaoDao = new LibaoDao(mContext); + for (LibaoInfo libaoInfo : libaoDao.getAll()) { + for (int i = 0; i < list.size(); i++) { + if (libaoInfo.getLibaoId().equals(list.get(i).getId())) { + if ("ling".equals(libaoInfo.getStatus()) || "linged".equals(libaoInfo.getStatus())) { + list.get(i).setStatus("linged"); + } else { + list.get(i).setStatus("taoed"); + } + } + } + } + for (int i = 0; i < response.size(); i++) { + LibaoEntity libaoEntity = response.get(i); + for (LibaoStatusEntity libaoStatusEntity : list) { + if (libaoStatusEntity.getId().equals(libaoEntity.getId())) { + if ("finish".equals(libaoStatusEntity.getStatus())) { + response.remove(i); + i--; + break; + } + if (libaoEntity.getId().equals(libaoStatusEntity.getId())) { + libaoEntity.setStatus(libaoStatusEntity.getStatus()); + libaoEntity.setAvailable(libaoStatusEntity.getAvailable()); + libaoEntity.setTotal(libaoStatusEntity.getTotal()); + } + } + } + } + if (response.size() != 0) { + mLibaoList = response; + initPosition(); + } + return null; + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response(){ + @Override + public void onResponse(Object response) { + super.onResponse(response); + notifyDataSetChanged(); + } + + }); + } + + @Override + public int getItemViewType(int position) { + if (position == 0) { + return 0; + } else if (position_notice != -1 && position_notice == position) { + return 1; + } else if (position_plugin != -1 && position_plugin == position) { + return 2; + } else if (position_fuli != -1 && position_fuli == position) { + return 3; + } else if (position_libao != -1 && position_libao == position) { + return 4; + } else if (position_kaifu != -1 && position_kaifu == position) { + return 5; + } else if (position == getItemCount() - 1) { + return 6; + } + return position; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view; + switch (viewType) { + case 0: + RelativeLayout relativeLayout = new RelativeLayout(mContext); + ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(mContext, 130)); + relativeLayout.setLayoutParams(params); + return new ReuseViewHolder(relativeLayout); + case 1: + view = LayoutInflater.from(mContext).inflate(R.layout.gamedetail_item_notice, parent, false); + return new GameDetailNoticeViewHolder(view); + case 2: + view = LayoutInflater.from(mContext).inflate(R.layout.gamedetail_item_plugin, parent, false); + return new GameDetailPluginViewHolder(view); + case 3: + view = LayoutInflater.from(mContext).inflate(R.layout.gamedetail_item_fuli, parent, false); + return new GameDetailFuLiViewHolder(view); + case 4: + view = LayoutInflater.from(mContext).inflate(R.layout.gamedetail_item_libao_rv, parent, false); + return new GameDetaiLibaoViewHolder(view); + case 5: + 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); + } + return null; + } + + int offsetH = 0; + @Override + public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { + if (holder instanceof GameDetailNoticeViewHolder) { + GameDetailNoticeViewHolder viewHolder = (GameDetailNoticeViewHolder) holder; + initNoticeViewHolder(viewHolder.mvNotice); + } else if (holder instanceof GameDetailPluginViewHolder) { + GameDetailPluginViewHolder viewHolder = (GameDetailPluginViewHolder) holder; + initPluginViewHolder(viewHolder); + } else if (holder instanceof GameDetaiLibaoViewHolder) { + GameDetaiLibaoViewHolder viewHolder = (GameDetaiLibaoViewHolder) holder; + initLibaoViewHolder(viewHolder); + } else if (holder instanceof GameDetailFuLiViewHolder) { + GameDetailFuLiViewHolder viewHolder = (GameDetailFuLiViewHolder) holder; + initFuLiViewHolder(viewHolder); + } else if (holder instanceof GameDetailKaiFuViewHolder) { + GameDetailKaiFuViewHolder viewHolder = (GameDetailKaiFuViewHolder) holder; + initKaiFuViewHolder(viewHolder); + } else if (holder instanceof BottomViewHolder) { + BottomViewHolder viewHolder = (BottomViewHolder) holder; + 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)); + } + } + + @Override + public int getItemCount() { + int index = 2; + if (position_notice != -1) { + index++; + } + if (position_plugin != -1) { + index++; + } + if (position_fuli != -1) { + index++; + } + if (position_libao != -1) { + index++; + } + if (position_kaifu != -1) { + index++; + } + return index; + } + + + + private void initPosition() { + if (mGameDetailEntity == null) { + return; + } + + if (mGameDetailEntity.getNotice() != null && mGameDetailEntity.getNotice().size() > 0 + &&TextUtils.isEmpty(mGameDetailEntity.getFulishuoming()) + && (mGameDetailEntity.getContact() == null || (mGameDetailEntity.getContact() != null + && mGameDetailEntity.getContact().getService()== null + && mGameDetailEntity.getContact().getPlayer() == null))) { + position_notice = 1; + + } + if (mGameDetailEntity.getTag() != null + && mGameDetailEntity.getTag().size() != 0) { + if (position_notice != -1) { + position_plugin = position_notice + 1; + } else { + position_plugin = 1; + } + + } + if (!TextUtils.isEmpty(mGameDetailEntity.getFulishuoming()) + || mGameDetailEntity.getContact() != null && (mGameDetailEntity.getContact().getService()!= null + || mGameDetailEntity.getContact().getPlayer() != null)) { + if (position_plugin != -1) { + position_fuli = position_plugin + 1; + } else if (position_notice != -1){ + position_fuli = position_notice + 1; + } else { + position_fuli = 1; + } + } + if (mLibaoList != null && mLibaoList.size() > 0) { + if (position_fuli != -1) { + position_libao = position_fuli + 1; + } else if (position_plugin != -1) { + position_libao = position_plugin + 1; + } else if (position_notice != -1){ + position_libao = position_notice + 1; + } else { + position_libao = 1; + } + } + if (mGameDetailEntity.getKaiFuServer()!= null + && mGameDetailEntity.getKaiFuServer().size() > 0) { + if (position_libao != -1) { + position_kaifu = position_libao + 1; + } else if (position_fuli != -1) { + position_kaifu = position_fuli + 1; + } else if (position_plugin != -1) { + position_kaifu = position_plugin + 1; + } else if (position_notice != -1){ + position_kaifu = position_notice + 1; + } else { + position_kaifu = 1; + } + } + } + + private void initNoticeViewHolder(final MarqueeView mvNotice) { + final List notice = mGameDetailEntity.getNotice(); + if (notice != null && notice.size() > 0) { + List list = new ArrayList<>(); + for (NewsEntity newsEntity : notice) { + list.add(newsEntity.getTitle()); + } + mvNotice.startWithList(list); + + mvNotice.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int index = mvNotice.getDisplayedChild(); + NewsUtils.startNewsDetailActivity(mContext, notice.get(index), "游戏详情-公告"); + } + }); + } else { + mvNotice.setVisibility(View.GONE); + } + } + + + private void initKaiFuViewHolder(GameDetailKaiFuViewHolder viewHolder) { + 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)); + } + } + + private void initFuLiViewHolder(final GameDetailFuLiViewHolder viewHolder) { + final GameDetailEntity.Contact contact = mGameDetailEntity.getContact(); + if (contact!= null && contact.getPlayer() != null) { + viewHolder.fuliQqRl.setVisibility(View.VISIBLE); + viewHolder.fuliQqDes.setText(contact.getPlayer().getDes() + ":" + contact.getPlayer().getQq()); + } else { + viewHolder.fuliQqRl.setVisibility(View.GONE); + } + if (contact != null && contact.getService() != null){ + viewHolder.fuliQqunRl.setVisibility(View.VISIBLE); + viewHolder.fuliQqunDes.setText(contact.getPlayer().getDes() + ":" + contact.getPlayer().getQq()); + } else { + viewHolder.fuliQqunRl.setVisibility(View.GONE); + } + + if (TextUtils.isEmpty(mGameDetailEntity.getFulishuoming())) { + viewHolder.fuliDes.setVisibility(View.GONE); + } else { + viewHolder.fuliDes.setVisibility(View.VISIBLE); + viewHolder.fuliDes.setText(Html.fromHtml(mGameDetailEntity.getFulishuoming())); + } + + viewHolder.fuliQqunBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + QQUtils.startQQSession(mContext, contact.getService().getQq()); + } + }); + + viewHolder.fuliQqBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + boolean b = QQUtils.joinQQGroup(mContext, "Op7gxygPvGwdN4rYUj8alatXGIHgX6J8"); + Utils.toast(mContext, b + ""); + } + }); + + if (mGameDetailEntity.getNotice() == null || mGameDetailEntity.getNotice().size() == 0) { + viewHolder.filiNoticeLl.setVisibility(View.GONE); + } else { + initNoticeViewHolder(viewHolder.filiNotice); + } + + } + + private void initLibaoViewHolder(GameDetaiLibaoViewHolder viewHolder) { + + if (position_plugin == -1 && position_fuli == -1) { + isOpenLibaoList = true; + } + ViewGroup.LayoutParams params2 = viewHolder.libaoRv.getLayoutParams(); + if (mLibaoList != null &&(mLibaoList.size() <= 3 || isOpenLibaoList)) { + viewHolder.openList.setVisibility(View.GONE); + params2.height = DisplayUtils.dip2px(mContext, 70) * mLibaoList.size(); + } else { + viewHolder.openList.setVisibility(View.VISIBLE); + params2.height = DisplayUtils.dip2px(mContext, 70) * 3; + } + + viewHolder.libaoRv.setLayoutParams(params2); + viewHolder.libaoRv.setLayoutManager(new LinearLayoutManager(mContext)); + viewHolder.libaoRv.setAdapter(new GameLibaoGalleryAdapter(mContext, mLibaoList, "")); + + viewHolder.openList.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isOpenLibaoList = true; + notifyItemChanged(position_libao); + } + }); + + } + + + + private void initPluginViewHolder(final GameDetailPluginViewHolder viewHolder) { + ArrayList tags = mGameDetailEntity.getTag(); + + viewHolder.gamedetail_plugin_open_list.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewHolder.gamedetail_ll_plugin.setVisibility(View.VISIBLE); + viewHolder.gamedetail_ll_plugin_colse.setVisibility(View.GONE); + viewHolder.gamedetail_plugin_open_list.setVisibility(View.GONE); + } + }); + + int childCount = viewHolder.gamedetail_ll_plugin.getChildCount(); + if (childCount == 0) { + View view; + SimpleDraweeView iv_hint; + TextView tv_hint; + TextView tv_content; + TagEntity tagEntity; + if (mGameDetailEntity.getTips() != null && !TextUtils.isEmpty(mGameDetailEntity.getTips().getContent())) { + view = View.inflate(mContext, R.layout.gamedetail_plugin_item, null); + iv_hint = (SimpleDraweeView) view.findViewById(R.id.gamedetail_iv_hint); + tv_hint = (TextView) view.findViewById(R.id.gamedetail_tv_hint); + tv_content = (TextView) view.findViewById(R.id.gamedetail_tv_content); + ImageUtils.display(iv_hint, mGameDetailEntity.getTips().getIcon()); + tv_hint.setTextColor(Color.parseColor(mGameDetailEntity.getTips().getTitle().getColor())); + tv_hint.setText(mGameDetailEntity.getTips().getTitle().getValue()); + tv_content.setText(mGameDetailEntity.getTips().getContent()); + viewHolder.gamedetail_ll_plugin.addView(view); + + view = View.inflate(mContext, R.layout.gamedetail_plugin_item, null); + iv_hint = (SimpleDraweeView) view.findViewById(R.id.gamedetail_iv_hint); + tv_hint = (TextView) view.findViewById(R.id.gamedetail_tv_hint); + tv_content = (TextView) view.findViewById(R.id.gamedetail_tv_content); + ImageUtils.display(iv_hint, mGameDetailEntity.getTips().getIcon()); + tv_hint.setTextColor(Color.parseColor(mGameDetailEntity.getTips().getTitle().getColor())); + tv_hint.setText(mGameDetailEntity.getTips().getTitle().getValue()); + tv_content.setText(mGameDetailEntity.getTips().getContent()); + viewHolder.gamedetail_ll_plugin_colse.addView(view); + } + + if (tags.isEmpty()) { + viewHolder.gamedetail_plugin_open_list.setVisibility(View.GONE); + } else { + viewHolder.gamedetail_plugin_open_list.setVisibility(View.VISIBLE); + + for (int i = 0, size = tags.size(); i < size; i++) { + view = View.inflate(mContext, R.layout.gamedetail_plugin_item, null); + iv_hint = (SimpleDraweeView) view.findViewById(R.id.gamedetail_iv_hint); + tv_hint = (TextView) view.findViewById(R.id.gamedetail_tv_hint); + tv_content = (TextView) view.findViewById(R.id.gamedetail_tv_content); + tagEntity = tags.get(i); + tv_content.setText(tagEntity.getDes()); + tv_hint.setText(tagEntity.getName()); + tv_hint.setTextColor(Color.parseColor(tagEntity.getColor())); +// iv_hint.setImageURI(tagEntity.getIcon()); + ImageUtils.display(iv_hint, tagEntity.getIcon()); + viewHolder.gamedetail_ll_plugin.addView(view); + } + + RecyclerView recyclerView = new RecyclerView(mContext); + recyclerView.setLayoutManager(new GridLayoutManager(mContext, 3)); + + int index = (int) Math.ceil(tags.size() / 3.0); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(mContext, index * 28)); + params.setMargins(0, DisplayUtils.dip2px(mContext, index * 3), 0, 0); + + recyclerView.setLayoutParams(params); + recyclerView.setAdapter(new GameDetailPluginAdapter(tags, mContext)); + viewHolder.gamedetail_ll_plugin_colse.addView(recyclerView); + } + + } + } + + private class BottomViewHolder extends RecyclerView.ViewHolder{ + + RelativeLayout bottomRl; + public BottomViewHolder(View itemView) { + super(itemView); + bottomRl = (RelativeLayout) itemView; + } + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/FuliFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetail/FuliFragment.java new file mode 100644 index 0000000000..cce1916417 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/FuliFragment.java @@ -0,0 +1,125 @@ +package com.gh.gamecenter.gamedetail; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import com.gh.base.BaseFragment; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.Utils; +import com.gh.common.view.MeasureLinearLayoutManager; +import com.gh.common.view.VerticalItemDecoration; +import com.gh.gamecenter.R; +import com.gh.gamecenter.eventbus.EBMoveTop; +import com.gh.gamecenter.eventbus.EBReuse; +import com.gh.gamecenter.eventbus.EBSlide; + +import de.greenrobot.event.EventBus; + +/** + * Created by khy on 2017/3/24. + */ +public class FuLiFragment extends BaseFragment { + + private RecyclerView mRecyclerView; + + private FuLiAdapter mAdapter; + private MeasureLinearLayoutManager layoutManager; + + private int topMargin; + private int dis = 0; + private int distance; + + private boolean isCanScroll; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + init(R.layout.fragment_fuli); + + isCanScroll = true; + + mRecyclerView = (RecyclerView) view.findViewById(R.id.fm_fuli_rv); + + distance = DisplayUtils.dip2px(getActivity(), 75); + mAdapter = new FuLiAdapter(getContext(), mRecyclerView, this); + + layoutManager = new MeasureLinearLayoutManager(getContext()){ + @Override + public boolean canScrollVertically() { + return isCanScroll; + } + }; + mRecyclerView.setLayoutManager(layoutManager); + mRecyclerView.addItemDecoration(new VerticalItemDecoration(getContext(), 8, false)); + mRecyclerView.setAdapter(mAdapter); + + mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + if (mRecyclerView.getChildCount() <= 0) return; + + int visibility; + int bottom = recyclerView.getChildAt(0).getBottom(); + int i = DisplayUtils.dip2px(getContext(), 55); + int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition(); + if (bottom <= i || firstVisibleItemPosition > 0) { + visibility = View.VISIBLE; + } else { + visibility = View.GONE; + } + + dis += dy; + + topMargin -= dy; + + EventBus.getDefault().post(new EBMoveTop("top", visibility, topMargin)); + } + + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + if (dis > distance) { + EventBus.getDefault().post(new EBSlide(distance, 2, false)); + } else if (dis < -distance) { + EventBus.getDefault().post(new EBSlide(0, 2, false)); + } else { + EventBus.getDefault().post(new EBSlide(dis, 2, false)); + } + } + } + }); + } + + public void onEventMainThread(EBSlide busOne) { + if (busOne.getPosition() == 1) { + Utils.log("details:" + busOne.getDistance()); + if (busOne.isReset()) { + mRecyclerView.scrollBy(0, distance - dis); + } else { + if (busOne.getDistance() == 0) { + mRecyclerView.scrollToPosition(0); + topMargin = 0; + dis = 0; + } else { + mRecyclerView.scrollBy(0, busOne.getDistance() + - dis); + } + } + } + } + + public int getHeight() { + return layoutManager.getRvHeight(); + } + + public void onEventMainThread(EBReuse reuse) { + if ("CalenderDown".equals(reuse.getType())) { + isCanScroll = false; + } else if ("CalenderCancel".equals(reuse.getType())){ + isCanScroll = true; + } + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetaiLibaoViewHolder.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetaiLibaoViewHolder.java index d810b324cb..8b341f170e 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetaiLibaoViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetaiLibaoViewHolder.java @@ -2,6 +2,7 @@ package com.gh.gamecenter.gamedetail; import android.support.v7.widget.RecyclerView; import android.view.View; +import android.widget.RelativeLayout; import com.gh.gamecenter.R; @@ -14,6 +15,7 @@ import butterknife.ButterKnife; public class GameDetaiLibaoViewHolder extends RecyclerView.ViewHolder{ @BindView(R.id.gamedetail_item_libao_gallery) public RecyclerView libaoRv; + @BindView(R.id.gamedetail_item_open_list) public RelativeLayout openList; public GameDetaiLibaoViewHolder(View itemView) { super(itemView); diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailAdapter.java index e89f6f99b9..62d5ddcbfc 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailAdapter.java @@ -8,7 +8,6 @@ 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; @@ -175,7 +174,7 @@ public class GameDetailAdapter extends RecyclerView.Adapter { for (LibaoInfo libaoInfo : libaoDao.getAll()) { for (int i = 0; i < list.size(); i++) { if (libaoInfo.getLibaoId().equals(list.get(i).getId())) { - if ("ling".equals(libaoInfo.getStatus())) { + if ("ling".equals(libaoInfo.getStatus()) || "linged".equals(libaoInfo.getStatus())) { list.get(i).setStatus("linged"); } else { list.get(i).setStatus("taoed"); @@ -564,22 +563,22 @@ public class GameDetailAdapter extends RecyclerView.Adapter { ArrayList tags = gameDetailEntity.getTag(); viewHolder.gamedetail_ll_plugin.setVisibility(View.GONE); - viewHolder.open_plugin_detail_ll.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (viewHolder.gamedetail_ll_plugin.getVisibility() == View.GONE) { - viewHolder.gamedetail_ll_plugin.setVisibility(View.VISIBLE); - viewHolder.gamedetail_ll_plugin_colse.setVisibility(View.GONE); - viewHolder.open_plugin_detail_img.setImageResource(R.drawable.up_img); - viewHolder.open_plugin_detail_tv.setText("收起"); - } else { - viewHolder.gamedetail_ll_plugin.setVisibility(View.GONE); - viewHolder.gamedetail_ll_plugin_colse.setVisibility(View.VISIBLE); - viewHolder.open_plugin_detail_img.setImageResource(R.drawable.down_img); - viewHolder.open_plugin_detail_tv.setText("详情"); - } - } - }); +// viewHolder.open_plugin_detail_ll.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if (viewHolder.gamedetail_ll_plugin.getVisibility() == View.GONE) { +// viewHolder.gamedetail_ll_plugin.setVisibility(View.VISIBLE); +// viewHolder.gamedetail_ll_plugin_colse.setVisibility(View.GONE); +// viewHolder.open_plugin_detail_img.setImageResource(R.drawable.up_img); +// viewHolder.open_plugin_detail_tv.setText("收起"); +// } else { +// viewHolder.gamedetail_ll_plugin.setVisibility(View.GONE); +// viewHolder.gamedetail_ll_plugin_colse.setVisibility(View.VISIBLE); +// viewHolder.open_plugin_detail_img.setImageResource(R.drawable.down_img); +// viewHolder.open_plugin_detail_tv.setText("详情"); +// } +// } +// }); int childCount = viewHolder.gamedetail_ll_plugin.getChildCount(); if (childCount == 0) { View view; @@ -610,9 +609,9 @@ public class GameDetailAdapter extends RecyclerView.Adapter { } if (tags.isEmpty()) { - viewHolder.open_plugin_detail_ll.setVisibility(View.GONE); +// viewHolder.open_plugin_detail_ll.setVisibility(View.GONE); } else { - viewHolder.open_plugin_detail_ll.setVisibility(View.VISIBLE); +// viewHolder.open_plugin_detail_ll.setVisibility(View.VISIBLE); for (int i = 0, size = tags.size(); i < size; i++) { view = View.inflate(context, R.layout.gamedetail_plugin_item, null); @@ -637,84 +636,13 @@ public class GameDetailAdapter extends RecyclerView.Adapter { params.setMargins(0, DisplayUtils.dip2px(context, index * 3), 0, 0); recyclerView.setLayoutParams(params); - recyclerView.setAdapter(new PluginAdapter(tags)); + recyclerView.setAdapter(new GameDetailPluginAdapter(tags, context)); viewHolder.gamedetail_ll_plugin_colse.addView(recyclerView); } } } - private class PluginAdapter extends RecyclerView.Adapter{ - private ArrayList tags; - - PluginAdapter(ArrayList tags) { - this.tags = tags; - } - - @Override - public int getItemViewType(int position) { - return position; - } - - @Override - public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - LinearLayout linearLayout = new LinearLayout(context); - linearLayout.setOrientation(LinearLayout.HORIZONTAL); - LinearLayout.LayoutParams llParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(context, 28)); - linearLayout.setLayoutParams(llParams); - - switch (viewType % 3) { - case 0: - linearLayout.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); - break; - case 1: - linearLayout.setGravity(Gravity.CENTER); - break; - default: - linearLayout.setGravity(Gravity.CENTER_VERTICAL | Gravity.RIGHT); - } - - SimpleDraweeView pluginIcon = new SimpleDraweeView(context); - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DisplayUtils.dip2px(context, 15), DisplayUtils.dip2px(context, 15)); - params.setMargins(0, 0, DisplayUtils.dip2px(context, 5), 0); - pluginIcon.setLayoutParams(params); - - TextView pluginTitle = new TextView(context); - pluginTitle.setTextSize(15); - pluginTitle.setTextColor(Color.parseColor("#06d0a8")); - - linearLayout.addView(pluginIcon); - linearLayout.addView(pluginTitle); - return new ViewHolder(linearLayout); - } - - @Override - public void onBindViewHolder(ViewHolder holder, int position) { - holder.pluginTitle.setText(tags.get(position).getName()); - holder.pluginTitle.setTextColor(Color.parseColor(tags.get(position).getColor())); -// holder.pluginIcon.setImageURI(tags.get(position).getIcon()); - ImageUtils.display(holder.pluginIcon, tags.get(position).getIcon()); - } - - @Override - public int getItemCount() { - return tags.size(); - } - - class ViewHolder extends RecyclerView.ViewHolder{ - - LinearLayout linearLayout; - SimpleDraweeView pluginIcon; - TextView pluginTitle; - - public ViewHolder(View itemView) { - super(itemView); - linearLayout = (LinearLayout) itemView; - pluginIcon = (SimpleDraweeView) linearLayout.getChildAt(0); - pluginTitle = (TextView) linearLayout.getChildAt(1); - } - } - } private void initTopViewHolder(final GameDetailTopViewHolder viewHolder) { if (concernManager.isConcern(gameEntity.getId())) { @@ -728,7 +656,6 @@ public class GameDetailAdapter extends RecyclerView.Adapter { } viewHolder.gamedetail_tv_name.setText(gameEntity.getName()); -// viewHolder.gamedetail_iv_thumb.setImageURI(gameEntity.getIcon()); ImageUtils.display(viewHolder.gamedetail_iv_thumb, gameEntity.getIcon()); if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) { viewHolder.gamedetail_tv_info.setText(""); diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailCalenderViewHolder.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailCalenderViewHolder.java new file mode 100644 index 0000000000..dcea8ad138 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailCalenderViewHolder.java @@ -0,0 +1,26 @@ +package com.gh.gamecenter.gamedetail; + +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/3/28. + */ +public class GameDetailCalenderViewHolder extends RecyclerView.ViewHolder { + + @BindView(R.id.calendar_day) + public TextView calendarDay; + @BindView(R.id.calendar_kaifu) + public TextView calendarKaifu; + + public GameDetailCalenderViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFuLiViewHolder.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFuLiViewHolder.java new file mode 100644 index 0000000000..abf83e3d49 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFuLiViewHolder.java @@ -0,0 +1,36 @@ +package com.gh.gamecenter.gamedetail; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gh.common.view.MarqueeView; +import com.gh.gamecenter.R; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by khy on 2017/3/27. + */ +public class GameDetailFuLiViewHolder extends RecyclerView.ViewHolder { + + @BindView(R.id.gamedetail_item_fuli_des) public TextView fuliDes; + @BindView(R.id.gamedetail_qq_rl) public RelativeLayout fuliQqRl; + @BindView(R.id.gamedetail_qq_des) public TextView fuliQqDes; + @BindView(R.id.gamedetail_qq_btn) public TextView fuliQqBtn; + @BindView(R.id.gamedetail_qqun_rl) public RelativeLayout fuliQqunRl; + @BindView(R.id.gamedetail_qqun_btn) public TextView fuliQqunBtn; + @BindView(R.id.gamedetail_qqun_des) public TextView fuliQqunDes; + @BindView(R.id.gamedetail_item_notice) public MarqueeView filiNotice; + @BindView(R.id.gamedetail_item_notice_ll) public LinearLayout filiNoticeLl; + + + public GameDetailFuLiViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + + } +} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailGameTagAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailGameTagAdapter.java new file mode 100644 index 0000000000..71a72ac31c --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailGameTagAdapter.java @@ -0,0 +1,62 @@ +package com.gh.gamecenter.gamedetail; + +import android.content.Context; +import android.graphics.Color; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.gh.common.util.DisplayUtils; +import com.gh.gamecenter.R; + +import java.util.List; + +/** + * Created by khy on 2017/3/28. + */ +public class GameDetailGameTagAdapter extends RecyclerView.Adapter { + + private Context mContext; + + private List mGameType; + + public GameDetailGameTagAdapter(Context context, List gameType) { + this.mContext = context; + this.mGameType = gameType; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + TextView textView = new TextView(mContext); + textView.setTextColor(Color.WHITE); + int padd = DisplayUtils.dip2px(mContext, 5); + textView.setPadding(DisplayUtils.dip2px(mContext, 8), padd, DisplayUtils.dip2px(mContext, 8), padd); + textView.setBackgroundResource(R.drawable.gamedetail_gametag_bg); + + return new TypeViewHolder(textView); + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder instanceof TypeViewHolder) { + ((TypeViewHolder) holder).type.setText(mGameType.get(position)); + } + } + + @Override + public int getItemCount() { + return mGameType.size(); + } + + private class TypeViewHolder extends RecyclerView.ViewHolder{ + + private TextView type; + + public TypeViewHolder(View itemView) { + super(itemView); + type = (TextView) itemView; + } + } +} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailGameTagViewHolder.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailGameTagViewHolder.java new file mode 100644 index 0000000000..53a2d07d40 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailGameTagViewHolder.java @@ -0,0 +1,22 @@ +package com.gh.gamecenter.gamedetail; + +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import com.gh.gamecenter.R; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by khy on 2017/3/28. + */ +public class GameDetailGameTagViewHolder extends RecyclerView.ViewHolder { + + @BindView(R.id.gamedetail_gametag_rv) public RecyclerView gametagRv; + + public GameDetailGameTagViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailGameViewHolder.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailGameViewHolder.java new file mode 100644 index 0000000000..e41eb8c7da --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailGameViewHolder.java @@ -0,0 +1,17 @@ +package com.gh.gamecenter.gamedetail; + +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import butterknife.ButterKnife; + +/** + * Created by khy on 2017/3/29. + */ +public class GameDetailGameViewHolder extends RecyclerView.ViewHolder { + + public GameDetailGameViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuAdapter.java new file mode 100644 index 0000000000..49f472ec7f --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuAdapter.java @@ -0,0 +1,378 @@ +package com.gh.gamecenter.gamedetail; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Handler; +import android.os.Message; +import android.support.v7.widget.RecyclerView; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gh.common.util.DisplayUtils; +import com.gh.gamecenter.NewSuggestActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.entity.CalendarEntity; +import com.gh.gamecenter.entity.KaiFuServerEntity; +import com.gh.gamecenter.eventbus.EBReuse; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import de.greenrobot.event.EventBus; + +/** + * Created by khy on 2017/3/28. + */ +public class GameDetailKaiFuAdapter extends RecyclerView.Adapter { + private Context mContext; + + private String[] week = {"一", "二", "三", "四", "五", "六", "日"}; + + private int monthCount; + private int curWeek; + private int curDay; + + private boolean isNextMonth; + + private List curDayData; + private List mServerList; + + private GameDetailKaiFuViewHolder viewHolder; + + Handler mHandler = new Handler(){ + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case 0: + notifyDataSetChanged(); + break; + case 1: + ViewGroup.LayoutParams params =viewHolder.kaifuRl.getLayoutParams(); + params.height = ((curDayData.size()/7) - 1)* DisplayUtils.dip2px(mContext, 46) + + DisplayUtils.dip2px(mContext, 26); + viewHolder.kaifuRl.setLayoutParams(params); + break; + } + } + }; + + public GameDetailKaiFuAdapter(Context context, List serverInfo, GameDetailKaiFuViewHolder viewHolder) { + this.mContext = context; + this.mServerList = serverInfo; + this.viewHolder = viewHolder; + + isNextMonth = false; + + curDayData = new ArrayList<>(); + + initView(viewHolder); + + new Thread(new Runnable() { + @Override + public void run() { + initDate(); + } + }).start(); + } + + private void initView(final GameDetailKaiFuViewHolder viewHolder) { + long curDate = System.currentTimeMillis(); + + SimpleDateFormat formatMonth = new SimpleDateFormat("MM"); + SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月"); + int curMonth = Integer.parseInt(formatMonth.format(curDate)); + + long lastTime = 0; + int lastMonth = -1; + + for (KaiFuServerEntity kaiFuServerEntity : mServerList) { + lastTime = kaiFuServerEntity.getTime(); + lastMonth = Integer.parseInt(formatMonth.format(lastTime*1000)); + if (lastMonth > curMonth) break; + } + + viewHolder.curMonth.setText(format.format(curDate)); + if (lastMonth > curMonth) { + viewHolder.nextMonth.setText(format.format(lastTime*1000)); + viewHolder.nextMonth.setVisibility(View.VISIBLE); + } else { + viewHolder.nextMonth.setVisibility(View.GONE); + } + + viewHolder.nextMonth.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!isNextMonth) { + viewHolder.nextMonth.setBackgroundResource(R.drawable.calendar_bar_select); + viewHolder.nextMonth.setTextColor(Color.WHITE); + viewHolder.curMonth.setBackgroundDrawable(new ColorDrawable(0)); + viewHolder.curMonth.setTextColor(Color.BLACK); + isNextMonth = true; + initDate(); + } + } + }); + + viewHolder.curMonth.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (isNextMonth) { + viewHolder.nextMonth.setTextColor(Color.BLACK); + viewHolder.nextMonth.setBackgroundDrawable(new ColorDrawable(0)); + viewHolder.curMonth.setTextColor(Color.WHITE); + viewHolder.curMonth.setBackgroundResource(R.drawable.calendar_bar_select); + isNextMonth = false; + initDate(); + } + } + }); + + viewHolder.colseDetail.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewHolder.kaifuDetailRl.setVisibility(View.GONE); + } + }); + + viewHolder.kaifuSuggest.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(mContext, NewSuggestActivity.class); + intent.putExtra("suggestType", 1); + mContext.startActivity(intent); + } + }); + + viewHolder.detailSv.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + EventBus.getDefault().post(new EBReuse("CalenderDown")); + } else if (event.getAction() == MotionEvent.ACTION_UP) { + EventBus.getDefault().post(new EBReuse("CalenderCancel")); + } + return false; + } + }); + } + + + + private void initDate() { + + // 获取当前 年-月 + long curDate = System.currentTimeMillis(); + SimpleDateFormat formatYear = new SimpleDateFormat("yyyy"); + SimpleDateFormat formatMonth = new SimpleDateFormat("MM"); + SimpleDateFormat formatDay = new SimpleDateFormat("dd"); + + int curYear = Integer.parseInt(formatYear.format(curDate)); + int curMonth = Integer.parseInt(formatMonth.format(curDate)); + if (isNextMonth) { + if (curMonth == 12) { + curMonth = 1; + } else { + curMonth = curMonth + 1; + } + } + + curDay = Integer.parseInt(formatDay.format(curDate)); + + monthCount = getDaysByYearMonth(curYear, curMonth); // 获取当月天数 + curWeek = getWeekByDay(curYear, curMonth); + + curDayData.clear(); + int day = 0; + for (int i = 1; i <= 49; i++) { + CalendarEntity entity = new CalendarEntity(); + if (i >= curWeek && monthCount > day) { + day ++; + entity.setDay(day); + curDayData.add(entity); + } else { + entity.setDay(-1); + curDayData.add(entity); + } + } + + if (curDayData.get(36).getDay() == -1) { + for (int i = 1; i <= 7; i++) { + curDayData.remove(49 - i); + } + } else { + mHandler.sendEmptyMessage(1); + } + + for (KaiFuServerEntity serverEntity : mServerList) { + long time = serverEntity.getTime(); + int serverMonth = Integer.parseInt(formatMonth.format(time*1000)); + if (serverMonth == curMonth) { + int i = Integer.parseInt(formatDay.format(time * 1000)); + for (CalendarEntity entity : curDayData) { + + if (entity.getDay() == i) { + List server = entity.getServer(); + if (server == null) server = new ArrayList<>(); + + server.add(serverEntity); + entity.setServer(server); + } + } + } + } + + mHandler.sendEmptyMessage(0); + } + + public int getWeekByDay(int year, int month) { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.YEAR, year); + calendar.set(Calendar.MONTH, month - 1); +// int daysCountOfMonth = calendar.getActualMaximum(Calendar.DATE); + calendar.set(Calendar.DAY_OF_MONTH, 1); //指定日 + int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); + return dayOfWeek; + } + + public int getDaysByYearMonth(int year, int month) { + + Calendar a = Calendar.getInstance(); + a.set(Calendar.YEAR, year); + a.set(Calendar.MONTH, month - 1); + a.set(Calendar.DATE, 1); + a.roll(Calendar.DATE, -1); + int maxDate = a.get(Calendar.DATE); + return maxDate; + } + + @Override + public int getItemViewType(int position) { + if (position < 7) { + return 1; + } else { + return 2; + } + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + if (viewType == 1) { + TextView textView = new TextView(mContext); + textView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT + , DisplayUtils.dip2px(mContext, 25))); + textView.setGravity(Gravity.CENTER); + return new WeekViewHolder(textView); + } else { + View view = LayoutInflater.from(mContext).inflate(R.layout.gamedetail_calendar_item, parent, false); + return new GameDetailCalenderViewHolder(view); + } + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder instanceof WeekViewHolder) { + ((WeekViewHolder) holder).week.setText(week[position]); + } else if (holder instanceof GameDetailCalenderViewHolder) { + GameDetailCalenderViewHolder viewHolder = (GameDetailCalenderViewHolder) holder; + final CalendarEntity entity = curDayData.get(position - 6); + if (entity.getDay() != -1) { + int day = entity.getDay(); + if (day == curDay && !isNextMonth) { + viewHolder.calendarDay.setText("今天"); + viewHolder.calendarDay.setTextColor(Color.parseColor("#FF4147")); + viewHolder.calendarKaifu.setBackgroundResource(R.drawable.textview_blue_style); + } else { + if (day < curDay && !isNextMonth) { + viewHolder.itemView.setBackgroundColor(Color.parseColor("#30000000")); + viewHolder.calendarKaifu.setBackgroundResource(R.drawable.textview_cancel_dn); + } else { + viewHolder.itemView.setBackgroundDrawable(new ColorDrawable(0)); + viewHolder.calendarKaifu.setBackgroundResource(R.drawable.textview_blue_style); + } + viewHolder.calendarDay.setText(day + ""); + viewHolder.calendarDay.setTextColor(Color.parseColor("#3A3A3A")); + } + + if (entity.getServer() != null) { + viewHolder.calendarKaifu.setVisibility(View.VISIBLE); + int padd = DisplayUtils.dip2px(mContext, 2); + viewHolder.calendarKaifu.setPadding(padd, DisplayUtils.dip2px(mContext, 1), padd, padd); + if (entity.getServer().size() == 1) { + viewHolder.calendarKaifu.setText("开服"); + } else { + viewHolder.calendarKaifu.setText("开服x" + entity.getServer().size()); + } + + + holder.itemView.setEnabled(true); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + initKaifuDetail(entity); + } + }); + } else { + viewHolder.calendarKaifu.setVisibility(View.INVISIBLE); + } + } else { + holder.itemView.setEnabled(false); + viewHolder.calendarDay.setText(""); + viewHolder.calendarKaifu.setVisibility(View.INVISIBLE); + viewHolder.itemView.setBackgroundDrawable(new ColorDrawable(0)); + + } + + } + } + + private void initKaifuDetail(CalendarEntity entity) { + if (entity == null && entity.getServer() == null && entity.getServer().size() == 0) { + return; + } + + long l = entity.getServer().get(0).getTime() * 1000; + SimpleDateFormat format = new SimpleDateFormat("MM月dd日"); + SimpleDateFormat formatTime = new SimpleDateFormat("HH:mm"); + viewHolder.kaifuDetailRl.setVisibility(View.VISIBLE); + viewHolder.detailTime.setText( format.format(l) + "开服"); + + viewHolder.detailList.removeAllViews(); + for (KaiFuServerEntity kaiFuServerEntity : entity.getServer()) { + TextView textView = new TextView(mContext); + textView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT + , DisplayUtils.dip2px(mContext, 45))); + textView.setTextSize(14); + textView.setTextColor(Color.WHITE); + textView.setGravity(Gravity.CENTER_VERTICAL); + textView.setText(formatTime.format(kaiFuServerEntity.getTime() * 1000) + " " + kaiFuServerEntity.getNote()); + + viewHolder.detailList.addView(textView); + } + } + + @Override + public int getItemCount() { + return curDayData.size(); + } + + + private class WeekViewHolder extends RecyclerView.ViewHolder { + + TextView week; + + public WeekViewHolder(View itemView) { + super(itemView); + week = (TextView) itemView; + } + } +} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuViewHolder.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuViewHolder.java new file mode 100644 index 0000000000..8343023ec9 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailKaiFuViewHolder.java @@ -0,0 +1,35 @@ +package com.gh.gamecenter.gamedetail; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; + +import com.gh.gamecenter.R; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by khy on 2017/3/28. + */ +public class GameDetailKaiFuViewHolder extends RecyclerView.ViewHolder { + + @BindView(R.id.gamedetail_kaifu_rv) RecyclerView kaifuRv; + @BindView(R.id.gamedetail_kaifu_cur_month) TextView curMonth; + @BindView(R.id.gamedetail_kaifu_next_month) TextView nextMonth; + @BindView(R.id.gamedetail_kaifu_rl) RelativeLayout kaifuRl; + @BindView(R.id.gamedetail_kaifu_detail) RelativeLayout kaifuDetailRl; + @BindView(R.id.gamedetail_kaifu_colse_detail) TextView colseDetail; + @BindView(R.id.gamedetail_kaifu_suggest) TextView kaifuSuggest; + @BindView(R.id.gamedetail_kaifu_detail_time) TextView detailTime; + @BindView(R.id.gamedetail_kaifu_detail_list) LinearLayout detailList; + @BindView(R.id.gamedetail_kaifu_detail_sv) ScrollView detailSv; + + public GameDetailKaiFuViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailNewsViewHolder.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailNewsViewHolder.java index 8c95959d06..9b42a81f1a 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailNewsViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailNewsViewHolder.java @@ -16,6 +16,7 @@ public class GameDetailNewsViewHolder extends RecyclerView.ViewHolder { public LinearLayout gamedetail_item_news_list; public TextView gamedetail_item_news_title; public View gamedetail_item_line; + public View gamedetail_item_news_line_top; public GameDetailNewsViewHolder(View itemView) { super(itemView); @@ -24,6 +25,7 @@ public class GameDetailNewsViewHolder extends RecyclerView.ViewHolder { gamedetail_item_news_list = (LinearLayout) itemView.findViewById(R.id.gamedetail_item_news_list); gamedetail_item_news_title = (TextView) itemView.findViewById(R.id.gamedetail_item_news_title); gamedetail_item_line = itemView.findViewById(R.id.gamedetail_item_line); + gamedetail_item_news_line_top = itemView.findViewById(R.id.gamedetail_item_news_line_top); } } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailNoticeViewHolder.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailNoticeViewHolder.java new file mode 100644 index 0000000000..0b2d518229 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailNoticeViewHolder.java @@ -0,0 +1,24 @@ +package com.gh.gamecenter.gamedetail; + +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import com.gh.common.view.MarqueeView; +import com.gh.gamecenter.R; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by khy on 2017/3/30. + */ +public class GameDetailNoticeViewHolder extends RecyclerView.ViewHolder { + + @BindView(R.id.gamedetail_item_notice) public MarqueeView mvNotice; + @BindView(R.id.gamedetail_item_notice_line) public View noticeLine; + + public GameDetailNoticeViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this,itemView); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailPluginAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailPluginAdapter.java new file mode 100644 index 0000000000..f8b906f9ea --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailPluginAdapter.java @@ -0,0 +1,95 @@ +package com.gh.gamecenter.gamedetail; + +import android.content.Context; +import android.graphics.Color; +import android.support.v7.widget.RecyclerView; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.facebook.drawee.view.SimpleDraweeView; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.ImageUtils; +import com.gh.gamecenter.entity.TagEntity; + +import java.util.ArrayList; + +/** + * Created by khy on 2017/3/27. + */ +public class GameDetailPluginAdapter extends RecyclerView.Adapter{ + private ArrayList tags; + private Context mContext; + + GameDetailPluginAdapter(ArrayList tags, Context context) { + this.tags = tags; + this.mContext = context; + } + + @Override + public int getItemViewType(int position) { + return position; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + LinearLayout linearLayout = new LinearLayout(mContext); + linearLayout.setOrientation(LinearLayout.HORIZONTAL); + LinearLayout.LayoutParams llParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT + , DisplayUtils.dip2px(mContext, 28)); + linearLayout.setLayoutParams(llParams); + + switch (viewType % 3) { + case 0: + linearLayout.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); + break; + case 1: + linearLayout.setGravity(Gravity.CENTER); + break; + default: + linearLayout.setGravity(Gravity.CENTER_VERTICAL | Gravity.RIGHT); + } + + SimpleDraweeView pluginIcon = new SimpleDraweeView(mContext); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DisplayUtils.dip2px(mContext, 15) + , DisplayUtils.dip2px(mContext, 15)); + params.setMargins(0, 0, DisplayUtils.dip2px(mContext, 5), 0); + pluginIcon.setLayoutParams(params); + + TextView pluginTitle = new TextView(mContext); + pluginTitle.setTextSize(15); + pluginTitle.setTextColor(Color.parseColor("#06d0a8")); + + linearLayout.addView(pluginIcon); + linearLayout.addView(pluginTitle); + return new ViewHolder(linearLayout); + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + holder.pluginTitle.setText(tags.get(position).getName()); + holder.pluginTitle.setTextColor(Color.parseColor(tags.get(position).getColor())); + ImageUtils.display(holder.pluginIcon, tags.get(position).getIcon()); + } + + @Override + public int getItemCount() { + return tags.size(); + } + + class ViewHolder extends RecyclerView.ViewHolder{ + + LinearLayout linearLayout; + SimpleDraweeView pluginIcon; + TextView pluginTitle; + + public ViewHolder(View itemView) { + super(itemView); + linearLayout = (LinearLayout) itemView; + pluginIcon = (SimpleDraweeView) linearLayout.getChildAt(0); + pluginTitle = (TextView) linearLayout.getChildAt(1); + } + } +} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailPluginViewHolder.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailPluginViewHolder.java index b9fcca5796..7e82605938 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailPluginViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailPluginViewHolder.java @@ -2,9 +2,8 @@ package com.gh.gamecenter.gamedetail; import android.support.v7.widget.RecyclerView; import android.view.View; -import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.TextView; +import android.widget.RelativeLayout; import com.gh.gamecenter.R; @@ -14,19 +13,17 @@ import com.gh.gamecenter.R; public class GameDetailPluginViewHolder extends RecyclerView.ViewHolder { public LinearLayout gamedetail_ll_plugin; - public LinearLayout open_plugin_detail_ll; - public ImageView open_plugin_detail_img; public LinearLayout gamedetail_ll_plugin_colse; - public TextView open_plugin_detail_tv; + public RelativeLayout gamedetail_plugin_open_list; + public View gamedetail_plugin_line; public GameDetailPluginViewHolder(View itemView) { super(itemView); gamedetail_ll_plugin = (LinearLayout) itemView.findViewById(R.id.gamedetail_ll_plugin); - open_plugin_detail_ll = (LinearLayout) itemView.findViewById(R.id.open_plugin_detail_ll); - open_plugin_detail_img = (ImageView) itemView.findViewById(R.id.open_plugin_detail_img); gamedetail_ll_plugin_colse = (LinearLayout) itemView.findViewById(R.id.gamedetail_ll_plugin_colse); - open_plugin_detail_tv = (TextView) itemView.findViewById(R.id.open_plugin_detail_tv); + gamedetail_plugin_open_list = (RelativeLayout) itemView.findViewById(R.id.gamedetail_plugin_open_list); + gamedetail_plugin_line = itemView.findViewById(R.id.gamedetail_plugin_line_top); } } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameLibaoGalleryAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/GameLibaoGalleryAdapter.java index 85c3ce55cf..8834cdbf4c 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameLibaoGalleryAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameLibaoGalleryAdapter.java @@ -2,6 +2,8 @@ package com.gh.gamecenter.gamedetail; import android.content.Context; import android.content.Intent; +import android.content.res.ColorStateList; +import android.graphics.Color; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -45,6 +47,60 @@ class GameLibaoGalleryAdapter extends RecyclerView.Adapter { + private Context mContext; + + private XinXiFragment fragment; + + private GameDetailEntity mGameDetailEntity; + private GameEntity mGameEntity; + + private List mGameList; + + private String entrance; + private String name; + + private int position_plugin = -1; + private int position_news = -1; + private int position_intro = -1; + private int position_gametag = -1; + private int position_game = -1; + private int position_notice = -1; + + + public XinXiAdapter(XinXiFragment fragment) { + this.mContext = fragment.getContext(); + this.fragment = fragment; + + mGameList = new ArrayList<>(); + + mGameDetailEntity = (GameDetailEntity) AppController.get("GameDetailEntity", false); + mGameEntity = (GameEntity) AppController.get("GameEntity", false); + + name = "游戏详情"; + + getGameNews(); + + initGameList(); + + } + + // 获取游戏新闻 + private void getGameNews() { + RetrofitManager.getApi().getGameNews(mGameEntity.getId(), 3) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response>() { + @Override + public void onResponse(List response) { + mGameDetailEntity.setNews(response); + initPosition(); + notifyDataSetChanged(); + } + + @Override + public void onFailure(HttpException e) { + initPosition(); + notifyDataSetChanged(); + } + }); + } + + public void initGameList() { + + RetrofitManager.getApi().getColumn("57d7a0418ab49eb95b8b463d", 2, "") + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response>() { + @Override + public void onResponse(List response) { + GameManager manager = new GameManager(mContext); + if (response.size() != 0) { + for (GameEntity entity : response) { + entity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(entity.getName())); + manager.addOrUpdate(entity.getApk(), entity.getId(), entity.getName()); + } + + mGameList.addAll(response); + initPosition(); + notifyDataSetChanged(); + + } + } + + @Override + public void onFailure(HttpException e) { + + Utils.toast(mContext, "关联游戏加载失败"); + + } + }); + } + + @Override + public int getItemViewType(int position) { + if (position == 0) { + return 0; + } else if (position_notice != -1 && position_notice == position){ + return 1; + } else if (position_plugin != -1 && position_plugin == position) { + return 2; + } else if (position_news != -1 && position_news == position) { + return 3; + } else if (position_intro != -1 && position_intro == position) { + return 4; + } else if (position_gametag != -1 && position_gametag == position) { + return 5; + } else if (position_game != -1 && position_game == position) { + return 6; + } else if (position_game != -1 && mGameList != null &&mGameList.size()>0) { + return 100; + } + return position; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view; + switch (viewType) { + case 0: + RelativeLayout relativeLayout = new RelativeLayout(mContext); + int height; + if (fragment.isNoTabBar) { + height = DisplayUtils.dip2px(mContext, 90); + } else { + height = DisplayUtils.dip2px(mContext, 130); + } + ViewGroup.LayoutParams params = new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, height); + relativeLayout.setLayoutParams(params); + return new ReuseViewHolder(relativeLayout); + case 1: + view = LayoutInflater.from(mContext).inflate(R.layout.gamedetail_item_notice, parent, false); + return new GameDetailNoticeViewHolder(view); + case 2: + view = LayoutInflater.from(mContext) + .inflate(R.layout.gamedetail_item_plugin, parent, false); + return new GameDetailPluginViewHolder(view); + case 3: + view = LayoutInflater.from(mContext) + .inflate(R.layout.gamedetail_item_news, parent, false); + return new GameDetailNewsViewHolder(view); + case 4: + view = LayoutInflater.from(mContext) + .inflate(R.layout.gamedetail_item_intro, parent, false); + return new GameDetailIntroViewHolder(view); + case 5: + view = LayoutInflater.from(mContext) + .inflate(R.layout.gamedetail_item_gametag, parent, false); + return new GameDetailGameTagViewHolder(view); + case 6: + view = LayoutInflater.from(mContext) + .inflate(R.layout.gamedetail_item_game, parent, false); + return new GameDetailGameViewHolder(view); + case 100: + view = LayoutInflater.from(mContext).inflate( + R.layout.game_normal_item, parent, false); + return new GameNormalViewHolder(view); + } + return null; + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + + if (holder instanceof GameDetailPluginViewHolder) { + GameDetailPluginViewHolder viewHolder = (GameDetailPluginViewHolder) holder; + initPluginViewHolder(viewHolder); + } else if (holder instanceof GameDetailNoticeViewHolder) { + GameDetailNoticeViewHolder viewHolder = (GameDetailNoticeViewHolder) holder; + viewHolder.noticeLine.setVisibility(View.VISIBLE); + initNoticeViewHolder(viewHolder.mvNotice); + } else if (holder instanceof GameDetailNewsViewHolder) { + initNewsViewHolder((GameDetailNewsViewHolder) holder); + } else if (holder instanceof GameDetailIntroViewHolder) { + initIntroViewHolder((GameDetailIntroViewHolder) holder); + } else if (holder instanceof GameDetailGameTagViewHolder) { + initGameTagViewHolder((GameDetailGameTagViewHolder) holder); + } else if (holder instanceof GameDetailGameViewHolder) { + } else if (holder instanceof GameNormalViewHolder) { + initGameNormalViewHolder((GameNormalViewHolder) holder, position); + } + + } + + @Override + public int getItemCount() { + int index = 1; + + if (position_notice != -1) { + index++; + } + if (position_plugin != -1) { + index++; + } + if (position_news != -1) { + index++; + } + if (position_intro != -1) { + index++; + } + if (position_gametag != -1) { + index++; + } + if (position_game != -1) { + if (mGameList.size() <=3) { + index = index + mGameList.size() + 1; + } else { + index = index + 4; + } + + } + return index; + } + + private void initPosition() { + if (mGameDetailEntity == null) { + return; + } + + if (fragment.isNoTabBar && mGameDetailEntity.getNotice() != null && mGameDetailEntity.getNotice().size() > 0 + &&TextUtils.isEmpty(mGameDetailEntity.getFulishuoming()) + && (mGameDetailEntity.getContact() == null || (mGameDetailEntity.getContact() != null + && mGameDetailEntity.getContact().getService()== null + && mGameDetailEntity.getContact().getPlayer() == null))) { + position_notice = 1; + + } + + if (mGameDetailEntity.getTag() != null + && mGameDetailEntity.getTag().size() != 0 && fragment.isNoTabBar) { + if (position_notice != -1) { + position_plugin = position_notice + 1; + } else { + position_plugin = 1; + } + } + + if (mGameDetailEntity.getNews() != null + && mGameDetailEntity.getNews().size() != 0) { + if (position_plugin != -1) { + position_news = position_plugin + 1; + } else if (position_notice != -1) { + position_news = position_notice + 1; + } else { + position_news = 1; + } + } + if (mGameDetailEntity.getGallery() != null + && mGameDetailEntity.getGallery().size() != 0) { + if (position_news != -1) { + position_intro = position_news + 1; + } else if (position_plugin != -1) { + position_intro = position_plugin + 1; + } else if (position_notice != -1) { + position_intro = position_notice + 1; + } else { + position_intro = 1; + } + } + + if (mGameDetailEntity.getGameTag() != null + && mGameDetailEntity.getGameTag().size() > 0) { + if (position_intro != -1) { + position_gametag = position_intro + 1; + } else if (position_news != -1){ + position_gametag = position_news + 1; + } else if (position_plugin != -1) { + position_gametag = position_plugin + 1; + } else if (position_notice != -1) { + position_gametag = position_notice + 1; + } else { + position_gametag = 1; + } + } + + if (mGameList != null && mGameList.size() > 0) { + if (position_gametag != -1) { + position_game = position_gametag + 1; + } else if (position_intro != -1) { + position_game = position_intro + 1; + } else if (position_news != -1) { + position_game = position_news +1; + } else if (position_plugin!= -1) { + position_game = position_plugin + 1; + } else if (position_notice != -1) { + position_game = position_notice + 1; + } else { + position_game = 1; + } + } + } + + private void initNoticeViewHolder(final MarqueeView mvNotice) { + final List notice = mGameDetailEntity.getNotice(); + if (notice != null && notice.size() > 0) { + List list = new ArrayList<>(); + for (NewsEntity newsEntity : notice) { + list.add(newsEntity.getTitle()); + } + mvNotice.startWithList(list); + + mvNotice.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int index = mvNotice.getDisplayedChild(); + NewsUtils.startNewsDetailActivity(mContext, notice.get(index), "游戏详情-公告"); + } + }); + } + } + + private void initGameNormalViewHolder(final GameNormalViewHolder holder, int position) { + + final GameEntity gameEntity = mGameList.get(position - position_game - 1); + + ImageUtils.display(holder.gameThumb, gameEntity.getIcon()); + holder.gameName.setText(gameEntity.getName()); + if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) { + holder.gameDes.setText(gameEntity.getBrief()); + } else { + holder.gameDes.setText(String.format("%s %s", gameEntity.getApk().get(0).getSize(), gameEntity.getBrief())); + } + + GameViewUtils.setLabelList(mContext, holder.gameLabelList, gameEntity.getTag()); + + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Map kv = new HashMap<>(); + kv.put("名字", gameEntity.getName()); + kv.put("位置", String.valueOf(holder.getPosition() + 1)); + DataUtils.onEvent(mContext, "点击", name, kv); + + DataCollectionUtils.uploadClick(mContext, "列表", name, gameEntity.getName()); + + GameUtils.startGameDetailActivity(mContext, gameEntity, entrance + "+(" + name + "[" + (holder.getPosition() + 1) + "])"); + } + }); + + DownloadItemUtils.setOnClickListener(mContext, holder.gameDownloadBtn, + gameEntity, position, this, entrance + "+(" + name + "[" + (holder.getPosition() + 1) + "])", name + ":" + gameEntity.getName(), false); + + DownloadItemUtils.updateItem(mContext, gameEntity, holder, true); + } + + private void initGameTagViewHolder(GameDetailGameTagViewHolder holder) { + if (holder.gametagRv.getAdapter() == null) { + holder.gametagRv.setHasFixedSize(true); + holder.gametagRv.setLayoutManager(new LinearLayoutManager(mContext + , LinearLayoutManager.HORIZONTAL, false)); + holder.gametagRv.addItemDecoration(new HorizontalItemDecoration(mContext, 8, mGameDetailEntity.getGameTag().size())); + holder.gametagRv.setAdapter(new GameDetailGameTagAdapter(mContext, mGameDetailEntity.getGameTag())); + } + } + + private void initIntroViewHolder(GameDetailIntroViewHolder viewHolder) { + if (viewHolder.gamedetail_item_intro_gallery.getAdapter() == null) { + viewHolder.gamedetail_item_intro_gallery.setHasFixedSize(true); + viewHolder.gamedetail_item_intro_gallery.setLayoutManager( + new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); + viewHolder.gamedetail_item_intro_gallery.setAdapter( + new GameGalleryAdapter(mContext, mGameDetailEntity.getGallery(), + entrance + "+(游戏详情[" + mGameEntity.getName() + "]:游戏介绍)")); + viewHolder.gamedetail_item_intro_gallery.addItemDecoration( + new HorizontalItemDecoration(mContext, 1, mGameDetailEntity.getGallery().size())); + } + if (TextUtils.isEmpty(mGameDetailEntity.getDes())) { + viewHolder.gamedetail_item_intro_content.setText(""); + } else { + viewHolder.gamedetail_item_intro_content.setText(mGameDetailEntity.getDes()); + } + } + + private void initNewsViewHolder(GameDetailNewsViewHolder viewHolder) { + viewHolder.gamedetail_item_news_line_top.setVisibility(View.VISIBLE); + if (mGameDetailEntity.getNews().size() < 3) { + viewHolder.gamedetail_item_news_more.setVisibility(View.GONE); + } else { + viewHolder.gamedetail_item_news_more.setVisibility(View.VISIBLE); + viewHolder.gamedetail_item_news_more.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mGameDetailEntity.getArticleTypes() != null + && mGameEntity.getId() != null + && mGameEntity.getName() != null) { + Map kv = new HashMap<>(); + kv.put("名字", mGameEntity.getName()); + kv.put("位置", "资讯攻略-全部"); + DataUtils.onEvent(mContext, "点击", "游戏详情", kv); + + DataCollectionUtils.uploadClick(mContext, "资讯攻略-全部", "游戏详情", mGameEntity.getName()); + + Intent intent = new Intent(mContext, GameNewsActivity.class); + intent.putExtra("articleTypes", mGameDetailEntity.getArticleTypes()); + intent.putExtra("gameName", mGameEntity.getName()); + intent.putExtra("gameId", mGameEntity.getId()); + intent.putExtra("entrance", entrance + "+(游戏详情[" + mGameEntity.getName() + "]:资讯攻略-全部)"); + mContext.startActivity(intent); + } + } + }); + } + final List newsList = mGameDetailEntity.getNews(); + int childCount = viewHolder.gamedetail_item_news_list.getChildCount(); + if (childCount == 0) { + for (int i = 0, size = newsList.size(); i < size; i++) { + View view = View.inflate(mContext, R.layout.gamedetail_news_item, null); + + TextView tv_tag = (TextView) view.findViewById(R.id.gamedetail_news_item_tag); + if ("活动".equals(newsList.get(i).getType())){ + tv_tag.setBackgroundResource(R.drawable.textview_orange_style); + } else if ("公告".equals(newsList.get(i).getType())){ + tv_tag.setBackgroundResource(R.drawable.textview_red_style); + } else { + tv_tag.setBackgroundResource(R.drawable.textview_blue_style); + } + tv_tag.setText(newsList.get(i).getType()); + + TextView tv_title = (TextView) view.findViewById(R.id.gamedetail_news_item_title); + tv_title.setText(Html.fromHtml(newsList.get(i).getTitle())); + + final NewsEntity newsEntity = newsList.get(i); + final int ii = i; + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Map kv = new HashMap<>(); + kv.put("名字", newsEntity.getTitle()); + kv.put("位置", String.valueOf(ii + 1)); + DataUtils.onEvent(mContext, "点击", "游戏详情-资讯攻略", kv); + + DataCollectionUtils.uploadClick(mContext, "资讯攻略", "游戏详情", newsEntity.getTitle()); + + // 统计阅读量 + NewsUtils.statNewsViews(newsEntity.getId()); + NewsUtils.startNewsDetailActivity(mContext, newsEntity, entrance + "+(游戏详情[" + mGameEntity.getName() + "]:资讯攻略-列表[" + (ii + 1) + "])"); + } + }); + viewHolder.gamedetail_item_news_list.addView(view); + } + } + } + + private void initPluginViewHolder(final GameDetailPluginViewHolder viewHolder) { + viewHolder.gamedetail_plugin_line.setVisibility(View.VISIBLE); + ArrayList tags = mGameDetailEntity.getTag(); + + viewHolder.gamedetail_plugin_open_list.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewHolder.gamedetail_ll_plugin.setVisibility(View.VISIBLE); + viewHolder.gamedetail_ll_plugin_colse.setVisibility(View.GONE); + viewHolder.gamedetail_plugin_open_list.setVisibility(View.GONE); + } + }); + + int childCount = viewHolder.gamedetail_ll_plugin.getChildCount(); + if (childCount == 0) { + View view; + SimpleDraweeView iv_hint; + TextView tv_hint; + TextView tv_content; + TagEntity tagEntity; + if (mGameDetailEntity.getTips() != null && !TextUtils.isEmpty(mGameDetailEntity.getTips().getContent())) { + view = View.inflate(mContext, R.layout.gamedetail_plugin_item, null); + iv_hint = (SimpleDraweeView) view.findViewById(R.id.gamedetail_iv_hint); + tv_hint = (TextView) view.findViewById(R.id.gamedetail_tv_hint); + tv_content = (TextView) view.findViewById(R.id.gamedetail_tv_content); + ImageUtils.display(iv_hint, mGameDetailEntity.getTips().getIcon()); + tv_hint.setTextColor(Color.parseColor(mGameDetailEntity.getTips().getTitle().getColor())); + tv_hint.setText(mGameDetailEntity.getTips().getTitle().getValue()); + tv_content.setText(mGameDetailEntity.getTips().getContent()); + viewHolder.gamedetail_ll_plugin.addView(view); + + view = View.inflate(mContext, R.layout.gamedetail_plugin_item, null); + iv_hint = (SimpleDraweeView) view.findViewById(R.id.gamedetail_iv_hint); + tv_hint = (TextView) view.findViewById(R.id.gamedetail_tv_hint); + tv_content = (TextView) view.findViewById(R.id.gamedetail_tv_content); + ImageUtils.display(iv_hint, mGameDetailEntity.getTips().getIcon()); + tv_hint.setTextColor(Color.parseColor(mGameDetailEntity.getTips().getTitle().getColor())); + tv_hint.setText(mGameDetailEntity.getTips().getTitle().getValue()); + tv_content.setText(mGameDetailEntity.getTips().getContent()); + viewHolder.gamedetail_ll_plugin_colse.addView(view); + } + + if (tags.isEmpty()) { + viewHolder.gamedetail_plugin_open_list.setVisibility(View.GONE); + } else { + viewHolder.gamedetail_plugin_open_list.setVisibility(View.VISIBLE); + + for (int i = 0, size = tags.size(); i < size; i++) { + view = View.inflate(mContext, R.layout.gamedetail_plugin_item, null); + iv_hint = (SimpleDraweeView) view.findViewById(R.id.gamedetail_iv_hint); + tv_hint = (TextView) view.findViewById(R.id.gamedetail_tv_hint); + tv_content = (TextView) view.findViewById(R.id.gamedetail_tv_content); + tagEntity = tags.get(i); + tv_content.setText(tagEntity.getDes()); + tv_hint.setText(tagEntity.getName()); + tv_hint.setTextColor(Color.parseColor(tagEntity.getColor())); +// iv_hint.setImageURI(tagEntity.getIcon()); + ImageUtils.display(iv_hint, tagEntity.getIcon()); + viewHolder.gamedetail_ll_plugin.addView(view); + } + + RecyclerView recyclerView = new RecyclerView(mContext); + recyclerView.setLayoutManager(new GridLayoutManager(mContext, 3)); + + int index = (int) Math.ceil(tags.size() / 3.0); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(mContext, index * 28)); + params.setMargins(0, DisplayUtils.dip2px(mContext, index * 3), 0, 0); + + recyclerView.setLayoutParams(params); + recyclerView.setAdapter(new GameDetailPluginAdapter(tags, mContext)); + viewHolder.gamedetail_ll_plugin_colse.addView(recyclerView); + } + + } + } + + public int getGamePosition() { + return position_game; + } + + public List getGameList() { + return mGameList; + } +} diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiFragment.java new file mode 100644 index 0000000000..a4a113fe06 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiFragment.java @@ -0,0 +1,184 @@ +package com.gh.gamecenter.gamedetail; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import com.gh.base.BaseFragment; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.DownloadItemUtils; +import com.gh.common.util.Utils; +import com.gh.download.DataWatcher; +import com.gh.download.DownloadEntity; +import com.gh.download.DownloadManager; +import com.gh.gamecenter.R; +import com.gh.gamecenter.entity.ApkEntity; +import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.eventbus.EBDownloadStatus; +import com.gh.gamecenter.eventbus.EBMoveTop; +import com.gh.gamecenter.eventbus.EBPackage; +import com.gh.gamecenter.eventbus.EBSlide; + +import java.util.List; + +import de.greenrobot.event.EventBus; + +/** + * Created by khy on 2017/3/24. + */ +public class XinXiFragment extends BaseFragment { + + private RecyclerView mRecyclerView; + + private XinXiAdapter mAdapter; + + private int topMargin; + private LinearLayoutManager layoutManager; + + private int dis = 0; + private int distance; + + public boolean isNoTabBar; + + private DataWatcher dataWatcher = new DataWatcher() { + @Override + public void onDataChanged(DownloadEntity downloadEntity) { + + List gameList = mAdapter.getGameList(); + for (int i = 0; i < gameList.size(); i++) { + GameEntity gameEntity = gameList.get(i); + if (gameEntity != null && gameEntity.getName().equals(downloadEntity.getName())) { + DownloadItemUtils.processDate(getContext(), gameEntity, downloadEntity, + mAdapter, mAdapter.getGamePosition() + i + 1); + } + } + } + + }; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + init(R.layout.fragment_fuli); + + mRecyclerView = (RecyclerView) view.findViewById(R.id.fm_fuli_rv); + + distance = DisplayUtils.dip2px(getActivity(), 75); + + mAdapter = new XinXiAdapter(this); + layoutManager = new LinearLayoutManager(getContext()); + mRecyclerView.setLayoutManager(layoutManager); + mRecyclerView.setAdapter(mAdapter); + + mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + if (mRecyclerView.getChildCount() <= 0) return; + + int visibility; + int bottom = recyclerView.getChildAt(0).getBottom(); + int i = DisplayUtils.dip2px(getContext(), 55); + int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition(); + if (bottom <= i || firstVisibleItemPosition > 0) { + visibility = View.VISIBLE; + } else { + visibility = View.GONE; + } + dis += dy; + topMargin -= dy; + + EventBus.getDefault().post(new EBMoveTop("top", visibility, topMargin)); + } + + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + if (newState == RecyclerView.SCROLL_STATE_IDLE) { + if (dis > distance) { + EventBus.getDefault().post(new EBSlide(distance, 1, false)); + } else if (dis < -distance) { + EventBus.getDefault().post(new EBSlide(0, 1, false)); + } else { + EventBus.getDefault().post(new EBSlide(dis, 1, false)); + } + } + } + }); + } + + public void setIsTabBar(boolean b) { + isNoTabBar = b; + } + + public void onEventMainThread(EBSlide busOne) { + if (busOne.getPosition() == 2) { + Utils.log("details:" + busOne.getDistance()); + if (busOne.isReset()) { + mRecyclerView.scrollBy(0, distance - dis); + } else { + if (busOne.getDistance() == 0) { + mRecyclerView.scrollToPosition(0); + topMargin = 0; + dis = 0; + } else { + mRecyclerView.scrollBy(0, busOne.getDistance() + - dis); + } + } + } + } + + @Override + public void onResume() { + super.onResume(); + DownloadManager.getInstance(getActivity()).addObserver(dataWatcher); + } + + @Override + public void onPause() { + super.onPause(); + DownloadManager.getInstance(getActivity()).removeObserver(dataWatcher); + } + + // 下载被删除事件 + public void onEventMainThread(EBDownloadStatus status) { + if ("delete".equals(status.getStatus())) { + DownloadManager.getInstance(getContext()).removePlatform(status.getName(), status.getPlatform()); + + List gameList = mAdapter.getGameList(); + for (int i = 0; i < gameList.size(); i++) { + GameEntity gameEntity = gameList.get(i); + if (gameEntity.getName().equals(status.getName())) { + if (gameEntity != null && gameEntity.getEntryMap() != null) { + gameEntity.getEntryMap().remove(status.getPlatform()); + } + mAdapter.notifyItemChanged(mAdapter.getGamePosition() + i + 1); + } + } + + } + } + + public void onEventMainThread(EBPackage busFour) { + + List gameList = mAdapter.getGameList(); + for (int i = 0; i < gameList.size(); i++) { + GameEntity gameEntity = gameList.get(i); + if ("安装".equals(busFour.getType())) { + for (ApkEntity apkEntity : gameEntity.getApk()) { + if (apkEntity.getPackageName().equals(busFour.getPackageName())) { + if (gameEntity.getEntryMap() != null) { + gameEntity.getEntryMap().remove(apkEntity.getPlatform()); + } + mAdapter.notifyItemChanged(mAdapter.getGamePosition() + i + 1); + break; + } + } + } else if ("卸载".equals(busFour.getType())) { + mAdapter.notifyDataSetChanged(); + } + + } + } +} diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao1FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/libao/Libao1FragmentAdapter.java index 563dbdfe96..310a933224 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao1FragmentAdapter.java @@ -164,7 +164,7 @@ class Libao1FragmentAdapter extends RecyclerView.Adapter" +libaoEntity.getCode()+ ""); } else { + libaoEntity.setStatus("taoed"); content = Html.fromHtml("已淘号:" + "" +libaoEntity.getCode()+ ""); } viewHolder.libaoDes.setText(content); @@ -120,7 +122,7 @@ class Libao3FragmentAdapter extends RecyclerView.Adapter" + libaoEntity.getCode() + "" + " 复制成功" + "
请尽快进入游戏兑换"); } else { diff --git a/app/src/main/java/com/gh/gamecenter/libao/LibaoHistoryAdapter.java b/app/src/main/java/com/gh/gamecenter/libao/LibaoHistoryAdapter.java index 11ae132a1e..93acf000aa 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/LibaoHistoryAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/libao/LibaoHistoryAdapter.java @@ -111,7 +111,7 @@ public class LibaoHistoryAdapter extends RecyclerView.Adapter= Build.VERSION_CODES.KITKAT) { - RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) me_iv_top_setting.getLayoutParams(); - params.topMargin = DisplayUtils.getStatusBarHeight(getResources()) - + DisplayUtils.dip2px(getActivity(), 15); - - RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) shareGhLl.getLayoutParams(); - layoutParams.topMargin = DisplayUtils.getStatusBarHeight(getResources()) - + DisplayUtils.dip2px(getActivity(), 15); - - me_iv_top_setting.setLayoutParams(params); - shareGhLl.setLayoutParams(layoutParams); RelativeLayout me_ll_info = (RelativeLayout) view.findViewById(R.id.me_ll_info); me_ll_info.setPadding(0, DisplayUtils.getStatusBarHeight(getResources()), 0, 0); } - me_iv_top_setting.setOnClickListener(this); - shareGhLl.setOnClickListener(this); DisplayMetrics outMetrics = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); - me_tv_top_install.setOnClickListener(this); - RelativeLayout.LayoutParams rparams1 = (RelativeLayout.LayoutParams) me_tv_top_install.getLayoutParams(); - int width = outMetrics.widthPixels / 4; - rparams1.width = width; - rparams1.leftMargin = width - DisplayUtils.dip2px(getActivity(), 10); - me_tv_top_install.setLayoutParams(rparams1); - - me_tv_top_concern.setOnClickListener(this); - RelativeLayout.LayoutParams rparams2 = (RelativeLayout.LayoutParams) me_tv_top_concern.getLayoutParams(); - rparams2.width = width; - rparams2.rightMargin = width - DisplayUtils.dip2px(getActivity(), 10); - me_tv_top_concern.setLayoutParams(rparams2); - - int currentItem = 0; - if (savedInstanceState != null) { - currentItem = savedInstanceState.getInt("currentItem"); - } - - top_line_rparams = (RelativeLayout.LayoutParams) me_top_slide_line.getLayoutParams(); - top_line_rparams.width = outMetrics.widthPixels / 6; - leftMargin = outMetrics.widthPixels / 8 * 3 - outMetrics.widthPixels / 12 - DisplayUtils.dip2px(getActivity(), 10); - dis = outMetrics.widthPixels / 4 + DisplayUtils.dip2px(getActivity(), 20); - top_line_rparams.leftMargin = dis * currentItem + leftMargin; - me_top_slide_line.setLayoutParams(top_line_rparams); - - if (currentItem == 0) { - me_tv_top_install.setTextColor(getActivity().getResources().getColor(R.color.theme)); - me_tv_top_concern.setTextColor(getActivity().getResources().getColor(R.color.title)); - } else { - me_tv_top_install.setTextColor(getActivity().getResources().getColor(R.color.title)); - me_tv_top_concern.setTextColor(getActivity().getResources().getColor(R.color.theme)); - } - - List list = new ArrayList<>(); - list.add(new InstallFragment()); - list.add(new ConcernFragment()); - me_vp_show.setAdapter(new FragmentAdapter(getChildFragmentManager(), list)); - me_vp_show.addOnPageChangeListener(this); - me_vp_show.setCurrentItem(currentItem); - isLogin = false; login(null); - } + + FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); + InstallFragment fragment = new InstallFragment(); + transaction.add(R.id.personal_install_fl, fragment); + transaction.commit(); +} public void login(final Dialog dialog) { TokenUtils.getToken(getActivity(), true) @@ -198,7 +139,6 @@ public class PersonalFragment extends BaseFragment implements View.OnClickListen } String icon = sp.getString("user_icon", null); if (!TextUtils.isEmpty(icon)) { -// me_iv_top_icon.setImageURI(icon); ImageUtils.display(me_iv_top_icon, icon); } isLogin = true; @@ -234,41 +174,41 @@ public class PersonalFragment extends BaseFragment implements View.OnClickListen } } - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - if (positionOffset != 0) { - top_line_rparams.leftMargin = (int) (dis * (positionOffset + position)) + leftMargin; - me_top_slide_line.setLayoutParams(top_line_rparams); + @OnClick({R.id.personal_entrance_suggest, R.id.personal_entrance_share, R.id.personal_entrance_setting + , R.id.personal_entrance_concern}) + public void onEntranceClick(View v) { + switch (v.getId()) { + case R.id.personal_entrance_suggest: + Intent intent1 = new Intent(getActivity(), SuggestSelectActivity.class); + getActivity().startActivity(intent1); + break; + case R.id.personal_entrance_share: + Intent intent2 = new Intent(getActivity(), ShareGhActivity.class); + getActivity().startActivity(intent2); + break; + case R.id.personal_entrance_setting: + DataUtils.onEvent(getActivity(), "我的光环", "设置图标"); + DataCollectionUtils.uploadClick(getActivity(), "设置图标", "我的光环"); + + Intent intent3 = new Intent(getActivity(), SettingActivity.class); + 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", "(我的光环)"); + startActivity(intent); + break; } } - @Override - public void onPageSelected(int position) { - if (position == 0) { - me_tv_top_install.setTextColor(getActivity().getResources().getColor(R.color.theme)); - me_tv_top_concern.setTextColor(getActivity().getResources().getColor(R.color.title)); - } else { - me_tv_top_install.setTextColor(getActivity().getResources().getColor(R.color.title)); - me_tv_top_concern.setTextColor(getActivity().getResources().getColor(R.color.theme)); - } - } - - @Override - public void onPageScrollStateChanged(int state) { - - } - @Override public void onClick(View v) { final int id = v.getId(); - if (id == R.id.me_iv_top_setting) { - DataUtils.onEvent(getActivity(), "我的光环", "设置图标"); - DataCollectionUtils.uploadClick(getActivity(), "设置图标", "我的光环"); - - Intent intent = new Intent(getActivity(), SettingActivity.class); - intent.putExtra("entrance", "(我的光环)"); - startActivity(intent); - } else if (id == R.id.me_tv_top_name) { + if (id == R.id.me_tv_top_name) { DataUtils.onEvent(getActivity(), "我的光环", "用户昵称"); DataCollectionUtils.uploadClick(getActivity(), "用户昵称", "我的光环"); @@ -287,13 +227,6 @@ public class PersonalFragment extends BaseFragment implements View.OnClickListen } else { login(DialogUtils.showWaitDialog(getActivity(), "登录中...")); } - } else if (id == R.id.me_tv_top_install) { - me_vp_show.setCurrentItem(0); - } else if (id == R.id.me_tv_top_concern) { - me_vp_show.setCurrentItem(1); - } else if (id == R.id.share_gh_ll) { - Intent intent = new Intent(getActivity(), ShareGhActivity.class); - getActivity().startActivity(intent); } else if (id == R.id.user_name_hint) { DataUtils.onEvent(getActivity(), "我的光环", "用户昵称"); DataCollectionUtils.uploadClick(getActivity(), "用户昵称", "我的光环"); 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 e109b5ed86..f3689b176b 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/ApiService.java @@ -135,7 +135,7 @@ public interface ApiService { Observable> getColumn(); // 获取游戏插件专题数据 @GET("game/column/{column_id}") - Observable> getColumn(@Path("column_id") String column_id, @Query("page") int page); // 获取专题数据 + Observable> getColumn(@Path("column_id") String column_id, @Query("page") int page, @Query("type") String type); // 获取专题数据 @GET("support/setting/ui") Observable getUISetting(); // 获取界面设置参数 diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/CommentService.java b/app/src/main/java/com/gh/gamecenter/retrofit/CommentService.java index 04fd430980..1ee9721f3f 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/CommentService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/CommentService.java @@ -44,4 +44,13 @@ public interface CommentService { Observable> getComment(@Path("news_id") String news_id, @Query("limit") int limit, @Query("offset") int offset); + @Headers({"Content-Type: application/json", "Accept: application/json"}) + @POST("article/comment/{comment_id}/reply") // 发布评论 + Observable postReplyComment(@Header("TOKEN") String token, @Path("comment_id") String comment_id, + @Body RequestBody body); + + @GET("article/comment/{comment_id}/trace") // 获取评论对话 + Observable> getCommentTrace(@Path("comment_id") String news_id, @Query("limit") int limit, + @Query("offset") int offset); + } 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 91ccde3f8e..bf0930209b 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java @@ -1,23 +1,27 @@ package com.gh.gamecenter.search; +import android.content.Intent; import android.graphics.Color; +import android.graphics.Rect; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v4.app.FragmentActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.Gravity; import android.view.View; +import android.view.ViewTreeObserver; import android.widget.LinearLayout; import android.widget.TextView; import com.gh.base.BaseFragment; import com.gh.common.util.DisplayUtils; import com.gh.common.util.DownloadItemUtils; -import com.gh.common.util.Utils; import com.gh.common.view.VerticalItemDecoration; import com.gh.download.DataWatcher; import com.gh.download.DownloadEntity; import com.gh.download.DownloadManager; +import com.gh.gamecenter.NewSuggestActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.eventbus.EBDownloadStatus; @@ -62,11 +66,11 @@ public class SearchGameDetailFragment extends BaseFragment implements OnCallBack init(R.layout.fm_search); - LinearLayout reuse_none_data = (LinearLayout) view.findViewById(R.id.reuse_none_data); + final LinearLayout reuse_none_data = (LinearLayout) view.findViewById(R.id.reuse_none_data); TextView skip_tv = new TextView(getContext()); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DisplayUtils.dip2px(getContext(), 140) , DisplayUtils.dip2px(getContext(), 40)); - params.setMargins(0, DisplayUtils.dip2px(getContext(), 40), 0, 0); + params.setMargins(0, DisplayUtils.dip2px(getContext(), 20), 0, 0); skip_tv.setLayoutParams(params); skip_tv.setGravity(Gravity.CENTER); skip_tv.setText("告诉小编"); @@ -77,7 +81,10 @@ public class SearchGameDetailFragment extends BaseFragment implements OnCallBack skip_tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Utils.toast(getContext(), "跳转"); + Intent intent = new Intent(getContext(), NewSuggestActivity.class); + intent.putExtra("suggestType", 5); + intent.putExtra("suggestContent", "求收录游戏:" + key); + getActivity().startActivity(intent); } }); @@ -90,6 +97,26 @@ public class SearchGameDetailFragment extends BaseFragment implements OnCallBack search_detail.setLayoutManager(new LinearLayoutManager(getActivity())); adapter = new SearchGameDetailFragmentAdapter(SearchGameDetailFragment.this, key); search_detail.setAdapter(adapter); + + final View decorView=getActivity().getWindow().getDecorView(); + decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + Rect rect=new Rect(); + decorView.getWindowVisibleDisplayFrame(rect); + int screenHeight = decorView.getRootView().getHeight(); + int heightDifference = screenHeight-rect.bottom;//计算软键盘占有的高度 = 屏幕高度 - 视图可见高度 + if (heightDifference > 0) { + FragmentActivity activity = getActivity(); + if (activity!= null) { + reuse_none_data.setGravity(Gravity.CENTER_HORIZONTAL); + reuse_none_data.setPadding(0, DisplayUtils.dip2px(activity, 10), 0, 0); + } + } else { + reuse_none_data.setGravity(Gravity.CENTER); + } + } + }); } public void setKey(String key) { diff --git a/app/src/main/java/com/gh/gamecenter/suggest/SelectGameViewHolder.java b/app/src/main/java/com/gh/gamecenter/suggest/SelectGameViewHolder.java new file mode 100644 index 0000000000..fb3dde790f --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/suggest/SelectGameViewHolder.java @@ -0,0 +1,25 @@ +package com.gh.gamecenter.suggest; + +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/1. + */ +public class SelectGameViewHolder extends RecyclerView.ViewHolder { + + @BindView(R.id.game_icon) public SimpleDraweeView gameIcon; + @BindView(R.id.game_name) public TextView gameName; + + public SelectGameViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/suggest/SuggestPicAdapter.java b/app/src/main/java/com/gh/gamecenter/suggest/SuggestPicAdapter.java new file mode 100644 index 0000000000..c89f9f5b7a --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/suggest/SuggestPicAdapter.java @@ -0,0 +1,88 @@ +package com.gh.gamecenter.suggest; + +import android.content.Context; +import android.content.Intent; +import android.provider.MediaStore; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.gh.common.util.Utils; +import com.gh.gamecenter.NewSuggestActivity; +import com.gh.gamecenter.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by khy on 2017/3/31. + */ +public class SuggestPicAdapter extends RecyclerView.Adapter { + + private Context mContext; + private NewSuggestActivity activity; + private List picList; + + public SuggestPicAdapter(NewSuggestActivity activity) { + this.mContext = activity; + this.activity = activity; + picList = new ArrayList<>(); + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(mContext).inflate(R.layout.suggest_pic_item, parent, false); + return new SuggestPicViewHolder(view); + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { + if (holder instanceof SuggestPicViewHolder) { + SuggestPicViewHolder viewHolder = (SuggestPicViewHolder) holder; + if (position == getItemCount() - 1 && picList.size() < 5) { + viewHolder.delate.setVisibility(View.GONE); + viewHolder.icon.setImageURI("res:///" + R.drawable.suggest_add_pic_icon); + } else { + viewHolder.icon.setImageURI("file:///" + picList.get(position)); + viewHolder.delate.setVisibility(View.VISIBLE); + } + + viewHolder.delate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + picList.remove(position); + notifyDataSetChanged(); + } + }); + + viewHolder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (position == getItemCount() - 1 && picList.size() < 5) { + Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + activity.startActivityForResult(intent, 0x233); + } + } + }); + + } + } + + @Override + public int getItemCount() { + return picList.size() + 1; + } + + public void addFileList(String picPath) { + for (String s : picList) { + if (s.equals(picPath)){ + Utils.toast(mContext, "图片已存在,无需重复添加"); + return; + } + } + + picList.add(picPath); + notifyDataSetChanged(); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/suggest/SuggestPicViewHolder.java b/app/src/main/java/com/gh/gamecenter/suggest/SuggestPicViewHolder.java new file mode 100644 index 0000000000..25c984749f --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/suggest/SuggestPicViewHolder.java @@ -0,0 +1,25 @@ +package com.gh.gamecenter.suggest; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.ImageView; + +import com.facebook.drawee.view.SimpleDraweeView; +import com.gh.gamecenter.R; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by khy on 2017/3/31. + */ +public class SuggestPicViewHolder extends RecyclerView.ViewHolder { + + @BindView(R.id.pic_item_icon) public SimpleDraweeView icon; + @BindView(R.id.pic_item_delate) public ImageView delate; + + public SuggestPicViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/suggest/SuggestSelectGameAdapter.java b/app/src/main/java/com/gh/gamecenter/suggest/SuggestSelectGameAdapter.java new file mode 100644 index 0000000000..9795846ddd --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/suggest/SuggestSelectGameAdapter.java @@ -0,0 +1,116 @@ +package com.gh.gamecenter.suggest; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.graphics.drawable.Drawable; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ProgressBar; + +import com.gh.common.util.BitmapUtils; +import com.gh.gamecenter.NewSuggestActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.entity.InstallGameEntity; +import com.gh.gamecenter.listener.OnCallBackListener; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by khy on 2017/4/1. + */ +public class SuggestSelectGameAdapter extends RecyclerView.Adapter { + + private Context mContext; + + private OnCallBackListener listener; + + private List apkList; + + private ProgressBar pb; + + public SuggestSelectGameAdapter(NewSuggestActivity mContext, ProgressBar pb) { + this.mContext = mContext; + this.listener = mContext; + this.pb = pb; + + apkList = new ArrayList<>(); + + new Thread(new Runnable() { + @Override + public void run() { + initData(); + } + }).start(); + } + + private void initData() { + PackageManager pm = mContext.getPackageManager(); + List installedPackages = pm.getInstalledPackages(0); + + for (PackageInfo installedPackage : installedPackages) { + if ((installedPackage.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { + InstallGameEntity installGameEntity = new InstallGameEntity(); + installGameEntity.setGamePath(installedPackage.applicationInfo.sourceDir); + try{ + Drawable drawable = installedPackage.applicationInfo.loadIcon(pm); + installGameEntity.setGameBm(BitmapUtils.drawableToBitmap(drawable)); + + installGameEntity.setGameVersion(installedPackage.versionName); + installGameEntity.setGameName(installedPackage.applicationInfo.loadLabel(pm).toString()); + installGameEntity.setPackageName(installedPackage.packageName); + + File file = new File(installedPackage.applicationInfo.sourceDir); + installGameEntity.setGameSize(file.length()); + + apkList.add(installGameEntity); + + }catch(Exception e){ + + } + } + } + + pb.post(new Runnable() { + @Override + public void run() { + notifyDataSetChanged(); + pb.setVisibility(View.GONE); + } + }); + + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(mContext).inflate(R.layout.dialog_select_game_item, parent, false); + return new SelectGameViewHolder(view); + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder instanceof SelectGameViewHolder) { + final InstallGameEntity installGameEntity = apkList.get(position); + SelectGameViewHolder viewHolder = (SelectGameViewHolder) holder; + viewHolder.gameIcon.setImageBitmap(installGameEntity.getGameBm()); + viewHolder.gameName.setText(installGameEntity.getGameName()); + + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + listener.loadDone(installGameEntity); + } + }); + } + } + + @Override + public int getItemCount() { + return apkList.size(); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/suggest/SuggestTypeAdapter.java b/app/src/main/java/com/gh/gamecenter/suggest/SuggestTypeAdapter.java new file mode 100644 index 0000000000..b7edd960d8 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/suggest/SuggestTypeAdapter.java @@ -0,0 +1,75 @@ +package com.gh.gamecenter.suggest; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.gh.gamecenter.NewSuggestActivity; +import com.gh.gamecenter.R; + +/** + * Created by khy on 2017/3/31. + */ +public class SuggestTypeAdapter extends RecyclerView.Adapter { + private Context mContext; + private OnSelectTypeListener listener; + private String[] arrType = {"普通反馈", "功能建议", "发生闪退 ", "游戏问题", "游戏收录", "文章投稿"}; + + private int curType = -1; + private int lastType = -1; + + public SuggestTypeAdapter(NewSuggestActivity mContext, int curType) { + this.mContext = mContext; + this.listener = mContext; + this.curType = curType - 1; + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.suggest_type_item, parent, false); + return new SuggestTypeViewHolder(view); + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { + if (holder instanceof SuggestTypeViewHolder) { + final SuggestTypeViewHolder viewHolder = (SuggestTypeViewHolder) holder; + viewHolder.type.setText(arrType[position]); + if (lastType == position) { + viewHolder.icon.setImageResource(R.drawable.kc_checkbox_unselect); + viewHolder.type.setTextColor(mContext.getResources().getColor(R.color.content)); + } + + if (curType == position) { + viewHolder.icon.setImageResource(R.drawable.kc_checkbox_select); + viewHolder.type.setTextColor(mContext.getResources().getColor(R.color.theme)); + } + + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (curType == position) return; + + lastType = curType; + curType = position; + viewHolder.icon.setImageResource(R.drawable.kc_checkbox_select); + viewHolder.type.setTextColor(mContext.getResources().getColor(R.color.theme)); + notifyItemChanged(lastType); + listener.onType(position + 1); + } + }); + } + + } + + @Override + public int getItemCount() { + return arrType.length; + } + + public interface OnSelectTypeListener { + void onType(int type); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/suggest/SuggestTypeViewHolder.java b/app/src/main/java/com/gh/gamecenter/suggest/SuggestTypeViewHolder.java new file mode 100644 index 0000000000..a93f0daaa8 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/suggest/SuggestTypeViewHolder.java @@ -0,0 +1,25 @@ +package com.gh.gamecenter.suggest; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.gh.gamecenter.R; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by khy on 2017/3/31. + */ +public class SuggestTypeViewHolder extends RecyclerView.ViewHolder { + + @BindView(R.id.suggest_type_icon) public ImageView icon; + @BindView(R.id.suggest_type_tv) public TextView type; + + public SuggestTypeViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this ,itemView); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/zixun/ZiXunAdapter.java b/app/src/main/java/com/gh/gamecenter/zixun/ZiXunAdapter.java index 881b8546c4..192e06c985 100644 --- a/app/src/main/java/com/gh/gamecenter/zixun/ZiXunAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/zixun/ZiXunAdapter.java @@ -596,9 +596,11 @@ public class ZiXunAdapter extends RecyclerView.Adapter if (libaoInfo != null) { for (LibaoInfo info : libaoInfo) { if (info.getLibaoId().equals(concernEntity.getId())) { - if ("ling".equals(info.getStatus())) { + if ("ling".equals(info.getStatus()) || "linged".equals(info.getStatus())) { + libaoStatusEntity.setStatus("linged"); viewHolder.read.setText("已领取"); } else { + libaoStatusEntity.setStatus("taoed"); viewHolder.read.setText("已淘号"); } diff --git a/app/src/main/res/anim/anim_marquee_in.xml b/app/src/main/res/anim/anim_marquee_in.xml new file mode 100644 index 0000000000..035305dca7 --- /dev/null +++ b/app/src/main/res/anim/anim_marquee_in.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/anim_marquee_out.xml b/app/src/main/res/anim/anim_marquee_out.xml new file mode 100644 index 0000000000..9ad4e598e9 --- /dev/null +++ b/app/src/main/res/anim/anim_marquee_out.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/gamedetail_notice_icon.png b/app/src/main/res/drawable-hdpi/gamedetail_notice_icon.png new file mode 100644 index 0000000000..05d03a3eb8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/gamedetail_notice_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/gamedetail_open_icon.png b/app/src/main/res/drawable-hdpi/gamedetail_open_icon.png new file mode 100644 index 0000000000..52d7b333a1 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/gamedetail_open_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/gamedetail_qq_icon.png b/app/src/main/res/drawable-hdpi/gamedetail_qq_icon.png new file mode 100644 index 0000000000..55dbd1b339 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/gamedetail_qq_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_share.png b/app/src/main/res/drawable-hdpi/ic_share.png index cbb6292924..010cfe984b 100644 Binary files a/app/src/main/res/drawable-hdpi/ic_share.png and b/app/src/main/res/drawable-hdpi/ic_share.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_suggest.png b/app/src/main/res/drawable-hdpi/ic_suggest.png new file mode 100644 index 0000000000..895ff9c0a5 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_suggest.png differ diff --git a/app/src/main/res/drawable-hdpi/personal_entrance_bg.9.png b/app/src/main/res/drawable-hdpi/personal_entrance_bg.9.png new file mode 100644 index 0000000000..09fff89d44 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/personal_entrance_bg.9.png differ diff --git a/app/src/main/res/drawable-hdpi/personal_entrance_concern.png b/app/src/main/res/drawable-hdpi/personal_entrance_concern.png new file mode 100644 index 0000000000..9206c09a28 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/personal_entrance_concern.png differ diff --git a/app/src/main/res/drawable-hdpi/personal_entrance_setting.png b/app/src/main/res/drawable-hdpi/personal_entrance_setting.png new file mode 100644 index 0000000000..4be8515035 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/personal_entrance_setting.png differ diff --git a/app/src/main/res/drawable-hdpi/personal_entrance_share.png b/app/src/main/res/drawable-hdpi/personal_entrance_share.png new file mode 100644 index 0000000000..f6238f1be8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/personal_entrance_share.png differ diff --git a/app/src/main/res/drawable-hdpi/personal_entrance_suggest.png b/app/src/main/res/drawable-hdpi/personal_entrance_suggest.png new file mode 100644 index 0000000000..73f2e30e7f Binary files /dev/null and b/app/src/main/res/drawable-hdpi/personal_entrance_suggest.png differ diff --git a/app/src/main/res/drawable-hdpi/suggest_add_pic_icon.png b/app/src/main/res/drawable-hdpi/suggest_add_pic_icon.png new file mode 100644 index 0000000000..9defd39c60 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/suggest_add_pic_icon.png differ diff --git a/app/src/main/res/drawable-hdpi/suggest_email_icon.png b/app/src/main/res/drawable-hdpi/suggest_email_icon.png new file mode 100644 index 0000000000..90ba15f965 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/suggest_email_icon.png 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 new file mode 100644 index 0000000000..28630fa7ec Binary files /dev/null and b/app/src/main/res/drawable-hdpi/suggest_pic_delete.png differ diff --git a/app/src/main/res/drawable-hdpi/suggest_type_icon1.png b/app/src/main/res/drawable-hdpi/suggest_type_icon1.png new file mode 100644 index 0000000000..a5494a4c37 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/suggest_type_icon1.png differ diff --git a/app/src/main/res/drawable-hdpi/suggest_type_icon2.png b/app/src/main/res/drawable-hdpi/suggest_type_icon2.png new file mode 100644 index 0000000000..d82a9f152e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/suggest_type_icon2.png differ diff --git a/app/src/main/res/drawable-hdpi/suggest_type_icon3.png b/app/src/main/res/drawable-hdpi/suggest_type_icon3.png new file mode 100644 index 0000000000..369510afc8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/suggest_type_icon3.png differ diff --git a/app/src/main/res/drawable-hdpi/suggest_type_icon4.png b/app/src/main/res/drawable-hdpi/suggest_type_icon4.png new file mode 100644 index 0000000000..5b38fd4154 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/suggest_type_icon4.png differ diff --git a/app/src/main/res/drawable-hdpi/suggest_type_icon5.png b/app/src/main/res/drawable-hdpi/suggest_type_icon5.png new file mode 100644 index 0000000000..495144c010 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/suggest_type_icon5.png differ diff --git a/app/src/main/res/drawable-hdpi/suggest_type_icon6.png b/app/src/main/res/drawable-hdpi/suggest_type_icon6.png new file mode 100644 index 0000000000..47cc529693 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/suggest_type_icon6.png differ diff --git a/app/src/main/res/drawable/border_black_bg.xml b/app/src/main/res/drawable/border_black_bg.xml new file mode 100644 index 0000000000..37440821e1 --- /dev/null +++ b/app/src/main/res/drawable/border_black_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/border_suggest_bg.xml b/app/src/main/res/drawable/border_suggest_bg.xml new file mode 100644 index 0000000000..7711cc99e8 --- /dev/null +++ b/app/src/main/res/drawable/border_suggest_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/calendar_bar_bg.xml b/app/src/main/res/drawable/calendar_bar_bg.xml new file mode 100644 index 0000000000..1d24b2cc23 --- /dev/null +++ b/app/src/main/res/drawable/calendar_bar_bg.xml @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/calendar_bar_select.xml b/app/src/main/res/drawable/calendar_bar_select.xml new file mode 100644 index 0000000000..ae4f2e0adb --- /dev/null +++ b/app/src/main/res/drawable/calendar_bar_select.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gamedetail_gametag_bg.xml b/app/src/main/res/drawable/gamedetail_gametag_bg.xml new file mode 100644 index 0000000000..1bed7624d7 --- /dev/null +++ b/app/src/main/res/drawable/gamedetail_gametag_bg.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gamedetail_tag_select_bg.xml b/app/src/main/res/drawable/gamedetail_tag_select_bg.xml new file mode 100644 index 0000000000..02235d2c4e --- /dev/null +++ b/app/src/main/res/drawable/gamedetail_tag_select_bg.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gamedetail_tag_unselect_bg.xml b/app/src/main/res/drawable/gamedetail_tag_unselect_bg.xml new file mode 100644 index 0000000000..b3ab82a5af --- /dev/null +++ b/app/src/main/res/drawable/gamedetail_tag_unselect_bg.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/textview_border_white_bg.xml b/app/src/main/res/drawable/textview_border_white_bg.xml new file mode 100644 index 0000000000..df177e3d3a --- /dev/null +++ b/app/src/main/res/drawable/textview_border_white_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_comment_detail.xml b/app/src/main/res/layout/activity_comment_detail.xml new file mode 100644 index 0000000000..ff6f46bdb2 --- /dev/null +++ b/app/src/main/res/layout/activity_comment_detail.xml @@ -0,0 +1,14 @@ + + + + + + + + \ 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 new file mode 100644 index 0000000000..a5fbeba5a9 --- /dev/null +++ b/app/src/main/res/layout/activity_game_detail.xml @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 35c24c2bad..9186d5e168 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -247,42 +247,42 @@ - + + + + + + + + + - + + + + + + - + + + + + + + - - + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_suggest_select.xml b/app/src/main/res/layout/activity_suggest_select.xml new file mode 100644 index 0000000000..a0c499c9ff --- /dev/null +++ b/app/src/main/res/layout/activity_suggest_select.xml @@ -0,0 +1,293 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/comment_head_item.xml b/app/src/main/res/layout/comment_head_item.xml index 4107d41635..3efebbcbe9 100644 --- a/app/src/main/res/layout/comment_head_item.xml +++ b/app/src/main/res/layout/comment_head_item.xml @@ -5,8 +5,8 @@ android:layout_height="wrap_content" android:background="@android:color/white" android:orientation="vertical" - android:paddingLeft="10dp" - android:paddingRight="10dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" android:layout_marginTop="8dp"> + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_suggest_select_game.xml b/app/src/main/res/layout/dialog_suggest_select_game.xml new file mode 100644 index 0000000000..ce3751ed89 --- /dev/null +++ b/app/src/main/res/layout/dialog_suggest_select_game.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fm_downloadmanager_item.xml b/app/src/main/res/layout/fm_downloadmanager_item.xml index 22665c5f24..c0565e3f79 100644 --- a/app/src/main/res/layout/fm_downloadmanager_item.xml +++ b/app/src/main/res/layout/fm_downloadmanager_item.xml @@ -11,12 +11,16 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="12dp"> + android:gravity="center_vertical" + android:paddingLeft="20dp" + android:paddingRight="20dp" + android:paddingBottom="12dp" + android:paddingTop="12dp"> @@ -53,7 +57,7 @@ android:ellipsize="end" android:singleLine="true" android:textColor="#9a9a9a" - android:textSize="12sp" /> + android:textSize="10sp" /> + android:textSize="10sp" /> + android:textSize="12sp" /> diff --git a/app/src/main/res/layout/fm_search.xml b/app/src/main/res/layout/fm_search.xml index 7d3e483ba0..b5587d3ad8 100644 --- a/app/src/main/res/layout/fm_search.xml +++ b/app/src/main/res/layout/fm_search.xml @@ -2,6 +2,7 @@ + android:textSize="10sp" /> + android:textSize="10sp" /> + android:textSize="12sp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_fuli.xml b/app/src/main/res/layout/fragment_fuli.xml new file mode 100644 index 0000000000..f107610b44 --- /dev/null +++ b/app/src/main/res/layout/fragment_fuli.xml @@ -0,0 +1,15 @@ + + + + + + + \ 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 135bb8b5f6..5e7fcc6bd0 100644 --- a/app/src/main/res/layout/fragment_personal.xml +++ b/app/src/main/res/layout/fragment_personal.xml @@ -13,21 +13,22 @@ + android:layout_height="wrap_content"> + android:layout_marginTop="20dp" + android:layout_centerHorizontal="true"/> @@ -46,99 +47,164 @@ android:layout_height="wrap_content" android:text="光环用户" android:textColor="@android:color/white" - android:textSize="17sp" - android:layout_marginTop="12dp" - android:layout_centerInParent="true" + android:textSize="14sp" + android:layout_marginTop="10dp" + android:layout_centerHorizontal="true" android:layout_below="@+id/me_iv_top_icon"/> - - + android:id="@+id/personal_entrance_ll" + android:layout_width="match_parent" + android:layout_height="110dp" + android:background="@drawable/personal_entrance_bg" + android:orientation="horizontal" + android:gravity="bottom" + android:paddingBottom="14dp" + android:layout_marginLeft="-50dp" + android:layout_marginRight="-50dp" + android:paddingLeft="60dp" + android:paddingRight="60dp" + android:layout_marginTop="20dp" + android:layout_below="@+id/me_ll_info"> - - + android:layout_weight="1" + android:gravity="center" + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + - - - - - - - - + android:layout_height="wrap_content" + android:text="(右划免流量分享给好友)" + android:textColor="@color/hint" + android:textSize="10sp"/> - - - - - - - - + android:layout_height="match_parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/game_head_item.xml b/app/src/main/res/layout/game_head_item.xml index e1e68eab56..394a78218b 100644 --- a/app/src/main/res/layout/game_head_item.xml +++ b/app/src/main/res/layout/game_head_item.xml @@ -16,8 +16,8 @@ android:layout_height="40dp" android:orientation="horizontal" android:gravity="center_vertical" - android:paddingLeft="10dp" - android:paddingRight="10dp"> + android:paddingLeft="18dp" + android:paddingRight="18dp"> + android:textSize="15sp" /> diff --git a/app/src/main/res/layout/game_normal_item.xml b/app/src/main/res/layout/game_normal_item.xml index f19899a302..2b1451b9d2 100644 --- a/app/src/main/res/layout/game_normal_item.xml +++ b/app/src/main/res/layout/game_normal_item.xml @@ -7,8 +7,8 @@ android:layout_height="wrap_content" android:paddingTop="8dp" android:paddingBottom="8dp" - android:paddingRight="10dp" - android:paddingLeft="6dp" + android:paddingRight="19dp" + android:paddingLeft="11dp" android:gravity="center_vertical" android:orientation="horizontal" android:background="@drawable/reuse_listview_item_style"> @@ -23,6 +23,7 @@ android:maxLength="3" android:textSize="14sp" android:layout_marginRight="-2dp" + android:layout_marginLeft="-3dp" android:visibility="gone"/> @@ -150,6 +151,6 @@ android:gravity="center" android:text="下载" android:textColor="@android:color/white" - android:textSize="13sp" /> + android:textSize="12sp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/game_normal_item_swipe.xml b/app/src/main/res/layout/game_normal_item_swipe.xml index 0d65017367..27a7560fe4 100644 --- a/app/src/main/res/layout/game_normal_item_swipe.xml +++ b/app/src/main/res/layout/game_normal_item_swipe.xml @@ -44,7 +44,7 @@ android:paddingTop="6dp" android:paddingBottom="6dp" android:paddingRight="10dp" - android:paddingLeft="6dp" + android:paddingLeft="11dp" android:gravity="center_vertical" android:orientation="horizontal" android:background="@drawable/reuse_listview_item_style" @@ -62,6 +62,7 @@ android:maxLength="3" android:textSize="14sp" android:layout_marginRight="-2dp" + android:layout_marginLeft="-3dp" android:visibility="gone"/> @@ -119,7 +120,7 @@ android:ellipsize="end" android:singleLine="true" android:textColor="#9a9a9a" - android:textSize="11sp" + android:textSize="10sp" android:lineSpacingMultiplier="0.9" android:includeFontPadding="false"/> @@ -190,7 +191,7 @@ android:gravity="center" android:text="下载" android:textColor="@android:color/white" - android:textSize="14sp" /> + android:textSize="12sp" /> diff --git a/app/src/main/res/layout/game_test_item.xml b/app/src/main/res/layout/game_test_item.xml index bbab34e6bd..62d7f83ea5 100644 --- a/app/src/main/res/layout/game_test_item.xml +++ b/app/src/main/res/layout/game_test_item.xml @@ -6,8 +6,8 @@ android:layout_height="wrap_content" android:paddingTop="6dp" android:paddingBottom="6dp" - android:paddingRight="10dp" - android:paddingLeft="6dp" + android:paddingRight="19dp" + android:paddingLeft="11dp" android:gravity="center_vertical" android:orientation="horizontal" android:background="@drawable/reuse_listview_item_style"> @@ -22,6 +22,7 @@ android:maxLength="3" android:textSize="14sp" android:layout_marginRight="-2dp" + android:layout_marginLeft="-3dp" android:visibility="gone"/> @@ -79,7 +80,7 @@ android:ellipsize="end" android:singleLine="true" android:textColor="#9a9a9a" - android:textSize="11sp" + android:textSize="10sp" android:lineSpacingMultiplier="0.9" android:includeFontPadding="false"/> @@ -180,6 +181,6 @@ android:gravity="center" android:text="下载" android:textColor="@android:color/white" - android:textSize="14sp" /> + android:textSize="12sp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_calendar_item.xml b/app/src/main/res/layout/gamedetail_calendar_item.xml new file mode 100644 index 0000000000..b66d7a58c6 --- /dev/null +++ b/app/src/main/res/layout/gamedetail_calendar_item.xml @@ -0,0 +1,24 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_item_fuli.xml b/app/src/main/res/layout/gamedetail_item_fuli.xml new file mode 100644 index 0000000000..c01d2c505e --- /dev/null +++ b/app/src/main/res/layout/gamedetail_item_fuli.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_item_game.xml b/app/src/main/res/layout/gamedetail_item_game.xml new file mode 100644 index 0000000000..f522f213c0 --- /dev/null +++ b/app/src/main/res/layout/gamedetail_item_game.xml @@ -0,0 +1,30 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_item_gametag.xml b/app/src/main/res/layout/gamedetail_item_gametag.xml new file mode 100644 index 0000000000..717c2cc6e8 --- /dev/null +++ b/app/src/main/res/layout/gamedetail_item_gametag.xml @@ -0,0 +1,33 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_item_intro.xml b/app/src/main/res/layout/gamedetail_item_intro.xml index 0c374243d3..5483f1aa2c 100644 --- a/app/src/main/res/layout/gamedetail_item_intro.xml +++ b/app/src/main/res/layout/gamedetail_item_intro.xml @@ -5,9 +5,10 @@ android:orientation="vertical" android:background="@android:color/white" android:paddingBottom="15dp" - android:paddingLeft="12dp" - android:paddingRight="12dp" - android:paddingTop="12dp"> + android:paddingLeft="18dp" + android:paddingRight="18dp" + android:paddingTop="12dp" + android:layout_marginTop="8dp"> + android:textSize="15dp" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_item_libao.xml b/app/src/main/res/layout/gamedetail_item_libao.xml index 1e2a2f6f84..d2dd811f39 100644 --- a/app/src/main/res/layout/gamedetail_item_libao.xml +++ b/app/src/main/res/layout/gamedetail_item_libao.xml @@ -1,36 +1,58 @@ - + android:gravity="center" + android:paddingTop="12dp" + android:paddingBottom="12dp"> + android:id="@+id/gamedetail_libao_icon" + android:layout_width="40dp" + android:layout_height="40dp" + android:src="@drawable/game_libao_icon" + android:layout_marginRight="11dp" /> + android:singleLine="true" + android:text="礼包名称" + android:layout_toLeftOf="@+id/gamedetail_libao_btn" + android:layout_toRightOf="@+id/gamedetail_libao_icon"/> + + - \ No newline at end of file + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_item_libao_rv.xml b/app/src/main/res/layout/gamedetail_item_libao_rv.xml index e3ca627173..ae83b3e2eb 100644 --- a/app/src/main/res/layout/gamedetail_item_libao_rv.xml +++ b/app/src/main/res/layout/gamedetail_item_libao_rv.xml @@ -4,8 +4,10 @@ android:layout_height="wrap_content" android:orientation="vertical" android:background="@android:color/white" - android:paddingBottom="15dp" - android:paddingTop="12dp"> + android:paddingBottom="5dp" + android:paddingTop="12dp" + android:paddingLeft="18dp" + android:paddingRight="18dp"> + android:textSize="15dp" /> + android:layout_height="70dp"> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_item_news.xml b/app/src/main/res/layout/gamedetail_item_news.xml index 3bc197ef04..c80994f410 100644 --- a/app/src/main/res/layout/gamedetail_item_news.xml +++ b/app/src/main/res/layout/gamedetail_item_news.xml @@ -2,17 +2,28 @@ + android:orientation="vertical"> - + + + android:orientation="vertical" + android:paddingBottom="3dp" + android:paddingLeft="18dp" + android:paddingRight="18dp" + android:paddingTop="12dp" + android:background="@android:color/white"> + + + android:textSize="15dp" /> - - - + android:layout_alignParentRight="true" + android:layout_centerVertical="true" + android:gravity="center"> + + + + + + + + + + + - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_item_notice.xml b/app/src/main/res/layout/gamedetail_item_notice.xml new file mode 100644 index 0000000000..8b074c3b67 --- /dev/null +++ b/app/src/main/res/layout/gamedetail_item_notice.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_item_plugin.xml b/app/src/main/res/layout/gamedetail_item_plugin.xml index 12f14c330d..89b398e339 100644 --- a/app/src/main/res/layout/gamedetail_item_plugin.xml +++ b/app/src/main/res/layout/gamedetail_item_plugin.xml @@ -2,67 +2,63 @@ + android:orientation="vertical"> - + + + android:orientation="vertical" + android:paddingBottom="10dp" + android:paddingLeft="18dp" + android:paddingRight="18dp" + android:paddingTop="12dp" + android:background="@android:color/white"> + android:layout_marginBottom="12dp" + android:textSize="15dp" /> + + + android:visibility="gone" + android:orientation="vertical"/> - + + + + android:layout_width="13dp" + android:layout_height="7dp" + android:src="@drawable/gamedetail_open_icon"/> + - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_item_skin.xml b/app/src/main/res/layout/gamedetail_item_skin.xml index 7f56cf1e56..1a3e0eec52 100644 --- a/app/src/main/res/layout/gamedetail_item_skin.xml +++ b/app/src/main/res/layout/gamedetail_item_skin.xml @@ -5,8 +5,8 @@ android:orientation="vertical" android:background="@android:color/white" android:paddingBottom="4dp" - android:paddingLeft="12dp" - android:paddingRight="12dp" + android:paddingLeft="18dp" + android:paddingRight="18dp" android:paddingTop="12dp"> + android:textSize="15dp" /> + android:textSize="14sp" /> + android:layout_width="60dp" + android:layout_height="60dp" + android:layout_marginLeft="5dp" /> + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/libaodetail_item_top.xml b/app/src/main/res/layout/libaodetail_item_top.xml index 53cd2ea440..8accc2e106 100644 --- a/app/src/main/res/layout/libaodetail_item_top.xml +++ b/app/src/main/res/layout/libaodetail_item_top.xml @@ -75,18 +75,26 @@ - + android:layout_below="@+id/libaodetail_ll" + android:visibility="visible" + android:background="#ededed"/> + + + + + + + + + + + + diff --git a/app/src/main/res/layout/news_digest_item.xml b/app/src/main/res/layout/news_digest_item.xml index e4fa6b7cfe..67490937f5 100644 --- a/app/src/main/res/layout/news_digest_item.xml +++ b/app/src/main/res/layout/news_digest_item.xml @@ -5,8 +5,8 @@ android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/reuse_listview_item_style" - android:paddingLeft="12dp" - android:paddingRight="12dp" + android:paddingLeft="18dp" + android:paddingRight="18dp" android:paddingTop="15dp"> diff --git a/app/src/main/res/layout/news_image2_item.xml b/app/src/main/res/layout/news_image2_item.xml index 5fcb9ec069..29878be4a2 100644 --- a/app/src/main/res/layout/news_image2_item.xml +++ b/app/src/main/res/layout/news_image2_item.xml @@ -5,8 +5,8 @@ android:layout_height="wrap_content" android:background="@drawable/reuse_listview_item_style" android:orientation="vertical" - android:paddingLeft="12dp" - android:paddingRight="12dp" + android:paddingLeft="18dp" + android:paddingRight="18dp" android:paddingTop="15dp" android:paddingBottom="15dp"> diff --git a/app/src/main/res/layout/news_image3_item.xml b/app/src/main/res/layout/news_image3_item.xml index 044418faf5..2010442d24 100644 --- a/app/src/main/res/layout/news_image3_item.xml +++ b/app/src/main/res/layout/news_image3_item.xml @@ -6,8 +6,8 @@ android:layout_height="wrap_content" android:background="@drawable/reuse_listview_item_style" android:orientation="vertical" - android:paddingLeft="12dp" - android:paddingRight="12dp" + android:paddingLeft="18dp" + android:paddingRight="18dp" android:paddingTop="12dp" android:paddingBottom="10dp"> diff --git a/app/src/main/res/layout/news_image_item.xml b/app/src/main/res/layout/news_image_item.xml index 172d6c3e1e..63cd9cb10e 100644 --- a/app/src/main/res/layout/news_image_item.xml +++ b/app/src/main/res/layout/news_image_item.xml @@ -4,7 +4,10 @@ android:layout_height="wrap_content" android:background="@drawable/reuse_listview_item_style" android:orientation="horizontal" - android:padding="8dp"> + android:paddingTop="8dp" + android:paddingBottom="8dp" + android:paddingLeft="18dp" + android:paddingRight="18dp"> + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/suggest_type_item.xml b/app/src/main/res/layout/suggest_type_item.xml new file mode 100644 index 0000000000..24921252e1 --- /dev/null +++ b/app/src/main/res/layout/suggest_type_item.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 22af8d890c..c7432c6ec4 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -1,6 +1,13 @@ + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 8c74e249ba..1025d22ef9 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -13,7 +13,7 @@ #EDF2F4 - #E5E5E5 + #ededed #EBEBEB