diff --git a/app/src/main/java/com/gh/base/fragment/BaseFragment.java b/app/src/main/java/com/gh/base/fragment/BaseFragment.java index 1b37cec8e9..3e71855a06 100644 --- a/app/src/main/java/com/gh/base/fragment/BaseFragment.java +++ b/app/src/main/java/com/gh/base/fragment/BaseFragment.java @@ -9,6 +9,14 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; +import androidx.recyclerview.widget.RecyclerView; + import com.gh.base.OnListClickListener; import com.gh.base.OnRequestCallBackListener; import com.gh.common.constant.Constants; @@ -29,13 +37,6 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; -import androidx.annotation.LayoutRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.StringRes; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentTransaction; -import androidx.recyclerview.widget.RecyclerView; import butterknife.ButterKnife; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -210,6 +211,13 @@ public abstract class BaseFragment extends Fragment implements OnRequestCallB return mCachedView; } + @Override + public void onDestroyView() { + super.onDestroyView(); + + mCachedView = null; + } + @Override public void onResume() { super.onResume(); diff --git a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt index 61c0ec5ac5..b9d374947f 100644 --- a/app/src/main/java/com/gh/common/DefaultUrlHandler.kt +++ b/app/src/main/java/com/gh/common/DefaultUrlHandler.kt @@ -214,6 +214,10 @@ object DefaultUrlHandler { DirectUtils.directToQaCollection(context, name, id) } + EntranceUtils.HOST_GAME_UPLOAD -> { + DirectUtils.directGameUpload(context,entrance = entrance, path = "") + } + else -> DialogUtils.showLowVersionDialog(context) } return true diff --git a/app/src/main/java/com/gh/common/util/DirectUtils.kt b/app/src/main/java/com/gh/common/util/DirectUtils.kt index e979a61e9c..ff8fda2e6a 100644 --- a/app/src/main/java/com/gh/common/util/DirectUtils.kt +++ b/app/src/main/java/com/gh/common/util/DirectUtils.kt @@ -219,7 +219,7 @@ object DirectUtils { "game_detail_comment" -> GameDetailActivity.startGameDetailCommentActivity(context, linkEntity.link ?: "", "") - "game_upload" -> context.startActivity(GameSubmissionActivity.getIntent(context, entrance, path)) + "game_upload" -> directGameUpload(context, entrance, path) //"h5_game_center" -> directLetoGameCenter(context) @@ -755,4 +755,16 @@ object DirectUtils { bundle.putString(KEY_TO, GameServersActivity::class.java.name) jumpActivity(context, bundle) } + + /** + * 跳转到游戏上传 + */ + @JvmStatic + fun directGameUpload(context: Context, entrance: String? = null, path: String? = "") { + val bundle = Bundle() + bundle.putString(KEY_TO, GameSubmissionActivity::class.java.name) + bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER) + bundle.putString(KEY_PATH, path) + jumpActivity(context, bundle) + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/common/util/EntranceUtils.java b/app/src/main/java/com/gh/common/util/EntranceUtils.java index 2bb34f7cef..da79d289bc 100644 --- a/app/src/main/java/com/gh/common/util/EntranceUtils.java +++ b/app/src/main/java/com/gh/common/util/EntranceUtils.java @@ -46,6 +46,7 @@ public class EntranceUtils { public static final String HOST_AMWAY_BLOCK = "amway";//安利墙板块 public static final String HOST_HELP = "help";//Q&A public static final String HOST_HELP_COLLECTION = "help_collection";//Q&A合集 + public static final String HOST_GAME_UPLOAD = "game_upload";//游戏上传 public static final String HOST_COMMUNITY_ARTICLE = "community_article"; public static final String HOST_COMMUNITY_COLUMN = "community_column"; public static final String HOST_GAME = "game"; diff --git a/app/src/main/java/com/gh/gamecenter/SkipActivity.java b/app/src/main/java/com/gh/gamecenter/SkipActivity.java index 10b9bf57aa..61c9754d02 100644 --- a/app/src/main/java/com/gh/gamecenter/SkipActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SkipActivity.java @@ -292,6 +292,9 @@ public class SkipActivity extends BaseActivity { name = uri.getQueryParameter("name"); DirectUtils.directToQaCollection(this, name, path); break; + case EntranceUtils.HOST_GAME_UPLOAD: + DirectUtils.directGameUpload(this, ENTRANCE_BROWSER, "浏览器"); + break; default: EntranceUtils.jumpActivity(this, new Bundle()); // 跳转至首页 diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java index 955e216777..dc533d0b9e 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java @@ -47,6 +47,7 @@ import com.gh.common.util.NetworkUtils; import com.gh.common.util.PackageUtils; import com.gh.common.util.ShareUtils; import com.gh.common.util.TextHelper; +import com.gh.common.util.ToastUtils; import com.gh.common.util.UploadImageUtils; import com.gh.common.util.UrlFilterUtils; import com.gh.common.view.FixLinearLayoutManager; @@ -489,7 +490,7 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, MEDIA_STORE_CREDENTIALS_REQUEST); } - }); + }, null); mCredentialsAdapter.setPicItem(R.layout.game_upload_pic_item); mCredentialsAdapter.setSuggestAddPicIcon(R.drawable.icon_pic_add); mCredentialsPhotoRv.setLayoutManager(new GridLayoutManager(this, 5) { @@ -506,7 +507,7 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, MEDIA_STORE_SCREENSHOT_REQUEST); } - }); + }, null); mScreenshotAdapter.setPicItem(R.layout.game_upload_pic_item); mScreenshotAdapter.setSuggestAddPicIcon(R.drawable.icon_pic_add); mInfringementAppScreenshotRv.setLayoutManager(new GridLayoutManager(this, 5) { @@ -777,39 +778,39 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall mTypeOtherName.requestFocus(); break; case R.id.lookDetailDesTv: - startActivity(WebActivity.getUploadPolicyIntent(this)); + startActivity(WebActivity.getCopyrighyRulesIntent(this)); break; } } private boolean checkCopyrightData() { if (TextUtils.isEmpty(mSuggestIdentity)) { - toast("请先选择版权方身份"); + ToastUtils.INSTANCE.showToast("请先选择版权方身份"); return false; } else { if (TextUtils.isEmpty(mCredentialsCodeEt.getText().toString())) { - toast(mSuggestIdentity.equals("person") ? "请填写身份证号或护照号等" : "请填写公司营业执照或组织代码等"); + ToastUtils.INSTANCE.showToast(mSuggestIdentity.equals("person") ? "请填写身份证号或护照号等" : "请填写公司营业执照或组织代码等"); return false; } } if (mCredentialsAdapter.getFileList().size() == 0) { - toast("请先添加版权证明文件"); + ToastUtils.INSTANCE.showToast("请先添加版权证明文件"); return false; } if (TextUtils.isEmpty(mAppNameEt.getText().toString())) { - toast("请先填写侵权的应用名字"); + ToastUtils.INSTANCE.showToast("请先填写侵权的应用名字"); return false; } if (mScreenshotAdapter.getFileList().size() == 0) { - toast("请先添加侵权应用截图"); + ToastUtils.INSTANCE.showToast("请先添加侵权应用截图"); return false; } if (TextUtils.isEmpty(mExplanationEt.getText().toString())) { - toast("请先填写说明"); + ToastUtils.INSTANCE.showToast("请先填写说明"); return false; } if (TextUtils.isEmpty(mContactMethodEt.getText().toString())) { - toast("请先填写联系方式"); + ToastUtils.INSTANCE.showToast("请先填写联系方式"); return false; } return true; @@ -1293,9 +1294,9 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall !TextUtils.isEmpty(mAppNameEt.getText().toString()) || !TextUtils.isEmpty(mExplanationEt.getText().toString()) || !TextUtils.isEmpty(mContactMethodEt.getText().toString()) || - mCredentialsAdapter.getFileList().size() > 0 || - mScreenshotAdapter.getFileList().size() > 0 || - mAdapter.getFileList().size() > 0 || + (mCredentialsAdapter != null && mCredentialsAdapter.getFileList().size() > 0) || + (mScreenshotAdapter != null && mScreenshotAdapter.getFileList().size() > 0) || + (mAdapter != null && mAdapter.getFileList().size() > 0) || mFunctionType != -1) { DialogUtils.showAlertDialog(this, "提示", "确定放弃反馈吗?", "继续反馈", "放弃", diff --git a/app/src/main/java/com/gh/gamecenter/game/upload/GameResourcePolicyDialogFragment.kt b/app/src/main/java/com/gh/gamecenter/game/upload/GameResourcePolicyDialogFragment.kt index eb4ed49e8b..089066a648 100644 --- a/app/src/main/java/com/gh/gamecenter/game/upload/GameResourcePolicyDialogFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/game/upload/GameResourcePolicyDialogFragment.kt @@ -9,6 +9,8 @@ import android.webkit.* import android.widget.TextView import com.gh.base.fragment.BaseDialogFragment import com.gh.common.DefaultJsApi +import com.gh.common.util.MtaHelper +import com.gh.common.util.dip2px import com.gh.gamecenter.BuildConfig import com.gh.gamecenter.R import wendu.dsbridge.DWebView @@ -58,10 +60,12 @@ class GameResourcePolicyDialogFragment : BaseDialogFragment() { mVebView?.addJavascriptObject(DefaultJsApi(requireContext()), null) mVebView?.loadUrl(requireContext().getString(R.string.upload_game_policy_url)) containerView?.findViewById(R.id.refuseTv)?.setOnClickListener { + MtaHelper.onEvent("游戏上传", "开发者弹窗", "不同意") dismiss() requireActivity().finish() } containerView?.findViewById(R.id.agreeTv)?.setOnClickListener { + MtaHelper.onEvent("游戏上传", "开发者弹窗", "同意") dismiss() } } @@ -80,14 +84,14 @@ class GameResourcePolicyDialogFragment : BaseDialogFragment() { val window = createDialog.window window?.setGravity(Gravity.CENTER) - window?.setWindowAnimations(R.style.community_publication_animation) +// window?.setWindowAnimations(R.style.community_publication_animation) return createDialog } override fun onStart() { super.onStart() - val width = requireContext().resources.displayMetrics.widthPixels * 0.8 + val width = requireContext().resources.displayMetrics.widthPixels - 60F.dip2px() val height = ViewGroup.LayoutParams.WRAP_CONTENT - dialog?.window?.setLayout(width.toInt(), height) + dialog?.window?.setLayout(width, height) } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/game/upload/GameSubmissionActivity.kt b/app/src/main/java/com/gh/gamecenter/game/upload/GameSubmissionActivity.kt index cf06e19672..7518721ba9 100644 --- a/app/src/main/java/com/gh/gamecenter/game/upload/GameSubmissionActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/game/upload/GameSubmissionActivity.kt @@ -18,7 +18,10 @@ class GameSubmissionActivity : NormalActivity() { fun getIntent(context: Context, entrance: String, path: String): Intent { val bundle = Bundle() bundle.putString(EntranceUtils.KEY_ENTRANCE, BaseActivity.mergeEntranceAndPath(entrance, path)) - return getTargetIntent(context, AboutActivity::class.java, GameUploadFragment::class.java, bundle) + return getTargetIntent(context, GameSubmissionActivity::class.java, GameUploadFragment::class.java, bundle) } } + override fun provideNormalIntent(): Intent { + return getTargetIntent(this, GameSubmissionActivity::class.java, GameUploadFragment::class.java) + } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt b/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt index 17597f1278..e4a7629388 100644 --- a/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadFragment.kt @@ -71,12 +71,13 @@ class GameUploadFragment : NormalFragment() { val factory = GameUploadViewModel.Factory(HaloApp.getInstance().application) mViewModel = ViewModelProviders.of(this, factory).get(GameUploadViewModel::class.java) - mViewModel.upLoadSuccess.observe(this, Observer { + mViewModel.upLoadSuccess.observe(viewLifecycleOwner, Observer { if (it) { - toast("感谢您的分享") + ToastUtils.showToast("上传成功") + MtaHelper.onEvent("游戏上传", "游戏上传", "上传成功") mUploadDialog.dismiss() requireActivity().finish() - }else{ + } else { mUploadDialog.uploadFail() } }) @@ -92,38 +93,44 @@ class GameUploadFragment : NormalFragment() { tv_game_intro.text = getString(R.string.upload_game_intro).fromHtml() tv_screenshot.text = getString(R.string.upload_game_pic).fromHtml() - val remindText = " 请勿分享违法违规/色情暴力等资源,违反者光环有权进行下架和封号处理。" - remindTv.text = SpanBuilder(remindText).image(requireContext(), 0, 1, R.drawable.ic_game_upload_remind).build() + mViewModel.uploadGameTips.observe(viewLifecycleOwner, Observer { + remindTv.visibility = View.VISIBLE + val remindText = " $it" + remindTv.text = SpanBuilder(remindText).image(requireContext(), 0, 1, R.drawable.ic_game_upload_remind).build() + }) + mViewModel.getUploadGamesTips() rv_screenshot.apply { - layoutManager = object : GridLayoutManager(context, 5) { + layoutManager = object : GridLayoutManager(requireContext(), 5) { override fun canScrollVertically(): Boolean { return false } } - mAdapter = SuggestPicAdapter(context, object : OnListClickListener { + mAdapter = SuggestPicAdapter(requireContext(), 5, object : OnListClickListener { override fun onListClick(view: View?, position: Int, data: T) { + MtaHelper.onEvent("游戏上传", "游戏图片", "添加图片") val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI) startActivityForResult(intent, MEDIA_STORE_REQUEST) } - }) + }, SuggestPicAdapter.OnItemDeleteListener { MtaHelper.onEvent("游戏上传", "游戏图片", "删除图片") }) mAdapter?.setPicItem(R.layout.game_upload_pic_item) mAdapter?.setSuggestAddPicIcon(R.drawable.icon_pic_add) adapter = mAdapter } gameIconRv.apply { - layoutManager = object : GridLayoutManager(context, 5) { + layoutManager = object : GridLayoutManager(requireContext(), 5) { override fun canScrollVertically(): Boolean { return false } } - mIconAdapter = SuggestPicAdapter(context, 1, object : OnListClickListener { + mIconAdapter = SuggestPicAdapter(requireContext(), 1, object : OnListClickListener { override fun onListClick(view: View?, position: Int, data: T) { + MtaHelper.onEvent("游戏上传", "游戏图标", "添加图片") val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI) startActivityForResult(intent, MEDIA_ICON_STORE_REQUEST) } - }) + }, SuggestPicAdapter.OnItemDeleteListener { MtaHelper.onEvent("游戏上传", "游戏图标", "删除图片") }) mIconAdapter?.setPicItem(R.layout.game_upload_pic_item) mIconAdapter?.setSuggestAddPicIcon(R.drawable.icon_pic_add) adapter = mIconAdapter @@ -155,34 +162,60 @@ class GameUploadFragment : NormalFragment() { private fun initListener() { chooseGameLl.setOnClickListener { + MtaHelper.onEvent("游戏上传", "安装包", "点我选择") showSelectDialog() } gameIsNetworkingRg.setOnCheckedChangeListener { group, checkedId -> when (checkedId) { - R.id.gameNetworkingRb -> mIsOnline = AtomicBoolean(true) - R.id.gameNoNetworkingRb -> mIsOnline = AtomicBoolean(false) + R.id.gameNetworkingRb -> { + mIsOnline = AtomicBoolean(true) + MtaHelper.onEvent("游戏上传", "是否联网", "需要联网") + } + R.id.gameNoNetworkingRb -> { + mIsOnline = AtomicBoolean(false) + MtaHelper.onEvent("游戏上传", "是否联网", "无需联网") + } } } gameLanguageRg.setOnCheckedChangeListener { group, checkedId -> when (checkedId) { - R.id.gameLanguageChineseRb -> mGameLanguage = "中文" - R.id.gameLanguageEnglishRb -> mGameLanguage = "英文" - R.id.gameLanguageOtherRb -> mGameLanguage = "其他" + R.id.gameLanguageChineseRb -> { + mGameLanguage = "中文" + MtaHelper.onEvent("游戏上传", "游戏语言", "中文") + } + R.id.gameLanguageEnglishRb -> { + mGameLanguage = "英文" + MtaHelper.onEvent("游戏上传", "游戏语言", "英文") + } + R.id.gameLanguageOtherRb -> { + mGameLanguage = "其他" + MtaHelper.onEvent("游戏上传", "游戏语言", "其他") + } } } gameTypeRg.setOnCheckedChangeListener { group, checkedId -> when (checkedId) { - R.id.gameTypeLocalRb -> mGameType = "local" - R.id.gameTypeOnlineRb -> mGameType = "online" - R.id.gameTypeOtherRb -> mGameType = "other" + R.id.gameTypeLocalRb -> { + mGameType = "local" + MtaHelper.onEvent("游戏上传", "游戏类型", "单机") + } + R.id.gameTypeOnlineRb -> { + mGameType = "online" + MtaHelper.onEvent("游戏上传", "游戏类型", "网游") + } + R.id.gameTypeOtherRb -> { + mGameType = "other" + MtaHelper.onEvent("游戏上传", "游戏类型", "其他") + } } } addGameLabeTv.setOnClickListener { + MtaHelper.onEvent("游戏上传", "游戏标签", "添加标签") if (mTags.size < mMaxTagSize) { showAddTagDialog() } else { - toast("游戏标签最多添加${mMaxTagSize}个") + ToastUtils.showToast("游戏标签最多添加${mMaxTagSize}个") } } suggest_post_btn.setOnClickListener { @@ -191,48 +224,49 @@ class GameUploadFragment : NormalFragment() { } private fun commit() { + MtaHelper.onEvent("游戏上传", "提交", "提交") if (TextUtils.isEmpty(tv_choose.text.toString())) { - toast("请先选择游戏安装包") + ToastUtils.showToast("请先选择游戏安装包") return } if (mIconAdapter!!.fileList.size == 0) { - toast("请先选择游戏图标") + ToastUtils.showToast("请先选择游戏图标") return } if (TextUtils.isEmpty(et_game_name.text.toString())) { - toast("请先填写游戏名字") - return - } - if (!::mIsOnline.isInitialized) { - toast("请先选择游戏网络状态") - return - } - if (mGameLanguage.isEmpty()) { - toast("请先选择游戏语言") - return - } - if (mGameType.isEmpty()) { - toast("请先选择游戏类型") + ToastUtils.showToast("请先填写游戏名字") return } if (mTags.isEmpty()) { - toast("请先填写游戏标签") + ToastUtils.showToast("请先填写游戏标签") + return + } + if (!::mIsOnline.isInitialized) { + ToastUtils.showToast("请先选择游戏网络状态") + return + } + if (mGameLanguage.isEmpty()) { + ToastUtils.showToast("请先选择游戏语言") + return + } + if (mGameType.isEmpty()) { + ToastUtils.showToast("请先选择游戏类型") return } if (TextUtils.isEmpty(et_game_intro.text.toString())) { - toast("请先填写游戏简介") + ToastUtils.showToast("请先填写游戏简介") return } if (TextUtils.isEmpty(gameDeveloperWordsEt.text.toString())) { - toast("请先填写开发者的话") + ToastUtils.showToast("请先填写开发者的话") return } if (mAdapter!!.fileList.size == 0) { - toast("请先选择游戏截图") + ToastUtils.showToast("请先选择游戏截图") return } if (!tv_protocol.isChecked) { - toast("请先同意游戏资源协议") + ToastUtils.showToast("请先同意开发者协议") return } if (!::mUploadDialog.isInitialized) { @@ -379,8 +413,12 @@ class GameUploadFragment : NormalFragment() { show() } - back.setOnClickListener { mSelectGameDialog?.cancel() } + back.setOnClickListener { + MtaHelper.onEvent("游戏上传", "安装包", "关闭") + mSelectGameDialog?.cancel() + } manualBtn.setOnClickListener { + MtaHelper.onEvent("游戏上传", "安装包", "从设备上选择") val intent = Intent(Intent.ACTION_GET_CONTENT) intent.type = "*/*" intent.addCategory(Intent.CATEGORY_OPENABLE) @@ -394,6 +432,7 @@ class GameUploadFragment : NormalFragment() { if (obj is InstallGameEntity) run { mInstallGameEntity = obj chooseGameLl.background = null + chooseGameLl.setPadding(0, 0, 0, 0) chooseGameIconIv.visibility = View.GONE tv_choose.text = mInstallGameEntity.packageName } @@ -419,40 +458,30 @@ class GameUploadFragment : NormalFragment() { try { val file = File(picturePath) if (file.length() > 5 * 1024 * 1024) { - Utils.toast(requireContext(), getString(R.string.pic_max_hint, 5)) + ToastUtils.showToast(getString(R.string.pic_max_hint, 5)) } else { if (requestCode == MEDIA_STORE_REQUEST) { - // skip image crop - val intent = CropImageActivity.getIntent(requireContext(), picturePath, 9 / 16F, mEntrance) - startActivityForResult(intent, REQUEST_CODE_IMAGE_CROP) + mAdapter!!.addFileList(picturePath) } else { - val intent = CropImageActivity.getIntent(requireContext(), picturePath, 1F, mEntrance) - startActivityForResult(intent, REQUEST_CODE_ICON_IMAGE_CROP) + mIconAdapter!!.addFileList(picturePath) } } } catch (e: Exception) { - Utils.toast(context, e.message) - } - } else if (requestCode == REQUEST_CODE_IMAGE_CROP || requestCode == REQUEST_CODE_ICON_IMAGE_CROP) { - val imagePath = data.getStringExtra(CropImageActivity.RESULT_CLIP_PATH) - if (requestCode == REQUEST_CODE_IMAGE_CROP) { - mAdapter!!.addFileList(imagePath) - } else { - mIconAdapter!!.addFileList(imagePath) + ToastUtils.showToast(e.message ?: "") } } else if (requestCode == MEDIA_APK_STORE_REQUEST) { val uri = data.data ?: return val apkPath = UriUtils.getPath(requireContext(), uri) if (apkPath.isNotEmpty()) { if (!apkPath.endsWith(".apk")) { - Utils.toast(requireContext(), "请选择正确的安装包") + ToastUtils.showToast("请选择正确的安装包") return } mSelectGameDialog?.cancel() try { val file = File(apkPath) if (file.length() > 5 * 1024 * 1024 * 1024) { - Utils.toast(requireContext(), getString(R.string.apk_max_size_hint, 5)) + ToastUtils.showToast(getString(R.string.apk_max_size_hint, 5)) } else { val packageName = PackageUtils.getPackageNameByPath(requireContext(), apkPath) val version = PackageUtils.getVersionByPackage(packageName) @@ -463,11 +492,12 @@ class GameUploadFragment : NormalFragment() { this.gameVersion = version } chooseGameLl.background = null + chooseGameLl.setPadding(0, 0, 0, 0) chooseGameIconIv.visibility = View.GONE tv_choose.text = packageName } } catch (e: Exception) { - Utils.toast(requireContext(), e.message) + ToastUtils.showToast(e.message ?: "") } } } @@ -512,7 +542,7 @@ class GameUploadFragment : NormalFragment() { Util_System_Keyboard.hideSoftKeyboard(context, input) dialog.dismiss() } else { - toast(R.string.vote_empty_hint) + ToastUtils.showToast(getString(R.string.vote_empty_hint)) } } dialog.setOnDismissListener { @@ -532,6 +562,7 @@ class GameUploadFragment : NormalFragment() { labelTv.text = tag labelView.findViewById(R.id.picDelIv).setOnClickListener { if (mTags.contains(tag)) { + MtaHelper.onEvent("游戏上传", "游戏标签", "删除标签") gameLabelFl.removeView(labelView) mTags.remove(tag) gameLabelFl.goneIf(mTags.isEmpty()) @@ -543,7 +574,7 @@ class GameUploadFragment : NormalFragment() { gameLabelFl.addView(labelView) addGameLabeTv.goneIf(mTags.size == mMaxTagSize) } else { - toast("标签已存在") + ToastUtils.showToast("标签已存在") } } @@ -552,8 +583,5 @@ class GameUploadFragment : NormalFragment() { const val MEDIA_STORE_REQUEST = 100 const val MEDIA_ICON_STORE_REQUEST = 101 const val MEDIA_APK_STORE_REQUEST = 102 - const val REQUEST_CODE_IMAGE_CROP = 103 - const val REQUEST_CODE_ICON_IMAGE_CROP = 104 - } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadViewModel.kt b/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadViewModel.kt index 63e543ded2..507650623b 100644 --- a/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadViewModel.kt +++ b/app/src/main/java/com/gh/gamecenter/game/upload/GameUploadViewModel.kt @@ -1,14 +1,17 @@ package com.gh.gamecenter.game.upload +import android.annotation.SuppressLint import android.app.Application import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.gh.gamecenter.manager.UserManager +import com.gh.gamecenter.retrofit.BiResponse import com.gh.gamecenter.retrofit.Response import com.gh.gamecenter.retrofit.RetrofitManager import com.gh.gamecenter.user.ApiResponse +import com.google.gson.JsonObject import com.halo.assistant.HaloApp import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers @@ -18,6 +21,8 @@ import okhttp3.ResponseBody class GameUploadViewModel(application: Application) : AndroidViewModel(application) { val upLoadSuccess = MutableLiveData() + val uploadGameTips = MutableLiveData() + //上传游戏 fun uploadGames(body: RequestBody) { RetrofitManager.getInstance(HaloApp.getInstance().application) @@ -37,6 +42,22 @@ class GameUploadViewModel(application: Application) : AndroidViewModel(applicati }) } + @SuppressLint("CheckResult") + fun getUploadGamesTips() { + RetrofitManager.getInstance(HaloApp.getInstance().application) + .api.uploadGamesTips() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : BiResponse() { + override fun onSuccess(data: JsonObject) { + val tips = data.get("text").asString + if(!tips.isNullOrEmpty()) { + uploadGameTips.postValue(tips) + } + } + }) + } + class Factory(private val mApplication: Application) : ViewModelProvider.NewInstanceFactory() { override fun create(modelClass: Class): T { return GameUploadViewModel(mApplication) as T diff --git a/app/src/main/java/com/gh/gamecenter/game/upload/UploadScheduleDialog.kt b/app/src/main/java/com/gh/gamecenter/game/upload/UploadScheduleDialog.kt index 1e61a38eca..53fc3ca7db 100644 --- a/app/src/main/java/com/gh/gamecenter/game/upload/UploadScheduleDialog.kt +++ b/app/src/main/java/com/gh/gamecenter/game/upload/UploadScheduleDialog.kt @@ -7,6 +7,7 @@ import android.view.ViewGroup import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil import com.gh.base.fragment.BaseDialogFragment +import com.gh.common.util.MtaHelper import com.gh.gamecenter.R import com.gh.gamecenter.databinding.DialogUploadScheduleBinding @@ -32,6 +33,7 @@ class UploadScheduleDialog : BaseDialogFragment() { super.onViewCreated(view, savedInstanceState) binding.tvGiveUpUpload.setOnClickListener { onClickListener?.invoke(0) + MtaHelper.onEvent("游戏上传", "游戏上传", "放弃上传") } binding.tvExit.setOnClickListener { onClickListener?.invoke(1) @@ -62,6 +64,7 @@ class UploadScheduleDialog : BaseDialogFragment() { }*/ fun uploadFail(){ + MtaHelper.onEvent("游戏上传", "游戏上传", "上传失败") binding.isUploadSuccess = true binding.ivUpload.setImageDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.ic_upload_failure)) binding.tvUpload.text = "游戏上传失败" diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt b/app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt index 042f7be1d6..90d95bdbfb 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFunctionAdapter.kt @@ -17,6 +17,7 @@ import com.gh.gamecenter.db.GameTrendsDao import com.gh.gamecenter.entity.FunctionalGroupEntity import com.gh.gamecenter.entity.FunctionalLinkEntity import com.gh.gamecenter.entity.FunctionalMessageType +import com.gh.gamecenter.game.upload.GameSubmissionActivity import com.gh.gamecenter.gamedetail.myrating.MyRatingActivity import com.gh.gamecenter.history.HistoryActivity import com.gh.gamecenter.manager.UserManager @@ -228,6 +229,15 @@ class PersonalFunctionAdapter(val context: Context, val groupName: String, var m CheckLoginUtils.checkLogin(context, "我的光环-个人中心") {} } } + "游戏投稿" -> { + if (UserManager.getInstance().isLoggedIn) { + MtaHelper.onEvent("我的光环", "游戏投稿") + context.startActivity(GameSubmissionActivity.getIntent(context, "(我的光环)", "")) + } else { + MtaHelper.onEvent("我的光环_新", "功能入口-跳转登录", "游戏投稿") + CheckLoginUtils.checkLogin(context, "我的光环-游戏投稿") { } + } + } else -> { DirectUtils.directToLinkPage(context, linkEntity, "", "我的光环") } diff --git a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java index d99cddfc3d..eda3f80b5d 100644 --- a/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java +++ b/app/src/main/java/com/gh/gamecenter/retrofit/service/ApiService.java @@ -2416,4 +2416,9 @@ public interface ApiService { @PUT("devices/{device_id}/applications") Single putInstalledApps(@Path("device_id") String deviceId, @Body RequestBody body); + /** + * 获取游戏上传提示 + */ + @GET("users/upload_games/tip") + Single uploadGamesTips(); } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexFragment.kt b/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexFragment.kt index a5b5aa84e4..93988f3cc9 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameIndexFragment.kt @@ -9,6 +9,7 @@ import android.text.method.LinkMovementMethod import android.text.style.ClickableSpan import android.view.Gravity import android.view.View +import android.view.ViewTreeObserver import android.widget.LinearLayout import android.widget.TextView import androidx.core.content.ContextCompat @@ -53,6 +54,8 @@ class SearchGameIndexFragment : ListFragment 0) { val activity = activity @@ -105,6 +108,7 @@ class SearchGameIndexFragment : ListFragment { private OnListClickListener mListListener; + private OnItemDeleteListener mDeleteListener; private List picList; private int maxSize = 5; private int mPicItem = R.layout.suggest_pic_item; @@ -35,9 +36,10 @@ public class SuggestPicAdapter extends BaseRecyclerAdapter { picList = new ArrayList<>(); } - public SuggestPicAdapter(Context context, int maxSize, OnListClickListener listListener) { + public SuggestPicAdapter(Context context, int maxSize, OnListClickListener listListener, OnItemDeleteListener deleteListener) { super(context); this.mListListener = listListener; + this.mDeleteListener = deleteListener; picList = new ArrayList<>(); this.maxSize = maxSize; } @@ -70,6 +72,7 @@ public class SuggestPicAdapter extends BaseRecyclerAdapter { } viewHolder.delete.setOnClickListener(v -> { + if (mDeleteListener != null) mDeleteListener.onItemDelete(picList.get(holder.getAdapterPosition())); picList.remove(holder.getAdapterPosition()); notifyDataSetChanged(); }); @@ -97,4 +100,8 @@ public class SuggestPicAdapter extends BaseRecyclerAdapter { public List getFileList() { return picList; } + + public interface OnItemDeleteListener { + void onItemDelete(String data); + } } diff --git a/app/src/main/res/layout/activity_suggest.xml b/app/src/main/res/layout/activity_suggest.xml index 72128be623..f4bf5047d6 100644 --- a/app/src/main/res/layout/activity_suggest.xml +++ b/app/src/main/res/layout/activity_suggest.xml @@ -383,14 +383,13 @@ @@ -398,15 +397,14 @@ @@ -416,17 +414,16 @@ android:layout_height="8dp" /> @@ -462,7 +459,6 @@ android:id="@+id/credentialsPhotoTv" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="8dp" android:paddingLeft="20dp" android:paddingTop="16dp" android:paddingRight="20dp" @@ -488,18 +484,17 @@ android:layout_height="8dp"/> @@ -533,10 +528,8 @@ android:id="@+id/infringementAppScreenshotTv" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="8dp" android:paddingLeft="20dp" android:paddingTop="16dp" - android:paddingRight="20dp" android:paddingBottom="14dp" android:text="侵权应用截图*" android:textColor="@color/text_333333" @@ -546,7 +539,7 @@ @@ -19,7 +19,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:textColor="@color/text_333333" - android:textSize="16dp" + android:textSize="16sp" android:textStyle="bold" tools:text="光环助手资源协议"/> @@ -39,6 +39,7 @@ android:layout_height="40dp" android:text="不同意" android:layout_marginTop="20dp" + android:layout_marginLeft="10dp" android:textSize="14sp" android:textColor="@color/text_333333" android:gravity="center" @@ -53,11 +54,12 @@ android:layout_height="40dp" android:text="同意" android:layout_marginTop="20dp" + android:layout_marginRight="10dp" android:textSize="14sp" android:textColor="@color/white" android:gravity="center" android:background="@drawable/button_blue_oval" - android:layout_marginLeft="40dp" + android:layout_marginLeft="20dp" app:layout_constraintStart_toEndOf="@+id/refuseTv" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/webView" diff --git a/app/src/main/res/layout/fragment_game_upload.xml b/app/src/main/res/layout/fragment_game_upload.xml index 9071d98b4a..c94d0c7bb4 100644 --- a/app/src/main/res/layout/fragment_game_upload.xml +++ b/app/src/main/res/layout/fragment_game_upload.xml @@ -17,6 +17,7 @@ android:paddingTop="12dp" android:paddingBottom="12dp" android:paddingRight="20dp" + android:visibility="gone" android:background="@color/ECF6FF"/> @@ -243,7 +243,7 @@ + android:layout_height="56dp"> @@ -306,7 +304,7 @@ + android:layout_height="56dp"> @@ -384,7 +379,7 @@ + android:layout_height="56dp"> @@ -534,19 +526,19 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="20dp" - android:paddingTop="16dp" - android:paddingRight="20dp" - android:paddingBottom="14dp" + android:layout_marginTop="16dp" + android:layout_marginBottom="14dp" android:text="游戏图片*" android:textColor="@color/text_333333" android:textSize="14sp" + app:layout_constraintBottom_toTopOf="@+id/rv_screenshot" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> 出现App自动退出或重启的情况请及时反馈 游戏问题 玩游戏过程中遇到的问题 - 游戏收录 - 推荐好玩的游戏,或游戏版本求更新 + 收录更新 + 游戏版本太低,点击这里提交更新 文章投稿 版权申诉 原创或转发,我们都欢迎 - 原创或转发,我们都欢迎 + 如果您有版权方面的问题,请点击这里提交申诉 光环助手官方交流Q群: 367541038 添加选项