diff --git a/app/src/main/java/com/gh/common/util/ConcernUtils.java b/app/src/main/java/com/gh/common/util/ConcernUtils.java new file mode 100644 index 0000000000..f52bd2a07d --- /dev/null +++ b/app/src/main/java/com/gh/common/util/ConcernUtils.java @@ -0,0 +1,147 @@ +package com.gh.common.util; + +import android.content.Context; +import android.telephony.TelephonyManager; + +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.gh.base.AppController; +import com.gh.gamecenter.volley.extended.ConcernJsonArrayExtendedRequest; +import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; + +import org.json.JSONArray; +import org.json.JSONException; + +import java.util.UUID; + +/** + * Created by khy on 2016/8/24. + */ +public class ConcernUtils { + public static void LoadConcernData(final String url, final DownJsonListener listener){ + new Thread(new Runnable() { + @Override + public void run() { + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + if (listener != null){ + listener.downSucced(response.toString()); + } + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + if (listener != null){ + listener.downFailed(); + } + } + }); + request.setShouldCache(false); + AppController.addToRequestQueue(request); + } + }).start(); + + } + public static void PostConcernGameId(final String postData, final String postUrl,final DownJsonListener listener){ + new Thread(new Runnable() { + + @Override + public void run() { + JSONArray jsonArray = null; + try { + jsonArray = new JSONArray(postData); + } catch (JSONException e) { + + } + ConcernJsonArrayExtendedRequest request = new ConcernJsonArrayExtendedRequest(Request.Method.POST, postUrl, jsonArray, new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + listener.downSucced("关注成功"); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + listener.downFailed(); + } + }); + request.setShouldCache(false); + AppController.addToRequestQueue(request); + } + }).start(); + } + public static void DeleteConcernData(final String url, final DownJsonListener listener){ + final JSONArray jsonArray = new JSONArray(); + new Thread(new Runnable() { + @Override + public void run() { + ConcernJsonArrayExtendedRequest request = new ConcernJsonArrayExtendedRequest(Request.Method.DELETE, url, jsonArray, new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + listener.downSucced("删除成功"); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + listener.downFailed(); + } + }); + request.setShouldCache(false); + AppController.addToRequestQueue(request); + } + }).start(); + + } + public static void UpdateConcernData(final String url,String updateData,final DownJsonListener listener){ + if (updateData.length()<3){ + updateData = ""; + } + JSONArray jsonArray = null; + try { + jsonArray = new JSONArray(updateData); + } catch (JSONException e) { + e.printStackTrace(); + } + final JSONArray finalJsonArray = jsonArray; + new Thread(new Runnable() { + @Override + public void run() { + ConcernJsonArrayExtendedRequest request = new ConcernJsonArrayExtendedRequest(Request.Method.PUT, url, finalJsonArray, new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + listener.downSucced("跟新设备关注成功"); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + listener.downFailed(); + } + }); + request.setShouldCache(false); + AppController.addToRequestQueue(request); + } + + }).start(); + } + + public interface DownJsonListener { + + void downSucced(String str); + void downFailed(); + + } + //获取设备号ID + public static String UUID(Context context){ + final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + + final String tmDevice, tmSerial, tmPhone, androidId; + tmDevice = "" + tm.getDeviceId(); + tmSerial = "" + tm.getSimSerialNumber(); + androidId = "" + android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID); + + UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode()); + return deviceUuid.toString(); + } +} + diff --git a/app/src/main/java/com/gh/common/util/DialogUtils.java b/app/src/main/java/com/gh/common/util/DialogUtils.java index 89faf5d8df..e8f486f33c 100644 --- a/app/src/main/java/com/gh/common/util/DialogUtils.java +++ b/app/src/main/java/com/gh/common/util/DialogUtils.java @@ -37,17 +37,17 @@ public class DialogUtils { final Dialog dialog = new Dialog(context); View view = View.inflate(context, - R.layout.search_history_delete_dialog, null); + R.layout.common_alertdialog, null); TextView title = (TextView) view - .findViewById(R.id.delete_dialog_title); + .findViewById(R.id.alertdialog_title); title.setText("警告"); TextView content = (TextView) view - .findViewById(R.id.delete_dialog_message); + .findViewById(R.id.alertdialog_content); content.setText("您当前网络环境异常,下载地址已被替换(网络劫持),请更换网络环境进行下载。"); TextView cancel = (TextView) view - .findViewById(R.id.delete_dialog_cancel); + .findViewById(R.id.alertdialog_cannel); cancel.setText("取消"); cancel.setOnClickListener(new OnClickListener() { @Override @@ -56,7 +56,7 @@ public class DialogUtils { } }); TextView confirem = (TextView) view - .findViewById(R.id.delete_dialog_confirm); + .findViewById(R.id.alertdialog_confirm); confirem.setText("确定"); confirem.setOnClickListener(new OnClickListener() { @Override @@ -130,14 +130,16 @@ public class DialogUtils { public static void showWarningDialog(Context context, String msg, final ConfiremListener listener) { final Dialog dialog = new Dialog(context); - View view = View.inflate(context, R.layout.search_history_delete_dialog, null); - TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); - title.setText("警告"); - TextView content = (TextView) view.findViewById(R.id.delete_dialog_message); + View view = View.inflate(context, R.layout.common_alertdialog, null); + TextView title = (TextView) view + .findViewById(R.id.alertdialog_title); + title.setText("下载提示"); + TextView content = (TextView) view.findViewById(R.id.alertdialog_content); content.setText(msg); - TextView cancel = (TextView) view.findViewById(R.id.delete_dialog_cancel); + TextView cancel = (TextView) view + .findViewById(R.id.alertdialog_cannel); cancel.setText("取消"); cancel.setOnClickListener(new OnClickListener() { @Override @@ -145,7 +147,8 @@ public class DialogUtils { dialog.dismiss(); } }); - TextView confirem = (TextView) view.findViewById(R.id.delete_dialog_confirm); + TextView confirem = (TextView) view + .findViewById(R.id.alertdialog_confirm); confirem.setText("继续"); confirem.setOnClickListener(new View.OnClickListener() { @Override @@ -162,7 +165,7 @@ public class DialogUtils { } public static void showWarningDialog(Context context, ConfiremListener listener) { - showWarningDialog(context, "您当前的网络为2G/3G/4G,下载将会消耗移动流量,是否继续下载?", listener); + showWarningDialog(context, "您当前使用的网络为2G/3G/4G,开始下载将会消耗移动流量,确定下载?", listener); } public static void showSuccessDialog(Context context) { @@ -224,18 +227,18 @@ public class DialogUtils { public static void showPluginDialog(Context context, final ConfiremListener cListener, final DismissListener dListener) { final Dialog dialog = new Dialog(context); - View view = View.inflate(context, R.layout.search_history_delete_dialog, null); - TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); + View view = View.inflate(context, R.layout.common_alertdialog, null); + TextView title = (TextView) view.findViewById(R.id.alertdialog_title); title.setText("插件化安装"); TextView content = (TextView) view - .findViewById(R.id.delete_dialog_message); + .findViewById(R.id.alertdialog_content); Spanned spanned = Html.fromHtml("您将进行插件化安装以实现插件功能,此过程将" + "卸载" + "当前使用的版本并" + "安装插件版本" + "。"); content.setText(spanned); TextView cancel = (TextView) view - .findViewById(R.id.delete_dialog_cancel); + .findViewById(R.id.alertdialog_cannel); cancel.setText("取消"); cancel.setOnClickListener(new OnClickListener() { @Override @@ -244,7 +247,7 @@ public class DialogUtils { } }); TextView confirm = (TextView) view - .findViewById(R.id.delete_dialog_confirm); + .findViewById(R.id.alertdialog_confirm); confirm.setText("确定"); confirm.setOnClickListener(new OnClickListener() { @Override diff --git a/app/src/main/java/com/gh/gamecenter/NewGameDetailsActivity.java b/app/src/main/java/com/gh/gamecenter/NewGameDetailsActivity.java new file mode 100644 index 0000000000..887f45954b --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/NewGameDetailsActivity.java @@ -0,0 +1,947 @@ +package com.gh.gamecenter; + +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.support.v4.util.ArrayMap; +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.View; +import android.view.ViewGroup; +import android.view.Window; +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.android.volley.NoConnectionError; +import com.android.volley.Response; +import com.android.volley.TimeoutError; +import com.android.volley.VolleyError; +import com.gh.base.AppController; +import com.gh.base.BaseActivity; +import com.gh.common.constant.Config; +import com.gh.common.constant.Constants; +import com.gh.common.util.ConcernUtils; +import com.gh.common.util.DataUtils; +import com.gh.common.util.DialogUtils; +import com.gh.common.util.FileUtils; +import com.gh.common.util.ImageUtils; +import com.gh.common.util.MD5Utils; +import com.gh.common.util.NetworkUtils; +import com.gh.common.util.PackageUtils; +import com.gh.common.util.PlatformUtils; +import com.gh.common.util.Utils; +import com.gh.common.view.DownloadDialog; +import com.gh.common.view.HorizontalItemDecoration; +import com.gh.download.DataWatcher; +import com.gh.download.DownloadEntry; +import com.gh.download.DownloadManager; +import com.gh.gamecenter.entity.ApkEntity; +import com.gh.gamecenter.entity.DismissEntity; +import com.gh.gamecenter.entity.GameDetailsEntity; +import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.entity.NewsEntity; +import com.gh.gamecenter.eventbus.EBNewsType; +import com.gh.gamecenter.eventbus.EBPWDismiss; +import com.gh.gamecenter.eventbus.EBPutUrl; +import com.gh.gamecenter.eventbus.EBRedDot; +import com.gh.gamecenter.manager.ConcernManager; +import com.gh.gamecenter.manager.DataCollectionManager; +import com.gh.gamecenter.manager.PackageManager; +import com.gh.gamecenter.volley.extended.JsonArrayExtendedRequest; +import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import de.greenrobot.event.EventBus; + +/** + * Created by khy on 2016/8/12. + */ +public class NewGameDetailsActivity extends BaseActivity implements View.OnClickListener{ + private String gameId ; + private String entrance; + private GameDetailsAdapter detailsAdapter; + private Context context = this; + private RecyclerView detailsRecyclerView; + private LinearLayout llLoading; + private LinearLayout noConnection; + private GameDetailsEntity entity = new GameDetailsEntity(); + private GameEntity gameEntity; + private TextView tvDowload,tvPer; + private ProgressBar progressBar; + private ArrayMap statusMap; + private DismissEntity dismissEntity; + private DownloadEntry downloadEntry; + private ConcernManager concernManager; + + private boolean isConcern = false; + private int concernCode = 0;//0关注不做操作,1添加关注,2删除关注 + private Handler handler = new Handler(); + + private DataWatcher dataWatcher = new DataWatcher() { + @Override + public void onDataChanged( + HashMap downloadingEntries) { + if (gameEntity != null && gameEntity.getApk().size() == 1) { + String url = gameEntity.getApk().get(0).getUrl(); + for (Map.Entry entry : downloadingEntries + .entrySet()) { + if (url.equals(entry.getValue().getUrl())) { + if (!"pause".equals(statusMap.get(entry.getValue() + .getUrl()))) { + downloadEntry = entry.getValue(); + invalidate(); + } + break; + } + } + } + } + }; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + View contentView = View.inflate(this, R.layout.activity_new_gamedetails, null); + gameId = getIntent().getStringExtra("gameId"); + entrance = getIntent().getStringExtra("entrance"); + if (gameId != null) { + + } else { + gameEntity = (GameEntity) AppController.get("GameEntity", true); + gameId = gameEntity.getId(); + } + + init(contentView,gameEntity.getName()); + dismissEntity = new DismissEntity(false); + statusMap = new ArrayMap<>(); + + //初始化关注 + concernManager = new ConcernManager(getApplicationContext()); + for (int i = 0; i < concernManager.getAllConcern().size(); i++) { + if (concernManager.getAllConcern().get(i).getId().equals(gameId)){ + isConcern = true; + } + } + + tvDowload = (TextView) findViewById(R.id.gamedetails_tv_download); + progressBar = (ProgressBar) findViewById(R.id.gamedetails_progressbar); + llLoading = (LinearLayout) findViewById(R.id.gamedetails_ll_loading); + tvPer = (TextView) findViewById(R.id.gamedetails_tv_per); + noConnection = (LinearLayout) findViewById(R.id.reuse_no_connection); + detailsRecyclerView = (RecyclerView) findViewById(R.id.gamedetails_rv); + detailsAdapter = new GameDetailsAdapter(context); + detailsRecyclerView.setLayoutManager(new LinearLayoutManager(context)); + detailsRecyclerView.setAdapter(detailsAdapter); + if (entity != null) { + initDowload(); + } else { + + } + tvDowload.setOnClickListener(this); + tvPer.setOnClickListener(this); + noConnection.setOnClickListener(this); + + } + @Override + public void onClick(final View v) { + switch (v.getId()){ + case R.id.gamedetails_tv_download: + Map kv0 = new HashMap(); + kv0.put("点击", "下载"); + DataUtils.onEvent(NewGameDetailsActivity.this, "插件数据", gameEntity.getName(), + kv0); + if (gameEntity.getApk() != null && !gameEntity.getApk().isEmpty()) { + if (NetworkUtils.isWifiConnected(this)) { + download(v); + } else { + DialogUtils.showWarningDialog(this, new DialogUtils.ConfiremListener() { + @Override + public void onConfirem() { + download(v); + } + }); + } + } else { + toast("稍等片刻~!游戏正在上传中..."); + } + break; + case R.id.gamedetails_tv_per: + String str = tvPer.getText().toString(); + if ("继续".equals(str)) { + statusMap.put(downloadEntry.getUrl(), "downloading"); + tvPer.setText(downloadEntry.getPercent() + "%"); + Message msg = Message.obtain(); + msg.what = Constants.CONTINUE_DOWNLOAD_TASK; + msg.obj = downloadEntry.getUrl(); + DownloadManager.getInstance(context).put(downloadEntry.getUrl(), + System.currentTimeMillis()); + DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000); + } else if ("安装".equals(str)) { + final String path = downloadEntry.getPath(); + PackageManager manager = new PackageManager( + context); + if (manager.launchSetup(path)) { + startActivity(PackageUtils.getInstallIntent(path)); + } else { + DialogUtils.showPluginDialog(this, new DialogUtils.ConfiremListener() { + @Override + public void onConfirem() { + MainActivity.uninstallMap.put( + PackageUtils.getPackageNameByPath(NewGameDetailsActivity.this, path), path); + startActivity(PackageUtils.getUninstallIntent(NewGameDetailsActivity.this, + path)); + } + }, null); + } + } else if("等待".equals(str)){ + + } else { + statusMap.put(downloadEntry.getUrl(), "pause"); + tvPer.setText("继续"); + Message msg = Message.obtain(); + msg.what = Constants.PAUSE_DOWNLOAD_TASK; + msg.obj = downloadEntry.getUrl(); + DownloadManager.getInstance(context).put(downloadEntry.getUrl(), + System.currentTimeMillis()); + DownloadManager.getInstance(context).sendMessageDelayed(msg, 1000); + } + break; + case R.id.reuse_no_connection: + noConnection.setVisibility(View.GONE); + llLoading.setVisibility(View.VISIBLE); + handler.postDelayed(new Runnable() { + @Override + public void run() { + getGameNews(); + getGameDetail(); + } + },1000); + } + } + private void invalidate() { + progressBar.setProgress((int) (downloadEntry.getPercent() * 10)); + switch (downloadEntry.getStatus()) { + case downloading: + tvPer.setText(downloadEntry.getPercent() + "%"); + break; + case pause: + case timeout: + case neterror: + tvPer.setText("继续"); + break; + case waiting: + tvPer.setText("等待"); + break; + case done: + EventBus.getDefault().post( + new EBPutUrl(gameEntity.getApk().get(0).getPackageName(), + downloadEntry.getUrl())); + tvPer.setText("安装"); + break; + case cancel: + case hijack: + tvDowload.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.GONE); + tvPer.setVisibility(View.GONE); + if (TextUtils.isEmpty(entity.getDownloadAddWord())) { + tvDowload.setText("下载《" + gameEntity.getName() + "》"); + } else { + tvDowload.setText("下载《" + gameEntity.getName() + "》" + + entity.getDownloadAddWord()); + } + break; + default: + break; + } + } + + private void initDowload() { + if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty()) { + tvDowload.setText("暂无下载"); + tvDowload + .setBackgroundResource(R.drawable.textview_gray_style); + tvDowload.setTextColor(0xFF999999); + tvDowload.setClickable(false); + } else { + boolean isInstalled = false; + if (gameEntity.getApk() != null + && gameEntity.getApk().size() == 1 + && PackageManager.isInstalled(gameEntity.getApk().get(0) + .getPackageName())) { + isInstalled = true; + } + tvDowload.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.GONE); + tvPer.setVisibility(View.GONE); + if (isInstalled) { + if (TextUtils.isEmpty(gameEntity.getDownloadAddWord())) { + tvDowload.setText("启动《" + gameEntity.getName() + + "》"); + } else { + tvDowload.setText("启动《" + gameEntity.getName() + + "》" + gameEntity.getDownloadAddWord()); + } + } else { + if (TextUtils.isEmpty(gameEntity.getDownloadAddWord())) { + tvDowload.setText("下载《" + gameEntity.getName() + + "》"); + } else { + tvDowload.setText("下载《" + gameEntity.getName() + + "》" + gameEntity.getDownloadAddWord()); + } + } + } + } + private void download(View v) { + if (gameEntity.getApk().size() == 1) { + if (tvDowload.getText().toString() + .contains("启动")) { + + Map kv = new HashMap(); + kv.put("版本", gameEntity.getApk().get(0).getPlatform()); + DataUtils.onEvent(NewGameDetailsActivity.this, "游戏启动", + gameEntity.getName(), kv); + + PackageUtils.launchApplicationByPackageName( + context, gameEntity.getApk() + .get(0).getPackageName()); + } else { + ApkEntity apkEntity = gameEntity.getApk().get(0); + String msg = FileUtils.isCanDownload(apkEntity + .getSize()); + if (TextUtils.isEmpty(msg)) { + Map kv = new HashMap(); + kv.put("版本", apkEntity.getPlatform()); + kv.put("状态", "下载开始"); + DataUtils.onEvent(NewGameDetailsActivity.this, + "游戏下载", gameEntity.getName(), kv); + + Map kv2 = new HashMap(); + kv2.put("版本", apkEntity.getPlatform()); + kv2.put("状态", "下载开始"); + kv2.put("位置", entrance + "-游戏详情-开始"); + DataUtils.onEvent(NewGameDetailsActivity.this, + "游戏下载位置", gameEntity.getName(), kv2); + + Map kv3 = new HashMap(); + kv3.put(entrance, "下载数"); + kv3.put(entrance, "下载开始"); + DataUtils.onEvent(NewGameDetailsActivity.this, + "应用数据", gameEntity.getName(), kv3); + + Map map = new HashMap(); + map.put("game", gameEntity.getName()); + map.put("method", "正常"); + map.put("platform", + PlatformUtils.getInstance( + context) + .getPlatformName( + gameEntity.getApk().get(0) + .getPlatform())); + map.put("status", "开始"); + map.put("location", "游戏详情:" + gameEntity.getName()); + map.put("from", entrance); + map.put("network", + NetworkUtils.getConnectedType(this)); + map.put("createdOn", + System.currentTimeMillis() / 1000); + DataCollectionManager.onEvent(this, "download", map); + + DownloadEntry entry = new DownloadEntry(); + + entry.setUrl(apkEntity.getUrl()); + entry.setName(gameEntity.getName()); + entry.setPath(FileUtils.getDownloadPath( + NewGameDetailsActivity.this, + MD5Utils.getContentMD5(gameEntity.getName() + + "_" + + System.currentTimeMillis()) + + ".apk")); + HashMap meta = new HashMap(); + meta.put("ETag", apkEntity.getEtag()); + meta.put("icon", gameEntity.getIcon()); + meta.put("platform", apkEntity.getPlatform()); + meta.put("gameId", gameEntity.getId()); + meta.put("entrance", entrance + "-游戏详情"); + meta.put("location", "游戏详情:" + gameEntity.getName()); + entry.setMeta(meta); + + DownloadManager.getInstance( + context).add(entry); + + EventBus.getDefault().post(new EBRedDot(1)); + + tvDowload.setVisibility(View.GONE); + progressBar.setVisibility(View.VISIBLE); + tvPer.setVisibility(View.VISIBLE); + progressBar.setProgress(0); + tvPer.setText("0.0%"); + + statusMap.put(entry.getUrl(), "downloading"); + + } else { + toast(msg); + } + } + } else { + if (!dismissEntity.isShow()) { + dismissEntity.setShow(true); + DownloadDialog + .getInstance(NewGameDetailsActivity.this) + .showPopupWindow(v, gameEntity, + entrance + "-游戏详情", statusMap, + "游戏详情:" + gameEntity.getName()); + } + } + } + + private void getGameNews() { + String url = Config.HOST + "v1d45/game/" + gameId + "/news?limit=3"; + JsonArrayExtendedRequest request = new JsonArrayExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + Utils.log(response.toString()); + Gson gson = new Gson(); + ArrayList news = gson.fromJson( + response.toString(), + new TypeToken>() { + }.getType()); + entity.setNews(news); + llLoading.setVisibility(View.GONE); + detailsAdapter.notifyDataSetChanged(); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + // 无网络连接和访问超时 + if (error.getClass().equals(NoConnectionError.class) + || error.getClass().equals(TimeoutError.class)) { + llLoading.setVisibility(View.GONE); + } + } + }); + AppController.addToRequestQueue(request, NewGameDetailsActivity.class); + } + + private void getGameDetail() { + String url = Config.HOST + "v2d0/game/" + gameId + "/detail"; + JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(url, + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + + Utils.log(response.toString()); + Gson gson = new Gson(); + GameDetailsEntity gameDetailsEntity = gson + .fromJson(response.toString(), + GameDetailsEntity.class); + if (entity.getNews() != null) { + gameDetailsEntity.setNews(entity.getNews()); + } + entity = gameDetailsEntity; + HashMap> map = new HashMap>(); + if (!response.isNull("news_type")) { + try { + JSONArray newsType = response + .getJSONArray("news_type"); + for (int i = 0, size = newsType.length(); i < size; i++) { + JSONObject jsonObject = newsType + .getJSONObject(i); + JSONArray subType = jsonObject + .getJSONArray("sub_type"); + ArrayList list = new ArrayList(); + for (int j = 0; j < subType.length(); j++) { + list.add(subType.getString(j)); + } + map.put(jsonObject.getString("type"), + list); + } + } catch (JSONException e) { + + e.printStackTrace(); + } + } + for (String type : map.keySet()) { + EventBus.getDefault().post( + new EBNewsType(type, map.get(type))); + } + llLoading.setVisibility(View.GONE); + noConnection.setVisibility(View.GONE); + detailsAdapter.notifyDataSetChanged(); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + noConnection.setVisibility(View.VISIBLE); + // 无网络连接和访问超时 + } + }); + AppController.addToRequestQueue(request, NewGameDetailsActivity.class); + } + public void onEventMainThread(EBPWDismiss dismiss) { + if (dismissEntity != null) { + dismissEntity.setShow(false); + } + } + + @Override + protected void onResume() { + super.onResume(); + if (gameEntity != null && gameEntity.getApk().size() == 1) { + if (PackageManager.isInstalled(gameEntity.getApk().get(0) + .getPackageName())) { + tvDowload.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.GONE); + tvPer.setVisibility(View.GONE); + tvDowload.setText("启动《" + gameEntity.getName() + "》"); + if (TextUtils.isEmpty(entity.getDownloadAddWord())) { + tvDowload.setText("启动《" + gameEntity.getName() + + "》"); + } else { + tvDowload.setText("启动《" + gameEntity.getName() + + "》" + gameEntity.getDownloadAddWord()); + } + } else { + String url = gameEntity.getApk().get(0).getUrl(); + for (DownloadEntry entry : DownloadManager.getInstance( + context).getAll()) { + if (url.equals(entry.getUrl())) { + downloadEntry = entry; + tvDowload.setVisibility(View.GONE); + progressBar.setVisibility(View.VISIBLE); + tvPer.setVisibility(View.VISIBLE); + invalidate(); + break; + } + } + } + } + DownloadManager.getInstance(context).addObserver( + dataWatcher); + } + @Override + protected void onDestroy() { + super.onDestroy(); + String uuid = ConcernUtils.UUID(this); + if (isConcern == true&&concernCode ==2){ + //取消关注 + ConcernUtils.DeleteConcernData(Config.HOST + "v2d0/device/" + uuid + "/concern/" + gameId, new ConcernUtils.DownJsonListener() { + @Override + public void downSucced(String str) { + Utils.log("删除提交成功==游戏详情"); + } + + @Override + public void downFailed() { + Utils.log("删除提交失败==游戏详情"); + } + }); + + }else if (isConcern == false&& concernCode == 1){ + //添加关注 + ConcernUtils.PostConcernGameId("[" + gameId + "]", Config.HOST + "v2d0/device/" + uuid + "/concern", new ConcernUtils.DownJsonListener() { + @Override + public void downSucced(String str) { + Utils.log("关注提交成功==游戏详情"); + } + + @Override + public void downFailed() { + Utils.log("关注提交失败==游戏详情"); + } + }); + }else { + Utils.log("无关注操作==游戏详情"); + } + gameId = null; + entrance = null; + detailsAdapter = null; + context = null; + detailsRecyclerView = null; + llLoading = null; + noConnection = null; + entity = null; + gameEntity = null; + tvDowload = null; + tvPer = null; + progressBar = null; + statusMap = null; + dismissEntity = null; + downloadEntry = null; + concernManager = null; + handler = null; + } + + + public class GameDetailsAdapter extends RecyclerView.Adapter{ + private Context context; + + public GameDetailsAdapter(Context context) { + this.context = context; + getGameDetail(); + getGameNews(); + } + @Override + public int getItemViewType(int position){ + if (position == 0){ + + return 0; + } + else if (entity.getTag()!=null && entity.getTag().size()>0&&position == 1){ + return 1; + }else if (entity.getNews()!=null && entity.getNews().size()>0&&(position == 1||entity.getTag()!=null&&entity.getTag().size()>0&&position == 2)){ + return 2; + }else if (entity.getGallery()!=null && entity.getGallery().size()>0){ + return 3; + } + else { + return super.getItemViewType(position); + } + + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view ; + switch (viewType){ + case 0: + view = LayoutInflater.from(context).inflate(R.layout.gamedetails_rv_item_top,parent,false); + return new TopViewHolder(view); + case 1: + view = LayoutInflater.from(context).inflate(R.layout.gamedetails_rv_item_plugin,parent,false); + return new PluginViewHolder(view); + case 2: + view = LayoutInflater.from(context).inflate(R.layout.gamedetails_rv_item_zixun,parent,false); + return new ZiXunViewHolder(view); + case 3: + view = LayoutInflater.from(context).inflate(R.layout.gamedetails_rv_item_game,parent,false); + return new GameViewHolder(view); + default: + return null; + } + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + if (holder instanceof TopViewHolder){ + TopViewHolder topViewHolder = (TopViewHolder) holder; + initTopViewHolder(topViewHolder); + } else if (holder instanceof PluginViewHolder){ + PluginViewHolder pluginViewHolder = (PluginViewHolder) holder; + initPluginViewHolder(pluginViewHolder); + } else if (holder instanceof ZiXunViewHolder){ + ZiXunViewHolder ziXunViewHolder = (ZiXunViewHolder) holder; + initZiXunViewHolder(ziXunViewHolder); + } else if (holder instanceof GameViewHolder){ + GameViewHolder gameViewHolder = (GameViewHolder) holder; + initGameViewHolder(gameViewHolder); + } + } + + private void initGameViewHolder(GameViewHolder gameViewHolder) { + gameViewHolder.gamepic_rv.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false)); + gameViewHolder.gamepic_rv.setAdapter(new GamePicAdapter()); + gameViewHolder.gamepic_rv.addItemDecoration(new HorizontalItemDecoration( + context, 1, entity.getGallery().size())); + gameViewHolder.game_content.setText(entity.getDes()); + + } + + private void initZiXunViewHolder(ZiXunViewHolder ziXunViewHolder) { + LinearLayout llContainer = ziXunViewHolder.llContainer; + int childCount = llContainer.getChildCount(); + if (entity.getNews().size()<3){ + ziXunViewHolder.llMore.setVisibility(View.GONE); + }else if (entity.getNews().size()==0){ + ziXunViewHolder.view.setVisibility(View.GONE); + } + if ( childCount == 0){ + for (int i =0;i kv = new HashMap(); + kv.put("状态", "关注"); + DataUtils.onEvent(NewGameDetailsActivity.this, "游戏关注", gameEntity.getName(), kv); + + Map kv2 = new HashMap(); + kv2.put("点击", "关注"); + DataUtils.onEvent(NewGameDetailsActivity.this, "插件数据", gameEntity.getName(), kv2); + + Map map = new HashMap(); + map.put("game", gameEntity.getName()); + map.put("type", "关注"); + map.put("createdOn", System.currentTimeMillis() / 1000); + DataCollectionManager.onEvent(NewGameDetailsActivity.this, "concern", map); + concernCode = 1; + concernManager.addByEntity(gameEntity); + topViewHolder.tv_concern.setText("取消关注"); + topViewHolder.tv_concern.setBackgroundResource(R.drawable.border_red_bg); + topViewHolder.tv_concern.setTextColor(0xffbc2132); + Toast.makeText(context,"关注成功",Toast.LENGTH_SHORT).show(); + } else { + Map kv2 = new HashMap(); + kv2.put("点击", "取消关注"); + DataUtils.onEvent(NewGameDetailsActivity.this, "插件数据", gameEntity.getName(), kv2); + + showCancelDialog(topViewHolder.tv_concern); + } + } + }); + + } + private void showCancelDialog(final TextView attention) { + final Dialog dialog = new Dialog(context); + View view = View.inflate(context, R.layout.common_alertdialog, + null); + TextView title = (TextView) view.findViewById(R.id.alertdialog_title); + title.setText("取消关注"); + TextView cancel = (TextView) view.findViewById(R.id.alertdialog_cannel); + cancel.setText("暂不取消"); + TextView confirm = (TextView) view.findViewById(R.id.alertdialog_confirm); + confirm.setText("确定取消"); + cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + TextView message = (TextView) view.findViewById(R.id.alertdialog_content); + + Spanned content = Html + .fromHtml("取消关注游戏后,您将无法及时收到游戏的攻略资讯等最新动态提醒,您确定取消吗?"); + message.setText(content); + + view.findViewById(R.id.alertdialog_confirm).setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + + Map kv = new HashMap(); + kv.put("状态", "取消关注"); + DataUtils.onEvent(NewGameDetailsActivity.this, "游戏关注", + gameEntity.getName(), kv); + + Map map = new HashMap(); + map.put("game", gameEntity.getName()); + map.put("type", "关注"); + map.put("createdOn", System.currentTimeMillis() / 1000); + DataCollectionManager.onEvent(NewGameDetailsActivity.this, + "concern", map); + + concernCode = 2; + concernManager.deleteConcern(gameEntity.getId()); + dialog.dismiss(); + attention.setText("关注"); + attention + .setBackgroundResource(R.drawable.textview_red_style); + attention.setTextColor(0xffffffff); + } + }); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(view); + dialog.show(); + } + + @Override + public int getItemCount() { + int index = 1 ; + if (entity.getTag()!=null && entity.getTag().size()>0){ + index++; + } + if (entity.getNews()!=null && entity.getNews().size()>0){ + index++; + } + if (entity.getGallery()!=null && entity.getGallery().size()>0){ + index++; + } + return index; + } + public class TopViewHolder extends ViewHolder{ + View view; + TextView tv_name,tv_info,tv_concern; + ImageView iv_game; + public TopViewHolder(View itemView) { + super(itemView); + view = itemView; + tv_name = (TextView) view.findViewById(R.id.gamedetails_game_name); + tv_concern = (TextView) view.findViewById(R.id.gamedetails_concern_btn); + tv_info = (TextView) view.findViewById(R.id.gamedetails_top_tv_info); + iv_game = (ImageView) view.findViewById(R.id.gamedetails_game_thumb); + if (isConcern) { + tv_concern.setText("取消关注"); + tv_concern.setBackgroundResource(R.drawable.border_red_bg); + tv_concern.setTextColor(0xffbc2132); + } else { + tv_concern.setText("关注"); + tv_concern.setBackgroundResource(R.drawable.textview_red_style); + tv_concern.setTextColor(0xffffffff); + } + } + } + public class PluginViewHolder extends ViewHolder{ + View view; + LinearLayout llContainer; + public PluginViewHolder(View itemView) { + super(itemView); + view = itemView; + llContainer = (LinearLayout) view.findViewById(R.id.gamedetails_rv_item_plugin_ll); + } + } + public class ZiXunViewHolder extends ViewHolder{ + View view; + LinearLayout llContainer; + LinearLayout llMore; + public ZiXunViewHolder(View itemView) { + super(itemView); + view = itemView; + llContainer = (LinearLayout) view.findViewById(R.id.gamedetails_rv_item_zixun_ll); + llMore = (LinearLayout) view.findViewById(R.id.gamedetails_rv_item_zixun_more); + } + } + public class GameViewHolder extends ViewHolder{ + View view; + RecyclerView gamepic_rv; + TextView game_content; + + public GameViewHolder(View itemView) { + super(itemView); + view = itemView; + gamepic_rv = (RecyclerView) view.findViewById(R.id.gamedetails_rv_item_game_rv); + game_content = (TextView) view.findViewById(R.id.gamedetails_rv_item_game_content); + } + } + + public class ViewHolder extends RecyclerView.ViewHolder{ + public ViewHolder(View itemView) { + super(itemView); + } + } + } + public class GamePicAdapter extends RecyclerView.Adapter{ + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View inflate = LayoutInflater.from(context).inflate(R.layout.gamedetails_screenshot_item, parent, false); + return new ViewHolder(inflate); + } + + @Override + public void onBindViewHolder(ViewHolder holder, final int position) { + holder.gamepic_iv.setImageResource(R.drawable.me_icon); + holder.gamepic_iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE); + ImageUtils.getInstance(context).display(entity.getGallery().get(position),holder.gamepic_iv); + holder.view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(NewGameDetailsActivity.this,ViewImageActivity.class); + intent.putExtra("urls",entity.getGallery()); + intent.putExtra("currentItem",position); + startActivity(intent); + } + }); + + } + + @Override + public int getItemCount() { + return 5; + } + + public class ViewHolder extends RecyclerView.ViewHolder { + View view; + ImageView gamepic_iv; + public ViewHolder(View itemView) { + super(itemView); + view = itemView; + gamepic_iv = (ImageView) view.findViewById(R.id.screenshot_item_iv); + gamepic_iv.setPadding((int)(context.getResources().getDisplayMetrics().density*2),0,(int)(context.getResources().getDisplayMetrics().density*2),0); + } + } + } +} diff --git a/app/src/main/java/com/gh/gamecenter/SettingActivity.java b/app/src/main/java/com/gh/gamecenter/SettingActivity.java index 0d743ab522..8cf3c839b8 100644 --- a/app/src/main/java/com/gh/gamecenter/SettingActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SettingActivity.java @@ -2,6 +2,7 @@ package com.gh.gamecenter; import android.app.Activity; import android.app.Dialog; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; @@ -73,6 +74,8 @@ public class SettingActivity extends BaseActivity implements OnClickListener { private int checkSizeIndex; + private Context context = this; + private DataWatcher dataWatcher = new DataWatcher() { @Override @@ -229,8 +232,31 @@ public class SettingActivity extends BaseActivity implements OnClickListener { checkUpdate(); break; case R.id.setting_rl_cache: - dialog = DialogUtils.showWaitDialog(this, "清除缓存中..."); - claerCache(); + final Dialog dialog_hint = new Dialog(this); + View view = View.inflate(this, R.layout.common_alertdialog, null); + TextView dialog_title = (TextView) view.findViewById(R.id.alertdialog_title); + TextView dialog_content = (TextView) view.findViewById(R.id.alertdialog_content); + dialog_content.setText("清空缓存后未安装的游戏可能需要重新下载,确定清空?"); + dialog_title.setText("清除缓存"); + view.findViewById(R.id.alertdialog_cannel) + .setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + dialog_hint.dismiss(); + } + }); + view.findViewById(R.id.alertdialog_confirm) + .setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + dialog_hint.dismiss(); + dialog = DialogUtils.showWaitDialog(context, "清除缓存中..."); + claerCache(); + } + }); + dialog_hint.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog_hint.setContentView(view); + dialog_hint.show(); break; case R.id.setting_rl_feedback: startActivity(new Intent(SettingActivity.this, diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java index d8df5b2ff5..278e1e8762 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java @@ -131,18 +131,18 @@ public class SuggestionActivity extends BaseActivity implements OnClickListener // 弹出确认对话框 private void showConfirmDialog(final String email) { final Dialog confirmDialog = new Dialog(this); - View view = View.inflate(this, R.layout.search_history_delete_dialog, + View view = View.inflate(this, R.layout.common_alertdialog, null); - TextView title = (TextView) view.findViewById(R.id.delete_dialog_title); + TextView title = (TextView) view.findViewById(R.id.alertdialog_title); title.setText("温馨提示"); TextView content = (TextView) view - .findViewById(R.id.delete_dialog_message); + .findViewById(R.id.alertdialog_content); content.setText("填写联系方式有助于我们更好的一对一地解决您的问题,确定不填写吗?"); TextView cancel = (TextView) view - .findViewById(R.id.delete_dialog_cancel); - cancel.setText("填写"); + .findViewById(R.id.alertdialog_cannel); + cancel.setText("我要填写"); cancel.setTextColor(0xffFFFFFF); cancel.setBackgroundResource(R.drawable.textview_blue_style); cancel.setOnClickListener(new OnClickListener() { @@ -167,8 +167,8 @@ public class SuggestionActivity extends BaseActivity implements OnClickListener } }); TextView confirm = (TextView) view - .findViewById(R.id.delete_dialog_confirm); - confirm.setText("提交"); + .findViewById(R.id.alertdialog_confirm); + confirm.setText("直接提交"); confirm.setTextColor(0xff999999); confirm.setBackgroundResource(R.drawable.textview_cancel_style); confirm.setOnClickListener(new OnClickListener() { diff --git a/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java index 1a1ee66e1c..9f7b3e54d2 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/news/News1FragmentAdapter.java @@ -1,6 +1,7 @@ package com.gh.gamecenter.news; import android.content.Context; +import android.graphics.Color; import android.support.v4.util.ArrayMap; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.RecyclerView; @@ -281,12 +282,12 @@ public class News1FragmentAdapter extends RecyclerView.Adapter{ + private String url; + + public ConcernJsonArrayExtendedRequest(int method, String url, + JSONArray jsonRequest, Response.Listener listener, + Response.ErrorListener errorListener) { + super(method, url, (jsonRequest == null) ? null : jsonRequest + .toString(), listener, errorListener); + this.url = url; + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + Utils.log(url + " = " + response.statusCode); + return Response.success(new JSONArray(), HttpHeaderParser.parseCacheHeaders(response)); + } +} diff --git a/app/src/main/res/drawable-hdpi/gamedetails_hint.png b/app/src/main/res/drawable-hdpi/gamedetails_hint.png new file mode 100644 index 0000000000..2c35ce14c4 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/gamedetails_hint.png differ diff --git a/app/src/main/res/layout/activity_new_gamedetails.xml b/app/src/main/res/layout/activity_new_gamedetails.xml new file mode 100644 index 0000000000..60e3f6e4d0 --- /dev/null +++ b/app/src/main/res/layout/activity_new_gamedetails.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/common_alertdialog.xml b/app/src/main/res/layout/common_alertdialog.xml new file mode 100644 index 0000000000..17cc2b94bf --- /dev/null +++ b/app/src/main/res/layout/common_alertdialog.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_font_size.xml b/app/src/main/res/layout/dialog_font_size.xml index 8101bd9667..10ddc39b93 100644 --- a/app/src/main/res/layout/dialog_font_size.xml +++ b/app/src/main/res/layout/dialog_font_size.xml @@ -3,83 +3,100 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" - android:background="@drawable/border_white_bg" - android:padding="10dp"> + android:background="#fff"> + android:textSize="18sp" + android:textStyle="bold" + android:gravity="center_vertical" + android:paddingLeft="20dp" + android:textColor="#3a3a3a"/> + + android:paddingLeft="15dp" + android:layout_marginTop="10dp" + android:layout_marginBottom="20dp"> + android:text="小字号" + android:textSize="12sp"/> + android:text="中字号" + android:textSize="15sp" + android:layout_marginTop="3dp"/> + android:text="大字号" + android:textSize="18sp" + android:layout_marginTop="5dp"/> + android:text="特大字号" + android:textSize="21sp" + android:layout_marginTop="7dp"/> - - + + + android:orientation="horizontal"> + - + + \ No newline at end of file diff --git a/app/src/main/res/layout/fm_read2_special1.xml b/app/src/main/res/layout/fm_read2_special1.xml index e7dfc505c3..786844c910 100644 --- a/app/src/main/res/layout/fm_read2_special1.xml +++ b/app/src/main/res/layout/fm_read2_special1.xml @@ -1,62 +1,79 @@ - + android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/cardview_mar_left" + android:layout_marginRight="@dimen/cardview_mar_left" + android:clickable="true" + android:foreground="?android:attr/selectableItemBackground" + app:cardCornerRadius="0dp" + app:cardElevation="1dp" + app:cardUseCompatPadding="true" + app:contentPaddingBottom="15dp" + app:contentPaddingLeft="12dp" + app:contentPaddingRight="12dp" + app:contentPaddingTop="15dp"> - - - - - - - + android:layout_height="match_parent"> + + + + + android:layout_below="@id/fm_read2_special1_thumb" + android:layout_marginTop="8dp" + android:gravity="center_vertical" + android:orientation="horizontal"> - + - + - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fm_read2_special2.xml b/app/src/main/res/layout/fm_read2_special2.xml index 5665e692e7..dd72a701b5 100644 --- a/app/src/main/res/layout/fm_read2_special2.xml +++ b/app/src/main/res/layout/fm_read2_special2.xml @@ -1,81 +1,99 @@ - + android:layout_marginLeft="@dimen/cardview_mar_left" + android:layout_marginRight="@dimen/cardview_mar_left" + android:clickable="true" + android:foreground="?android:attr/selectableItemBackground" + app:cardCornerRadius="0dp" + app:cardElevation="1dp" + app:cardUseCompatPadding="true" + app:contentPaddingBottom="15dp" + app:contentPaddingLeft="12dp" + app:contentPaddingRight="12dp" + app:contentPaddingTop="15dp"> - - - - - - - - - - - - - - - + android:layout_height="wrap_content"> + + + + + + + + + + + + + android:layout_below="@id/fm_read2_special2_ll_thumb" + android:layout_marginTop="8dp" + android:gravity="center_vertical" + android:orientation="horizontal"> - + - + - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fm_read_item.xml b/app/src/main/res/layout/fm_read_item.xml index cfc5b4c2b3..b72d63e815 100644 --- a/app/src/main/res/layout/fm_read_item.xml +++ b/app/src/main/res/layout/fm_read_item.xml @@ -1,66 +1,79 @@ - + android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/cardview_mar_left" + android:layout_marginRight="@dimen/cardview_mar_left" + android:clickable="true" + android:foreground="?android:attr/selectableItemBackground" + app:cardCornerRadius="0dp" + app:cardElevation="1dp" + app:cardUseCompatPadding="true" + app:contentPaddingLeft="12dp" + app:contentPaddingRight="12dp" + app:contentPaddingTop="15dp" + app:contentPaddingBottom="15dp"> - - - - - + android:layout_height="match_parent"> + android:id="@+id/fm_read_iv_thumb" + android:layout_width="82dp" + android:layout_height="62dp" + android:layout_marginRight="11dp" /> + + + android:layout_alignParentBottom="true" + android:layout_below="@id/fm_read_tv_title" + android:layout_toRightOf="@id/fm_read_iv_thumb" + android:gravity="center_vertical" + android:orientation="horizontal"> - + - + - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetails_plugin_item.xml b/app/src/main/res/layout/gamedetails_plugin_item.xml new file mode 100644 index 0000000000..524efa5f1a --- /dev/null +++ b/app/src/main/res/layout/gamedetails_plugin_item.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetails_rv_item_game.xml b/app/src/main/res/layout/gamedetails_rv_item_game.xml new file mode 100644 index 0000000000..7d33bb22bc --- /dev/null +++ b/app/src/main/res/layout/gamedetails_rv_item_game.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetails_rv_item_plugin.xml b/app/src/main/res/layout/gamedetails_rv_item_plugin.xml new file mode 100644 index 0000000000..572375dd2d --- /dev/null +++ b/app/src/main/res/layout/gamedetails_rv_item_plugin.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetails_rv_item_top.xml b/app/src/main/res/layout/gamedetails_rv_item_top.xml new file mode 100644 index 0000000000..1d4d153c00 --- /dev/null +++ b/app/src/main/res/layout/gamedetails_rv_item_top.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetails_rv_item_zixun.xml b/app/src/main/res/layout/gamedetails_rv_item_zixun.xml new file mode 100644 index 0000000000..2c2f0dbd2f --- /dev/null +++ b/app/src/main/res/layout/gamedetails_rv_item_zixun.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file