diff --git a/app/build.gradle b/app/build.gradle index e8ca6aac38..d6af55b68f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -101,7 +101,7 @@ dependencies { testCompile test.junit compile fileTree(include: '*.jar', dir: 'libs') compile libs.supportMultidex - compile libs.supportRecyclerView + compile libs.supportDesign compile libs.supportAppCompat compile libs.supportAnnotation compile libs.supportPercent diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c43dd43b50..2fac854813 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -92,7 +92,8 @@ android:screenOrientation = "portrait" /> + android:screenOrientation = "portrait" + android:theme="@style/Theme.AppCompat.Light"/> diff --git a/app/src/main/java/com/gh/base/BaseFragment.java b/app/src/main/java/com/gh/base/BaseFragment.java index 7706024a58..8af0e4623e 100644 --- a/app/src/main/java/com/gh/base/BaseFragment.java +++ b/app/src/main/java/com/gh/base/BaseFragment.java @@ -3,9 +3,14 @@ package com.gh.base; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; -import android.view.*; -import butterknife.ButterKnife; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + import com.gh.gamecenter.listener.OnCallBackListener; + +import butterknife.ButterKnife; import de.greenrobot.event.EventBus; /** @@ -41,6 +46,10 @@ public class BaseFragment extends Fragment implements OnCallBackListener { return view; } + public void toast(String msg) { + Toast.makeText(getContext(), msg, Toast.LENGTH_SHORT).show(); + } + public boolean isEverpause() { return isEverpause; } diff --git a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java index 06635a2f23..968bca79e8 100644 --- a/app/src/main/java/com/gh/gamecenter/SubjectActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SubjectActivity.java @@ -1,297 +1,110 @@ package com.gh.gamecenter; import android.os.Bundle; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.text.TextUtils; +import android.support.design.widget.TabLayout; +import android.support.v4.app.Fragment; +import android.support.v4.view.ViewPager; import android.view.View; -import android.view.ViewGroup; import android.widget.LinearLayout; -import android.widget.TextView; -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.view.VerticalItemDecoration; -import com.gh.download.DataWatcher; -import com.gh.download.DownloadEntity; -import com.gh.download.DownloadManager; -import com.gh.gamecenter.adapter.SubjectAdapter; -import com.gh.gamecenter.adapter.SubjectTypeAdapter; -import com.gh.gamecenter.entity.ApkEntity; +import com.gh.base.BaseFragmentActivity; +import com.gh.gamecenter.adapter.VPFragmentAdapter; import com.gh.gamecenter.entity.GameEntity; -import com.gh.gamecenter.eventbus.EBDownloadStatus; -import com.gh.gamecenter.eventbus.EBNetworkState; -import com.gh.gamecenter.eventbus.EBPackage; -import com.gh.gamecenter.retrofit.JSONObjectResponse; +import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; - -import org.json.JSONException; -import org.json.JSONObject; +import com.gh.gamecenter.subject.SubjectFragment; import java.util.ArrayList; +import java.util.List; import butterknife.BindView; +import retrofit2.HttpException; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; -public class SubjectActivity extends BaseActivity implements SubjectTypeAdapter.OnSelectTypeListener { +/** + * Created by khy on 2017/4/29. + */ - @BindView(R.id.subject_list) - RecyclerView subject_list; - @BindView(R.id.subject_type_list) - RecyclerView subject_type_list; - @BindView(R.id.subject_pb_loading) - ProgressBarCircularIndeterminate subject_pb_loading; +public class SubjectActivity extends BaseFragmentActivity { + + @BindView(R.id.subject_viewpager) + ViewPager mViewPager; + @BindView(R.id.subject_tab) + TabLayout mTabLayout; @BindView(R.id.reuse_no_connection) - LinearLayout reuse_no_connection; - @BindView(R.id.reuse_none_data) - LinearLayout mNoData; - - private SubjectAdapter adapter; - private LinearLayoutManager layoutManager; + LinearLayout mNoConn; private String mId; private String mName; - private String mEntrance; - private String mType; - private boolean mIsOrder; - private int page = 1; - - private String type; - - private boolean isEverpause = false; - - // 黄壮华 添加观察者 修改2015/8/15 - private DataWatcher dataWatcher = new DataWatcher() { - @Override - public void onDataChanged(DownloadEntity downloadEntity) { - ArrayList locationList = adapter.getLocationMap().get(downloadEntity.getPackageName()); - if (locationList != null) { - GameEntity gameEntity; - for (int location : locationList) { - gameEntity = adapter.getSubjectList().get(location); - if (gameEntity != null) { - DownloadItemUtils.processDate(SubjectActivity.this, gameEntity, downloadEntity, - adapter, location); - } - } - } - } - }; + private Bundle mBundle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - View contentView = View.inflate(this, R.layout.activity_subject, null); - mId = getIntent().getStringExtra("id"); - mName = getIntent().getStringExtra("name"); - mIsOrder = getIntent().getBooleanExtra("order", false); - mEntrance = getIntent().getStringExtra("entrance"); + mBundle = getIntent().getExtras(); if (getIntent().getBundleExtra("data") != null) { - mId = getIntent().getBundleExtra("data").getString("id"); - mName = getIntent().getBundleExtra("data").getString("name"); - mIsOrder = getIntent().getBundleExtra("data").getBoolean("order", false); - mEntrance = getIntent().getBundleExtra("data").getString("entrance"); + mBundle = getIntent().getBundleExtra("data"); } - init(contentView, mName); + mId = mBundle.getString("id"); + mName = mBundle.getString("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, SubjectActivity.this, type, mId, mName, mEntrance, mIsOrder); - subject_list.setAdapter(adapter); - } - }); - - layoutManager = new LinearLayoutManager(this); - - ((DefaultItemAnimator) subject_list.getItemAnimator()).setSupportsChangeAnimations(false); - subject_list.addItemDecoration(new VerticalItemDecoration(this, 8, true)); - subject_list.setHasFixedSize(true); - subject_list.setLayoutManager(layoutManager); - adapter = new SubjectAdapter(SubjectActivity.this, SubjectActivity.this, type, mId, mName, mEntrance, mIsOrder); - subject_list.setAdapter(adapter); - - subject_list.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { - super.onScrollStateChanged(recyclerView, newState); - if (!adapter.isRemove() && adapter.isLoaded() && newState == RecyclerView.SCROLL_STATE_IDLE - && adapter.getItemCount() == layoutManager.findLastVisibleItemPosition() + 1) { - adapter.initList(page, type); - } - } - }); - - GridLayoutManager layout = new GridLayoutManager(this, 4) { - @Override - public boolean canScrollVertically() { - return false; - } - }; - subject_type_list.setLayoutManager(layout); - - if (TextUtils.isEmpty(mName) && !TextUtils.isEmpty(mId)) { - getSubjectName(mId); - } + View view = View.inflate(this, R.layout.activity_subject, null); + init(view, mName); + loadSubjectType(); } - private void getSubjectName(String id) { - RetrofitManager.getApi() - .getSubjectName(id) + private void loadSubjectType() { + RetrofitManager + .getApi() + .getColumnHead(mId, "true") .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new JSONObjectResponse() { + .subscribe(new Response>(){ @Override - public void onResponse(JSONObject response) { - try { - TextView actionbar_tv_title = (TextView) findViewById(R.id.actionbar_tv_title); - actionbar_tv_title.setText(response.getString("name")); - } catch (JSONException e) { - e.printStackTrace(); + public void onResponse(List response) { + super.onResponse(response); + if (response == null) return; + + GameEntity gameEntity = response.get(0); + ArrayList tag = gameEntity.getTag(); + if (tag == null) { + tag = new ArrayList<>(1); } + tag.add(0, "全部"); + setupViewPager(tag); + } + + @Override + public void onFailure(HttpException e) { + super.onFailure(e); + ArrayList tag = new ArrayList<>(1); + tag.add(0, "全部"); + setupViewPager(tag); } }); } - @Override - public void loadError() { - if (subject_pb_loading != null && subject_pb_loading.getVisibility() == View.VISIBLE) { - subject_pb_loading.setVisibility(View.GONE); + private void setupViewPager(ArrayList tag) { + if (tag.size() > 1) { + mTabLayout.setVisibility(View.VISIBLE); } - toast("加载失败,请检查网络状态"); - subject_list.setVisibility(View.GONE); - reuse_no_connection.setVisibility(View.VISIBLE); - mNoData.setVisibility(View.GONE); - } - - @Override - public void loadDone() { - mNoData.setVisibility(View.GONE); - if (subject_pb_loading != null && subject_pb_loading.getVisibility() == View.VISIBLE) { - subject_pb_loading.setVisibility(View.GONE); + List fragments = new ArrayList<>(); + for (String s : tag) { + mTabLayout.addTab(mTabLayout.newTab().setText(s)); + SubjectFragment fragment = new SubjectFragment(); + fragment.setType(s); + fragment.setArguments(mBundle); + fragments.add(fragment); } - page++; - } - @Override - public void loadEmpty() { - super.loadEmpty(); - mNoData.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - } - - @Override - public void loadDone(Object obj) { - super.loadDone(obj); - // 初始化顶部分类标签 - if (!type.equals("全部")) return; - - ArrayList gameType = (ArrayList) obj; - gameType.add(0, "全部"); - ViewGroup.LayoutParams params = subject_type_list.getLayoutParams(); - params.height = (int) Math.ceil(gameType.size() / 4f) * DisplayUtils.dip2px(this, 37); - subject_type_list.setLayoutParams(params); - ((DefaultItemAnimator) subject_type_list.getItemAnimator()).setSupportsChangeAnimations(false); - SubjectTypeAdapter adapter = new SubjectTypeAdapter(SubjectActivity.this, SubjectActivity.this, gameType); - subject_type_list.setAdapter(adapter); - } - - // 下载被删除事件 - public void onEventMainThread(EBDownloadStatus status) { - if ("delete".equals(status.getStatus())) { - DownloadManager.getInstance(this).removePlatform(status.getName(), status.getPlatform()); - - ArrayList locationList = adapter.getLocationMap().get(status.getPackageName()); - if (locationList != null) { - GameEntity gameEntity; - for (int location : locationList) { - gameEntity = adapter.getSubjectList().get(location); - if (gameEntity != null && gameEntity.getEntryMap() != null) { - gameEntity.getEntryMap().remove(status.getPlatform()); - } - adapter.notifyItemChanged(location); - } - } - } - } - - public void onEventMainThread(EBPackage busFour) { - ArrayList locationList = adapter.getLocationMap().get(busFour.getPackageName()); - if (locationList != null) { - GameEntity gameEntity; - for (int location : locationList) { - if ("安装".equals(busFour.getType())) { - gameEntity = adapter.getSubjectList().get(location); - for (ApkEntity apkEntity : gameEntity.getApk()) { - if (apkEntity.getPackageName().equals(busFour.getPackageName())) { - if (gameEntity.getEntryMap() != null) { - gameEntity.getEntryMap().remove(apkEntity.getPlatform()); - } - adapter.notifyItemChanged(location); - break; - } - } - } else if ("卸载".equals(busFour.getType())) { - adapter.notifyItemChanged(location); - } - } - } - } - - //连接上网络事件 - public void onEventMainThread(EBNetworkState busNetworkState) { - if (busNetworkState.isNetworkConnected()) { - if (reuse_no_connection.getVisibility() == View.VISIBLE) { - subject_list.setVisibility(View.VISIBLE); - subject_pb_loading.setVisibility(View.VISIBLE); - reuse_no_connection.setVisibility(View.GONE); - adapter = new SubjectAdapter(SubjectActivity.this,SubjectActivity.this, type, mId, mName, mEntrance, mIsOrder); - subject_list.setAdapter(adapter); - } - } - } - - @Override - public void onResume() { - super.onResume(); - if (isEverpause) { - for (GameEntity entity : adapter.getSubjectList()) { - entity.setEntryMap(DownloadManager.getInstance(this).getEntryMap(entity.getName())); - } - } - isEverpause = false; - DownloadManager.getInstance(getApplicationContext()).addObserver(dataWatcher); - } - - @Override - public void onPause() { - super.onPause(); - isEverpause = true; - DownloadManager.getInstance(getApplicationContext()).removeObserver(dataWatcher); - } - - @Override - public void onSelectType(String 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,this, type, mId, mName, mEntrance, mIsOrder); - subject_list.setAdapter(adapter); + VPFragmentAdapter adapter = + new VPFragmentAdapter(getSupportFragmentManager(), fragments, tag); + mViewPager.setAdapter(adapter); + mTabLayout.setupWithViewPager(mViewPager); + mTabLayout.setTabsFromPagerAdapter(adapter); } } diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java index 849edc5e60..57601ed48e 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java @@ -1,45 +1,84 @@ package com.gh.gamecenter; import android.app.Dialog; -import android.content.*; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; import android.database.Cursor; -import android.graphics.*; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.Rect; import android.net.Uri; -import android.os.*; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; import android.provider.MediaStore; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.view.*; +import android.view.View; +import android.view.ViewTreeObserver; +import android.view.Window; import android.view.inputmethod.InputMethodManager; -import android.widget.*; -import butterknife.BindView; -import butterknife.OnClick; +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.constant.Config; -import com.gh.common.util.*; +import com.gh.common.util.DialogUtils; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.FileUtils; +import com.gh.common.util.PackageUtils; +import com.gh.common.util.TokenUtils; +import com.gh.common.util.Utils; import com.gh.gamecenter.entity.InstallGameEntity; import com.gh.gamecenter.retrofit.JSONObjectResponse; import com.gh.gamecenter.retrofit.RetrofitManager; -import com.gh.gamecenter.suggest.*; -import okhttp3.*; -import org.json.*; +import com.gh.gamecenter.suggest.SuggestPicAdapter; +import com.gh.gamecenter.suggest.SuggestSelectGameAdapter; +import com.gh.gamecenter.suggest.SuggestTypeAdapter; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import butterknife.BindView; +import butterknife.OnClick; +import okhttp3.MediaType; +import okhttp3.RequestBody; +import okhttp3.ResponseBody; import retrofit2.HttpException; import rx.Observable; import rx.Observer; -import rx.*; +import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; -import java.io.*; -import java.net.HttpURLConnection; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - /** * Created by khy on 2017/3/31. */ @@ -103,7 +142,12 @@ public class SuggestionActivity extends BaseActivity implements SuggestTypeAdapt Utils.log("picturePath = " + picturePath); - mAdapter.addFileList(picturePath); + File file = new File(picturePath); + if (file.length() > 8 * 1024 * 1024) { + toast("图片大小不能超过8M"); + } else { + mAdapter.addFileList(picturePath); + } } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java index 5540a432a3..4061c44bc3 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/SubjectAdapter.java @@ -1,5 +1,6 @@ package com.gh.gamecenter.adapter; +import android.content.Context; import android.support.v4.util.ArrayMap; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; @@ -18,7 +19,6 @@ import com.gh.common.util.GameViewUtils; import com.gh.common.util.ImageUtils; import com.gh.download.DownloadManager; import com.gh.gamecenter.R; -import com.gh.gamecenter.SubjectActivity; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; import com.gh.gamecenter.adapter.viewholder.GameImageViewHolder; import com.gh.gamecenter.adapter.viewholder.GameNormalViewHolder; @@ -60,7 +60,7 @@ public class SubjectAdapter extends BaseRecyclerAdapter { private boolean mIsOrder; private boolean mIsLoaded; - public SubjectAdapter(SubjectActivity context, OnCallBackListener listener, String type, String id + public SubjectAdapter(Context context, OnCallBackListener listener, String type, String id , String name, String entrance, boolean isOrder) { super(context); this.mOnCallBackListener = listener; @@ -318,7 +318,7 @@ public class SubjectAdapter extends BaseRecyclerAdapter { holder.gameServerType.setVisibility(View.VISIBLE); holder.gameServerType.setText(serverType); if ("删档内测".equals(serverType) || "不删档内测".equals(serverType)) { - holder.gameServerType.setBackgroundResource(R.drawable.textview_cancel_up); + holder.gameServerType.setBackgroundResource(R.drawable.textview_server_tag); if ("删档内测".equals(serverType)) { paddRight = DisplayUtils.dip2px(mContext, 50); } else { @@ -393,7 +393,7 @@ public class SubjectAdapter extends BaseRecyclerAdapter { holder.gameServerType.setVisibility(View.VISIBLE); holder.gameServerType.setText(serverType); if ("删档内测".equals(serverType) || "不删档内测".equals(serverType)) { - holder.gameServerType.setBackgroundResource(R.drawable.textview_cancel_up); + holder.gameServerType.setBackgroundResource(R.drawable.textview_server_tag); if ("删档内测".equals(serverType)) { paddRight = DisplayUtils.dip2px(mContext, 50); } else { diff --git a/app/src/main/java/com/gh/gamecenter/adapter/VPFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/VPFragmentAdapter.java index 9e68fb84af..2592b8813f 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/VPFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/VPFragmentAdapter.java @@ -2,11 +2,11 @@ package com.gh.gamecenter.adapter; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentStatePagerAdapter; +import android.support.v4.app.FragmentPagerAdapter; import java.util.List; -public class VPFragmentAdapter extends FragmentStatePagerAdapter { +public class VPFragmentAdapter extends FragmentPagerAdapter { private List mFragments; private List mTitles; diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java index 38652a18f0..2eac42d27b 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java @@ -36,10 +36,10 @@ import com.gh.common.util.Utils; import com.gh.common.view.AutoScrollViewPager; import com.gh.download.DownloadManager; import com.gh.gamecenter.KaiFuActivity; +import com.gh.gamecenter.SubjectActivity; import com.gh.gamecenter.NewsDetailActivity; import com.gh.gamecenter.PluginActivity; import com.gh.gamecenter.R; -import com.gh.gamecenter.SubjectActivity; import com.gh.gamecenter.adapter.BaseRecyclerAdapter; import com.gh.gamecenter.adapter.ImagePagerAdapter; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; @@ -572,8 +572,6 @@ class GameFragmentAdapter extends BaseRecyclerAdapter { } private void initGameViewPagerViewHolder(final GameViewPagerViewHolder viewHolder) { - ViewGroup.LayoutParams params = viewHolder.itemView.getLayoutParams(); - params.height = topHeight; if (isSlideError) { viewHolder.viewpager_tv_failure.setVisibility(View.VISIBLE); @@ -642,16 +640,17 @@ class GameFragmentAdapter extends BaseRecyclerAdapter { } } }); - viewHolder.viewpager_tv_failure.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - isSlideError = false; - notifyItemChanged(0); - initSlide(false); - } - }); } + viewHolder.viewpager_tv_failure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isSlideError = false; + notifyItemChanged(0); + initSlide(false); + } + }); + if (isAutoScroll) { viewHolder.viewPager.startAutoScroll(); } else { @@ -669,7 +668,7 @@ class GameFragmentAdapter extends BaseRecyclerAdapter { //初始化专题入口 viewHolder.subjectLl.removeAllViews(); - for (int i = 0; i < 6; i++) { + for (int i = 0; i < 5; i++) { View contentView = View.inflate(mContext, R.layout.home_subject_entrance_item, null); TextView subjectName = (TextView) contentView.findViewById(R.id.home_subject_name); SimpleDraweeView subjectIcon = (SimpleDraweeView) contentView.findViewById(R.id.home_subject_icon); @@ -682,7 +681,7 @@ class GameFragmentAdapter extends BaseRecyclerAdapter { subjectName.setText(subjectDigestList.get(i).getName()); } - if (i == 5) { + if (i == 4) { subjectName.setText("开服表"); subjectIcon.setImageURI(Uri.parse("res:///" + R.drawable.home_entrance_kaifu)); } @@ -691,7 +690,7 @@ class GameFragmentAdapter extends BaseRecyclerAdapter { contentView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (finalI < 5 && !isSubjectDigestError && subjectDigestList.size() > finalI) { + if (finalI < 4 && !isSubjectDigestError && subjectDigestList.size() > finalI) { Intent intent = new Intent(mContext, SubjectActivity.class); intent.putExtra("id", subjectDigestList.get(finalI).getColumnId()); intent.putExtra("name", subjectDigestList.get(finalI).getColumnName()); @@ -702,7 +701,7 @@ class GameFragmentAdapter extends BaseRecyclerAdapter { DataCollectionUtils.uploadPosition(mContext, "游戏", (finalI + 1) + "", subjectDigestList.get(finalI).getName()); - } else if (finalI == 5) { + } else if (finalI == 4) { Intent intent = new Intent(mContext, KaiFuActivity.class); intent.putExtra("entrance", "(游戏-专题:开服表[1-6])"); mContext.startActivity(intent); @@ -756,7 +755,7 @@ class GameFragmentAdapter extends BaseRecyclerAdapter { holder.gameServerType.setVisibility(View.VISIBLE); holder.gameServerType.setText(serverType); if ("删档内测".equals(serverType) || "不删档内测".equals(serverType)) { - holder.gameServerType.setBackgroundResource(R.drawable.textview_cancel_up); + holder.gameServerType.setBackgroundResource(R.drawable.textview_server_tag); if ("删档内测".equals(serverType)) { paddRight = DisplayUtils.dip2px(mContext, 50); } else { @@ -869,7 +868,7 @@ class GameFragmentAdapter extends BaseRecyclerAdapter { holder.gameServerType.setVisibility(View.VISIBLE); holder.gameServerType.setText(serverType); if ("删档内测".equals(serverType) || "不删档内测".equals(serverType)) { - holder.gameServerType.setBackgroundResource(R.drawable.textview_cancel_up); + holder.gameServerType.setBackgroundResource(R.drawable.textview_server_tag); if ("删档内测".equals(serverType)) { paddRight = DisplayUtils.dip2px(mContext, 50); } else { diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiAdapter.java b/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiAdapter.java index db72457692..c59f580a29 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiAdapter.java @@ -88,9 +88,10 @@ public class XinXiAdapter extends BaseRecyclerAdapter { name = "游戏详情"; - getGameNews(); - - initGameIds(); + if (mGameEntity != null) { + getGameNews(); + initGameIds(); + } } diff --git a/app/src/main/java/com/gh/gamecenter/personal/ConcernFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/personal/ConcernFragmentAdapter.java index 5f5206165e..95de5306b1 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/ConcernFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/personal/ConcernFragmentAdapter.java @@ -201,7 +201,7 @@ class ConcernFragmentAdapter extends BaseRecyclerAdapter { holder.gameServerType.setVisibility(View.VISIBLE); holder.gameServerType.setText(serverType); if ("删档内测".equals(serverType) || "不删档内测".equals(serverType)) { - holder.gameServerType.setBackgroundResource(R.drawable.textview_cancel_up); + holder.gameServerType.setBackgroundResource(R.drawable.textview_server_tag); if ("删档内测".equals(serverType)) { paddRight = DisplayUtils.dip2px(mContext, 50); } else { diff --git a/app/src/main/java/com/gh/gamecenter/personal/InstallFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/personal/InstallFragmentAdapter.java index 67a0300391..0054b0245d 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/InstallFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/personal/InstallFragmentAdapter.java @@ -454,7 +454,7 @@ class InstallFragmentAdapter extends BaseRecyclerAdapter { holder.gameServerType.setVisibility(View.VISIBLE); holder.gameServerType.setText(serverType); if ("删档内测".equals(serverType) || "不删档内测".equals(serverType)) { - holder.gameServerType.setBackgroundResource(R.drawable.textview_cancel_up); + holder.gameServerType.setBackgroundResource(R.drawable.textview_server_tag); if ("删档内测".equals(serverType)) { paddRight = DisplayUtils.dip2px(mContext, 50); } else { diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragmentAdapter.java index 209fcf7d79..fbf2c87420 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragmentAdapter.java @@ -5,18 +5,23 @@ import android.graphics.Color; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; import android.text.TextUtils; -import android.view.*; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; import android.widget.LinearLayout; import android.widget.TextView; + import com.gh.common.util.DisplayUtils; import com.gh.gamecenter.R; import com.gh.gamecenter.adapter.BaseRecyclerAdapter; import com.gh.gamecenter.db.SearchHistoryDao; import com.gh.gamecenter.eventbus.EBSearch; -import de.greenrobot.event.EventBus; import java.util.List; +import de.greenrobot.event.EventBus; + class SearchHistoryFragmentAdapter extends BaseRecyclerAdapter { private SearchHistoryDao dao; @@ -86,6 +91,8 @@ class SearchHistoryFragmentAdapter extends BaseRecyclerAdapter { EventBus.getDefault().post(new EBSearch("remen", key)); dao.add(key); } + InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } }); } diff --git a/app/src/main/java/com/gh/gamecenter/subject/SubjectFragment.java b/app/src/main/java/com/gh/gamecenter/subject/SubjectFragment.java new file mode 100644 index 0000000000..1b7384b0fa --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/subject/SubjectFragment.java @@ -0,0 +1,286 @@ +package com.gh.gamecenter.subject; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; +import com.gh.base.BaseFragment; +import com.gh.common.util.DownloadItemUtils; +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.R; +import com.gh.gamecenter.adapter.SubjectAdapter; +import com.gh.gamecenter.entity.ApkEntity; +import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.eventbus.EBDownloadStatus; +import com.gh.gamecenter.eventbus.EBNetworkState; +import com.gh.gamecenter.eventbus.EBPackage; +import com.gh.gamecenter.eventbus.EBUISwitch; +import com.gh.gamecenter.news.NewsFragment; +import com.gh.gamecenter.retrofit.JSONObjectResponse; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; + +import butterknife.BindView; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * Created by khy on 2017/5/3. + */ + +public class SubjectFragment extends BaseFragment { + + @BindView(R.id.subject_list) + RecyclerView subject_list; + @BindView(R.id.subject_type_list) + RecyclerView subject_type_list; + @BindView(R.id.subject_pb_loading) + ProgressBarCircularIndeterminate subject_pb_loading; + @BindView(R.id.reuse_no_connection) + LinearLayout reuse_no_connection; + @BindView(R.id.reuse_none_data) + LinearLayout mNoData; + + private SubjectAdapter adapter; + private LinearLayoutManager layoutManager; + + private String mId; + private String mName; + private String mEntrance; + private String mType; + private boolean mIsOrder; + + private int page = 1; + + + // 黄壮华 添加观察者 修改2015/8/15 + private DataWatcher dataWatcher = new DataWatcher() { + @Override + public void onDataChanged(DownloadEntity downloadEntity) { + ArrayList locationList = adapter.getLocationMap().get(downloadEntity.getPackageName()); + if (locationList != null) { + GameEntity gameEntity; + for (int location : locationList) { + gameEntity = adapter.getSubjectList().get(location); + if (gameEntity != null) { + DownloadItemUtils.processDate(getContext(), gameEntity, downloadEntity, + adapter, location); + } + } + } + } + }; + + public void setType(String type) { + mType = type; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Bundle arguments = getArguments(); + mId = arguments.getString("id"); + mName = arguments.getString("name"); + mIsOrder = arguments.getBoolean("order"); + mEntrance = arguments.getString("entrance"); + init(R.layout.fragment_subject); + + 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(getContext(), SubjectFragment.this, mType, mId, mName, mEntrance, mIsOrder); + subject_list.setAdapter(adapter); + } + }); + + layoutManager = new LinearLayoutManager(getContext()); + + ((DefaultItemAnimator) subject_list.getItemAnimator()).setSupportsChangeAnimations(false); + subject_list.addItemDecoration(new VerticalItemDecoration(getContext(), 8, true)); + subject_list.setHasFixedSize(true); + subject_list.setLayoutManager(layoutManager); + adapter = new SubjectAdapter(getContext(), this, mType, mId, mName, mEntrance, mIsOrder); + subject_list.setAdapter(adapter); + + subject_list.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrollStateChanged(RecyclerView recyclerView, int newState) { + super.onScrollStateChanged(recyclerView, newState); + if (!adapter.isRemove() && adapter.isLoaded() && newState == RecyclerView.SCROLL_STATE_IDLE + && adapter.getItemCount() == layoutManager.findLastVisibleItemPosition() + 1) { + adapter.initList(page, mType); + } + } + }); + + GridLayoutManager layout = new GridLayoutManager(getContext(), 4) { + @Override + public boolean canScrollVertically() { + return false; + } + }; + subject_type_list.setLayoutManager(layout); + + if (TextUtils.isEmpty(mName) && !TextUtils.isEmpty(mId)) { + getSubjectName(mId); + } + + } + + private void getSubjectName(String id) { + RetrofitManager.getApi() + .getSubjectName(id) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new JSONObjectResponse() { + @Override + public void onResponse(JSONObject response) { + try { + TextView actionbar_tv_title = (TextView) view.findViewById(R.id.actionbar_tv_title); + actionbar_tv_title.setText(response.getString("name")); + } catch (JSONException e) { + e.printStackTrace(); + } + } + }); + } + + @Override + public void loadError() { + if (subject_pb_loading != null && subject_pb_loading.getVisibility() == View.VISIBLE) { + subject_pb_loading.setVisibility(View.GONE); + } + toast("加载失败,请检查网络状态"); + subject_list.setVisibility(View.GONE); + reuse_no_connection.setVisibility(View.VISIBLE); + mNoData.setVisibility(View.GONE); + } + + @Override + public void loadDone() { + mNoData.setVisibility(View.GONE); + if (subject_pb_loading != null && subject_pb_loading.getVisibility() == View.VISIBLE) { + subject_pb_loading.setVisibility(View.GONE); + } + page++; + } + + @Override + public void loadEmpty() { + super.loadEmpty(); + mNoData.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + } + + @Override + public void loadDone(Object obj) { + super.loadDone(obj); + // 初始化顶部分类标签 + if (!mType.equals("全部")) return; + + } + + // 下载被删除事件 + public void onEventMainThread(EBDownloadStatus status) { + if ("delete".equals(status.getStatus())) { + DownloadManager.getInstance(getContext()).removePlatform(status.getName(), status.getPlatform()); + + ArrayList locationList = adapter.getLocationMap().get(status.getPackageName()); + if (locationList != null) { + GameEntity gameEntity; + for (int location : locationList) { + gameEntity = adapter.getSubjectList().get(location); + if (gameEntity != null && gameEntity.getEntryMap() != null) { + gameEntity.getEntryMap().remove(status.getPlatform()); + } + adapter.notifyItemChanged(location); + } + } + } + } + + public void onEventMainThread(EBPackage busFour) { + ArrayList locationList = adapter.getLocationMap().get(busFour.getPackageName()); + if (locationList != null) { + GameEntity gameEntity; + for (int location : locationList) { + if ("安装".equals(busFour.getType())) { + gameEntity = adapter.getSubjectList().get(location); + for (ApkEntity apkEntity : gameEntity.getApk()) { + if (apkEntity.getPackageName().equals(busFour.getPackageName())) { + if (gameEntity.getEntryMap() != null) { + gameEntity.getEntryMap().remove(apkEntity.getPlatform()); + } + adapter.notifyItemChanged(location); + break; + } + } + } else if ("卸载".equals(busFour.getType())) { + adapter.notifyItemChanged(location); + } + } + } + } + + //连接上网络事件 + public void onEventMainThread(EBNetworkState busNetworkState) { + if (busNetworkState.isNetworkConnected()) { + if (reuse_no_connection.getVisibility() == View.VISIBLE) { + subject_list.setVisibility(View.VISIBLE); + subject_pb_loading.setVisibility(View.VISIBLE); + reuse_no_connection.setVisibility(View.GONE); + adapter = new SubjectAdapter(getContext(), this, mType, mId, mName, mEntrance, mIsOrder); + subject_list.setAdapter(adapter); + } + } + } + + @Override + public void onResume() { + super.onResume(); + if (isEverpause) { + for (GameEntity entity : adapter.getSubjectList()) { + entity.setEntryMap(DownloadManager.getInstance(getContext()).getEntryMap(entity.getName())); + } + } + isEverpause = false; + DownloadManager.getInstance(getContext()).addObserver(dataWatcher); + } + + @Override + public void onPause() { + super.onPause(); + isEverpause = true; + DownloadManager.getInstance(getContext()).removeObserver(dataWatcher); + } + + // 资讯Fragment界面切换事件 + public void onEventMainThread(EBUISwitch busNine) { + if (NewsFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) { + if (busNine.getPosition() == 0) { + if (subject_pb_loading.getVisibility() == View.VISIBLE) { + adapter.initList(1, mType); + } + } + } + } + +} diff --git a/app/src/main/res/drawable-hdpi/platform_vote.jpg b/app/src/main/res/drawable-hdpi/platform_vote.jpg deleted file mode 100644 index 67d4347e8d..0000000000 Binary files a/app/src/main/res/drawable-hdpi/platform_vote.jpg and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/platform_vote.png b/app/src/main/res/drawable-hdpi/platform_vote.png new file mode 100644 index 0000000000..e26eae50c6 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/platform_vote.png differ diff --git a/app/src/main/res/drawable/textview_server_tag.xml b/app/src/main/res/drawable/textview_server_tag.xml new file mode 100644 index 0000000000..f7251d364b --- /dev/null +++ b/app/src/main/res/drawable/textview_server_tag.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_subject.xml b/app/src/main/res/layout/activity_subject.xml index 1476a095d8..90adceba96 100644 --- a/app/src/main/res/layout/activity_subject.xml +++ b/app/src/main/res/layout/activity_subject.xml @@ -1,42 +1,34 @@ - + - + - + - + - + - + - + - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_suggest.xml b/app/src/main/res/layout/activity_suggest.xml index 642b87acff..5e0ef9fb97 100644 --- a/app/src/main/res/layout/activity_suggest.xml +++ b/app/src/main/res/layout/activity_suggest.xml @@ -64,7 +64,8 @@ android:hint = "@string/suggest_content_hint" android:textSize = "14sp" android:textColorHint = "@color/content" - android:lineSpacingMultiplier = "1.2" /> + android:lineSpacingMultiplier = "1.2" + android:maxLength="256"/> + android:textSize = "14sp" + android:maxLength="64"/> + android:textSize = "14sp" + android:maxLength="64"/> diff --git a/app/src/main/res/layout/activity_web.xml b/app/src/main/res/layout/activity_web.xml index 1bf9f8c249..a0c60866a9 100644 --- a/app/src/main/res/layout/activity_web.xml +++ b/app/src/main/res/layout/activity_web.xml @@ -21,12 +21,6 @@ android:layout_width = "match_parent" android:layout_height = "3dp" android:progressDrawable = "@drawable/progressbar_bg_style" /> - + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/game_viewpager_item.xml b/app/src/main/res/layout/game_viewpager_item.xml index 6c51b60617..145155dad0 100644 --- a/app/src/main/res/layout/game_viewpager_item.xml +++ b/app/src/main/res/layout/game_viewpager_item.xml @@ -11,8 +11,7 @@ android:id = "@+id/view_pager" android:layout_width = "match_parent" android:layout_height = "match_parent" - android:overScrollMode = "never" > - + android:overScrollMode = "never" /> - + android:layout_marginRight = "10dp" /> - + android:paddingTop = "2dp" /> diff --git a/dependencies.gradle b/dependencies.gradle index ab81836566..4649e41800 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -24,6 +24,7 @@ ext { //Libraries androidSupport = "23.2.1" + supportDesign = "23.2.1" multidex = "1.0.1" butterKnife = "8.4.0" eventbus = "3.0.0"