diff --git a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java index a497ff04f1..bc7807a2ab 100644 --- a/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java +++ b/app/src/main/java/com/gh/common/util/DetailDownloadUtils.java @@ -111,6 +111,9 @@ public class DetailDownloadUtils { downloadText = status + getDownloadSizeText(viewHolder); } else if (viewHolder.context.getString(R.string.install).equals(status)) { downloadText = viewHolder.context.getString(R.string.install); + } else if (viewHolder.context.getString(R.string.download).equals(status) + && VHelper.isVGame(viewHolder.gameEntity)) { + downloadText = viewHolder.context.getString(R.string.smooth_launch); } else { downloadText = status + (TextUtils.isEmpty(downloadAddWord) ? "" : downloadAddWord) + getDownloadSizeText(viewHolder); } @@ -187,8 +190,13 @@ public class DetailDownloadUtils { viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_NORMAL); } } else if (VHelper.isVGame(viewHolder.gameEntity)) { - viewHolder.mDownloadPb.setText(R.string.smooth_launch); - viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.LAUNCH_OR_OPEN); + if (VHelper.isInstalled(downloadEntity.getPackageName())) { + viewHolder.mDownloadPb.setText(R.string.smooth_launch); + viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.LAUNCH_OR_OPEN); + } else { + viewHolder.mDownloadPb.setText(R.string.smooth_launch); + viewHolder.mDownloadPb.setDownloadType(DownloadProgressBar.DownloadType.INSTALL_NORMAL); + } } else { if (SPUtils.getBoolean(Constants.SP_USE_BROWSER_TO_INSTALL)) { viewHolder.mDownloadPb.setText(R.string.browser_install_install); diff --git a/app/src/main/java/com/gh/common/util/GameUtils.java b/app/src/main/java/com/gh/common/util/GameUtils.java index a4c707635d..4d32d6935b 100644 --- a/app/src/main/java/com/gh/common/util/GameUtils.java +++ b/app/src/main/java/com/gh/common/util/GameUtils.java @@ -148,10 +148,6 @@ public class GameUtils { return context.getString(R.string.launch); } - if ("smooth".equals(gameEntity.getDownloadStatus())) { - return context.getString(R.string.smooth); - } - if (doneCount != 0) { return context.getString(R.string.install); } else if (pluginCount != 0 && !SimulatorGameManager.isSimulatorGame(gameEntity)) { diff --git a/app/src/main/java/com/gh/download/PackageObserver.kt b/app/src/main/java/com/gh/download/PackageObserver.kt index cbed3f39c2..04a8c93dd8 100644 --- a/app/src/main/java/com/gh/download/PackageObserver.kt +++ b/app/src/main/java/com/gh/download/PackageObserver.kt @@ -8,6 +8,8 @@ import com.gh.gamecenter.common.loghub.LoghubUtils import com.gh.gamecenter.core.runOnIoThread import com.gh.common.util.* import com.gh.download.server.BrowserInstallHelper +import com.gh.gamecenter.common.constant.Constants +import com.gh.gamecenter.core.runOnIoThread import com.gh.gamecenter.core.utils.ThirdPartyPackageHelper import com.gh.gamecenter.core.utils.UrlFilterUtils import com.gh.gamecenter.entity.GameDigestEntity @@ -34,6 +36,16 @@ object PackageObserver { private val mPackageViewModel: PackageViewModel by lazy { PackageViewModel(HaloApp.getInstance().application, PackageRepository) } + private val mPackageChangeListenerList: ArrayList = arrayListOf() + + fun registerPackageChangeChangeListener(listener: PackageChangeListener) { + mPackageChangeListenerList.add(listener) + } + + fun unregisterPackageChangeChangeListener(listener: PackageChangeListener) { + mPackageChangeListenerList.remove(listener) + } + @JvmStatic fun onPackageChanged(busFour: EBPackage) { val application = HaloApp.getInstance().application @@ -121,6 +133,11 @@ object PackageObserver { // 更新已安装游戏 deleteInstalledPackage(packageName) } + + for (packageChangeListener in mPackageChangeListenerList) { + packageChangeListener.onChanged(busFour) + } + DataCollectionUtils.uploadInorunstall(application, busFour.type, busFour.packageName) } @@ -181,6 +198,9 @@ object PackageObserver { e.printStackTrace() } LoghubUtils.log(wrapperObject, "halo-api-device-installed", true) + } + fun interface PackageChangeListener { + fun onChanged(data:EBPackage) } } \ No newline at end of file diff --git a/app/src/main/java/com/gh/vspace/VDownloadManagerActivity.kt b/app/src/main/java/com/gh/vspace/VDownloadManagerActivity.kt index 4db3f9d99d..5bbd5ed6b3 100644 --- a/app/src/main/java/com/gh/vspace/VDownloadManagerActivity.kt +++ b/app/src/main/java/com/gh/vspace/VDownloadManagerActivity.kt @@ -10,7 +10,7 @@ class VDownloadManagerActivity: ToolBarActivity() { super.onCreate(savedInstanceState) if (savedInstanceState == null) { - supportFragmentManager.beginTransaction().replace(R.id.placeholder, VDownloadManagerFragment()).commitAllowingStateLoss() + supportFragmentManager.beginTransaction().replace(R.id.placeholder, VDownloadManagerWrapperFragment()).commitAllowingStateLoss() } } diff --git a/app/src/main/java/com/gh/vspace/VDownloadManagerFragment.kt b/app/src/main/java/com/gh/vspace/VDownloadManagerFragment.kt index 4f658d4a4c..cb1c7cc091 100644 --- a/app/src/main/java/com/gh/vspace/VDownloadManagerFragment.kt +++ b/app/src/main/java/com/gh/vspace/VDownloadManagerFragment.kt @@ -1,9 +1,7 @@ package com.gh.vspace import android.os.Bundle -import android.view.MenuItem import android.view.View -import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.ethanhua.skeleton.Skeleton import com.gh.download.DownloadManager @@ -24,8 +22,6 @@ import com.lightgame.download.DownloadEntity class VDownloadManagerFragment : ListFragment(), IBatchDelete { - private var mManageMenu: MenuItem? = null - private val mAdapter by lazy { VDownloadManagerAdapter(requireContext(), provideListViewModel()) } private val mViewModel: VDownloadManagerViewModel by lazy { viewModelProvider() } private val mBinding by lazy { FragmentListBaseSkeletonBinding.inflate(layoutInflater) } @@ -43,25 +39,6 @@ class VDownloadManagerFragment : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - - initMenu(R.menu.menu_manage) - mManageMenu = getItemMenu(R.id.layout_menu_manage) - mManageMenu?.actionView?.setOnClickListener { - when (mViewModel.currentOptionLiveData.value) { - ManageOption.OPTION_MANAGER -> { - mViewModel.currentOptionLiveData.value = ManageOption.OPTION_CANCEL_SELECT - } - ManageOption.OPTION_CANCEL_SELECT -> { - mViewModel.currentOptionLiveData.value = ManageOption.OPTION_MANAGER - } - } - changeOption(mViewModel.currentOptionLiveData.value ?: ManageOption.OPTION_MANAGER) - } - changeMenuTextByOption() - - mViewModel.currentOptionLiveData.observe(this) { - changeMenuTextByOption() - } } override fun onResume() { @@ -84,7 +61,6 @@ class VDownloadManagerFragment : override fun changeOption(option: ManageOption) { mAdapter.changeOption(option) - changeMenuTextByOption() } override fun getItemDecoration(): RecyclerView.ItemDecoration { @@ -101,14 +77,4 @@ class VDownloadManagerFragment : override fun shouldLoadMore() = false - private fun changeMenuTextByOption() { - (mManageMenu?.actionView as? TextView)?.apply { - text = when (mViewModel.currentOptionLiveData.value) { - ManageOption.OPTION_MANAGER -> "编辑" - ManageOption.OPTION_CANCEL_SELECT -> "取消" - else -> "" - } - } - } - } \ No newline at end of file diff --git a/app/src/main/java/com/gh/vspace/VDownloadManagerViewModel.kt b/app/src/main/java/com/gh/vspace/VDownloadManagerViewModel.kt index 508bd4169d..fcd1646b58 100644 --- a/app/src/main/java/com/gh/vspace/VDownloadManagerViewModel.kt +++ b/app/src/main/java/com/gh/vspace/VDownloadManagerViewModel.kt @@ -1,13 +1,11 @@ package com.gh.vspace import android.app.Application -import androidx.lifecycle.MutableLiveData import com.gh.download.DownloadManager import com.gh.gamecenter.baselist.ListViewModel import com.gh.gamecenter.baselist.LoadType import com.gh.gamecenter.entity.ApkEntity import com.gh.gamecenter.entity.GameEntity -import com.gh.gamecenter.history.ManageOption import com.gh.gamecenter.packagehelper.PackageRepository import com.lightgame.download.DownloadEntity import io.reactivex.Observable @@ -16,8 +14,6 @@ import io.reactivex.Single class VDownloadManagerViewModel(application: Application) : ListViewModel(application) { - var currentOptionLiveData = MutableLiveData(ManageOption.OPTION_MANAGER) - override fun mergeResultLiveData() { mResultLiveData.addSource(mListLiveData) { mResultLiveData.postValue(it) diff --git a/app/src/main/java/com/gh/vspace/VDownloadManagerWrapperFragment.kt b/app/src/main/java/com/gh/vspace/VDownloadManagerWrapperFragment.kt new file mode 100644 index 0000000000..b224ffe9cc --- /dev/null +++ b/app/src/main/java/com/gh/vspace/VDownloadManagerWrapperFragment.kt @@ -0,0 +1,82 @@ +package com.gh.vspace + +import android.os.Bundle +import android.view.MenuItem +import android.view.View +import android.widget.TextView +import androidx.fragment.app.Fragment +import com.gh.gamecenter.R +import com.gh.gamecenter.common.base.fragment.BaseLazyTabFragment +import com.gh.gamecenter.common.utils.viewModelProvider +import com.gh.gamecenter.history.IBatchDelete +import com.gh.gamecenter.history.ManageOption + +class VDownloadManagerWrapperFragment: BaseLazyTabFragment() { + + private var mLastPosition = 0 + private var mManageMenu: MenuItem? = null + private val mViewModel: VDownloadManagerWrapperViewModel by lazy { viewModelProvider() } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + initMenu(R.menu.menu_manage) + mManageMenu = getItemMenu(R.id.layout_menu_manage) + mManageMenu?.actionView?.setOnClickListener { + when (mViewModel.currentOptionLiveData.value) { + ManageOption.OPTION_MANAGER -> { + mViewModel.currentOptionLiveData.value = ManageOption.OPTION_CANCEL_SELECT + } + ManageOption.OPTION_CANCEL_SELECT -> { + mViewModel.currentOptionLiveData.value = ManageOption.OPTION_MANAGER + } + } + changeOption() + } + changeMenuTextByOption() + } + + override fun initFragmentList(fragments: MutableList) { + fragments.add(VDownloadManagerFragment()) + fragments.add(VDownloadManagerFragment()) + } + + override fun initTabTitleList(tabTitleList: MutableList) { + tabTitleList.add("在玩") + tabTitleList.add("下载") + } + + override fun onPageSelected(position: Int) { + super.onPageSelected(position) + mViewModel.currentOptionLiveData.value = ManageOption.OPTION_MANAGER + changeOption() + mLastPosition = position + } + + private fun changeMenuTextByOption() { + (mManageMenu?.actionView as? TextView)?.apply { + text = when (mViewModel.currentOptionLiveData.value) { + ManageOption.OPTION_MANAGER -> "管理" + ManageOption.OPTION_CANCEL_SELECT -> "取消" + else -> "" + } + } + } + + fun changeOption() { + val fragments = childFragmentManager.fragments + mViewModel.currentOptionLiveData.value?.let { + fragments.forEachIndexed { index, fragment -> + if (fragment is IBatchDelete) { + if (index == mViewPager.currentItem) { + fragment.changeOption(it) + } else if (index == mLastPosition) { + fragment.changeOption(ManageOption.OPTION_MANAGER) + } + } + } + } + changeMenuTextByOption() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/vspace/VDownloadManagerWrapperViewModel.kt b/app/src/main/java/com/gh/vspace/VDownloadManagerWrapperViewModel.kt new file mode 100644 index 0000000000..81245de082 --- /dev/null +++ b/app/src/main/java/com/gh/vspace/VDownloadManagerWrapperViewModel.kt @@ -0,0 +1,11 @@ +package com.gh.vspace + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import com.gh.gamecenter.history.ManageOption + +class VDownloadManagerWrapperViewModel : ViewModel() { + + var currentOptionLiveData = MutableLiveData(ManageOption.OPTION_MANAGER) + +} \ No newline at end of file diff --git a/app/src/main/java/com/gh/vspace/VHelper.kt b/app/src/main/java/com/gh/vspace/VHelper.kt index 6b4646f0d1..e07b0b6e1d 100644 --- a/app/src/main/java/com/gh/vspace/VHelper.kt +++ b/app/src/main/java/com/gh/vspace/VHelper.kt @@ -22,13 +22,27 @@ object VHelper { private const val LOG_TAG = "VSPACE" - private var mIsServiceConnected = false private val mDelegateManager by lazy { VirtualAppManager.get() } private var mInstalledInfoList: List = arrayListOf() + private val mPackageObserver by lazy { + PackageObserver.PackageChangeListener { + val vaConfig = Config.getVSettingEntity()?.va ?: return@PackageChangeListener + val isVSpace = it.packageName == vaConfig.arch32?.packageName || it.packageName == vaConfig.arch64?.packageName + + if (!isVSpace) return@PackageChangeListener + + if (it.type == "安装") { + connectService() + } else if (it.type == "卸载") { + // TODO 执行卸载逻辑 + } + } + } @JvmStatic fun init() { connectService() + PackageObserver.registerPackageChangeChangeListener(mPackageObserver) } /** @@ -38,7 +52,6 @@ object VHelper { mDelegateManager.connectService(object : RemoteConnectListener { override fun onServiceConnectionSuccessed() { Utils.log(LOG_TAG, "V 服务连接成功") - mIsServiceConnected = true mInstalledInfoList = getInstalledList() PackageRepository.addInstalledGames(getInstalledPackageList()) @@ -46,7 +59,6 @@ object VHelper { } override fun onServiceConnectionFailed(failCode: Int) { - mIsServiceConnected = false Utils.log(LOG_TAG, "V 服务连接失败") // TODO 重试? } @@ -70,6 +82,14 @@ object VHelper { return gameEntity?.downloadStatus == "smooth" } + /** + * 是否在 V 空间里已安装此包名游戏 + */ + @JvmStatic + fun isInstalled(packageName: String?): Boolean { + return mInstalledInfoList.any { it.packageName == packageName } + } + /** * 在执行 callback 前先检查组件是否已安装,是否可下载 */ @@ -91,7 +111,7 @@ object VHelper { // val isArch64Installed = PackageUtils.isInstalled(context, Config.getVSettingEntity()?.va?.arch64?.packageName) if (!isArch32Installed) { - VSpaceDialogFragment.showDownloadDialog(context, gameEntity) + VSpaceDialogFragment.showDownloadDialog(context) return } @@ -131,10 +151,17 @@ object VHelper { * 获取已安装列表信息 (每次调用都会生成一份新的副本,放心使用) */ fun getInstalledList(): ArrayList { - val list = mDelegateManager.installedGamesInfo - Utils.log(LOG_TAG, "已安装应用数量${list.size}") + var list: List = arrayListOf() - return ArrayList(mDelegateManager.installedGamesInfo) + try { + list = mDelegateManager.installedGamesInfo + + Utils.log(LOG_TAG, "已安装应用数量${list.size}") + } catch (e: Exception) { + Utils.log(LOG_TAG, "获取已安装应用数量异常 ${e.localizedMessage}") + } + + return ArrayList(list) } /** @@ -158,7 +185,7 @@ object VHelper { } } catch (e: RuntimeException) { e.printStackTrace() - Utils.log(LOG_TAG, "检查存储权限失败") + Utils.log(LOG_TAG, "检查存储权限失败 ${e.localizedMessage}") } } @@ -173,20 +200,13 @@ object VHelper { val result = VirtualAppManager.get().installGame(filePath) if (result.status == 0) { updateInstalledList() - PackageObserver.onPackageChanged( - EBPackage( - "安装", - result.packageName, - "unknown" - ) - ) } Utils.log(LOG_TAG, "安装新应用结果 -> " + result.status) } } } - if (mIsServiceConnected) { + if (mDelegateManager.isConnectAidlInterface) { installClosure.invoke() } else { connectService(installClosure) @@ -199,6 +219,15 @@ object VHelper { @JvmStatic fun launch(activity: Activity, packageName: String) { Utils.log(LOG_TAG, "打开应用$packageName") + + val vaConfig = Config.getVSettingEntity()?.va ?: return + + // TODO 检测 64 位 + if (!PackageUtils.isInstalled(activity, vaConfig.arch32?.packageName)) { + VSpaceDialogFragment.showDownloadDialog(activity) + return + } + try { val intent = mDelegateManager.getStartGameIntent(packageName) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) diff --git a/app/src/main/java/com/gh/vspace/VSpaceDialogFragment.kt b/app/src/main/java/com/gh/vspace/VSpaceDialogFragment.kt index f756b9c3b3..284bfbb234 100644 --- a/app/src/main/java/com/gh/vspace/VSpaceDialogFragment.kt +++ b/app/src/main/java/com/gh/vspace/VSpaceDialogFragment.kt @@ -11,19 +11,22 @@ import androidx.core.text.bold import androidx.core.text.color import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel import com.gh.common.constant.Config import com.gh.common.util.PackageInstaller import com.gh.common.view.DownloadProgressBar import com.gh.download.DownloadManager +import com.gh.download.PackageObserver import com.gh.gamecenter.R import com.gh.gamecenter.common.base.fragment.BaseDraggableDialogFragment import com.gh.gamecenter.common.constant.Constants -import com.gh.gamecenter.common.constant.EntranceConsts import com.gh.gamecenter.common.utils.toColor +import com.gh.gamecenter.common.utils.viewModelProvider import com.gh.gamecenter.core.AppExecutor import com.gh.gamecenter.core.utils.SPUtils import com.gh.gamecenter.databinding.DialogVspaceBinding -import com.gh.gamecenter.entity.GameEntity +import com.gh.gamecenter.eventbus.EBPackage import com.lightgame.download.DataWatcher import com.lightgame.download.DownloadEntity import com.lightgame.download.DownloadStatus.* @@ -109,6 +112,15 @@ class VSpaceDialogFragment : BaseDraggableDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + val mViewModel = viewModelProvider() + mViewModel.packageLiveData.observe(this) { + if (it.packageName == Config.getVSettingEntity()?.va?.arch32?.packageName + && it.type == "安装" + ) { + dismissAllowingStateLoss() + } + } + val spanBuilder = SpannableStringBuilder() .append("畅玩是一种更灵活、轻便的游戏方式\n") .append("下载") @@ -120,6 +132,8 @@ class VSpaceDialogFragment : BaseDraggableDialogFragment() { mBinding.descTv.text = spanBuilder mBinding.downloadBtn.setOnClickListener { val vSpaceInfo = Config.getVSettingEntity()?.va?.arch32!! + val name = "畅玩助手V" + vSpaceInfo.versionName + val downloadId = PackageInstaller.createDownloadId(name) val downloadEntity = DownloadEntity() downloadEntity.url = mDownloadUrl @@ -127,30 +141,28 @@ class VSpaceDialogFragment : BaseDraggableDialogFragment() { downloadEntity.path = FileUtils.getDownloadPath(requireContext(), "畅玩助手V" + vSpaceInfo.versionName + ".apk"); downloadEntity.platform = "官方版" downloadEntity.gameId = "" + downloadEntity.path = PackageInstaller.getDownloadPathWithId(downloadId, "apk") downloadEntity.packageName = vSpaceInfo.packageName - DownloadManager.getInstance().cancel(mDownloadUrl, true, true) - DownloadManager.getInstance().pauseAll() - AppExecutor.uiExecutor.executeWithDelay({ DownloadManager.getInstance().add(downloadEntity) }, 200) } } - override fun onResume() { - super.onResume() + override fun onStart() { + super.onStart() DownloadManager.getInstance().addObserver(mDataWatcher) } - override fun onPause() { - super.onPause() + override fun onStop() { + super.onStop() DownloadManager.getInstance().removeObserver(mDataWatcher) } companion object { @JvmStatic - fun showDownloadDialog(context: Context?, gameEntity: GameEntity) { + fun showDownloadDialog(context: Context?) { val fragmentActivity: FragmentActivity = if (context is FragmentActivity) { context } else { @@ -165,12 +177,7 @@ class VSpaceDialogFragment : BaseDraggableDialogFragment() { // 防止重复弹出 if (hasDialogDisplayedInCurrentActivity(fragmentActivity)) return - val downloadDialog = VSpaceDialogFragment().apply { - val bundle = Bundle() - bundle.putParcelable(GameEntity::class.java.simpleName, gameEntity) - bundle.putParcelable(EntranceConsts.KEY_TRACE_EVENT, gameEntity.exposureEvent) - arguments = bundle - } + val downloadDialog = VSpaceDialogFragment() downloadDialog.show( fragmentActivity.supportFragmentManager, VSpaceDialogFragment::class.java.name @@ -186,4 +193,23 @@ class VSpaceDialogFragment : BaseDraggableDialogFragment() { } } + internal class VSpaceDialogViewModel: ViewModel() { + val packageLiveData = MutableLiveData() + private val mPackageChangedListener by lazy { + PackageObserver.PackageChangeListener { + packageLiveData.postValue(it) + } + } + + init { + PackageObserver.registerPackageChangeChangeListener(mPackageChangedListener) + } + + override fun onCleared() { + super.onCleared() + + PackageObserver.unregisterPackageChangeChangeListener(mPackageChangedListener) + } + } + } \ No newline at end of file diff --git a/app/src/main/java/com/gh/vspace/VSpaceLoadingFragment.kt b/app/src/main/java/com/gh/vspace/VSpaceLoadingFragment.kt index 43c245e26b..9ccc033c17 100644 --- a/app/src/main/java/com/gh/vspace/VSpaceLoadingFragment.kt +++ b/app/src/main/java/com/gh/vspace/VSpaceLoadingFragment.kt @@ -12,5 +12,4 @@ class VSpaceLoadingFragment: BaseFragment() { - } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_help_and_feedback.xml b/app/src/main/res/layout/activity_help_and_feedback.xml index 62dbbcd688..eae7fd61a1 100644 --- a/app/src/main/res/layout/activity_help_and_feedback.xml +++ b/app/src/main/res/layout/activity_help_and_feedback.xml @@ -31,6 +31,7 @@ android:id="@+id/activity_tab_layout" android:layout_width="match_parent" android:layout_height="@dimen/tab_layout_height" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/app/src/main/res/layout/activity_poster_edit.xml b/app/src/main/res/layout/activity_poster_edit.xml index 540417a7a9..61047d1d48 100644 --- a/app/src/main/res/layout/activity_poster_edit.xml +++ b/app/src/main/res/layout/activity_poster_edit.xml @@ -89,6 +89,7 @@ android:id="@+id/activity_tab_layout" android:layout_width="match_parent" android:layout_height="match_parent" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/app/src/main/res/layout/activity_video_game.xml b/app/src/main/res/layout/activity_video_game.xml index 13a8c7d922..fa7940f7a1 100644 --- a/app/src/main/res/layout/activity_video_game.xml +++ b/app/src/main/res/layout/activity_video_game.xml @@ -153,6 +153,7 @@ app:tabIndicatorHeight="0dp" app:tabMode="fixed" app:tabSelectedTextColor="@color/theme_font" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/app/src/main/res/layout/dialog_choose_forum.xml b/app/src/main/res/layout/dialog_choose_forum.xml index a06364832f..782fba54dd 100644 --- a/app/src/main/res/layout/dialog_choose_forum.xml +++ b/app/src/main/res/layout/dialog_choose_forum.xml @@ -90,6 +90,7 @@ android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="@dimen/tab_layout_height" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutNormalTextAppearance" /> diff --git a/app/src/main/res/layout/fragment_ask_questions.xml b/app/src/main/res/layout/fragment_ask_questions.xml index 7efa64b9db..2bb5bfc4e4 100644 --- a/app/src/main/res/layout/fragment_ask_questions.xml +++ b/app/src/main/res/layout/fragment_ask_questions.xml @@ -19,6 +19,7 @@ diff --git a/app/src/main/res/layout/fragment_avatar_border.xml b/app/src/main/res/layout/fragment_avatar_border.xml index a7b2bf458e..9650609eb0 100644 --- a/app/src/main/res/layout/fragment_avatar_border.xml +++ b/app/src/main/res/layout/fragment_avatar_border.xml @@ -136,6 +136,7 @@ app:tabPaddingEnd="0dp" app:tabIndicatorHeight="0dp" app:tabMode="scrollable" + app:tabIndicator="@null" app:tabRippleColor="@color/transparent" /> diff --git a/app/src/main/res/layout/fragment_community.xml b/app/src/main/res/layout/fragment_community.xml index 025a625ef7..42db6872ed 100644 --- a/app/src/main/res/layout/fragment_community.xml +++ b/app/src/main/res/layout/fragment_community.xml @@ -108,6 +108,7 @@ android:id="@+id/fragment_tab_layout" android:layout_width="match_parent" android:layout_height="match_parent" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/app/src/main/res/layout/fragment_community_home.xml b/app/src/main/res/layout/fragment_community_home.xml index 0819f27234..4f2d34ac78 100644 --- a/app/src/main/res/layout/fragment_community_home.xml +++ b/app/src/main/res/layout/fragment_community_home.xml @@ -57,6 +57,7 @@ app:tabMaxWidth="0dp" app:tabMinWidth="0dp" app:tabMode="scrollable" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/app/src/main/res/layout/fragment_energy_center.xml b/app/src/main/res/layout/fragment_energy_center.xml index df89218e7f..2c70744875 100644 --- a/app/src/main/res/layout/fragment_energy_center.xml +++ b/app/src/main/res/layout/fragment_energy_center.xml @@ -118,6 +118,7 @@ android:layout_height="44dp" app:tabMaxWidth="0dp" app:tabMode="fixed" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/app/src/main/res/layout/fragment_energy_house.xml b/app/src/main/res/layout/fragment_energy_house.xml index 89207c0c33..1386295fb5 100644 --- a/app/src/main/res/layout/fragment_energy_house.xml +++ b/app/src/main/res/layout/fragment_energy_house.xml @@ -216,6 +216,7 @@ app:tabMaxWidth="0dp" app:tabMinWidth="0dp" app:tabMode="scrollable" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/app/src/main/res/layout/fragment_forum_video_detail.xml b/app/src/main/res/layout/fragment_forum_video_detail.xml index d2220a6710..3e4548f505 100644 --- a/app/src/main/res/layout/fragment_forum_video_detail.xml +++ b/app/src/main/res/layout/fragment_forum_video_detail.xml @@ -161,6 +161,7 @@ android:id="@+id/fragment_tab_layout" android:layout_width="match_parent" android:layout_height="@dimen/tab_layout_height" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/app/src/main/res/layout/fragment_no_padding_tablayout_viewpager.xml b/app/src/main/res/layout/fragment_no_padding_tablayout_viewpager.xml index 2aaa165b03..1086fe34d1 100644 --- a/app/src/main/res/layout/fragment_no_padding_tablayout_viewpager.xml +++ b/app/src/main/res/layout/fragment_no_padding_tablayout_viewpager.xml @@ -23,6 +23,7 @@ android:layout_height="@dimen/tab_layout_height" app:tabPaddingEnd="0dp" app:tabPaddingStart="0dp" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/app/src/main/res/layout/fragment_simulator_game.xml b/app/src/main/res/layout/fragment_simulator_game.xml index ad72db0dc6..47075daf76 100644 --- a/app/src/main/res/layout/fragment_simulator_game.xml +++ b/app/src/main/res/layout/fragment_simulator_game.xml @@ -27,6 +27,7 @@ android:layout_width="match_parent" android:layout_height="@dimen/tab_layout_height" app:tabMode="scrollable" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/app/src/main/res/layout/fragment_subject_tab.xml b/app/src/main/res/layout/fragment_subject_tab.xml index 87fb7d4f7a..097340550d 100644 --- a/app/src/main/res/layout/fragment_subject_tab.xml +++ b/app/src/main/res/layout/fragment_subject_tab.xml @@ -35,6 +35,7 @@ app:tabIndicatorHeight="0dp" app:tabRippleColor="@color/transparent" app:tabSelectedTextColor="@color/theme" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/app/src/main/res/layout/gamedetail_body.xml b/app/src/main/res/layout/gamedetail_body.xml index d731de90e6..c030b1acd1 100644 --- a/app/src/main/res/layout/gamedetail_body.xml +++ b/app/src/main/res/layout/gamedetail_body.xml @@ -283,6 +283,7 @@ android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="@dimen/tab_layout_height" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/module_common/src/main/res/layout/activity_tablayout_no_title_viewpager.xml b/module_common/src/main/res/layout/activity_tablayout_no_title_viewpager.xml index 683509cfdd..b998419b5c 100644 --- a/module_common/src/main/res/layout/activity_tablayout_no_title_viewpager.xml +++ b/module_common/src/main/res/layout/activity_tablayout_no_title_viewpager.xml @@ -52,6 +52,7 @@ android:id="@+id/activity_tab_layout" android:layout_width="match_parent" android:layout_height="match_parent" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/module_common/src/main/res/layout/activity_tablayout_viewpager.xml b/module_common/src/main/res/layout/activity_tablayout_viewpager.xml index 90564023b4..adefd87de9 100644 --- a/module_common/src/main/res/layout/activity_tablayout_viewpager.xml +++ b/module_common/src/main/res/layout/activity_tablayout_viewpager.xml @@ -23,6 +23,7 @@ android:id="@+id/activity_tab_layout" android:layout_width="match_parent" android:layout_height="@dimen/tab_layout_height" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" /> diff --git a/module_common/src/main/res/layout/fragment_tablayout_viewpager.xml b/module_common/src/main/res/layout/fragment_tablayout_viewpager.xml index 3013f31f6c..52571a97de 100644 --- a/module_common/src/main/res/layout/fragment_tablayout_viewpager.xml +++ b/module_common/src/main/res/layout/fragment_tablayout_viewpager.xml @@ -21,6 +21,7 @@ android:id="@+id/fragment_tab_layout" android:layout_width="match_parent" android:layout_height="@dimen/tab_layout_height" + app:tabIndicator="@null" app:tabTextAppearance="@style/TabLayoutTextAppearance" />