diff --git a/app/src/main/java/com/gh/base/BaseActivity.java b/app/src/main/java/com/gh/base/BaseActivity.java index e198c1a5e7..34b667eecc 100644 --- a/app/src/main/java/com/gh/base/BaseActivity.java +++ b/app/src/main/java/com/gh/base/BaseActivity.java @@ -23,9 +23,7 @@ import com.gh.common.util.TeaHelper; import com.gh.gamecenter.BuildConfig; import com.gh.gamecenter.LoginActivity; import com.gh.gamecenter.R; -import com.gh.gamecenter.SuggestionActivity; import com.gh.gamecenter.eventbus.EBShowDialog; -import com.gh.gamecenter.suggest.SuggestType; import com.lightgame.BaseAppCompatActivity; import com.lightgame.download.FileUtils; import com.lightgame.utils.Utils; @@ -54,7 +52,6 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy // global dialog key public final static String DOWNLOAD_HIJACK = "hijack"; - public final static String DOWNLOAD_NOT_FOUND = "notfound"; public final static String LOGIN_EXCEPTION = "loginException"; public final static String PLUGGABLE = "plugin"; @@ -176,12 +173,6 @@ public abstract class BaseActivity extends BaseAppCompatActivity implements Easy } catch (Exception e) { e.printStackTrace(); } - } else if (DOWNLOAD_NOT_FOUND.equals(showDialog.getType())) { - DialogUtils.showAlertDialog(this, "下载失败", "下载链接已失效,建议提交反馈" - , "立即反馈", "取消" - , () -> SuggestionActivity.startSuggestionActivity(this, - SuggestType.gameQuestion, null, - (showDialog.getPath() + ",问题反馈:下载链接失效")), null); } } } diff --git a/app/src/main/java/com/gh/gamecenter/HelpAndFeedbackActivity.kt b/app/src/main/java/com/gh/gamecenter/HelpAndFeedbackActivity.kt index 9dd6846ea3..a520870f04 100644 --- a/app/src/main/java/com/gh/gamecenter/HelpAndFeedbackActivity.kt +++ b/app/src/main/java/com/gh/gamecenter/HelpAndFeedbackActivity.kt @@ -7,6 +7,7 @@ import androidx.fragment.app.Fragment import com.gh.base.BaseActivity_TabLayout import com.gh.gamecenter.help.HelpContainerFragment import com.gh.gamecenter.suggest.SuggestSelectFragment +import com.lightgame.utils.Util_System_Keyboard class HelpAndFeedbackActivity : BaseActivity_TabLayout() { @@ -38,8 +39,22 @@ class HelpAndFeedbackActivity : BaseActivity_TabLayout() { mTabIndicatorView.setIndicatorWidth(88) } + override fun onPageSelected(position: Int) { + super.onPageSelected(position) + if (position == SUGGESTION_ITEM) { + Util_System_Keyboard.hideSoftKeyboard(this) + } + } + + fun setCurrentItem(position: Int) { + mViewPager.currentItem = position + } + companion object { + const val HELP_ITEM = 0 + const val SUGGESTION_ITEM = 1 + @JvmStatic fun getIntent(context: Context): Intent { return Intent(context, HelpAndFeedbackActivity::class.java) diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 3ee6590ab1..7680368d87 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -25,6 +25,9 @@ import android.view.View; import android.view.Window; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.lifecycle.ViewModelProviders; + import com.gh.base.AppUncaughtHandler; import com.gh.base.BaseActivity; import com.gh.base.fragment.BaseFragment_ViewPager; @@ -56,6 +59,7 @@ import com.gh.common.util.PlatformUtils; import com.gh.common.util.PushHelper; import com.gh.common.util.SPUtils; import com.gh.common.util.ShareUtils; +import com.gh.common.util.StringUtils; import com.gh.common.util.ThirdPartyPackageHelper; import com.gh.common.util.UrlFilterUtils; import com.gh.download.DownloadManager; @@ -68,6 +72,7 @@ import com.gh.gamecenter.entity.InnerMetaInfoEntity; import com.gh.gamecenter.entity.NotificationHint; import com.gh.gamecenter.entity.NotificationUgc; import com.gh.gamecenter.entity.SettingsEntity; +import com.gh.gamecenter.entity.SimpleGameEntity; import com.gh.gamecenter.eventbus.EBDownloadStatus; import com.gh.gamecenter.eventbus.EBNetworkState; import com.gh.gamecenter.eventbus.EBPackage; @@ -125,8 +130,6 @@ import java.util.TimerTask; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import androidx.annotation.NonNull; -import androidx.lifecycle.ViewModelProviders; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import okhttp3.MediaType; @@ -176,10 +179,18 @@ public class MainActivity extends BaseActivity { DownloadManager.getInstance(getApplicationContext()).cancel(downloadEntity.getUrl()); toast("该链接已失效!请联系管理员。"); - EventBus.getDefault().post(new EBShowDialog(DOWNLOAD_NOT_FOUND, downloadEntity.getName())); MtaHelper.onEventWithBasicDeviceInfo("下载失败弹窗", "游戏", downloadEntity.getName(), "平台", downloadEntity.getPlatform()); + + DialogUtils.showAlertDialog(AppManager.getInstance().currentActivity() + , "下载失败" + , "下载链接已失效,建议提交反馈" + , "立即反馈", "取消" + , () -> SuggestionActivity.startSuggestionActivity(AppManager.getInstance().currentActivity(), + SuggestType.gameQuestion, "notfound", + StringUtils.buildString(downloadEntity.getName(), ",问题反馈:下载链接失效"), + new SimpleGameEntity(downloadEntity.getGameId(), downloadEntity.getName())), null); return; } else if (DownloadStatus.neterror.equals(downloadEntity.getStatus()) || DownloadStatus.timeout.equals(downloadEntity.getStatus())) { diff --git a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java index b8b3a637b6..d8efcc76de 100644 --- a/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SuggestionActivity.java @@ -33,6 +33,7 @@ import com.gh.base.OnListClickListener; import com.gh.base.OnRequestCallBackListener; import com.gh.base.ToolBarActivity; import com.gh.base.fragment.WaitingDialogFragment; +import com.gh.common.dialog.TrackableDialog; import com.gh.common.im.ImManager; import com.gh.common.util.AdHelper; import com.gh.common.util.ApkActiveUtils; @@ -152,6 +153,7 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall public static final int MEDIA_STORE_REQUEST = 1; public static final String SUGGESTION_HINT_TYPE = "SUGGESTION_HINT_TYPE"; + public static final String FROM_RATING_KEY = "from_rating_key"; private SuggestPicAdapter mAdapter; @@ -160,8 +162,12 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall private SharedPreferences sp; + @Nullable private SimpleGameEntity mGameEntity; + @Nullable + private InstallGameEntity mSelectGameEntity; + private String[] mFunctionTypeName; private SuggestType mSuggestType; @@ -172,6 +178,7 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall private String mSuggestHintType; private boolean mAgreePostPic; + private boolean fromRating = false; private int mFunctionType = -1; @@ -190,6 +197,20 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall context.startActivity(intent); } + // 上传相关游戏ID + public static void startSuggestionActivity(Context context, + SuggestType suggestType, + String suggestHintType, + String content, + SimpleGameEntity game) { + Intent intent = new Intent(context, SuggestionActivity.class); + intent.putExtra(EntranceUtils.KEY_SUGGESTTYPE, suggestType); + intent.putExtra(EntranceUtils.KEY_SUGGEST_HINT_TYPE, suggestHintType); + intent.putExtra(EntranceUtils.KEY_CONTENT, content); + intent.putExtra(SimpleGameEntity.class.getSimpleName(), game); + context.startActivity(intent); + } + public static void startSuggestionActivity(Context context, SuggestType suggestType, String hint) { Intent intent = new Intent(context, SuggestionActivity.class); intent.putExtra(EntranceUtils.KEY_SUGGESTTYPE, suggestType); @@ -209,6 +230,7 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall intent.putExtra(EntranceUtils.KEY_SUGGESTTYPE, suggestType); intent.putExtra(EntranceUtils.KEY_CONTENT, content); intent.putExtra(SimpleGameEntity.class.getSimpleName(), game); + intent.putExtra(FROM_RATING_KEY, true); return intent; } @@ -253,6 +275,7 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall } } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -268,6 +291,7 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall mHideHint = extras.getString(EntranceUtils.KEY_HIDE_SUGGEST_HINT, ""); mFunctionTypeName = getResources().getStringArray(R.array.suggest_function_type); mGameEntity = extras.getParcelable(SimpleGameEntity.class.getSimpleName()); + fromRating = extras.getBoolean(FROM_RATING_KEY, false); setNavigationTitle("意见反馈-" + mSuggestType.getType()); @@ -304,6 +328,11 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall mSuggestSelectGame.setVisibility(View.GONE); mSuggestGameName.setVisibility(View.VISIBLE); mSuggestGameName.setText(mSuggestContent); + } else if (mSuggestType == SuggestType.gameQuestion && "notfound".equals(mSuggestHintType) && mGameEntity != null) { + mSuggestContentEt.setText(mSuggestContent); + mSuggestSelectGame.setVisibility(View.GONE); + mSuggestGameName.setVisibility(View.VISIBLE); + mSuggestGameName.setText(mGameEntity.getName()); } else { mSuggestContentEt.setText(mSuggestContent); } @@ -378,7 +407,7 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall } }); - if (mGameEntity != null) { + if (mGameEntity != null && fromRating) { mGameInfo = mGameEntity.getName(); mSuggestGameName.setText(mGameEntity.getName()); mSuggestSelectGame.setVisibility(View.GONE); @@ -485,6 +514,8 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall InstallGameEntity entity = (InstallGameEntity) obj; mGameInfo = entity.getGameName() + "(" + entity.getPackageName() + ", " + entity.getGameVersion() + ")"; mSuggestGameName.setText(entity.getGameName()); + + mSelectGameEntity = entity; } else { String name = obj.toString().replace(" ", ""); mGameInfo = name; @@ -607,7 +638,7 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall } else { showConfirmDialog(email); } - } else if (mSuggestType == SuggestType.gameCollect) { + } else if (mSuggestType == SuggestType.gameCollect && mSelectGameEntity != null) { getGameCollectDialogData(); } else { postSuggestion(email); @@ -627,17 +658,27 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall } private void getGameCollectDialogData() { - // todo + postDialog = WaitingDialogFragment.newInstance("反馈中..."); + postDialog.show(getSupportFragmentManager(), null); + String filter = UrlFilterUtils.getFilterQuery("package", mSelectGameEntity.getPackageName(), "type", "suggestion_check"); RetrofitManager.getInstance(getBaseContext()) .getApi() - .loadGameDataByPackageName(UrlFilterUtils.getFilterQuery("package", "")) + .getSuggestGameCollectHintdata(filter) .map(ApkActiveUtils.filterMapperList) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { @Override public void onResponse(@Nullable List response) { + MtaHelper.onEvent("意见反馈", "意见反馈-游戏收录弹窗", "出现提示弹窗"); showGameCollectDialog(response); + postDialog.dismiss(); + } + + @Override + public void onFailure(@Nullable HttpException e) { + postDialog.dismiss(); + postSuggestion(mSuggestEmailEt.getText().toString().trim()); } }); } @@ -650,14 +691,22 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall recyclerView.setLayoutManager(new FixLinearLayoutManager(this)); recyclerView.setAdapter(new SuggestGameCollectAdapter(this, gameList)); - Dialog dialog = new Dialog(this); + Dialog dialog = new TrackableDialog(this, + R.style.GhAlertDialog, + "意见反馈", + "意见反馈-游戏收录弹窗", + "点击空白", + "点击手机返回键", false); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setCanceledOnTouchOutside(false); dialog.setContentView(view); dialog.show(); - back.setOnClickListener(v -> dialog.dismiss()); + back.setOnClickListener(v -> { + MtaHelper.onEvent("意见反馈", "意见反馈-游戏收录弹窗", "点击返回"); + dialog.dismiss(); + }); forcePost.setOnClickListener(v -> { + MtaHelper.onEvent("意见反馈", "意见反馈-游戏收录弹窗", "点击不是我要的游戏,继续提交"); dialog.dismiss(); postSuggestion(mSuggestEmailEt.getText().toString().trim()); }); @@ -725,12 +774,14 @@ public class SuggestionActivity extends ToolBarActivity implements OnRequestCall params.put("rom", RomIdentifier.getRom().name() + " " + RomIdentifier.getRom().getVersionName()); params.put("link", mLinkEt.getText().toString()); - if (mGameEntity != null) { - params.put("game_id", mGameEntity.getId()); + if (fromRating) { params.put("suggestion_type", mSuggestType.getType() + "(评论)"); } else { params.put("suggestion_type", mSuggestType.getType()); } + if (mGameEntity != null) { + params.put("game_id", mGameEntity.getId()); + } String message; String content = mSuggestContentEt.getText().toString().trim(); diff --git a/app/src/main/java/com/gh/gamecenter/WebActivity.java b/app/src/main/java/com/gh/gamecenter/WebActivity.java index 18b3a5872b..857973808e 100644 --- a/app/src/main/java/com/gh/gamecenter/WebActivity.java +++ b/app/src/main/java/com/gh/gamecenter/WebActivity.java @@ -5,6 +5,8 @@ import android.content.Intent; import android.os.Bundle; import android.view.View; +import androidx.annotation.NonNull; + import com.gh.common.constant.Constants; import com.gh.common.util.EntranceUtils; import com.gh.gamecenter.entity.ConcernEntity; @@ -16,8 +18,6 @@ import java.net.URLEncoder; import java.util.Date; import java.util.Locale; -import androidx.annotation.NonNull; - /** * Created by khy on 2016/10/18. */ @@ -150,13 +150,21 @@ public class WebActivity extends NormalActivity { return getTargetIntent(context, WebActivity.class, WebFragment.class, bundle); } + @NonNull - public static Intent getIntentByUrl(Context context, String url) { + public static Intent getIntent(Context context, String url, boolean autoCompletionTitle) { Bundle bundle = new Bundle(); bundle.putString(EntranceUtils.KEY_URL, url); + bundle.putBoolean(WebFragment.KEY_COMPLETION_TITLE, autoCompletionTitle); + bundle.putBoolean(WebFragment.KEY_LEAVE_WEB_PAGE_TO_HANDLE_TITLE, false); + return getTargetIntent(context, WebActivity.class, WebFragment.class, bundle); + } + + @NonNull + public static Intent getIntentByUrl(Context context, String url) { return getIntentByUrl(context, url, false); } - + @NonNull public static Intent getIntentByUrl(Context context, String url, boolean leaveWebPageHandleTitle) { Bundle bundle = new Bundle(); @@ -164,7 +172,7 @@ public class WebActivity extends NormalActivity { bundle.putBoolean(WebFragment.KEY_LEAVE_WEB_PAGE_TO_HANDLE_TITLE, leaveWebPageHandleTitle); return getTargetIntent(context, WebActivity.class, WebFragment.class, bundle); } - + public static Intent getIntentForWebGame(Context context, String url, String gameName, boolean disableWebviewBackStack) { Bundle bundle = new Bundle(); bundle.putString(EntranceUtils.KEY_URL, url); @@ -176,7 +184,7 @@ public class WebActivity extends NormalActivity { } return getTargetIntent(context, WebActivity.class, WebFragment.class, bundle); } - + @Override protected View.OnClickListener provideNavigationItemClickListener() { Bundle bundle = getIntent().getBundleExtra(NORMAL_FRAGMENT_BUNDLE); diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt index 2fd5c46cd6..3b7a3b06e1 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/GameDetailFragment.kt @@ -26,10 +26,7 @@ import com.gh.gamecenter.DownloadManagerActivity import com.gh.gamecenter.R import com.gh.gamecenter.SuggestionActivity import com.gh.gamecenter.adapter.viewholder.DetailViewHolder -import com.gh.gamecenter.entity.GameDetailEntity -import com.gh.gamecenter.entity.GameEntity -import com.gh.gamecenter.entity.GameUpdateEntity -import com.gh.gamecenter.entity.Star +import com.gh.gamecenter.entity.* import com.gh.gamecenter.eventbus.EBConcernChanged import com.gh.gamecenter.eventbus.EBDownloadStatus import com.gh.gamecenter.eventbus.EBPackage @@ -561,7 +558,8 @@ class GameDetailFragment : NormalFragment() { requireContext(), SuggestType.gameQuestion, mGameEntity!!.getGameCategory().toString(), - mGameEntity!!.name) + mGameEntity!!.name, + SimpleGameEntity(mGameEntity!!.id, mGameEntity!!.name!!)) popupWindow.dismiss() MtaHelper.onEvent("游戏详情_新", "问题反馈按钮", mViewModel.game?.name ?: "") } diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/FuLiAdapter.kt b/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/FuLiAdapter.kt index c1e83432e3..e87c937aaa 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/FuLiAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/fuli/FuLiAdapter.kt @@ -24,6 +24,7 @@ import com.gh.gamecenter.databinding.GamedetailItemAnswerBinding import com.gh.gamecenter.databinding.GamedetailItemServerBinding import com.gh.gamecenter.databinding.GamedetailItemUpdateContentBinding import com.gh.gamecenter.entity.NewsEntity +import com.gh.gamecenter.entity.SimpleGameEntity import com.gh.gamecenter.gamedetail.fuli.answer.GameDetailAnswerAdapter import com.gh.gamecenter.gamedetail.fuli.answer.GameDetailAnswerViewHolder import com.gh.gamecenter.gamedetail.fuli.kaifu.GameDetailKaiFuAdapter @@ -370,7 +371,10 @@ class FuLiAdapter(context: Context, SuggestionActivity.startSuggestionActivity(mContext, SuggestType.normal, "service", - StringUtils.buildString(mFuLiViewModel?.game?.name, ",", "开服信息问题反馈:")) + StringUtils.buildString(mFuLiViewModel?.game?.name, ",", "开服信息问题反馈:"), + SimpleGameEntity( + id = mFuLiViewModel?.game?.id ?: "", + name = mFuLiViewModel?.game?.name ?: "")) } if (!serverEntity.calendar.isNullOrEmpty()) { @@ -381,7 +385,7 @@ class FuLiAdapter(context: Context, binding.serverCalendarList.adapter = adapter adapter.showKaiFuDetail(false) } else { - if(binding.serverDes.visibility == View.GONE) { + if (binding.serverDes.visibility == View.GONE) { binding.serverDes.visibility = View.VISIBLE binding.serverDes.text = "该游戏近期暂无开服,敬请留意。" } diff --git a/app/src/main/java/com/gh/gamecenter/help/HelpCategoryAdapter.kt b/app/src/main/java/com/gh/gamecenter/help/HelpCategoryAdapter.kt index c5b111e5ed..694c8ce7dd 100644 --- a/app/src/main/java/com/gh/gamecenter/help/HelpCategoryAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/help/HelpCategoryAdapter.kt @@ -3,6 +3,7 @@ package com.gh.gamecenter.help import android.content.Context import android.view.ViewGroup import com.gh.common.util.ImageUtils +import com.gh.common.util.MtaHelper import com.gh.common.util.toColor import com.gh.gamecenter.R import com.gh.gamecenter.databinding.HelpCategoryItemBinding @@ -11,7 +12,7 @@ import com.lightgame.adapter.BaseRecyclerAdapter class HelpCategoryAdapter(context: Context, private val mCategoryList: List, - private val clickCallback: (String?) -> Unit) : BaseRecyclerAdapter(context) { + private val clickCallback: (HelpCategoryEntity?) -> Unit) : BaseRecyclerAdapter(context) { private val mSelectMap = mutableMapOf() @@ -33,10 +34,12 @@ class HelpCategoryAdapter(context: Context, ImageUtils.display(holder.binding.icon, entity.icon) holder.itemView.setOnClickListener { + MtaHelper.onEvent("意见反馈", "使用帮助点击", "点击" + entity.name) + if (mSelectMap[position] == true) { clickCallback.invoke(null) } else { - clickCallback.invoke(entity.id) + clickCallback.invoke(entity) } mSelectMap[position] = !(mSelectMap[position] ?: false) diff --git a/app/src/main/java/com/gh/gamecenter/help/HelpContainerFragment.kt b/app/src/main/java/com/gh/gamecenter/help/HelpContainerFragment.kt index 3b33f55856..b45663397a 100644 --- a/app/src/main/java/com/gh/gamecenter/help/HelpContainerFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/help/HelpContainerFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.text.Editable import android.text.TextWatcher import android.view.View +import android.view.inputmethod.EditorInfo import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction import androidx.lifecycle.Observer @@ -11,9 +12,11 @@ import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.GridLayoutManager import com.gh.base.fragment.BaseFragment import com.gh.common.util.EntranceUtils +import com.gh.common.util.MtaHelper import com.gh.gamecenter.R import com.gh.gamecenter.databinding.FragmentHelpContaierBinding import com.gh.gamecenter.eventbus.EBNetworkState +import com.lightgame.utils.Util_System_Keyboard import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -51,29 +54,43 @@ class HelpContainerFragment : BaseFragment() { } }) mBinding.searchButton.setOnClickListener { - val key = mBinding.searchInput.text.toString() - if (key.isEmpty()) { - toast("请输入关键词搜索") - } else { - if (mSearchContentFragment != null) { - mSearchContentFragment?.updateSearchKey(key) - } - changeFragment(default = false) - } + search() } mBinding.deleteButton.setOnClickListener { mBinding.searchInput.setText("") } + mBinding.searchInput.setOnEditorActionListener { v, actionId, event -> + if (actionId == EditorInfo.IME_ACTION_SEARCH) { + search() + } + false + } + mViewModel = ViewModelProviders.of(this).get(HelpContainerViewModel::class.java) mViewModel.categoryLiveData.observe(this, Observer { mBinding.categoryList.layoutManager = GridLayoutManager(context, 3) - mBinding.categoryList.adapter = HelpCategoryAdapter(requireContext(), it, clickCallback = { helpId -> - mDefaultContentFragment.setHelpCategory(helpId) + mBinding.categoryList.adapter = HelpCategoryAdapter(requireContext(), it, clickCallback = { category -> + mDefaultContentFragment.setHelpCategory(category) }) }) } + fun search() { + val key = mBinding.searchInput.text.toString() + if (key.isEmpty()) { + toast("请输入关键词搜索") + } else { + if (mSearchContentFragment != null) { + mSearchContentFragment?.updateSearchKey(key) + } + changeFragment(default = false) + Util_System_Keyboard.hideSoftKeyboard(activity) + MtaHelper.onEvent("意见反馈", "使用帮助搜索", key) + } + MtaHelper.onEvent("意见反馈", "使用帮助点击", "点击搜索") + } + private fun changeFragment(default: Boolean) { val transaction = childFragmentManager.beginTransaction() hideFragments(transaction) diff --git a/app/src/main/java/com/gh/gamecenter/help/HelpContentAdapter.kt b/app/src/main/java/com/gh/gamecenter/help/HelpContentAdapter.kt index 5043535bcd..2a8f7ab29c 100644 --- a/app/src/main/java/com/gh/gamecenter/help/HelpContentAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/help/HelpContentAdapter.kt @@ -5,6 +5,7 @@ import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.gh.common.constant.ItemViewType +import com.gh.common.util.MtaHelper import com.gh.common.util.dip2px import com.gh.gamecenter.R import com.gh.gamecenter.WebActivity @@ -15,6 +16,7 @@ import com.gh.gamecenter.databinding.HelpItemBinding import com.gh.gamecenter.entity.HelpEntity class HelpContentAdapter(context: Context, + private val mFragment: HelpContentFragment, private val mViewModel: NormalListViewModel) : ListAdapter(context) { override fun getItemViewType(position: Int): Int { @@ -49,7 +51,14 @@ class HelpContentAdapter(context: Context, if (entity.type == "manual") { mContext.startActivity(HelpDetailActivity.getIntent(mContext, entity)) } else { - mContext.startActivity(WebActivity.getIntentByUrl(mContext, entity.content)) + mContext.startActivity(WebActivity.getIntent(mContext, entity.content, false)) + } + + val category = mFragment.getHelpCategory() + if (category != null) { + MtaHelper.onEvent("意见反馈", "使用帮助内容", category.name + "+" + entity.title) + } else { + MtaHelper.onEvent("意见反馈", "使用帮助内容", entity.title) } } } diff --git a/app/src/main/java/com/gh/gamecenter/help/HelpContentFragment.kt b/app/src/main/java/com/gh/gamecenter/help/HelpContentFragment.kt index 2dde14b99c..34e7d4be45 100644 --- a/app/src/main/java/com/gh/gamecenter/help/HelpContentFragment.kt +++ b/app/src/main/java/com/gh/gamecenter/help/HelpContentFragment.kt @@ -1,12 +1,17 @@ package com.gh.gamecenter.help import android.os.Bundle +import android.view.View +import android.widget.TextView import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.RecyclerView import com.gh.common.util.EntranceUtils import com.gh.common.util.UrlFilterUtils +import com.gh.gamecenter.HelpAndFeedbackActivity +import com.gh.gamecenter.R import com.gh.gamecenter.baselist.ListFragment import com.gh.gamecenter.baselist.NormalListViewModel +import com.gh.gamecenter.entity.HelpCategoryEntity import com.gh.gamecenter.entity.HelpEntity import com.gh.gamecenter.retrofit.RetrofitManager import com.halo.assistant.HaloApp @@ -14,11 +19,14 @@ import io.reactivex.Observable class HelpContentFragment : ListFragment>() { + lateinit var mReuseNoneDataText: TextView + lateinit var mReuseNoneDataButton: View + private lateinit var mAdapter: HelpContentAdapter private var mSearchKey: String? = null - private var mCategoryId: String? = null + private var mCategory: HelpCategoryEntity? = null override fun provideListAdapter(): HelpContentAdapter { return mAdapter @@ -28,17 +36,28 @@ class HelpContentFragment : ListFragment> { val filterQuery = if (mSearchKey != null) { UrlFilterUtils.getFilterQuery("keyword", mSearchKey) - } else if (mCategoryId != null) { - UrlFilterUtils.getFilterQuery("help_id", mCategoryId) + } else if (mCategory != null) { + UrlFilterUtils.getFilterQuery("help_id", mCategory?.id) } else { "" } @@ -50,6 +69,11 @@ class HelpContentFragment : ListFragment } + override fun onLoadEmpty() { + super.onLoadEmpty() + mReuseNoneDataText.text = ("暂无"$mSearchKey"相关的问题,请重新搜索") + } + fun updateSearchKey(key: String) { if (key != mSearchKey) { mSearchKey = key @@ -57,10 +81,14 @@ class HelpContentFragment : ListFragment> getSearchHelps(@Query("filter") String filter, @Query("page") int page); + + /** + * 获取意见反馈游戏收录提示数据 + */ + @GET("games") + Observable> getSuggestGameCollectHintdata(@Query("filter") String filter); } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/suggest/SuggestGameCollectAdapter.kt b/app/src/main/java/com/gh/gamecenter/suggest/SuggestGameCollectAdapter.kt index 8467506e28..b88a380931 100644 --- a/app/src/main/java/com/gh/gamecenter/suggest/SuggestGameCollectAdapter.kt +++ b/app/src/main/java/com/gh/gamecenter/suggest/SuggestGameCollectAdapter.kt @@ -2,6 +2,9 @@ package com.gh.gamecenter.suggest import android.content.Context import android.view.ViewGroup +import com.gh.common.util.MtaHelper +import com.gh.common.util.dip2px +import com.gh.gamecenter.GameDetailActivity import com.gh.gamecenter.R import com.gh.gamecenter.databinding.GameItemBinding import com.gh.gamecenter.entity.GameEntity @@ -20,10 +23,17 @@ class SuggestGameCollectAdapter(context: Context, } override fun onBindViewHolder(holder: GameItemViewHolder, position: Int) { + holder.itemView.setPadding(12F.dip2px(),4F.dip2px(),16F.dip2px(),4F.dip2px()) + val gameEntity = mGameList[position] holder.binding.game = gameEntity holder.binding.subjectTag = "type" holder.initServerType(gameEntity) holder.binding.executePendingBindings() + holder.binding.downloadBtn.text = "查看" + holder.binding.downloadBtn.setOnClickListener { + GameDetailActivity.startGameDetailActivity(mContext, gameEntity, "(意见反馈-收录提示)") + MtaHelper.onEvent("意见反馈", "意见反馈-游戏收录-查看游戏", gameEntity.name) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/gamecenter/suggest/SuggestSelectFragment.java b/app/src/main/java/com/gh/gamecenter/suggest/SuggestSelectFragment.java index e1dd144238..6104722faf 100644 --- a/app/src/main/java/com/gh/gamecenter/suggest/SuggestSelectFragment.java +++ b/app/src/main/java/com/gh/gamecenter/suggest/SuggestSelectFragment.java @@ -11,6 +11,7 @@ import androidx.annotation.Nullable; import com.gh.base.fragment.BaseFragment; import com.gh.common.constant.Config; import com.gh.common.util.DirectUtils; +import com.gh.common.util.MtaHelper; import com.gh.common.util.ShareUtils; import com.gh.gamecenter.R; import com.gh.gamecenter.SuggestionActivity; @@ -54,23 +55,30 @@ public class SuggestSelectFragment extends BaseFragment { switch (view.getId()) { case R.id.suggest_type1: type = SuggestType.normal; + MtaHelper.onEvent("意见反馈", "意见反馈", "普通反馈"); break; case R.id.suggest_type2: type = SuggestType.crash; + MtaHelper.onEvent("意见反馈", "意见反馈", "发生闪退"); break; case R.id.suggest_type3: type = SuggestType.gameQuestion; + MtaHelper.onEvent("意见反馈", "意见反馈", "游戏问题"); break; case R.id.suggest_type4: type = SuggestType.gameCollect; + MtaHelper.onEvent("意见反馈", "意见反馈", "游戏收录"); break; case R.id.suggest_type5: type = SuggestType.functionSuggest; + MtaHelper.onEvent("意见反馈", "意见反馈", "功能收录"); break; case R.id.suggest_type6: type = SuggestType.articleCollect; + MtaHelper.onEvent("意见反馈", "意见反馈", "文章投稿"); break; case R.id.suggest_qqun_rl: + MtaHelper.onEvent("意见反馈", "意见反馈", "点击QQ群号"); if (ShareUtils.isQQClientAvailable(requireContext())) { String groupNumber = "vd754P2_uNUJqDcgX4V-pyXEGZZVH0DE"; if (mSettings != null && mSettings.getSupport() != null && diff --git a/app/src/main/java/com/halo/assistant/fragment/WebFragment.java b/app/src/main/java/com/halo/assistant/fragment/WebFragment.java index 3fcf0d788b..42c154b692 100644 --- a/app/src/main/java/com/halo/assistant/fragment/WebFragment.java +++ b/app/src/main/java/com/halo/assistant/fragment/WebFragment.java @@ -15,6 +15,8 @@ import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.annotation.Nullable; + import com.gh.base.BaseActivity; import com.gh.common.DefaultJsApi; import com.gh.common.DefaultWebViewUrlHandler; @@ -46,7 +48,6 @@ import org.greenrobot.eventbus.ThreadMode; import java.util.HashMap; import java.util.List; -import androidx.annotation.Nullable; import butterknife.BindView; import butterknife.OnClick; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -59,17 +60,18 @@ import wendu.dsbridge.DWebView; * 网页浏览器页面 */ public class WebFragment extends NormalFragment { - + public static final String KEY_ISTOOLS = "isTools"; public static final String KEY_IS_BIND_WECHAT = "is_bind_wechat"; public static final String KEY_ISCOLLECTIONTOOLS = "isCollectionTools"; public static final String KEY_IS_SECURITY_CERTIFICATION = "is_security_certification"; - + public static final String KEY_COMPLETION_TITLE = "completion_title"; + public static final String KEY_LEAVE_WEB_PAGE_TO_HANDLE_TITLE = "leave_web_page_to_handle_title"; public static final String KEY_REQUIRE_BACK_CONFIRMATION = "require_back_confirmation"; public static final String KEY_BACK_CONFIRMATION_CONTENT = "back_confirmation_content"; public static final String KEY_GAME_NAME = "game_name"; - + @BindView(R.id.news_webview) DWebView mWebView; @BindView(R.id.web_progressbar) @@ -80,63 +82,64 @@ public class WebFragment extends NormalFragment { RelativeLayout newsBottom; MenuItem mMenuShare; MenuItem mMenuCollect; - + private ToolBoxEntity mToolBoxEntity; - + private String newsId; private String mNavigationTitle; - + private int commentNum; - + + private boolean mAutoCompletionTitle; private boolean mIsTools; private boolean mIsBindWechat; private boolean mIsBackStackDisabled; private String mBackConfirmationContent; private String mGameName; - + private TimeElapsedHelper mTimeElapsedHelper; - + @Override protected int getLayoutId() { return R.layout.fragment_web; } - + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == MessageDetailFragment.REQUEST_UPDATE_COMMENT && data != null && data.getExtras() != null) { webComment.setText(getString(R.string.web_newscomment_count, data.getExtras() - .getInt("commentNum"))); + .getInt("commentNum"))); } } - + @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initMenu(); } - + private void initMenu() { setNavigationTitle(mNavigationTitle); initMenu(R.menu.menu_web); mMenuShare = getItemMenu(R.id.menu_share); mMenuCollect = getItemMenu(R.id.menu_collect); if (mMenuShare == null || mMenuCollect == null) return; - + mMenuShare.setVisible(mIsTools); mMenuCollect.setVisible(mIsTools); - + if (mIsTools) { mToolBoxEntity = getArguments().getParcelable(ToolBoxEntity.TAG); if (mToolBoxEntity != null && mToolBoxEntity.getMe() != null && mToolBoxEntity.getMe() - .isToolkitFavorite()) { + .isToolkitFavorite()) { mMenuCollect.setIcon(R.drawable.menu_ic_collect_select); } else { mMenuCollect.setIcon(R.drawable.menu_ic_collect_unselect); } } } - + @Override public void onMenuItemClick(MenuItem menuItem) { switch (menuItem.getItemId()) { @@ -144,7 +147,7 @@ public class WebFragment extends NormalFragment { if (mMenuShare != null && mToolBoxEntity != null) { if (getActivity() instanceof BaseActivity) { ((BaseActivity) getActivity()).showShare(mToolBoxEntity.getUrl(), mToolBoxEntity - .getIcon(), mToolBoxEntity.getName(), mToolBoxEntity.getDes(), ShareUtils.ShareType.tools); + .getIcon(), mToolBoxEntity.getName(), mToolBoxEntity.getDes(), ShareUtils.ShareType.tools); } } break; @@ -152,7 +155,7 @@ public class WebFragment extends NormalFragment { CheckLoginUtils.checkLogin(getActivity(), "工具详情-收藏", () -> { mMenuCollect.setEnabled(false); if (mToolBoxEntity.getMe() != null && mToolBoxEntity.getMe() - .isToolkitFavorite()) { + .isToolkitFavorite()) { CollectionUtils.INSTANCE.deleteCollection(getContext(), mToolBoxEntity.getId(), CollectionUtils.CollectionType.toolkit, new CollectionUtils.OnCollectionListener() { @Override public void onSuccess() { @@ -161,14 +164,14 @@ public class WebFragment extends NormalFragment { mMenuCollect.setIcon(R.drawable.menu_ic_collect_unselect); toast(R.string.collection_cancel); } - + @Override public void onError() { mMenuCollect.setEnabled(true); toast(R.string.collection_cancel_failure); } }); - + } else { CollectionUtils.INSTANCE.postCollection(getContext(), mToolBoxEntity.getId(), CollectionUtils.CollectionType.toolkit, new CollectionUtils.OnCollectionListener() { @Override @@ -183,7 +186,7 @@ public class WebFragment extends NormalFragment { mMenuCollect.setIcon(R.drawable.menu_ic_collect_select); toast(R.string.collection_success); } - + @Override public void onError() { mMenuCollect.setEnabled(true); @@ -195,25 +198,26 @@ public class WebFragment extends NormalFragment { break; } } - + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); - + Bundle args = getArguments(); - + String webUrl = args.getString(EntranceUtils.KEY_URL); - + mIsBindWechat = args.getBoolean(KEY_IS_BIND_WECHAT, false); mIsTools = args.getBoolean(KEY_ISTOOLS, false); + mAutoCompletionTitle = args.getBoolean(KEY_COMPLETION_TITLE, true); mNavigationTitle = args.getString(EntranceUtils.KEY_GAMENAME); newsId = args.getString(EntranceUtils.KEY_NEWSID); mIsBackStackDisabled = args.getBoolean(KEY_REQUIRE_BACK_CONFIRMATION); mBackConfirmationContent = args.getString(KEY_BACK_CONFIRMATION_CONTENT); mGameName = args.getString(KEY_GAME_NAME); boolean leaveWebpageToHandleTitle = args.getBoolean(KEY_LEAVE_WEB_PAGE_TO_HANDLE_TITLE, false); - + WebSettings settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { @@ -223,21 +227,21 @@ public class WebFragment extends NormalFragment { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { settings.setSafeBrowsingEnabled(false); } - + mTimeElapsedHelper = new TimeElapsedHelper(this); - + DWebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG || ("internal").equals(BuildConfig.FLAVOR)); - + // 适配大于屏幕宽度的页面 settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setDomStorageEnabled(true); - + // 自适应屏幕 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING); } - + // 用webview打开url mWebView.setWebViewClient(new WebViewClient() { @Override @@ -248,7 +252,7 @@ public class WebFragment extends NormalFragment { return false; } } - + @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); @@ -258,17 +262,17 @@ public class WebFragment extends NormalFragment { } } }); - + // 页面里的下载跳转到自带浏览器 mWebView.setDownloadListener((url, userAgent, contentDisposition, mimetype, contentLength) -> { Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); }); - + //设置加载进度条 mWebView.setWebChromeClient(new WebChromeClient() { - + @Override public void onProgressChanged(WebView view, int newProgress) { progressBar.setProgress(newProgress); @@ -283,12 +287,12 @@ public class WebFragment extends NormalFragment { } } } - + @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); // title 有可能超出边界 - if (TextUtils.isEmpty(newsId) && TextUtils.isEmpty(mNavigationTitle) && !mIsTools) { + if (TextUtils.isEmpty(newsId) && TextUtils.isEmpty(mNavigationTitle) && !mIsTools && mAutoCompletionTitle) { mNavigationTitle = title; setNavigationTitle(mNavigationTitle); } @@ -304,40 +308,40 @@ public class WebFragment extends NormalFragment { mWebView.loadUrl(webUrl); } mWebView.addJavascriptObject(new DefaultJsApi(requireContext()), null); - + if (newsId != null) { getNewsCommentNum(); } } - + @Override public void onDestroy() { super.onDestroy(); - + if (!TextUtils.isEmpty(mGameName)) { MtaHelper.onEventWithTime("H5页面", mTimeElapsedHelper.getElapsedTime(), "停留", mGameName); } } - + public void getNewsCommentNum() { RetrofitManager.getInstance(getContext()) - .getApi() - .getNewsCommentnum(newsId, Utils.getTime(getContext())) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - - @Override - public void onNext(List response) { - super.onNext(response); - if (response.size() > 0 && response.get(0).getNum() > 0) { - commentNum = response.get(0).getNum(); - webComment.setText("查看评论(" + response.get(0).getNum() + ")"); + .getApi() + .getNewsCommentnum(newsId, Utils.getTime(getContext())) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response>() { + + @Override + public void onNext(List response) { + super.onNext(response); + if (response.size() > 0 && response.get(0).getNum() > 0) { + commentNum = response.get(0).getNum(); + webComment.setText("查看评论(" + response.get(0).getNum() + ")"); + } } - } - }); + }); } - + @OnClick(R.id.web_comment) public void onWebClick(View v) { if (v == webComment) { @@ -345,18 +349,19 @@ public class WebFragment extends NormalFragment { startActivityForResult(intent, MessageDetailFragment.REQUEST_UPDATE_COMMENT); } } - + @Override public boolean onBackPressed() { if (mIsBackStackDisabled) { DialogHelper.showDialog( - requireContext(), - "注意", - mBackConfirmationContent, - "确定退出", - "暂不", - () -> requireActivity().finish(), - () -> {}, true, "H5页面", "退出弹窗"); + requireContext(), + "注意", + mBackConfirmationContent, + "确定退出", + "暂不", + () -> requireActivity().finish(), + () -> { + }, true, "H5页面", "退出弹窗"); return true; } else if (mWebView.canGoBack()) { mWebView.goBack(); @@ -364,13 +369,13 @@ public class WebFragment extends NormalFragment { } return false; } - + @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBReuse bean) { // 是绑定微信页面时,登录后刷新页面 if (mIsBindWechat) { // 登录 if (bean.getType().equals(PersonalFragment.LOGIN_TAG) || bean.getType() - .equals(Constants.EB_QUIT_LOGIN)) { + .equals(Constants.EB_QUIT_LOGIN)) { mWebView.reload(); } } diff --git a/app/src/main/res/drawable-xxhdpi/help_result_empty.png b/app/src/main/res/drawable-xxhdpi/help_result_empty.png new file mode 100644 index 0000000000..d41deb8021 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/help_result_empty.png differ diff --git a/app/src/main/res/layout/dialog_game_collect.xml b/app/src/main/res/layout/dialog_game_collect.xml index 42becdf602..2494acc0c9 100644 --- a/app/src/main/res/layout/dialog_game_collect.xml +++ b/app/src/main/res/layout/dialog_game_collect.xml @@ -1,5 +1,6 @@ - + android:layout_height="wrap_content" + android:paddingTop="8dp" + android:paddingBottom="16dp" + app:maxHeight="266dp"> + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file