diff --git a/app/src/main/java/com/aurora/store/view/epoxy/controller/GenericCarouselController.kt b/app/src/main/java/com/aurora/store/view/epoxy/controller/GenericCarouselController.kt index 5a25b5e58..a3965edae 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/controller/GenericCarouselController.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/controller/GenericCarouselController.kt @@ -26,7 +26,7 @@ import com.aurora.gplayapi.data.models.StreamCluster import com.aurora.store.R import com.aurora.store.view.epoxy.groups.CarouselModelGroup import com.aurora.store.view.epoxy.groups.CarouselShimmerGroup -import com.aurora.store.view.epoxy.views.AppListViewModel_ +import com.aurora.store.view.epoxy.views.app.AppListViewModel_ import com.aurora.store.view.epoxy.views.AppProgressViewModel_ import com.aurora.store.view.epoxy.views.app.NoAppViewModel_ diff --git a/app/src/main/java/com/aurora/store/view/epoxy/groups/CarouselModelGroup.kt b/app/src/main/java/com/aurora/store/view/epoxy/groups/CarouselModelGroup.kt index 697048f2a..e0fb0aded 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/groups/CarouselModelGroup.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/groups/CarouselModelGroup.kt @@ -26,7 +26,7 @@ import com.aurora.store.R import com.aurora.store.util.Log import com.aurora.store.view.epoxy.controller.GenericCarouselController import com.aurora.store.view.epoxy.views.AppProgressViewModel_ -import com.aurora.store.view.epoxy.views.AppViewModel_ +import com.aurora.store.view.epoxy.views.app.AppViewModel_ import com.aurora.store.view.epoxy.views.HeaderViewModel_ class CarouselModelGroup( diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/BaseView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/BaseView.kt index 9f16de7b8..66e065f4b 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/BaseView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/BaseView.kt @@ -22,6 +22,7 @@ package com.aurora.store.view.epoxy.views import android.view.View import android.view.animation.AnimationUtils import com.airbnb.epoxy.EpoxyModel +import com.aurora.store.view.epoxy.views.app.AppListView abstract class BaseView : EpoxyModel() { diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppListView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppListView.kt index 8f87fefc9..8bfe8e6d1 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppListView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppListView.kt @@ -17,7 +17,7 @@ * */ -package com.aurora.store.view.epoxy.views +package com.aurora.store.view.epoxy.views.app import android.content.Context import android.util.AttributeSet @@ -33,6 +33,7 @@ import com.aurora.store.util.CommonUtil import com.aurora.store.util.extensions.clear import com.aurora.store.util.extensions.getString import com.aurora.store.util.extensions.load +import com.aurora.store.view.epoxy.views.BaseView import com.bumptech.glide.load.resource.bitmap.RoundedCorners @ModelView( @@ -90,7 +91,7 @@ class AppListView : RelativeLayout { if (app.dependencies.dependentPackages.isNotEmpty()) extras.add(getString(R.string.details_gsf_dependent)) - B.txtLine3.text = extras.joinToString(separator = " • ") + B.txtLine3.text = extras.joinToString(separator = " • ") } @CallbackProp diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppUpdateView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppUpdateView.kt index 17d411f54..3077cee0b 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppUpdateView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppUpdateView.kt @@ -17,7 +17,7 @@ * */ -package com.aurora.store.view.epoxy.views +package com.aurora.store.view.epoxy.views.app import android.content.Context import android.util.AttributeSet @@ -34,6 +34,7 @@ import com.aurora.store.databinding.ViewAppUpdateBinding import com.aurora.store.util.CommonUtil import com.aurora.store.util.extensions.clear import com.aurora.store.util.extensions.load +import com.aurora.store.view.epoxy.views.BaseView import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppView.kt index 45a49d1e2..755f35adb 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/app/AppView.kt @@ -17,7 +17,7 @@ * */ -package com.aurora.store.view.epoxy.views +package com.aurora.store.view.epoxy.views.app import android.content.Context import android.util.AttributeSet @@ -32,6 +32,7 @@ import com.aurora.store.databinding.ViewAppBinding import com.aurora.store.util.CommonUtil import com.aurora.store.util.extensions.clear import com.aurora.store.util.extensions.load +import com.aurora.store.view.epoxy.views.BaseView import com.bumptech.glide.load.resource.bitmap.RoundedCorners diff --git a/app/src/main/java/com/aurora/store/view/ui/all/AppsGamesActivity.kt b/app/src/main/java/com/aurora/store/view/ui/all/AppsGamesActivity.kt index 9d6fea394..6fdcc89ad 100644 --- a/app/src/main/java/com/aurora/store/view/ui/all/AppsGamesActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/all/AppsGamesActivity.kt @@ -73,6 +73,7 @@ class AppsGamesActivity : BaseActivity() { when (position) { 0 -> tab.text = getString(R.string.title_installed) 1 -> tab.text = getString(R.string.title_library) + 2 -> tab.text = getString(R.string.title_purchase_history) else -> { } } @@ -89,6 +90,7 @@ class AppsGamesActivity : BaseActivity() { return when (position) { 0 -> InstalledAppsFragment.newInstance() 1 -> LibraryAppsFragment.newInstance() + 2 -> PurchasedAppsFragment.newInstance() else -> Fragment() } } @@ -97,7 +99,7 @@ class AppsGamesActivity : BaseActivity() { return if (isAnonymous) 1 else - 2 + 3 } } } \ No newline at end of file diff --git a/app/src/main/java/com/aurora/store/view/ui/all/InstalledAppsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/all/InstalledAppsFragment.kt index 75ea2fc9c..c7d835444 100644 --- a/app/src/main/java/com/aurora/store/view/ui/all/InstalledAppsFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/all/InstalledAppsFragment.kt @@ -28,7 +28,7 @@ import com.aurora.Constants import com.aurora.gplayapi.data.models.App import com.aurora.store.R import com.aurora.store.databinding.FragmentUpdatesBinding -import com.aurora.store.view.epoxy.views.AppListViewModel_ +import com.aurora.store.view.epoxy.views.app.AppListViewModel_ import com.aurora.store.view.epoxy.views.HeaderViewModel_ import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_ import com.aurora.store.view.ui.commons.BaseFragment diff --git a/app/src/main/java/com/aurora/store/view/ui/all/LibraryAppsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/all/LibraryAppsFragment.kt index 0ebba9183..17e66fd77 100644 --- a/app/src/main/java/com/aurora/store/view/ui/all/LibraryAppsFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/all/LibraryAppsFragment.kt @@ -28,7 +28,7 @@ import com.aurora.gplayapi.data.models.StreamCluster import com.aurora.store.R import com.aurora.store.databinding.FragmentUpdatesBinding import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener -import com.aurora.store.view.epoxy.views.AppListViewModel_ +import com.aurora.store.view.epoxy.views.app.AppListViewModel_ import com.aurora.store.view.epoxy.views.AppProgressViewModel_ import com.aurora.store.view.epoxy.views.HeaderViewModel_ import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_ diff --git a/app/src/main/java/com/aurora/store/view/ui/all/PurchasedAppsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/all/PurchasedAppsFragment.kt new file mode 100644 index 000000000..1ed3ac004 --- /dev/null +++ b/app/src/main/java/com/aurora/store/view/ui/all/PurchasedAppsFragment.kt @@ -0,0 +1,145 @@ +/* + * Aurora Store + * Copyright (C) 2021, Rahul Kumar Patel + * + * Aurora Store is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * Aurora Store is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Aurora Store. If not, see . + * + */ + +package com.aurora.store.view.ui.all + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.lifecycle.ViewModelProvider +import com.aurora.Constants +import com.aurora.gplayapi.data.models.App +import com.aurora.store.R +import com.aurora.store.databinding.FragmentUpdatesBinding +import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener +import com.aurora.store.view.epoxy.views.app.AppListViewModel_ +import com.aurora.store.view.epoxy.views.HeaderViewModel_ +import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_ +import com.aurora.store.view.ui.commons.BaseFragment +import com.aurora.store.view.ui.sheets.AppMenuSheet +import com.aurora.store.viewmodel.all.InstalledViewModel +import com.aurora.store.viewmodel.all.PurchasedViewModel + +class PurchasedAppsFragment : BaseFragment() { + + private lateinit var VM: PurchasedViewModel + private lateinit var B: FragmentUpdatesBinding + lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener + + companion object { + @JvmStatic + fun newInstance(): PurchasedAppsFragment { + return PurchasedAppsFragment().apply { + + } + } + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + B = FragmentUpdatesBinding.bind( + inflater.inflate( + R.layout.fragment_updates, + container, + false + ) + ) + + VM = ViewModelProvider(requireActivity()).get(PurchasedViewModel::class.java) + + return B.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + VM.liveData.observe(viewLifecycleOwner, { + updateController(it) + B.swipeRefreshLayout.isRefreshing = false + }) + + B.swipeRefreshLayout.setOnRefreshListener { + VM.observe() + } + + attachRecycler() + + updateController(null) + } + + private fun attachRecycler() { + endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { + override fun onLoadMore(currentPage: Int) { + VM.observe() + } + } + B.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) + } + + + private fun updateController(appList: List?) { + B.recycler.withModels { + setFilterDuplicates(true) + if (appList == null) { + for (i in 1..6) { + add( + AppListViewShimmerModel_() + .id(i) + ) + } + } else { + add( + HeaderViewModel_() + .id("header") + .title("${appList.size} apps purchased") + ) + appList.forEach { app -> + add( + AppListViewModel_() + .id(app.id) + .app(app) + .click { _ -> openDetailsActivity(app) } + .longClick { _ -> + openAppMenuSheet(app) + false + } + ) + } + } + } + } + + private fun openAppMenuSheet(app: App) { + val fragment = childFragmentManager.findFragmentByTag(AppMenuSheet.TAG) + if (fragment != null) + childFragmentManager.beginTransaction().remove(fragment) + + AppMenuSheet().apply { + arguments = Bundle().apply { + putString(Constants.STRING_EXTRA, gson.toJson(app)) + } + }.show( + childFragmentManager, + AppMenuSheet.TAG + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/aurora/store/view/ui/apps/TopChartFragment.kt b/app/src/main/java/com/aurora/store/view/ui/apps/TopChartFragment.kt index 9ff6b1c13..cf5a3263c 100644 --- a/app/src/main/java/com/aurora/store/view/ui/apps/TopChartFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/apps/TopChartFragment.kt @@ -29,7 +29,7 @@ import com.aurora.gplayapi.data.models.StreamCluster import com.aurora.store.R import com.aurora.store.databinding.FragmentTopContainerBinding import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener -import com.aurora.store.view.epoxy.views.AppListViewModel_ +import com.aurora.store.view.epoxy.views.app.AppListViewModel_ import com.aurora.store.view.epoxy.views.AppProgressViewModel_ import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_ import com.aurora.store.view.ui.commons.BaseFragment diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/StreamBrowseActivity.kt b/app/src/main/java/com/aurora/store/view/ui/commons/StreamBrowseActivity.kt index 1525cd0fc..ec3bd8f3b 100644 --- a/app/src/main/java/com/aurora/store/view/ui/commons/StreamBrowseActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/commons/StreamBrowseActivity.kt @@ -26,7 +26,7 @@ import com.aurora.gplayapi.data.models.StreamCluster import com.aurora.store.databinding.ActivityGenericRecyclerBinding import com.aurora.store.util.extensions.close import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener -import com.aurora.store.view.epoxy.views.AppListViewModel_ +import com.aurora.store.view.epoxy.views.app.AppListViewModel_ import com.aurora.store.view.epoxy.views.AppProgressViewModel_ import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_ import com.aurora.store.viewmodel.browse.StreamBrowseViewModel diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DevAppsActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/DevAppsActivity.kt index 23e1f5b1c..b025840e3 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/DevAppsActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/DevAppsActivity.kt @@ -29,7 +29,7 @@ import com.aurora.gplayapi.data.models.SearchBundle import com.aurora.store.databinding.ActivityGenericRecyclerBinding import com.aurora.store.util.extensions.close import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener -import com.aurora.store.view.epoxy.views.AppListViewModel_ +import com.aurora.store.view.epoxy.views.app.AppListViewModel_ import com.aurora.store.view.epoxy.views.AppProgressViewModel_ import com.aurora.store.view.ui.commons.BaseActivity import com.aurora.store.viewmodel.search.SearchResultViewModel diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DevProfileActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/DevProfileActivity.kt index 26b499394..05e7dba22 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/DevProfileActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/DevProfileActivity.kt @@ -32,8 +32,8 @@ import com.aurora.store.util.extensions.close import com.aurora.store.util.extensions.load import com.aurora.store.util.extensions.toast import com.aurora.store.view.epoxy.groups.CarouselHorizontalModel_ -import com.aurora.store.view.epoxy.views.AppListViewModel_ -import com.aurora.store.view.epoxy.views.AppViewModel_ +import com.aurora.store.view.epoxy.views.app.AppListViewModel_ +import com.aurora.store.view.epoxy.views.app.AppViewModel_ import com.aurora.store.view.epoxy.views.HeaderViewModel_ import com.aurora.store.view.epoxy.views.details.ScreenshotViewModel_ import com.aurora.store.view.ui.commons.BaseActivity diff --git a/app/src/main/java/com/aurora/store/view/ui/games/TopChartFragment.kt b/app/src/main/java/com/aurora/store/view/ui/games/TopChartFragment.kt index c9c284562..588b94fd6 100644 --- a/app/src/main/java/com/aurora/store/view/ui/games/TopChartFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/games/TopChartFragment.kt @@ -29,7 +29,7 @@ import com.aurora.gplayapi.data.models.StreamCluster import com.aurora.store.R import com.aurora.store.databinding.FragmentTopContainerBinding import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener -import com.aurora.store.view.epoxy.views.AppListViewModel_ +import com.aurora.store.view.epoxy.views.app.AppListViewModel_ import com.aurora.store.view.epoxy.views.AppProgressViewModel_ import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_ import com.aurora.store.view.ui.commons.BaseFragment diff --git a/app/src/main/java/com/aurora/store/view/ui/sale/AppSalesActivity.kt b/app/src/main/java/com/aurora/store/view/ui/sale/AppSalesActivity.kt index 521431f96..d61cc9f00 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sale/AppSalesActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sale/AppSalesActivity.kt @@ -26,7 +26,7 @@ import com.aurora.store.R import com.aurora.store.databinding.ActivityGenericRecyclerBinding import com.aurora.store.util.extensions.close import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener -import com.aurora.store.view.epoxy.views.AppListViewModel_ +import com.aurora.store.view.epoxy.views.app.AppListViewModel_ import com.aurora.store.view.epoxy.views.AppProgressViewModel_ import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_ import com.aurora.store.view.ui.commons.BaseActivity diff --git a/app/src/main/java/com/aurora/store/view/ui/search/SearchResultsActivity.kt b/app/src/main/java/com/aurora/store/view/ui/search/SearchResultsActivity.kt index 3b8f89d52..57a49feff 100644 --- a/app/src/main/java/com/aurora/store/view/ui/search/SearchResultsActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/search/SearchResultsActivity.kt @@ -33,7 +33,7 @@ import com.aurora.store.databinding.ActivitySearchResultBinding import com.aurora.store.util.extensions.close import com.aurora.store.util.extensions.open import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener -import com.aurora.store.view.epoxy.views.AppListViewModel_ +import com.aurora.store.view.epoxy.views.app.AppListViewModel_ import com.aurora.store.view.epoxy.views.AppProgressViewModel_ import com.aurora.store.view.ui.commons.BaseActivity import com.aurora.store.view.ui.downloads.DownloadActivity diff --git a/app/src/main/java/com/aurora/store/view/ui/updates/UpdatesFragment.kt b/app/src/main/java/com/aurora/store/view/ui/updates/UpdatesFragment.kt index f0941747b..766f98bc0 100644 --- a/app/src/main/java/com/aurora/store/view/ui/updates/UpdatesFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/updates/UpdatesFragment.kt @@ -37,7 +37,7 @@ import com.aurora.store.databinding.FragmentUpdatesBinding import com.aurora.store.util.Log import com.aurora.store.util.extensions.flushAndAdd import com.aurora.store.util.extensions.toast -import com.aurora.store.view.epoxy.views.AppUpdateViewModel_ +import com.aurora.store.view.epoxy.views.app.AppUpdateViewModel_ import com.aurora.store.view.epoxy.views.UpdateHeaderViewModel_ import com.aurora.store.view.epoxy.views.app.NoAppViewModel_ import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_ diff --git a/app/src/main/java/com/aurora/store/viewmodel/all/PurchasedViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/all/PurchasedViewModel.kt new file mode 100644 index 000000000..b10373f80 --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/all/PurchasedViewModel.kt @@ -0,0 +1,71 @@ +/* + * Aurora Store + * Copyright (C) 2021, Rahul Kumar Patel + * + * Aurora Store is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * Aurora Store is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Aurora Store. If not, see . + * + */ + +package com.aurora.store.viewmodel.all + +import android.app.Application +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.viewModelScope +import com.aurora.gplayapi.data.models.App +import com.aurora.gplayapi.helpers.PurchaseHelper +import com.aurora.store.data.RequestState +import com.aurora.store.data.network.HttpClient +import com.aurora.store.data.providers.AuthProvider +import com.aurora.store.viewmodel.BaseAndroidViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.supervisorScope +import org.greenrobot.eventbus.EventBus + +class PurchasedViewModel(application: Application) : BaseAndroidViewModel(application) { + + private val authData = AuthProvider + .with(application) + .getAuthData() + + private val purchaseHelper = PurchaseHelper(authData) + .using(HttpClient.getPreferredClient()) + + val liveData: MutableLiveData> = MutableLiveData() + + var appList: MutableList = mutableListOf() + + init { + requestState = RequestState.Init + observe() + } + + override fun observe() { + viewModelScope.launch(Dispatchers.IO) { + supervisorScope { + try { + appList.addAll(purchaseHelper.getPurchaseHistory(appList.size)) + liveData.postValue(appList) + requestState = RequestState.Complete + } catch (e: Exception) { + requestState = RequestState.Pending + } + } + } + } + + override fun onCleared() { + super.onCleared() + } +} \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles_text.xml b/app/src/main/res/values-v21/styles_text.xml index bf52210e0..9fc0a1d08 100644 --- a/app/src/main/res/values-v21/styles_text.xml +++ b/app/src/main/res/values-v21/styles_text.xml @@ -117,13 +117,13 @@ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fa7114027..318c01caa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -286,6 +286,7 @@ "Installed" "Language" "Library" + "Purchase history" "Settings" "Spoof manager" "Updates" diff --git a/app/src/main/res/values/styles_text.xml b/app/src/main/res/values/styles_text.xml index 209ca0b62..599ecf348 100644 --- a/app/src/main/res/values/styles_text.xml +++ b/app/src/main/res/values/styles_text.xml @@ -125,13 +125,11 @@