Merge branch 'dev' of gitlab.ghzhushou.com:halo/assistant-android into dev

This commit is contained in:
kehaoyuan
2018-08-09 16:51:19 +08:00
14 changed files with 419 additions and 251 deletions

View File

@ -5,8 +5,10 @@ import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.text.TextUtils
import com.gh.base.fragment.BaseFragment_TabLayout
import com.gh.common.util.EntranceUtils.*
import com.gh.gamecenter.*
import com.gh.gamecenter.download.DownloadFragment.Companion.INDEX_UPDATE
import com.gh.gamecenter.entity.SubjectData
import com.gh.gamecenter.qa.answer.detail.AnswerDetailActivity
import com.gh.gamecenter.qa.questions.detail.QuestionsDetailActivity
@ -19,6 +21,31 @@ import com.lightgame.utils.Utils
*/
object DirectUtils {
@JvmStatic
fun directToSpecificPage(context: Context, type: String, link: String, text: String? = "", entrance: String? = null) {
when (type) {
EntranceUtils.HOST_ARTICLE -> directToArticle(context, id = link, entrance = entrance)
EntranceUtils.HOST_GAME -> directToGameDetail(context, id = link, entrance = entrance)
EntranceUtils.HOST_GAME_DOWNLOAD -> directToGameDetail(context, id = link, entrance = entrance, autoDownload = true)
EntranceUtils.HOST_COLUMN -> directToSubject(context, id = link, subjectName = text, entrance = entrance)
EntranceUtils.HOST_QUESTION -> directToQuestionDetail(context, id = link, entrance = entrance)
EntranceUtils.HOST_ANSWER -> directToAnswerDetail(context, id = link, entrance = entrance)
EntranceUtils.HOST_WEB -> directToWebView(context, url = link, entrance = entrance)
EntranceUtils.HOST_DOWNLOAD -> directToDownloadManagerAndStartDownload(context, gameId = link, packageName = text, entrance = entrance)
EntranceUtils.HOST_UPDATE -> directToDownloadManagerAndStartUpdate(context, gameId = link, packageName = text, entrance = entrance)
EntranceUtils.HOST_LIBAO -> directToGiftDetail(context, giftId = link, entrance = entrance)
}
}
@JvmStatic
fun directToArticle(context: Context, id: String, entrance: String? = null) {
val bundle = Bundle()
@ -29,11 +56,12 @@ object DirectUtils {
}
@JvmStatic
fun directToGameDetail(context: Context, id: String, entrance: String? = null) {
fun directToGameDetail(context: Context, id: String, entrance: String? = null, autoDownload: Boolean? = null) {
val bundle = Bundle()
bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER)
bundle.putString(KEY_TO, GameDetailActivity::class.java.simpleName)
bundle.putString(KEY_GAMEID, id)
bundle.putBoolean(KEY_AUTO_DOWNLOAD, autoDownload ?: false)
EntranceUtils.jumpActivity(context, bundle)
}
@ -60,12 +88,35 @@ object DirectUtils {
}
@JvmStatic
fun directToDownloadManager(context: Context, id: String, packageName: String, entrance: String? = null) {
fun directToDownloadManager(context: Context, entrance: String? = null) {
val bundle = Bundle()
bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER)
bundle.putString(KEY_TO, DownloadManagerActivity.TAG)
bundle.putString(KEY_GAMEID, id)
EntranceUtils.jumpActivity(context, bundle)
}
@JvmStatic
fun directToDownloadManagerAndStartDownload(context: Context, gameId: String? = "", packageName: String? = "", entrance: String? = null) {
DownloadHelper.createABrandNewDownloadTaskQuietly(gameId, packageName) {
val bundle = Bundle()
bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER)
bundle.putString(KEY_TO, DownloadManagerActivity.TAG)
bundle.putString(KEY_GAMEID, gameId)
bundle.putString(KEY_PACKAGENAME, packageName)
bundle.putBoolean(KEY_AUTO_DOWNLOAD, true)
EntranceUtils.jumpActivity(context, bundle)
}
}
@JvmStatic
fun directToDownloadManagerAndStartUpdate(context: Context, gameId: String? = "", packageName: String? = "", entrance: String? = null) {
val bundle = Bundle()
bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER)
bundle.putString(KEY_TO, DownloadManagerActivity.TAG)
bundle.putString(KEY_GAMEID, gameId)
bundle.putString(KEY_PACKAGENAME, packageName)
bundle.putInt(BaseFragment_TabLayout.PAGE_INDEX, INDEX_UPDATE)
bundle.putBoolean(KEY_AUTO_UPDATE, true)
EntranceUtils.jumpActivity(context, bundle)
}
@ -145,4 +196,12 @@ object DirectUtils {
}
}
@JvmStatic
fun directToGiftDetail(context: Context, giftId: String, entrance: String? = null) {
val bundle = Bundle()
bundle.putString(KEY_ENTRANCE, entrance ?: ENTRANCE_BROWSER)
bundle.putString(EntranceUtils.KEY_TO, LibaoDetailActivity::class.java.simpleName)
bundle.putString(EntranceUtils.KEY_ID, giftId)
EntranceUtils.jumpActivity(context, bundle)
}
}

View File

@ -0,0 +1,55 @@
package com.gh.common.util
import com.gh.download.DownloadManager
import com.gh.gamecenter.entity.GameEntity
import com.gh.gamecenter.retrofit.Response
import com.gh.gamecenter.retrofit.RetrofitManager
import com.halo.assistant.HaloApp
import io.reactivex.schedulers.Schedulers
import retrofit2.HttpException
/**
* 不想写这个类的,但是与其在一个糟糕的类里插入同样的代码,我想独立写一个类相较而已还没那么糟糕
*/
object DownloadHelper {
@JvmStatic
fun createABrandNewDownloadTaskQuietly(gameId: String? = "", packageName: String? = "") {
createABrandNewDownloadTaskQuietly(gameId, packageName) {}
}
/**
* 根据 game_id 和 packageName 悄悄地开启一个下载任务,如果可以的话
* @param block 成功添加下载任务后执行的代码块
*/
fun createABrandNewDownloadTaskQuietly(gameId: String? = "", packageName: String? = "", block: () -> Unit) {
RetrofitManager.getInstance(HaloApp.getInstance().application)
.api
.getGameDigest(gameId)
.subscribeOn(Schedulers.io())
.subscribe(object : Response<GameEntity>() {
override fun onResponse(response: GameEntity?) {
response?.let {
if (response.getApk().size > 1) {
for (apk in response.getApk()) {
if (packageName == apk.packageName) {
DownloadManager.createDownload(HaloApp.getInstance().application,
apk, response, "", EntranceUtils.ENTRANCE_RECOMMEND, "", null)
block.invoke()
}
}
} else if (response.getApk().size == 1) {
DownloadManager.createDownload(HaloApp.getInstance().application,
response, "", EntranceUtils.ENTRANCE_RECOMMEND, "", null)
block.invoke()
}
}
}
override fun onFailure(e: HttpException?) {
e?.printStackTrace()
}
})
}
}

View File

@ -26,10 +26,14 @@ public class EntranceUtils {
public static final String KEY_GAMENAME = "gameName";
public static final String HOST_ARTICLE = "article";
public static final String HOST_GAME = "game";
public static final String HOST_GAME_DOWNLOAD = "game_download";
public static final String HOST_COLUMN = "column";
public static final String HOST_WEB = "web";
public static final String HOST_QQ = "qq";
public static final String HOST_DOWNLOAD = "download";
public static final String HOST_UPDATE = "update";
public static final String HOST_LIBAO = "libao";
public static final String HOST_COMMUNITY = "community";
public static final String HOST_SUGGESTION = "suggestion";
public static final String HOST_ANSWER = "answer";
public static final String HOST_QUESTION = "question";
@ -43,6 +47,7 @@ public class EntranceUtils {
public static final String ENTRANCE_UMENG = "(友盟推送)";
public static final String ENTRANCE_MIPUSH = "(小米推送)";
public static final String ENTRANCE_DOWNLOAD = "(下载跳转)";
public static final String ENTRANCE_RECOMMEND = "(落地页)";
public static final String KEY_SUGGEST_HINT_TYPE = "suggestHintType";
public static final String KEY_PACKAGENAME = "packageName";
public static final String KEY_PLATFORM = "platform";
@ -89,6 +94,8 @@ public class EntranceUtils {
public static final String KEY_USER_ID = "user_id";
public static final String KEY_QUESTION_TAG = "question_tag";
public static final String KEY_COLUMN_ID = "column_id";
public static final String KEY_AUTO_DOWNLOAD = "auto_download";
public static final String KEY_AUTO_UPDATE = "auto_update";
public static void jumpActivity(Context context, Bundle bundle) {

View File

@ -11,6 +11,7 @@ class GsonUtils private constructor() {
val mGson: Gson = Gson()
companion object {
@JvmStatic
fun getInstance(): GsonUtils {
return Inner.anotherSingle
}
@ -32,4 +33,13 @@ class GsonUtils private constructor() {
fun toJson(any: Any): String {
return mGson.toJson(any)
}
}
// Use Kotlin Extension to do the same trick.
inline fun <reified T : Any> String.fromObject(): T {
return GsonUtils.getInstance().mGson.fromJson(this, T::class.java)
}
inline fun <reified T : Any> T.toJson(): String {
return GsonUtils.getInstance().mGson.toJson(this)
}

View File

@ -39,6 +39,7 @@ import com.gh.common.util.DataLogUtils;
import com.gh.common.util.DataUtils;
import com.gh.common.util.DeviceUtils;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.DirectUtils;
import com.gh.common.util.EntranceUtils;
import com.gh.common.util.GameUtils;
import com.gh.common.util.GsonUtils;
@ -51,9 +52,11 @@ import com.gh.download.DownloadManager;
import com.gh.gamecenter.db.info.GameInfo;
import com.gh.gamecenter.db.info.InstallInfo;
import com.gh.gamecenter.entity.ApkEntity;
import com.gh.gamecenter.entity.CommunityEntity;
import com.gh.gamecenter.entity.GameDigestEntity;
import com.gh.gamecenter.entity.GameEntity;
import com.gh.gamecenter.entity.GameUpdateEntity;
import com.gh.gamecenter.entity.InnerMetaInfoEntity;
import com.gh.gamecenter.entity.SettingsEntity;
import com.gh.gamecenter.eventbus.EBNetworkState;
import com.gh.gamecenter.eventbus.EBPackage;
@ -95,7 +98,10 @@ import org.greenrobot.eventbus.ThreadMode;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Enumeration;
@ -137,6 +143,7 @@ public class MainActivity extends BaseActivity {
private static final int SKIP_SETTING_REQUEST = 14;
private boolean isSkipped;
public static boolean isNewFirstLaunch;
public static boolean openCommunityWithDefaultIdForTheFirsTime; // 是否根据 META-INFO 里的 JSON 自动选择默认的社区 ID
Runnable skipRun = new Runnable() {
@Override
@ -966,36 +973,59 @@ public class MainActivity extends BaseActivity {
// 获取META-INF中的plugin_update 文件判断是否从游戏插件中下载的app是则获取游戏id启动游戏更新下载该游戏
private void getPluginUpdate() {
ApplicationInfo appinfo = getApplicationInfo();
String sourceDir = appinfo.sourceDir;
ZipFile zipfile = null;
try {
zipfile = new ZipFile(sourceDir);
Enumeration<?> entries = zipfile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = ((ZipEntry) entries.nextElement());
String entryName = entry.getName();
if (entryName.contains("gh_assist")) { // TODO: 20/09/17 统一入口
String packageName = entryName.substring(entryName.lastIndexOf("_") + 1);
Intent intent = new Intent(MainActivity.this, DownloadManagerActivity.class);
intent.putExtra("currentItem", 1);
intent.putExtra("packageName", packageName);
intent.putExtra(EntranceUtils.KEY_ENTRANCE, "(游戏插件)");
startActivity(intent);
break;
HaloApp.getInstance().getMainExecutor().execute(() -> {
ApplicationInfo appinfo = getApplicationInfo();
String sourceDir = appinfo.sourceDir;
ZipFile zipfile = null;
try {
zipfile = new ZipFile(sourceDir);
Enumeration<?> entries = zipfile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = ((ZipEntry) entries.nextElement());
String entryName = entry.getName();
if (entryName.contains("gh_assist")) { // TODO: 20/09/17 统一入口
String packageName = entryName.substring(entryName.lastIndexOf("_") + 1);
Intent intent = new Intent(MainActivity.this, DownloadManagerActivity.class);
intent.putExtra("currentItem", 1);
intent.putExtra("packageName", packageName);
intent.putExtra(EntranceUtils.KEY_ENTRANCE, "(游戏插件)");
startActivity(intent);
break;
} else if (entryName.contains("halo_skip.json")) {
InputStream in = zipfile.getInputStream(entry);
if (in != null) {
final Gson gson = new Gson();
final BufferedReader reader = new BufferedReader(new InputStreamReader(in));
InnerMetaInfoEntity info = gson.fromJson(reader, InnerMetaInfoEntity.class);
if (info != null) {
if (EntranceUtils.HOST_COMMUNITY.equals(info.getType())) {
openCommunityWithDefaultIdForTheFirsTime = true;
UserManager.getInstance().setCommunityData(new CommunityEntity(info.getLink(), info.getText()));
runOnUiThread(() -> {
mMainWrapperFragment.setCurrentItem(MainWrapperFragment.INDEX_ASK);
});
} else {
DirectUtils.directToSpecificPage(this, info.getType(), info.getLink(), info.getText(), EntranceUtils.KEY_PLUGIN);
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (zipfile != null) {
try {
zipfile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (zipfile != null) {
try {
zipfile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
}
// 连接上网络事件

View File

@ -20,7 +20,6 @@ import static com.gh.common.util.EntranceUtils.HOST_QUESTION;
import static com.gh.common.util.EntranceUtils.HOST_SUGGESTION;
import static com.gh.common.util.EntranceUtils.KEY_GAME_NAME;
import static com.gh.common.util.EntranceUtils.KEY_NAME;
import static com.gh.common.util.EntranceUtils.KEY_PACKAGENAME;
import static com.gh.common.util.EntranceUtils.KEY_PLATFORM;
import static com.gh.common.util.EntranceUtils.KEY_VERSION;
@ -57,7 +56,7 @@ public class SkipActivity extends BaseActivity {
DirectUtils.directToArticle(this, id, ENTRANCE_BROWSER);
break;
case HOST_GAME:
DirectUtils.directToGameDetail(this, id, ENTRANCE_BROWSER);
DirectUtils.directToGameDetail(this, id, ENTRANCE_BROWSER, false);
break;
case HOST_COLUMN:
DirectUtils.directToSubject(this, id, uri.getQueryParameter(KEY_NAME), ENTRANCE_BROWSER);
@ -72,7 +71,7 @@ public class SkipActivity extends BaseActivity {
DirectUtils.directToFeedback(this, content, ENTRANCE_BROWSER);
break;
case HOST_DOWNLOAD:
DirectUtils.directToDownloadManager(this, id, uri.getQueryParameter(KEY_PACKAGENAME), ENTRANCE_BROWSER);
DirectUtils.directToDownloadManager(this, ENTRANCE_BROWSER);
break;
case HOST_ANSWER:
DirectUtils.directToAnswerDetail(this, id, ENTRANCE_BROWSER);

View File

@ -1,166 +0,0 @@
package com.gh.gamecenter.download;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import com.gh.base.fragment.BaseFragment_TabLayout;
import com.gh.download.DownloadManager;
import com.gh.gamecenter.DownloadManagerActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.eventbus.EBDownloadChanged;
import com.gh.gamecenter.eventbus.EBMiPush;
import com.gh.gamecenter.eventbus.EBSkip;
import com.gh.gamecenter.eventbus.EBUISwitch;
import com.gh.gamecenter.manager.PackageManager;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
/**
* @author CsHeng
* @Date 30/06/2017
* @Time 11:11 AM
*/
public class DownloadFragment extends BaseFragment_TabLayout {
public static final int INDEX_DOWNLOAD = 0;
public static final int INDEX_UPDATE = 1;
public static final int INDEX_KC = 2;
TextView mDownloadNumber;
TextView mUpdateNumber;
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
mViewPager.setCurrentItem(DownloadManagerActivity.INDEX_DOWNLOAD);
}
};
@Override
protected void initFragmentList(List<Fragment> fragments) {
fragments.add(new GameDownloadFragment());
fragments.add(new GameUpdateFragment());
fragments.add(new FileSendFragment());
}
@Override
protected void initTabTitleList(List<String> tabTitleList) {
tabTitleList.add(getString(R.string.download_game));
tabTitleList.add(getString(R.string.download_tab_update));
tabTitleList.add(getString(R.string.download_send_traffic_free));
}
@Override
protected View provideTabView(int position, String tabTitle) {
if (position == INDEX_KC) {
return super.provideTabView(position, tabTitle);
}
View view = LayoutInflater.from(getContext()).inflate(R.layout.tab_item_download_number, null);
((TextView) view.findViewById(R.id.tab_download_title)).setText(tabTitle);
if (INDEX_DOWNLOAD == position) {
mDownloadNumber = view.findViewById(R.id.tab_download_number);
} else if (INDEX_UPDATE == position) {
mUpdateNumber = view.findViewById(R.id.tab_download_number);
}
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setNavigationTitle(getString(R.string.title_downloadmanager));
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
int updateSize = PackageManager.INSTANCE.getUpdateList().size();
if (updateSize != 0) {
mUpdateNumber.setVisibility(View.VISIBLE);
mUpdateNumber.setText(String.valueOf(updateSize));
} else {
mUpdateNumber.setVisibility(View.GONE);
}
int downloadSize = DownloadManager.getInstance(getContext()).getAll().size();
if (downloadSize != 0) {
mDownloadNumber.setVisibility(View.VISIBLE);
mDownloadNumber.setText(String.valueOf(downloadSize));
} else {
mDownloadNumber.setVisibility(View.GONE);
}
}
@Override
public void onPageSelected(int index) {
EventBus.getDefault().post(new EBUISwitch(DownloadManagerActivity.TAG, index));
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBMiPush mipush) {
if ("plugin_install".equals(mipush.getFrom())) {
mViewPager.setCurrentItem(DownloadManagerActivity.INDEX_DOWNLOAD);
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBDownloadChanged changed) {
if ("download".equals(changed.getType())) {
if (changed.getVisibility() == View.VISIBLE) {
mDownloadNumber.setVisibility(View.VISIBLE);
} else if (changed.getVisibility() == View.GONE) {
mDownloadNumber.setVisibility(View.GONE);
} else if (changed.getVisibility() == View.INVISIBLE) {
mDownloadNumber.setVisibility(View.INVISIBLE);
}
mDownloadNumber.setText(String.valueOf(changed.getSize()));
} else if ("update".equals(changed.getType())) {
if (changed.getSize() == -1) {
int number = Integer.valueOf(mUpdateNumber.getText().toString());
if (number == 1) {
mUpdateNumber.setVisibility(View.GONE);
} else {
mUpdateNumber.setText(String.valueOf(number - 1));
}
} else {
if (changed.getSize() != 0) {
if (changed.getVisibility() == View.VISIBLE) {
mUpdateNumber.setVisibility(View.VISIBLE);
} else if (changed.getVisibility() == View.GONE) {
mUpdateNumber.setVisibility(View.GONE);
} else if (changed.getVisibility() == View.INVISIBLE) {
mUpdateNumber.setVisibility(View.INVISIBLE);
}
mUpdateNumber.setText(String.valueOf(changed.getSize()));
} else {
mUpdateNumber.setVisibility(View.GONE);
}
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBSkip skip) {
if (DownloadManagerActivity.TAG.equals(skip.getType())) {
if (skip.getCurrentItem() == DownloadManagerActivity.INDEX_UPDATE) {
if (getView() != null) {
getView().postDelayed(mRunnable, 300);
}
}
}
}
}

View File

@ -0,0 +1,141 @@
package com.gh.gamecenter.download
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.widget.TextView
import com.gh.base.fragment.BaseFragment_TabLayout
import com.gh.download.DownloadManager
import com.gh.gamecenter.DownloadManagerActivity
import com.gh.gamecenter.R
import com.gh.gamecenter.eventbus.EBDownloadChanged
import com.gh.gamecenter.eventbus.EBMiPush
import com.gh.gamecenter.eventbus.EBSkip
import com.gh.gamecenter.eventbus.EBUISwitch
import com.gh.gamecenter.manager.PackageManager
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class DownloadFragment : BaseFragment_TabLayout() {
companion object {
val INDEX_DOWNLOAD = 0
val INDEX_UPDATE = 1
val INDEX_KC = 2
}
lateinit var mDownloadNumber: TextView
lateinit var mUpdateNumber: TextView
override fun initFragmentList(fragments: MutableList<Fragment>) {
fragments.add(GameDownloadFragment())
fragments.add(GameUpdateFragment())
fragments.add(FileSendFragment())
}
override fun initTabTitleList(tabTitleList: MutableList<String>) {
tabTitleList.add(getString(R.string.download_game))
tabTitleList.add(getString(R.string.download_tab_update))
tabTitleList.add(getString(R.string.download_send_traffic_free))
}
override fun provideTabView(position: Int, tabTitle: String): View? {
if (position == INDEX_KC) {
return super.provideTabView(position, tabTitle)
}
val view = LayoutInflater.from(context).inflate(R.layout.tab_item_download_number, null)
(view.findViewById<View>(R.id.tab_download_title) as TextView).text = tabTitle
if (INDEX_DOWNLOAD == position) {
mDownloadNumber = view.findViewById(R.id.tab_download_number)
} else if (INDEX_UPDATE == position) {
mUpdateNumber = view.findViewById(R.id.tab_download_number)
}
return view
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
setNavigationTitle(getString(R.string.title_downloadmanager))
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val updateSize = PackageManager.getUpdateList().size
if (updateSize != 0) {
mUpdateNumber.visibility = View.VISIBLE
mUpdateNumber.text = updateSize.toString()
} else {
mUpdateNumber.visibility = View.GONE
}
val downloadSize = DownloadManager.getInstance(context).all.size
if (downloadSize != 0) {
mDownloadNumber.visibility = View.VISIBLE
mDownloadNumber.text = downloadSize.toString()
} else {
mDownloadNumber.visibility = View.GONE
}
}
override fun onPageSelected(index: Int) {
EventBus.getDefault().post(EBUISwitch(DownloadManagerActivity.TAG, index))
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEventMainThread(mipush: EBMiPush) {
if ("plugin_install" == mipush.from) {
mViewPager.currentItem = DownloadManagerActivity.INDEX_DOWNLOAD
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEventMainThread(changed: EBDownloadChanged) {
if ("download" == changed.type) {
if (changed.visibility == View.VISIBLE) {
mDownloadNumber.visibility = View.VISIBLE
} else if (changed.visibility == View.GONE) {
mDownloadNumber.visibility = View.GONE
} else if (changed.visibility == View.INVISIBLE) {
mDownloadNumber.visibility = View.INVISIBLE
}
mDownloadNumber.text = changed.size.toString()
} else if ("update" == changed.type) {
if (changed.size == -1) {
val number = Integer.valueOf(mUpdateNumber.text.toString())
if (number == 1) {
mUpdateNumber.visibility = View.GONE
} else {
mUpdateNumber.text = (number - 1).toString()
}
} else {
if (changed.size != 0) {
if (changed.visibility == View.VISIBLE) {
mUpdateNumber.visibility = View.VISIBLE
} else if (changed.visibility == View.GONE) {
mUpdateNumber.visibility = View.GONE
} else if (changed.visibility == View.INVISIBLE) {
mUpdateNumber.visibility = View.INVISIBLE
}
mUpdateNumber.text = changed.size.toString()
} else {
mUpdateNumber.visibility = View.GONE
}
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEventMainThread(skip: EBSkip) {
if (DownloadManagerActivity.TAG == skip.type) {
if (skip.currentItem == DownloadManagerActivity.INDEX_UPDATE) {
if (view != null) {
view!!.postDelayed({ mViewPager.currentItem = DownloadManagerActivity.INDEX_DOWNLOAD }, 300)
}
}
}
}
}

View File

@ -53,7 +53,7 @@ public class GameUpdateFragment extends BaseFragment {
super.initView(view);
Intent intent = getActivity().getIntent();
String packageName = intent.getStringExtra("packageName");
boolean isUpdate = intent.getBooleanExtra("isPushIntent", false);
boolean isUpdate = intent.getBooleanExtra(EntranceUtils.KEY_AUTO_UPDATE, false);
String entrance = intent.getStringExtra(EntranceUtils.KEY_ENTRANCE);
mGameUpdateLoading = (LinearLayout) view.findViewById(R.id.gameupdate_ll_loading);

View File

@ -0,0 +1,5 @@
package com.gh.gamecenter.entity
data class InnerMetaInfoEntity(var link: String? = "",
var type: String? = "",
var text: String? = "")

View File

@ -206,4 +206,8 @@ public class MainWrapperFragment extends BaseFragment_ViewPager_Checkable {
getDiscoveryData(true);
}
}
public void setCurrentItem(int page) {
mViewPager.setCurrentItem(page, false);
}
}

View File

@ -71,7 +71,6 @@ import retrofit2.HttpException;
*/
public class GameDetailFragment extends NormalFragment {
public static final int INDEX_DYNAMIC = 0;
public static final int INDEX_DESCRIPTION = 1;
public static final String SKIP_XINXI = "skipXinxi";
@ -120,6 +119,7 @@ public class GameDetailFragment extends NormalFragment {
private boolean mIsTouchScreen = false;
private boolean mIsShowKaifuHint;
private boolean mIsScrollToKaiFu;
private boolean mAutoDownload;
private boolean mSwitchToFirstTabInStartup;
private int mCurVpPosition;
@ -168,7 +168,6 @@ public class GameDetailFragment extends NormalFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setNavigationTitle("");
mViewPager.setScrollable(true);
@ -176,13 +175,13 @@ public class GameDetailFragment extends NormalFragment {
mGameId = args.getString(EntranceUtils.KEY_GAMEID);
mSwitchToFirstTabInStartup = args.getBoolean(EntranceUtils.KEY_TARGET);
mAutoDownload = args.getBoolean(EntranceUtils.KEY_AUTO_DOWNLOAD);
if (mGameId == null) {
mGameEntity = args.getParcelable(GameEntity.TAG);
mTraceEvent = args.getParcelable(EntranceUtils.KEY_TRACE_EVENT);
if (mGameEntity != null) {
mGameId = mGameEntity.getId();
// setNavigationTitle(mGameEntity.getName());
title = mGameEntity.getName();
}
}
@ -228,20 +227,17 @@ public class GameDetailFragment extends NormalFragment {
}
});
mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
int total = appBarLayout.getTotalScrollRange();
if (Math.abs(verticalOffset) > total / 2) {
setNavigationTitle(mGameEntity != null ? mGameEntity.getName() : "");
} else {
setNavigationTitle("");
}
mAppBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> {
int total = appBarLayout.getTotalScrollRange();
if (Math.abs(verticalOffset) > total / 2) {
setNavigationTitle(mGameEntity != null ? mGameEntity.getName() : "");
} else {
setNavigationTitle("");
}
if (Math.abs(verticalOffset) == total && mIsScrollToKaiFu) {
mIsScrollToKaiFu = false;
EventBus.getDefault().post(new EBReuse(SCROLL_TO_KAIFU));
}
if (Math.abs(verticalOffset) == total && mIsScrollToKaiFu) {
mIsScrollToKaiFu = false;
EventBus.getDefault().post(new EBReuse(SCROLL_TO_KAIFU));
}
});
@ -431,7 +427,8 @@ public class GameDetailFragment extends NormalFragment {
mViewPager.setAdapter(BaseFragmentPagerAdapter.newInstance(getChildFragmentManager(), list));
initGameDetailTop();
DetailDownloadUtils.detailInitDownload(getDetailViewHolder(), true);
DetailViewHolder viewHolder = getDetailViewHolder();
DetailDownloadUtils.detailInitDownload(viewHolder, true);
if (mGameDetailEntity.getMe() == null || !mGameDetailEntity.getMe().isGameConcerned()) {
if (new InstallManager(getContext()).findInstallById(mGameEntity.getId()) == null) {
@ -439,6 +436,11 @@ public class GameDetailFragment extends NormalFragment {
}
}
if (mAutoDownload) {
viewHolder.mDownloadPb.performClick();
mAutoDownload = false;
}
if (mSwitchToFirstTabInStartup) mViewPager.setCurrentItem(0);
}
});
@ -573,40 +575,32 @@ public class GameDetailFragment extends NormalFragment {
}
});
} else {
DialogUtils.showCancelDialog(getContext(), new DialogUtils.ConfirmListener() {
@Override
public void onConfirm() {
// 取消关注
ConcernUtils.INSTANCE.deleteConcernData(getContext(), mGameEntity.getId()
, new ConcernUtils.onConcernListener() {
@Override
public void onSuccess() {
Map<String, Object> kv = new HashMap<>();
kv.put("状态", "取消关注");
DataUtils.onEvent(getContext(), "游戏关注", mGameEntity.getName(), kv);
DialogUtils.showCancelDialog(getContext(), () -> {
// 取消关注
ConcernUtils.INSTANCE.deleteConcernData(getContext(), mGameEntity.getId()
, new ConcernUtils.onConcernListener() {
@Override
public void onSuccess() {
Map<String, Object> kv = new HashMap<>();
kv.put("状态", "取消关注");
DataUtils.onEvent(getContext(), "游戏关注", mGameEntity.getName(), kv);
DataCollectionUtils.uploadConcern(getContext(),
mGameEntity.getName(), mGameEntity.getId(), "取消关注");
DataCollectionUtils.uploadConcern(getContext(),
mGameEntity.getName(), mGameEntity.getId(), "取消关注");
mGameConcern.setText(getString(R.string.concern));
mGameConcern.setBackgroundResource(R.drawable.button_normal_style);
mGameConcern.setTextColor(0xffffffff);
mGameConcern.setEnabled(true);
}
mGameConcern.setText(getString(R.string.concern));
mGameConcern.setBackgroundResource(R.drawable.button_normal_style);
mGameConcern.setTextColor(0xffffffff);
mGameConcern.setEnabled(true);
}
@Override
public void onError() {
mGameConcern.setEnabled(true);
toast(R.string.cancel_concern_failure);
}
});
}
}, new DialogUtils.CancelListener() {
@Override
public void onCancel() {
mGameConcern.setEnabled(true);
}
});
@Override
public void onError() {
mGameConcern.setEnabled(true);
toast(R.string.cancel_concern_failure);
}
});
}, () -> mGameConcern.setEnabled(true));
}
});
break;

View File

@ -147,7 +147,8 @@ public class AskFragment extends BaseFragment {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (MainActivity.isNewFirstLaunch || UserManager.getInstance().getCommunity() == null
if ((MainActivity.isNewFirstLaunch && !MainActivity.openCommunityWithDefaultIdForTheFirsTime)
|| UserManager.getInstance().getCommunity() == null
|| TextUtils.isEmpty(UserManager.getInstance().getCommunity().getId())) {
showCommunitiesSelectFragment(true);
} else {