/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.fenix.components import android.content.Context import androidx.lifecycle.LiveData import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import mozilla.components.feature.top.sites.TopSite import mozilla.components.feature.top.sites.TopSiteStorage import mozilla.components.support.locale.LocaleManager import org.mozilla.fenix.R import org.mozilla.fenix.ext.settings import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.advanced.getSelectedLocale import org.mozilla.fenix.test.Mockable @Mockable class TopSiteStorage(private val context: Context) { var cachedTopSites = listOf() val storage by lazy { TopSiteStorage(context) } init { addDefaultTopSites() } /** * Adds a new [TopSite]. */ fun addTopSite(title: String, url: String) { storage.addTopSite(title, url) } /** * Returns a [LiveData] list of all the [TopSite] instances. */ fun getTopSites(): LiveData> { return storage.getTopSites() } /** * Removes the given [TopSite]. */ fun removeTopSite(topSite: TopSite) { storage.removeTopSite(topSite) } private fun addDefaultTopSites() { val topSiteCandidates = mutableListOf>() if (!context.settings().defaultTopSitesAdded) { if (LocaleManager.getSelectedLocale(context).language == "en") { topSiteCandidates.add( Pair( context.getString(R.string.pocket_pinned_top_articles), SupportUtils.POCKET_TRENDING_URL ) ) } topSiteCandidates.add( Pair( context.getString(R.string.default_top_site_wikipedia), SupportUtils.WIKIPEDIA_URL ) ) topSiteCandidates.add( Pair( context.getString(R.string.default_top_site_youtube), SupportUtils.YOUTUBE_URL ) ) GlobalScope.launch(Dispatchers.Main) { withContext(Dispatchers.IO) { topSiteCandidates.forEach { addTopSite(it.first, it.second) } } } context.settings().preferences.edit() .putBoolean(context.getString(R.string.default_top_sites_added), true).apply() } } }