From d36dfe98a52ced46c5106b28304ae5d245180a7f Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Wed, 21 Mar 2018 01:28:31 -0400 Subject: Feature/bugsnag (#807) * Add bugsnag * Remove crashlytics * Remove pro features and iab * Make analytics opt in * Clean settings activity * Clean settings activity 2 --- app/src/main/AndroidManifest.xml | 3 + .../main/kotlin/com/pitchedapps/frost/FrostApp.kt | 11 +- .../pitchedapps/frost/activities/AboutActivity.kt | 2 +- .../frost/activities/BaseMainActivity.kt | 26 +-- .../pitchedapps/frost/activities/ImageActivity.kt | 4 +- .../pitchedapps/frost/activities/LoginActivity.kt | 9 +- .../frost/activities/SettingsActivity.kt | 30 +--- .../com/pitchedapps/frost/dbflow/CookiesDb.kt | 4 +- .../pitchedapps/frost/fragments/FragmentBase.kt | 2 +- .../frost/services/FrostNotifications.kt | 4 +- .../frost/services/NotificationService.kt | 6 +- .../com/pitchedapps/frost/settings/Appearance.kt | 13 +- .../kotlin/com/pitchedapps/frost/settings/Feed.kt | 5 - .../main/kotlin/com/pitchedapps/frost/utils/L.kt | 6 +- .../kotlin/com/pitchedapps/frost/utils/Prefs.kt | 12 +- .../kotlin/com/pitchedapps/frost/utils/Utils.kt | 30 +--- .../com/pitchedapps/frost/utils/iab/IABDialogs.kt | 95 ----------- .../com/pitchedapps/frost/utils/iab/IabBinder.kt | 188 --------------------- .../kotlin/com/pitchedapps/frost/utils/iab/Key.kt | 33 ---- .../com/pitchedapps/frost/web/DebugWebView.kt | 5 +- .../pitchedapps/frost/web/FrostWebViewClients.kt | 7 +- .../main/res/values-de-rDE/strings_play_store.xml | 17 +- .../main/res/values-de-rDE/strings_pref_feed.xml | 3 +- .../main/res/values-de-rDE/strings_preferences.xml | 4 +- app/src/main/res/values-dv-rMV/strings.xml | 4 + .../main/res/values-es-rES/strings_play_store.xml | 14 +- .../main/res/values-es-rES/strings_pref_feed.xml | 3 +- .../main/res/values-es-rES/strings_preferences.xml | 4 +- app/src/main/res/values-es/strings_pref_feed.xml | 3 +- .../main/res/values-fr-rFR/strings_play_store.xml | 14 +- .../main/res/values-fr-rFR/strings_pref_feed.xml | 3 +- .../main/res/values-fr-rFR/strings_preferences.xml | 4 +- .../main/res/values-gl-rES/strings_play_store.xml | 15 +- .../main/res/values-gl-rES/strings_pref_feed.xml | 3 +- .../main/res/values-gl-rES/strings_preferences.xml | 4 +- .../main/res/values-in-rID/strings_play_store.xml | 15 +- .../main/res/values-in-rID/strings_pref_feed.xml | 3 +- .../main/res/values-in-rID/strings_preferences.xml | 2 - .../main/res/values-it-rIT/strings_play_store.xml | 14 +- .../main/res/values-it-rIT/strings_pref_feed.xml | 3 +- .../main/res/values-it-rIT/strings_preferences.xml | 4 +- app/src/main/res/values-it/strings_pref_feed.xml | 3 +- .../main/res/values-ko-rKR/strings_play_store.xml | 14 +- .../main/res/values-ko-rKR/strings_pref_feed.xml | 3 +- .../main/res/values-ko-rKR/strings_preferences.xml | 5 +- .../main/res/values-no-rNO/strings_play_store.xml | 14 +- .../main/res/values-no-rNO/strings_pref_feed.xml | 3 +- .../main/res/values-no-rNO/strings_preferences.xml | 4 +- .../main/res/values-pl-rPL/strings_play_store.xml | 14 +- .../main/res/values-pl-rPL/strings_pref_feed.xml | 3 +- .../main/res/values-pl-rPL/strings_preferences.xml | 4 +- .../main/res/values-pt-rBR/strings_play_store.xml | 14 +- .../main/res/values-pt-rBR/strings_pref_feed.xml | 3 +- .../main/res/values-pt-rBR/strings_preferences.xml | 4 +- .../main/res/values-th-rTH/strings_play_store.xml | 14 +- .../main/res/values-th-rTH/strings_pref_feed.xml | 3 +- .../main/res/values-th-rTH/strings_preferences.xml | 4 +- .../main/res/values-tr-rTR/strings_preferences.xml | 2 - .../main/res/values-vi-rVN/strings_play_store.xml | 15 +- .../main/res/values-vi-rVN/strings_pref_feed.xml | 3 +- .../main/res/values-vi-rVN/strings_preferences.xml | 4 +- .../main/res/values-zh-rCN/strings_play_store.xml | 14 +- .../main/res/values-zh-rCN/strings_pref_feed.xml | 3 +- .../main/res/values-zh-rCN/strings_preferences.xml | 4 +- app/src/main/res/values/strings_no_translate.xml | 1 - app/src/main/res/values/strings_play_store.xml | 13 -- app/src/main/res/values/strings_pref_behaviour.xml | 2 +- app/src/main/res/values/strings_pref_feed.xml | 1 - app/src/main/res/values/strings_preferences.xml | 3 - 69 files changed, 104 insertions(+), 701 deletions(-) delete mode 100644 app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IABDialogs.kt delete mode 100644 app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IabBinder.kt delete mode 100644 app/src/main/kotlin/com/pitchedapps/frost/utils/iab/Key.kt create mode 100644 app/src/main/res/values-dv-rMV/strings.xml (limited to 'app/src/main') diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 12b8c029..10b062c8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -182,6 +182,9 @@ + \ No newline at end of file diff --git a/app/src/main/kotlin/com/pitchedapps/frost/FrostApp.kt b/app/src/main/kotlin/com/pitchedapps/frost/FrostApp.kt index 36b51753..16e23d53 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/FrostApp.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/FrostApp.kt @@ -7,10 +7,9 @@ import android.net.Uri import android.os.Bundle import android.widget.ImageView import ca.allanwang.kau.logging.KL +import com.bugsnag.android.Bugsnag import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.signature.ApplicationVersionSignature -import com.crashlytics.android.Crashlytics -import com.crashlytics.android.answers.Answers import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader import com.mikepenz.materialdrawer.util.DrawerImageLoader import com.pitchedapps.frost.dbflow.CookiesDb @@ -28,7 +27,6 @@ import com.raizlabs.android.dbflow.config.DatabaseConfig import com.raizlabs.android.dbflow.config.FlowConfig import com.raizlabs.android.dbflow.config.FlowManager import com.raizlabs.android.dbflow.runtime.ContentResolverNotifier -import io.fabric.sdk.android.Fabric import io.reactivex.plugins.RxJavaPlugins import java.net.SocketTimeoutException import java.util.* @@ -63,8 +61,11 @@ class FrostApp : Application() { // if (LeakCanary.isInAnalyzerProcess(this)) return // refWatcher = LeakCanary.install(this) if (!BuildConfig.DEBUG) { - Fabric.with(this, Crashlytics(), Answers()) - Crashlytics.setUserIdentifier(Prefs.frostId) + Bugsnag.init(this) + Bugsnag.setAutoCaptureSessions(true) + Bugsnag.getClient().setUserId(Prefs.frostId) + +// setUser("userId", "user@email.com", "User Name") } KL.shouldLog = { BuildConfig.DEBUG } Prefs.verboseLogging = false diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/AboutActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/AboutActivity.kt index 691f050e..8e6677f9 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/AboutActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/AboutActivity.kt @@ -136,7 +136,7 @@ class AboutActivity : AboutActivityBase(null, { val c = itemView.context val size = c.dimenPixelSize(R.dimen.kau_avatar_bounds) images = arrayOf Unit>>( - GoogleMaterial.Icon.gmd_star to { c.startPlayStoreLink(R.string.play_store_package_id) }, +// GoogleMaterial.Icon.gmd_star to { c.startPlayStoreLink(R.string.play_store_package_id) }, CommunityMaterial.Icon.cmd_reddit to { c.startLink(R.string.reddit_url) }, CommunityMaterial.Icon.cmd_github_circle to { c.startLink(R.string.github_url) }, CommunityMaterial.Icon.cmd_xda to { c.startLink(R.string.xda_url) } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt index 809e8a56..8b584112 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt @@ -38,7 +38,6 @@ import co.zsmb.materialdrawerkt.draweritems.badgeable.secondaryItem import co.zsmb.materialdrawerkt.draweritems.divider import co.zsmb.materialdrawerkt.draweritems.profile.profile import co.zsmb.materialdrawerkt.draweritems.profile.profileSetting -import com.crashlytics.android.answers.ContentViewEvent import com.mikepenz.google_material_typeface_library.GoogleMaterial import com.mikepenz.iconics.IconicsDrawable import com.mikepenz.iconics.typeface.IIcon @@ -54,7 +53,6 @@ import com.pitchedapps.frost.dbflow.TAB_COUNT import com.pitchedapps.frost.dbflow.loadFbCookie import com.pitchedapps.frost.dbflow.loadFbTabs import com.pitchedapps.frost.enums.MainActivityLayout -import com.pitchedapps.frost.enums.Theme import com.pitchedapps.frost.facebook.FbCookie import com.pitchedapps.frost.facebook.FbItem import com.pitchedapps.frost.facebook.PROFILE_PICTURE_URL @@ -63,9 +61,6 @@ import com.pitchedapps.frost.fragments.WebFragment import com.pitchedapps.frost.parsers.FrostSearch import com.pitchedapps.frost.parsers.SearchParser import com.pitchedapps.frost.utils.* -import com.pitchedapps.frost.utils.iab.FrostBilling -import com.pitchedapps.frost.utils.iab.IS_FROST_PRO -import com.pitchedapps.frost.utils.iab.IabMain import com.pitchedapps.frost.views.BadgedIcon import com.pitchedapps.frost.views.FrostVideoViewer import com.pitchedapps.frost.views.FrostViewPager @@ -77,8 +72,7 @@ import com.pitchedapps.frost.views.FrostViewPager */ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, FileChooserContract by FileChooserDelegate(), - VideoViewHolder, SearchViewHolder, - FrostBilling by IabMain() { + VideoViewHolder, SearchViewHolder { protected lateinit var adapter: SectionsPagerAdapter override val frameWrapper: FrameLayout by bindView(R.id.frame_wrapper) @@ -115,13 +109,12 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, onNestedCreate(savedInstanceState) L.i { "Main finished loading UI in ${System.currentTimeMillis() - start} ms" } controlWebview = WebView(this) - onCreateBilling() if (BuildConfig.VERSION_CODE > Prefs.versionCode) { Prefs.prevVersionCode = Prefs.versionCode Prefs.versionCode = BuildConfig.VERSION_CODE if (!BuildConfig.DEBUG) { frostChangelog() - frostAnswersCustom("Version", + frostEvent("Version", "Version code" to BuildConfig.VERSION_CODE, "Prev version code" to Prefs.prevVersionCode, "Version name" to BuildConfig.VERSION_NAME, @@ -283,11 +276,7 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, selectedColor = 0x00000001.toLong() identifier = item.titleId.toLong() onClick { _ -> - frostAnswers { - logContentView(ContentViewEvent() - .putContentName(item.name) - .putContentType("drawer_item")) - } + frostEvent("Drawer Tab", "name" to item.name) launchWebOverlay(item.url) false } @@ -419,16 +408,7 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, super.onPause() } - override fun onStart() { - //validate some pro features - if (!IS_FROST_PRO) { - if (Prefs.theme == Theme.CUSTOM.ordinal) Prefs.theme = Theme.DEFAULT.ordinal - } - super.onStart() - } - override fun onDestroy() { - onDestroyBilling() controlWebview?.destroy() super.onDestroy() } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt index 1bc3334f..e9426beb 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt @@ -121,7 +121,7 @@ class ImageActivity : KauBaseActivity() { photo.setOnImageEventListener(object : SubsamplingScaleImageView.DefaultOnImageEventListener() { override fun onImageLoadError(e: Exception?) { errorRef = e - e.logFrostAnswers("Image load error") + e.logFrostEvent("Image load error") L.e { "Failed to load image $imageUrl" } tempFile?.delete() fabAction = FabStates.ERROR @@ -307,7 +307,7 @@ internal enum class FabStates(val iicon: IIcon, val iconColor: Int = Prefs.iconC activity.startActivity(intent) } catch (e: Exception) { activity.errorRef = e - e.logFrostAnswers("Image share failed") + e.logFrostEvent("Image share failed") activity.frostSnackbar(R.string.image_share_failed) } } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/LoginActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/LoginActivity.kt index aa2e5871..9afca21e 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/LoginActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/LoginActivity.kt @@ -15,7 +15,6 @@ import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.Target -import com.crashlytics.android.answers.LoginEvent import com.pitchedapps.frost.R import com.pitchedapps.frost.dbflow.CookieModel import com.pitchedapps.frost.dbflow.fetchUsername @@ -90,11 +89,7 @@ class LoginActivity : BaseActivity() { } textview.text = String.format(getString(R.string.welcome), name) textview.fadeIn() - frostAnswers { - logLogin(LoginEvent() - .putMethod("frost_browser") - .putSuccess(true)) - } + frostEvent("Login" , "success" to true ) /* * The user may have logged into an account that is already in the database * We will let the db handle duplicates and load it now after the new account has been saved @@ -123,7 +118,7 @@ class LoginActivity : BaseActivity() { } override fun onLoadFailed(e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean): Boolean { - e.logFrostAnswers("Profile loading exception") + e.logFrostEvent("Profile loading exception") profileSubject.onSuccess(false) return false } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt index 8d4e521f..97d82884 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt @@ -11,25 +11,20 @@ import android.view.MenuItem import ca.allanwang.kau.kpref.activity.CoreAttributeContract import ca.allanwang.kau.kpref.activity.KPrefActivity import ca.allanwang.kau.kpref.activity.KPrefAdapterBuilder -import ca.allanwang.kau.kpref.activity.items.KPrefItemBase import ca.allanwang.kau.ui.views.RippleCanvas import ca.allanwang.kau.utils.* import com.mikepenz.community_material_typeface_library.CommunityMaterial import com.mikepenz.google_material_typeface_library.GoogleMaterial -import com.pitchedapps.frost.BuildConfig import com.pitchedapps.frost.R import com.pitchedapps.frost.enums.Support import com.pitchedapps.frost.settings.* import com.pitchedapps.frost.utils.* -import com.pitchedapps.frost.utils.iab.FrostBilling -import com.pitchedapps.frost.utils.iab.IS_FROST_PRO -import com.pitchedapps.frost.utils.iab.IabSettings /** * Created by Allan Wang on 2017-06-06. */ -class SettingsActivity : KPrefActivity(), FrostBilling by IabSettings() { +class SettingsActivity : KPrefActivity() { var resultFlag = Activity.RESULT_CANCELED @@ -56,8 +51,6 @@ class SettingsActivity : KPrefActivity(), FrostBilling by IabSettings() { return } } - if (!onActivityResultBilling(requestCode, resultCode, data)) - super.onActivityResult(requestCode, resultCode, data) reloadList() } @@ -125,12 +118,7 @@ class SettingsActivity : KPrefActivity(), FrostBilling by IabSettings() { iicon = CommunityMaterial.Icon.cmd_flask_outline } - plainText(R.string.get_pro) { - descRes = R.string.get_pro_desc - iicon = GoogleMaterial.Icon.gmd_star - visible = { !IS_FROST_PRO } - onClick = { restorePurchases() } - } + // todo add donation? plainText(R.string.about_frost) { descRes = R.string.about_frost_desc @@ -159,14 +147,6 @@ class SettingsActivity : KPrefActivity(), FrostBilling by IabSettings() { visible = { Prefs.debugSettings } } - if (BuildConfig.DEBUG) { - checkbox(R.string.custom_pro, { Prefs.debugPro }, { Prefs.debugPro = it }) - } - } - - fun KPrefItemBase.BaseContract<*>.dependsOnPro() { - onDisabledClick = { purchasePro() } - enabler = { IS_FROST_PRO } } fun shouldRestartMain() { @@ -179,7 +159,6 @@ class SettingsActivity : KPrefActivity(), FrostBilling by IabSettings() { super.onCreate(savedInstanceState) animate = Prefs.animate themeExterior(false) - onCreateBilling() } fun themeExterior(animate: Boolean = true) { @@ -222,9 +201,4 @@ class SettingsActivity : KPrefActivity(), FrostBilling by IabSettings() { fun setFrostResult(flag: Int) { resultFlag = resultFlag or flag } - - override fun onDestroy() { - onDestroyBilling() - super.onDestroy() - } } \ No newline at end of file diff --git a/app/src/main/kotlin/com/pitchedapps/frost/dbflow/CookiesDb.kt b/app/src/main/kotlin/com/pitchedapps/frost/dbflow/CookiesDb.kt index e98020d4..69cf32b7 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/dbflow/CookiesDb.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/dbflow/CookiesDb.kt @@ -6,7 +6,7 @@ import com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork import com.pitchedapps.frost.facebook.FbItem import com.pitchedapps.frost.utils.L import com.pitchedapps.frost.utils.frostJsoup -import com.pitchedapps.frost.utils.logFrostAnswers +import com.pitchedapps.frost.utils.logFrostEvent import com.raizlabs.android.dbflow.annotation.ConflictAction import com.raizlabs.android.dbflow.annotation.Database import com.raizlabs.android.dbflow.annotation.PrimaryKey @@ -76,7 +76,7 @@ inline fun CookieModel.fetchUsername(crossinline callback: (String) -> Unit) { L.d { "Fetch username found" } } catch (e: Exception) { if (e !is UnknownHostException) - e.logFrostAnswers("Fetch username failed") + e.logFrostEvent("Fetch username failed") } finally { if (result.isBlank() && (name?.isNotBlank() == true)) { callback(name!!) diff --git a/app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentBase.kt b/app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentBase.kt index a644e966..cf48893c 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentBase.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentBase.kt @@ -55,7 +55,7 @@ abstract class BaseFragment : Fragment(), FragmentContract, DynamicUiContract { if (value || this is WebFragment) return arguments!!.putBoolean(ARG_VALID, value) L.e { "Invalidating position $position" } - frostAnswersCustom("Native Fallback", + frostEvent("Native Fallback", "Item" to baseEnum.name) (context as MainActivityContract).reloadFragment(this) } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/services/FrostNotifications.kt b/app/src/main/kotlin/com/pitchedapps/frost/services/FrostNotifications.kt index 30c94744..ab61b37d 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/services/FrostNotifications.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/services/FrostNotifications.kt @@ -36,7 +36,7 @@ import com.pitchedapps.frost.parsers.ParseNotification import com.pitchedapps.frost.utils.ARG_USER_ID import com.pitchedapps.frost.utils.L import com.pitchedapps.frost.utils.Prefs -import com.pitchedapps.frost.utils.frostAnswersCustom +import com.pitchedapps.frost.utils.frostEvent import java.util.* /** @@ -190,7 +190,7 @@ enum class NotificationType( if (newLatestEpoch > prevLatestEpoch) putTime(prevNotifTime, newLatestEpoch).save() L.d { "Notif $name new epoch ${getTime(lastNotificationTime(userId))}" } - frostAnswersCustom("Notifications", "Type" to name, "Count" to notifs.size) + frostEvent("Notifications", "Type" to name, "Count" to notifs.size) if (notifs.size > 1) summaryNotification(context, userId, notifs.size).notify(context) val ringtone = ringtone() diff --git a/app/src/main/kotlin/com/pitchedapps/frost/services/NotificationService.kt b/app/src/main/kotlin/com/pitchedapps/frost/services/NotificationService.kt index 6ba968e7..22477eab 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/services/NotificationService.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/services/NotificationService.kt @@ -10,7 +10,7 @@ import com.pitchedapps.frost.dbflow.CookieModel import com.pitchedapps.frost.dbflow.loadFbCookiesSync import com.pitchedapps.frost.utils.L import com.pitchedapps.frost.utils.Prefs -import com.pitchedapps.frost.utils.frostAnswersCustom +import com.pitchedapps.frost.utils.frostEvent import org.jetbrains.anko.doAsync import java.util.concurrent.Future @@ -31,7 +31,7 @@ class NotificationService : JobService() { override fun onStopJob(params: JobParameters?): Boolean { val time = System.currentTimeMillis() - startTime L.d { "Notification service has finished abruptly in $time ms" } - frostAnswersCustom("NotificationTime", + frostEvent("NotificationTime", "Type" to "Service force stop", "IM Included" to Prefs.notificationsInstantMessages, "Duration" to time) @@ -43,7 +43,7 @@ class NotificationService : JobService() { fun finish(params: JobParameters?) { val time = System.currentTimeMillis() - startTime L.i { "Notification service has finished in $time ms" } - frostAnswersCustom("NotificationTime", + frostEvent("NotificationTime", "Type" to "Service", "IM Included" to Prefs.notificationsInstantMessages, "Duration" to time) diff --git a/app/src/main/kotlin/com/pitchedapps/frost/settings/Appearance.kt b/app/src/main/kotlin/com/pitchedapps/frost/settings/Appearance.kt index eeeca01f..314590e2 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/settings/Appearance.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/settings/Appearance.kt @@ -11,7 +11,6 @@ import com.pitchedapps.frost.enums.MainActivityLayout import com.pitchedapps.frost.enums.Theme import com.pitchedapps.frost.injectors.CssAssets import com.pitchedapps.frost.utils.* -import com.pitchedapps.frost.utils.iab.IS_FROST_PRO import com.pitchedapps.frost.views.KPrefTextSeekbar /** @@ -25,22 +24,16 @@ fun SettingsActivity.getAppearancePrefs(): KPrefAdapterBuilder.() -> Unit = { onClick = { materialDialogThemed { title(R.string.theme) - items(Theme.values() - .map { if (it == Theme.CUSTOM && !IS_FROST_PRO) R.string.custom_pro else it.textRes } - .map { string(it) }) + items(Theme.values().map { string(it.textRes) }) itemsCallbackSingleChoice(item.pref) { _, _, which, _ -> if (item.pref != which) { - if (which == Theme.CUSTOM.ordinal && !IS_FROST_PRO) { - purchasePro() - return@itemsCallbackSingleChoice true - } item.pref = which shouldRestartMain() reload() setFrostTheme(true) themeExterior() invalidateOptionsMenu() - frostAnswersCustom("Theme", "Count" to Theme(which).name) + frostEvent("Theme", "Count" to Theme(which).name) } true } @@ -125,7 +118,7 @@ fun SettingsActivity.getAppearancePrefs(): KPrefAdapterBuilder.() -> Unit = { if (item.pref != which) { item.pref = which shouldRestartMain() - frostAnswersCustom("Main Layout", "Type" to MainActivityLayout(which).name) + frostEvent("Main Layout", "Type" to MainActivityLayout(which).name) } true } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/settings/Feed.kt b/app/src/main/kotlin/com/pitchedapps/frost/settings/Feed.kt index 78898eeb..5de68e21 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/settings/Feed.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/settings/Feed.kt @@ -46,14 +46,11 @@ fun SettingsActivity.getFeedPrefs(): KPrefAdapterBuilder.() -> Unit = { descRes = R.string.composer_desc } - header(R.string.pro_features) - checkbox(R.string.suggested_friends, Prefs::showSuggestedFriends, { Prefs.showSuggestedFriends = it setFrostResult(REQUEST_REFRESH) }) { descRes = R.string.suggested_friends_desc - dependsOnPro() } checkbox(R.string.suggested_groups, Prefs::showSuggestedGroups, { @@ -61,7 +58,6 @@ fun SettingsActivity.getFeedPrefs(): KPrefAdapterBuilder.() -> Unit = { setFrostResult(REQUEST_REFRESH) }) { descRes = R.string.suggested_groups_desc - dependsOnPro() } checkbox(R.string.facebook_ads, Prefs::showFacebookAds, { @@ -69,6 +65,5 @@ fun SettingsActivity.getFeedPrefs(): KPrefAdapterBuilder.() -> Unit = { setFrostResult(REQUEST_REFRESH) }) { descRes = R.string.facebook_ads_desc - dependsOnPro() } } \ No newline at end of file diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/L.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/L.kt index a108745c..4f31f5f5 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/utils/L.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/L.kt @@ -2,7 +2,7 @@ package com.pitchedapps.frost.utils import android.util.Log import ca.allanwang.kau.logging.KauLogger -import com.crashlytics.android.Crashlytics +import com.bugsnag.android.Bugsnag import com.pitchedapps.frost.BuildConfig @@ -34,9 +34,9 @@ object L : KauLogger("Frost", { super.logImpl(priority, message, t) else { if (message != null) - Crashlytics.log(priority, tag, message) + Bugsnag.leaveBreadcrumb(message) if (t != null) - Crashlytics.logException(t) + Bugsnag.notify(t) } } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt index 26d7894e..95a5f39b 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt @@ -135,19 +135,9 @@ object Prefs : KPref() { var enablePip: Boolean by kpref("enable_pip", true) - /** - * Cache like value to determine if user has or had pro - * In most cases, [com.pitchedapps.frost.utils.iab.IS_FROST_PRO] should be looked at instead - * This has been renamed to pro for short, but keep in mind that it only reflects the value - * of when it was previously verified - */ - var pro: Boolean by kpref("previously_pro", false) - - var debugPro: Boolean by kpref("debug_pro", false) - var verboseLogging: Boolean by kpref("verbose_logging", false) - var analytics: Boolean by kpref("analytics", true) + var analytics: Boolean by kpref("analytics", false) var overlayEnabled: Boolean by kpref("overlay_enabled", true) diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/Utils.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/Utils.kt index d73f29e9..b1b129fb 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/utils/Utils.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/Utils.kt @@ -23,15 +23,12 @@ import ca.allanwang.kau.mediapicker.createPrivateMediaFile import ca.allanwang.kau.utils.* import ca.allanwang.kau.xml.showChangelog import com.afollestad.materialdialogs.MaterialDialog -import com.crashlytics.android.answers.Answers -import com.crashlytics.android.answers.CustomEvent import com.pitchedapps.frost.BuildConfig import com.pitchedapps.frost.R import com.pitchedapps.frost.activities.* import com.pitchedapps.frost.dbflow.CookieModel import com.pitchedapps.frost.facebook.* import com.pitchedapps.frost.facebook.FbUrlFormatter.Companion.VIDEO_REDIRECT -import com.pitchedapps.frost.utils.iab.IS_FROST_PRO import org.apache.commons.text.StringEscapeUtils import org.jsoup.Jsoup import org.jsoup.nodes.Element @@ -175,29 +172,19 @@ inline fun Activity.setFrostColors(builder: ActivityThemeUtils.() -> Unit) { themer.theme(this) } -fun frostAnswers(action: Answers.() -> Unit) { - if (BuildConfig.DEBUG || !Prefs.analytics) return - Answers.getInstance().action() -} -fun frostAnswersCustom(name: String, vararg events: Pair) { - frostAnswers { - logCustom(CustomEvent("Frost $name").apply { - events.forEach { (key, value) -> - if (value is Number) putCustomAttribute(key, value) - else putCustomAttribute(key, value.toString()) - } - }) - } +fun frostEvent(name: String, vararg events: Pair) { + // todo bind + L.v { "Event: $name ${events.joinToString(", ")}" } } /** * Helper method to quietly keep track of throwable issues */ -fun Throwable?.logFrostAnswers(text: String) { +fun Throwable?.logFrostEvent(text: String) { val msg = if (this == null) text else "$text: $message" L.e { msg } - frostAnswersCustom("Errors", "text" to text, "message" to (this?.message ?: "NA")) + frostEvent("Errors", "text" to text, "message" to (this?.message ?: "NA")) } fun Activity.frostSnackbar(@StringRes text: Int, builder: Snackbar.() -> Unit = {}) = snackbar(text, Snackbar.LENGTH_LONG, frostSnackbar(builder)) @@ -291,10 +278,6 @@ inline val String?.isExplicitIntent fun Context.frostChangelog() = showChangelog(R.xml.frost_changelog, Prefs.textColor) { theme() - if (System.currentTimeMillis() - Prefs.installDate > 2592000000) { //show after 1 month - neutralText(R.string.kau_rate) - onNeutral { _, _ -> startPlayStoreLink(R.string.play_store_package_id) } - } } fun Context.frostUriFromFile(file: File): Uri = @@ -311,7 +294,8 @@ inline fun Context.sendFrostEmail(subjectId: String, crossinline builder: EmailB fun EmailBuilder.addFrostDetails() { addItem("Prev version", Prefs.prevVersionCode.toString()) - val proTag = if (IS_FROST_PRO) "TY" else "FP" + val proTag = "FO" +// if (IS_FROST_PRO) "TY" else "FP" addItem("Random Frost ID", "${Prefs.frostId}-$proTag") addItem("Locale", Locale.getDefault().displayName) } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IABDialogs.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IABDialogs.kt deleted file mode 100644 index 15d707a9..00000000 --- a/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IABDialogs.kt +++ /dev/null @@ -1,95 +0,0 @@ -package com.pitchedapps.frost.utils.iab - -import android.app.Activity -import ca.allanwang.kau.utils.restart -import ca.allanwang.kau.utils.startLink -import ca.allanwang.kau.utils.startPlayStoreLink -import ca.allanwang.kau.utils.string -import com.crashlytics.android.answers.PurchaseEvent -import com.pitchedapps.frost.R -import com.pitchedapps.frost.activities.SettingsActivity -import com.pitchedapps.frost.utils.* - -/** - * Created by Allan Wang on 2017-06-30. - */ - -private fun playStoreLog(text: String) { - L.e(Throwable(text)) { "IAB Play Store Exception" } -} - -/** - * Properly restart an activity - */ -private fun Activity.playRestart() { - if (this is SettingsActivity) { - setResult(REQUEST_RESTART) - finish() - } else restart() -} - -fun Activity?.playStoreNoLongerPro() { - Prefs.pro = false - L.d { "IAB No longer pro" } - frostAnswers { - logPurchase(PurchaseEvent() - .putCustomAttribute("result", "no longer pro") - .putSuccess(false)) - } - if (this == null) return - materialDialogThemed { - title(R.string.uh_oh) - content(R.string.play_store_not_pro) - positiveText(R.string.reload) - dismissListener { - this@playStoreNoLongerPro.playRestart() - } - } -} - -fun Activity?.playStoreFoundPro() { - Prefs.pro = true - L.d { "Found pro" } - if (this == null) return - materialDialogThemed { - title(R.string.found_pro) - content(R.string.found_pro_desc) - positiveText(R.string.reload) - dismissListener { - this@playStoreFoundPro.playRestart() - } - } -} - -fun Activity.playStorePurchaseUnsupported() { - L.d { "Play store not found" } - materialDialogThemed { - title(R.string.uh_oh) - content(R.string.play_store_unsupported) - negativeText(R.string.kau_close) - positiveText(R.string.kau_play_store) - neutralText(R.string.paypal) - onPositive { _, _ -> startPlayStoreLink(R.string.play_store_package_id) } - onNeutral { _, _ -> startLink(string(R.string.dev_paypal)) } - } -} - -fun Activity.playStorePurchasedSuccessfully(key: String) { - L.d { "Play store purchased $key successfully" } - materialDialogThemed { - title(R.string.play_thank_you) - content(R.string.play_purchased_pro) - positiveText(R.string.kau_ok) - neutralText(R.string.kau_rate) - onNeutral { _, _ -> startPlayStoreLink(R.string.play_store_package_id) } - } -} - -fun Activity.purchaseRestored() { - L.d { "Purchase restored" } - materialDialogThemed { - title(R.string.play_thank_you) - content(R.string.purchases_restored_with_pro) - positiveText(R.string.kau_ok) - } -} \ No newline at end of file diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IabBinder.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IabBinder.kt deleted file mode 100644 index 568127a2..00000000 --- a/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/IabBinder.kt +++ /dev/null @@ -1,188 +0,0 @@ -package com.pitchedapps.frost.utils.iab - -import android.app.Activity -import android.content.Intent -import com.anjlab.android.iab.v3.BillingProcessor -import com.anjlab.android.iab.v3.TransactionDetails -import com.crashlytics.android.answers.PurchaseEvent -import com.pitchedapps.frost.BuildConfig -import com.pitchedapps.frost.utils.L -import com.pitchedapps.frost.utils.Prefs -import com.pitchedapps.frost.utils.frostAnswers -import com.pitchedapps.frost.utils.logFrostAnswers -import org.jetbrains.anko.doAsync -import org.jetbrains.anko.onComplete -import org.jetbrains.anko.uiThread -import java.lang.ref.WeakReference -import java.math.BigDecimal -import java.util.* - -/** - * Created by Allan Wang on 2017-07-22. - */ -private const val FROST_PRO = "frost_pro" - -/** - * Implemented pro checker with a hook for debug builds - * Use this when checking if the pro feature is enabled - */ -inline val IS_FROST_PRO: Boolean - get() = Prefs.pro || (BuildConfig.DEBUG && Prefs.debugPro) - -interface FrostBilling : BillingProcessor.IBillingHandler { - fun Activity.onCreateBilling() - fun onDestroyBilling() - fun purchasePro() - fun restorePurchases() - fun onActivityResultBilling(requestCode: Int, resultCode: Int, data: Intent?): Boolean -} - -abstract class IabBinder : FrostBilling { - - var bp: BillingProcessor? = null - lateinit var activityRef: WeakReference - val activity - get() = activityRef.get() - - final override fun Activity.onCreateBilling() { - activityRef = WeakReference(this) - doAsync { - bp = BillingProcessor.newBillingProcessor(this@onCreateBilling, PUBLIC_BILLING_KEY, this@IabBinder) - bp?.initialize() - } - } - - override fun onDestroyBilling() { - activityRef.clear() - bp?.release() - bp = null - } - - override fun onBillingInitialized() = L.i { "IAB initialized" } - - override fun onPurchaseHistoryRestored() = L.d { "IAB restored" } - - override fun onProductPurchased(productId: String, details: TransactionDetails?) { - bp.doAsync { - L.i { "IAB $productId purchased" } - val listing = weakRef.get()?.getPurchaseListingDetails(productId) ?: return@doAsync - val currency = try { - Currency.getInstance(listing.currency) - } catch (e: Exception) { - null - } - frostAnswers { - logPurchase(PurchaseEvent().apply { - putItemId(productId) - putSuccess(true) - if (currency != null) { - putCurrency(currency) - putItemType(productId) - putItemPrice(BigDecimal.valueOf(listing.priceValue)) - } - }) - } - } - } - - override fun onBillingError(errorCode: Int, error: Throwable?) { - frostAnswers { - logPurchase(PurchaseEvent() - .putCustomAttribute("result", errorCode.toString()) - .putSuccess(false)) - } - error.logFrostAnswers("IAB error $errorCode") - } - - override fun onActivityResultBilling(requestCode: Int, resultCode: Int, data: Intent?): Boolean = bp?.handleActivityResult(requestCode, resultCode, data) - ?: false - - override fun purchasePro() { - val bp = this.bp - if (bp == null) { - frostAnswers { - logPurchase(PurchaseEvent() - .putCustomAttribute("result", "null bp") - .putSuccess(false)) - } - L.eThrow("IAB null bp on purchase attempt") - return - } - val a = activity ?: return - - if (!BillingProcessor.isIabServiceAvailable(a) || !bp.isInitialized || !bp.isOneTimePurchaseSupported) - a.playStorePurchaseUnsupported() - else - bp.purchase(a, FROST_PRO) - } - -} - -class IabSettings : IabBinder() { - - override fun onProductPurchased(productId: String, details: TransactionDetails?) { - super.onProductPurchased(productId, details) - activity?.playStorePurchasedSuccessfully(productId) - } - - override fun onBillingError(errorCode: Int, error: Throwable?) { - super.onBillingError(errorCode, error) - L.e { "Billing error $errorCode ${error?.message}" } - } - - /** - * Attempts to get pro, or launch purchase flow if user doesn't have it - */ - override fun restorePurchases() { - bp.doAsync { - val load = weakRef.get()?.loadOwnedPurchasesFromGoogle() ?: return@doAsync - L.d { "IAB settings load from google $load" } - uiThread { - if (!(weakRef.get()?.isPurchased(FROST_PRO) ?: return@uiThread)) { - if (Prefs.pro) activity.playStoreNoLongerPro() - else purchasePro() - } else { - if (!Prefs.pro) activity.playStoreFoundPro() - else activity?.purchaseRestored() - } - } - } - } -} - -class IabMain : IabBinder() { - - override fun onBillingInitialized() { - super.onBillingInitialized() - restorePurchases() - } - - override fun onPurchaseHistoryRestored() { - super.onPurchaseHistoryRestored() - restorePurchases() - } - - private var restored = false - - /** - * Checks for pro and only does so once - * A null check is added but it should never happen - * given that this is only called with bp is ready - */ - override fun restorePurchases() { - if (restored || bp == null) return - restored = true - bp.doAsync { - val load = weakRef.get()?.loadOwnedPurchasesFromGoogle() ?: false - L.d { "IAB main load from google $load" } - onComplete { - if (weakRef.get()?.isPurchased(FROST_PRO) != true) { - if (Prefs.pro) activity.playStoreNoLongerPro() - } else { - if (!Prefs.pro) activity.playStoreFoundPro() - } - onDestroyBilling() - } - } - } -} \ No newline at end of file diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/Key.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/Key.kt deleted file mode 100644 index a21d8670..00000000 --- a/app/src/main/kotlin/com/pitchedapps/frost/utils/iab/Key.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.pitchedapps.frost.utils.iab - -/** - * Created by Allan Wang on 2017-06-23. - * - * NOTE - * - * Since this is an open source project and all other components are essentially public, - * I have decided to add the keys here too; - * they can be reverse engineered relatively easily since they are constants anyways. - * This is the public billing key from the play store - */ -private const val play_key_1 = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgyTZS" -private const val play_key_2 = "K9Bd3ALpr9KJUsVGczP9CcPelWkdnJfNrrzu1EztJyrHRsGQ4" -private const val play_key_3 = "QVWY9NZwc6Nrk9qdJlEdr8AJAxJ+JiwUqsj3/TxxUYm/G7q8Z" -private const val play_key_4 = "7zo8jSkYZyzqwoAl2PDx2kleI4sZLkhCRLyE6dGQEZQmvJ6kk" -private const val play_key_5 = "W12Gz3FagAM5luRGsoWZj40pJItUrGJA9euMWq4rMhVZv4mVk" -private const val play_key_6 = "KFJB9/vhF/XGz7txpYlFxMESzXuKsbEDKmKCHzvySLq8Ki4N9" -private const val play_key_7 = "DzbgUiw+VzA2KpSVp66JH3GEU8egO8i9SvAWeCPikuolooRVh" -private const val play_key_8 = "jwfBV7gDxZztoLuvmQU6kXvCwRnRa+mkfUnBKKLkH1QIDAQAB" - -internal val PUBLIC_BILLING_KEY: String by lazy { - StringBuilder() - .append(play_key_1) - .append(play_key_2) - .append(play_key_3) - .append(play_key_4) - .append(play_key_5) - .append(play_key_6) - .append(play_key_7) - .append(play_key_8) - .toString() -} \ No newline at end of file diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/DebugWebView.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/DebugWebView.kt index 4ac9e600..4c4e5525 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/web/DebugWebView.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/DebugWebView.kt @@ -15,7 +15,6 @@ import com.pitchedapps.frost.injectors.jsInject import com.pitchedapps.frost.utils.L import com.pitchedapps.frost.utils.Prefs import com.pitchedapps.frost.utils.createFreshFile -import com.pitchedapps.frost.utils.iab.IS_FROST_PRO import com.pitchedapps.frost.utils.isFacebookUrl import org.jetbrains.anko.withAlpha import java.io.File @@ -85,8 +84,8 @@ class DebugWebView @JvmOverloads constructor( CssAssets.ROUND_ICONS.maybe(Prefs.showRoundedIcons), CssHider.CORE, CssHider.COMPOSER.maybe(!Prefs.showComposer), - CssHider.PEOPLE_YOU_MAY_KNOW.maybe(!Prefs.showSuggestedFriends && IS_FROST_PRO), - CssHider.SUGGESTED_GROUPS.maybe(!Prefs.showSuggestedGroups && IS_FROST_PRO), + CssHider.PEOPLE_YOU_MAY_KNOW.maybe(!Prefs.showSuggestedFriends), + CssHider.SUGGESTED_GROUPS.maybe(!Prefs.showSuggestedGroups), Prefs.themeInjector, CssHider.NON_RECENT.maybe((url?.contains("?sk=h_chr") ?: false) && Prefs.aggressiveRecents)) diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt index d4e1c103..f1d03f35 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebViewClients.kt @@ -10,7 +10,6 @@ import com.pitchedapps.frost.facebook.FB_URL_BASE import com.pitchedapps.frost.facebook.FbItem import com.pitchedapps.frost.injectors.* import com.pitchedapps.frost.utils.* -import com.pitchedapps.frost.utils.iab.IS_FROST_PRO import com.pitchedapps.frost.views.FrostWebView import io.reactivex.subjects.Subject import org.jetbrains.anko.withAlpha @@ -67,14 +66,14 @@ open class FrostWebViewClient(val web: FrostWebView) : BaseWebViewClient() { CssAssets.ROUND_ICONS.maybe(Prefs.showRoundedIcons), CssHider.CORE, CssHider.COMPOSER.maybe(!Prefs.showComposer), - CssHider.PEOPLE_YOU_MAY_KNOW.maybe(!Prefs.showSuggestedFriends && IS_FROST_PRO), - CssHider.SUGGESTED_GROUPS.maybe(!Prefs.showSuggestedGroups && IS_FROST_PRO), + CssHider.PEOPLE_YOU_MAY_KNOW.maybe(!Prefs.showSuggestedFriends), + CssHider.SUGGESTED_GROUPS.maybe(!Prefs.showSuggestedGroups), Prefs.themeInjector, CssHider.NON_RECENT.maybe((web.url?.contains("?sk=h_chr") ?: false) && Prefs.aggressiveRecents), JsAssets.DOCUMENT_WATCHER, JsAssets.CLICK_A, - CssHider.ADS.maybe(!Prefs.showFacebookAds && IS_FROST_PRO), + CssHider.ADS.maybe(!Prefs.showFacebookAds), JsAssets.CONTEXT_A, JsAssets.HEADER_HIDER, JsAssets.MEDIA) diff --git a/app/src/main/res/values-de-rDE/strings_play_store.xml b/app/src/main/res/values-de-rDE/strings_play_store.xml index ba3dec2d..406b6f21 100644 --- a/app/src/main/res/values-de-rDE/strings_play_store.xml +++ b/app/src/main/res/values-de-rDE/strings_play_store.xml @@ -1,20 +1,7 @@ - Frost Pro gefunden! - Sieht so aus als hättest du Frost Pro! Die App wird neu nun neu gestartet damit du alle großartigen Pro Features nutzen kannst! - Vielen Dank für Ihre Unterstützung! Genießen Sie alle Funktionen in Frost.\n\n -Falls Sie diese App mögen, Bewerten Sie die App bitte und unterstützen Sie dieses open-source Projekt.\n\n -Wenn Sie Fragen haben, bitte zögern Sie nicht mich zu kontaktieren! - Es scheint, dass du ein Pro-Benutzer bist, aber wir konnten Ihren Kauf nicht bestätigen. Wenn dieser Fehler weiterhin auftritt, versuchen Sie den Play Store-Cache zu leeren und eine Neuinstallation der App. - Es scheint als könnten sie mit dieser App-Version nicht die Pro Version kaufen. Bitte installieren Sie die Play Store Version wenn dieses Problem weiterhin bleibt. \n -Wenn sie ohne zusätzliche Features spenden wollen, können Sie dies über PayPal tun. - Vielen Dank! - Einkäufe wiederhergestellt - Frost Pro wurde wiederhergestellt. Genießen Sie die Funktionen! - Es scheint so, als hätten sie keine Pro Version. Wenn dies ein dauerhaftes Problem ist, kontaktieren Sie mich bitte und senden mir einen Beleg des Kaufes. - In-App Einkäufe werden wiederhergestellt… - Benutzerdefiniert [Pro] - Huch + In-App Einkäufe werden wiederhergestellt… + Huch Neu laden diff --git a/app/src/main/res/values-de-rDE/strings_pref_feed.xml b/app/src/main/res/values-de-rDE/strings_pref_feed.xml index 62dcde6a..7b65c521 100644 --- a/app/src/main/res/values-de-rDE/strings_pref_feed.xml +++ b/app/src/main/res/values-de-rDE/strings_pref_feed.xml @@ -7,8 +7,7 @@ Filtert alte, zusätzliche Post von Facebook\'s originalen Neuigkeiten heraus. Deaktivieren falls der Feed leer ist. Status Composer Zeige den Status Composer im Feed - Pro Funktionen - Empfohlene Freunde + Empfohlene Freunde Zeige \"Leute die du vielleicht kennst\" im Feed Empfohlene Gruppen Zeige \"Empfohlene Gruppen\" im Feed diff --git a/app/src/main/res/values-de-rDE/strings_preferences.xml b/app/src/main/res/values-de-rDE/strings_preferences.xml index 5c9a822e..cef49564 100644 --- a/app/src/main/res/values-de-rDE/strings_preferences.xml +++ b/app/src/main/res/values-de-rDE/strings_preferences.xml @@ -12,9 +12,7 @@ Definieren Sie die Optionen, beeinflussen des getakten Netzwerks Experimentell Aktiviert frühzeitigen Zugriff auf instabile Funktionen - Kaufe Frost Pro - Käufe oder Pro wiederherstellen und entfalte das volle Potential von Frost! Enthält Ad Blocker, benutzerdefinierte Designs, und vieles mehr! - Über Frost für Facebook + Über Frost für Facebook Version, Credits und FAQs Hilf beim Übersetzen Frost wird durch crowdin übersetzt. Helfe beim Übersetzen, wenn du es in deiner Sprache willst! diff --git a/app/src/main/res/values-dv-rMV/strings.xml b/app/src/main/res/values-dv-rMV/strings.xml new file mode 100644 index 00000000..df3dc342 --- /dev/null +++ b/app/src/main/res/values-dv-rMV/strings.xml @@ -0,0 +1,4 @@ + + + Skip + \ No newline at end of file diff --git a/app/src/main/res/values-es-rES/strings_play_store.xml b/app/src/main/res/values-es-rES/strings_play_store.xml index 754e945b..7a3cae9b 100644 --- a/app/src/main/res/values-es-rES/strings_play_store.xml +++ b/app/src/main/res/values-es-rES/strings_play_store.xml @@ -1,17 +1,7 @@ - Frost Pro encontrado! - Parece que tienes Frost Pro! Reiniciaremos la app para que puedas disfrutar de todas las fantásticas características! - Gracias por tu apoyo! Disfruta de todas las características de Frost.\n\nSi te gusta esta app, por favor considera calificarla y apoyar este proyecto de código abierto.\n\nSi tienes algún comentario, no dudes en contactarme! - Parece que eres un usuario pro, pero no hemos podido recuperar la información de compra. Si el error persiste, por favor intenta limpiar la caché de la Play Store o reinstala la app. - Esta versión de la app no fue diseñada para compras. Por favor vuelve a instalarla desde Google Play Store si persiste el error.\nSi deseas donar, sin obtener características adicionales, puedes hacerlo vía PayPal. - Gracias! - Compras restauradas - Frost Pro ha sido restaurado. ¡Disfrutalo! - Parece que esta no es la versión Pro. Si este problema persiste, contactame y adjuntame tu recibo de compra. - Restaurando compras… - Personalizado [Pro] - Oh oh + Restaurando compras… + Oh oh Recargar diff --git a/app/src/main/res/values-es-rES/strings_pref_feed.xml b/app/src/main/res/values-es-rES/strings_pref_feed.xml index 0165ed23..87292f3a 100644 --- a/app/src/main/res/values-es-rES/strings_pref_feed.xml +++ b/app/src/main/res/values-es-rES/strings_pref_feed.xml @@ -7,8 +7,7 @@ Filtra de manera adicional las publicaciones más antiguas de Facebook de las noticias recientes. Deshabilita esta opción si el feed se encuentra vacio. Redactar estado Mostrar escritor de estado en el feed - Características pro - Amigos sugeridos + Amigos sugeridos Mostrar \"Gente que quizá conozcas\" en el feed Grupos sugeridos Mostrar \"grupos sugeridos\" en el feed diff --git a/app/src/main/res/values-es-rES/strings_preferences.xml b/app/src/main/res/values-es-rES/strings_preferences.xml index d1d782eb..db1125bb 100644 --- a/app/src/main/res/values-es-rES/strings_preferences.xml +++ b/app/src/main/res/values-es-rES/strings_preferences.xml @@ -12,9 +12,7 @@ Define las opciones que afectan las redes limitadas Funciones Experimentales Permite el acceso previo a características potencialmente inestables - Obtener Frost Pro - Compra o restaura Frost Pro y descubre todo el potencial de Frost! Incluye bloqueador de publicidad, temas personalizados, configuraciones avanzadas y mucho más! - Acerca de Frost for Facebook + Acerca de Frost for Facebook Versión, Créditos y Preguntas Frecuentes Ayúdanos a traducir Frost se traduce a través de Crowdin. ¡Contribuye si lo quieres en tu idioma! diff --git a/app/src/main/res/values-es/strings_pref_feed.xml b/app/src/main/res/values-es/strings_pref_feed.xml index 9d81a88b..679061bf 100644 --- a/app/src/main/res/values-es/strings_pref_feed.xml +++ b/app/src/main/res/values-es/strings_pref_feed.xml @@ -7,8 +7,7 @@ Filtra de manera adicional las publicaciones más antiguas de Facebook de las noticias recientes. Deshabilita esta opción si el feed se encuentra vacio. Escritor de Estado Mostrar escritor de estado en el feed - Características Pro - Sugerencias de Amigos + Sugerencias de Amigos Mostrar \"Gente que quizá conozcas\" en el feed Grupos sugeridos Mostrar \"grupos sugeridos\" en el feed diff --git a/app/src/main/res/values-fr-rFR/strings_play_store.xml b/app/src/main/res/values-fr-rFR/strings_play_store.xml index 79525686..5e02edcb 100644 --- a/app/src/main/res/values-fr-rFR/strings_play_store.xml +++ b/app/src/main/res/values-fr-rFR/strings_play_store.xml @@ -1,17 +1,7 @@ - Trouvé Frost Pro! - On dirait que vous avez Frost Pro! Nous allons recharger l’app pour que vous puissiez profiter des fonctionnalités impressionnantes! - Merci pour votre soutien! Profitez de toutes les fonctionnalités dans Frost.\n\nSi vous aimez cette application, veuillez considérer la noter et soutenir ce projet open source.\n\nSi vous avez des commentaires, n’hésitez pas à me contacter! - Il semble que vous êtes un utilisateur pro, mais nous n\'avons pas trouvé vos infos d’achat. Si cette erreur persiste, s’il vous plaît essayez de vider la mémoire cache du Play Store et de réinstaller l’application. - Il semble que cette version de l’app ne peut pas acheter pro. S’il vous plaît réinstallez depuis le Play Store s’il s’agit d’un problème persistant. \nSi vous souhaitez faire un don sans aucune fonctionnalités supplémentaires, vous pouvez le faire par le biais de PayPal. - Merci ! - Achats restaurés - Frost Pro a été restauré. Profitez bien des fonctionnalités ! - Il semble que vous n’avez pas la version pro. S’il s’agit d’un problème persistant, contactez-moi et joignez une preuve d\'achat. - Restauration des achats… - Personnalisé [Pro] - Oups + Restauration des achats… + Oups Recharger diff --git a/app/src/main/res/values-fr-rFR/strings_pref_feed.xml b/app/src/main/res/values-fr-rFR/strings_pref_feed.xml index 44f18bd8..2d434566 100644 --- a/app/src/main/res/values-fr-rFR/strings_pref_feed.xml +++ b/app/src/main/res/values-fr-rFR/strings_pref_feed.xml @@ -7,8 +7,7 @@ Filtrer les vieilles publications additionnelles du fil d\'actualité les plus récentes de Facebook. Désactivez cette option si votre fil d\'actualités est vide. Compositeur de statut Montrer le compositeur de statut dans le fil d\'actualité - Fonctionnalités Pro - Amis suggérés + Amis suggérés Afficher les «Personnes que vous pouvez connaître» dans le fil d\'actualité Groupes Suggérés Afficher les «Groupes Suggérés» dans le fil d\'actualité diff --git a/app/src/main/res/values-fr-rFR/strings_preferences.xml b/app/src/main/res/values-fr-rFR/strings_preferences.xml index 8802ca31..f40e5363 100644 --- a/app/src/main/res/values-fr-rFR/strings_preferences.xml +++ b/app/src/main/res/values-fr-rFR/strings_preferences.xml @@ -12,9 +12,7 @@ Définir les options qui affectent les réseaux limités Expérimental Accès en avant première aux fonctionnalités potentiellement instables - Obtenir Frost Pro - Acheter ou restaurer pro et libérer tout le potentiel de Frost! Comprend des bloqueurs de publicités, des thèmes personnalisés, des configurations complètes et bien plus encore à venir ! - À propos de Frost pour Facebook + À propos de Frost pour Facebook Version, crédits et FAQ Aider à traduire Frost est traduit grâce à crowdin. Contribuez si vous le voulez dans votre langue ! diff --git a/app/src/main/res/values-gl-rES/strings_play_store.xml b/app/src/main/res/values-gl-rES/strings_play_store.xml index 880d368b..eecb456d 100644 --- a/app/src/main/res/values-gl-rES/strings_play_store.xml +++ b/app/src/main/res/values-gl-rES/strings_play_store.xml @@ -1,18 +1,7 @@ - Frost Pro detectado! - Semella que tes Frost Pro! Volveremos cargar a aplicación e así poderás desfrutar de fantásticas funcionalidades! - Grazas polo teu apoio! Desfruta de todas as funcionalidades de Frost.\n\nSe che gusta a aplicación, considera a opción de valorala e apoiar este proxecto de código aberto.\n\nSe tes algún comentario, non dubides en transmitírnolo! - Ao parecer es un usuario premium, mais non conseguimos atopar a información da túa compra. Se persiste o erro, limpa a caché da Play Store e volve instalar a aplicación. - Parece que desde esta versión da aplicación non se pode adquirir a Pro. Por favor, volve instalala desde a Play Store se persiste o problema. - \nSe queres facer unha doazón, sen obter funcionalidades adicionais, podes utilizar PayPal. - Grazas! - Compras restauradas - Frost Pro foi restaurado. Utiliza as súas funcionalidades! - Semella que non tes a versión Pro. Se persiste o problema, contacta comigo e anexa o teu recibo de compra. - Restaurando compras… - [Pro] personalizado - Vaites! + Restaurando compras… + Vaites! Volver cargar diff --git a/app/src/main/res/values-gl-rES/strings_pref_feed.xml b/app/src/main/res/values-gl-rES/strings_pref_feed.xml index 8d579358..0a46f286 100644 --- a/app/src/main/res/values-gl-rES/strings_pref_feed.xml +++ b/app/src/main/res/values-gl-rES/strings_pref_feed.xml @@ -7,8 +7,7 @@ Filtra as publicacións máis antigas do Facebook daquelas máis recentes. Desactiva esta opción se a canle se atopa baleira. Editor de estado Mostra o editor de estado na canle - Funcionalidades Pro - Amizades suxeridas + Amizades suxeridas Mostra persoas que quizais coñezas na canle Grupos suxeridos Suxire grupos na canle diff --git a/app/src/main/res/values-gl-rES/strings_preferences.xml b/app/src/main/res/values-gl-rES/strings_preferences.xml index 5070ed93..6389d5c8 100644 --- a/app/src/main/res/values-gl-rES/strings_preferences.xml +++ b/app/src/main/res/values-gl-rES/strings_preferences.xml @@ -12,9 +12,7 @@ Define as opcións que afectan ás redes limitadas Funcións experimentais Permite o acceso previo a funcionalidades en proba aínda inestables - Obter Frost Pro - Merca ou restaura a versión Pro e desbloquea todas as funcionalidades de Frost! Inclúe bloqueadores de anuncios, temas personalizables, configuración avanzada e moito máis! - Acerca de Frost para Facebook + Acerca de Frost para Facebook Versión, créditos e preguntas frecuentes Axuda a traducir Frost tradúcese a través de Crowdin. Bota unha man se o queres ver no teu idioma! diff --git a/app/src/main/res/values-in-rID/strings_play_store.xml b/app/src/main/res/values-in-rID/strings_play_store.xml index 2d33d7a2..7319b605 100644 --- a/app/src/main/res/values-in-rID/strings_play_store.xml +++ b/app/src/main/res/values-in-rID/strings_play_store.xml @@ -1,18 +1,7 @@ - Frost Pro Ditemukan! - Sepertinya Anda memiliki frost pro! Kami akan memuat ulang aplikasi sehingga Anda dapat menikmati fitur mengagumkan! - Terima kasih atas dukungan Anda! Nikmati semua fitur di Frost.\n\nJika Anda menyukai aplikasi ini, Silahkan menilik nilai dan mendukung proyek sumber terbuka ini.\n\nJika Anda memiliki komentar, silahkan jangan ragu untuk menghubungi saya! - Sepertinya Anda pengguna pro, tapi kami tidak bisa menemukan informasi pembelian Anda. Jika kesalahan ini terus berlanjut, silahkan coba bersihkan cache Play Store dan instal ulang aplikasi. - Sepertinya ini aplikasi versi tidak bisa membeli pro. Silahkan instal ulang dari play store jika ini adalah masalah yang terus-menerus. - \nJika Anda ingin menyumbang tanpa fitur tambahan, Anda dapat melakukannya melalui PayPal. - Terima Kasih! - Pembelian Dipulihkan - Frost Pro sudah dipulihkan. Nikmati fitur! - Sepertinya Anda tidak memiliki pro. jika ini ada masalah yang terus-menerus, hubungi saya dan lampirkan bukti pembelian Anda. - Memulihkan pembelian… - [Pro] Kustom - Uh Oh + Memulihkan pembelian… + Uh Oh Muat Ulang diff --git a/app/src/main/res/values-in-rID/strings_pref_feed.xml b/app/src/main/res/values-in-rID/strings_pref_feed.xml index 4306d8b1..5a801dad 100644 --- a/app/src/main/res/values-in-rID/strings_pref_feed.xml +++ b/app/src/main/res/values-in-rID/strings_pref_feed.xml @@ -7,8 +7,7 @@ Saring postingan lama tambahan dari umpan yang terbaru Facebook. Nonaktifkan ini jika Umpan Anda kosong. Komposer Status Tampilkan komposer status dalam umpan - Fitur Pro - Teman yang Disarankan + Teman yang Disarankan Tampilkan \"Orang yang mungkin dikenal\" dalam umpan Grup yang Disarankan Tampilkan \"Grup yang disarankan\" pada Umpan diff --git a/app/src/main/res/values-in-rID/strings_preferences.xml b/app/src/main/res/values-in-rID/strings_preferences.xml index 25013d63..6a8b3caf 100644 --- a/app/src/main/res/values-in-rID/strings_preferences.xml +++ b/app/src/main/res/values-in-rID/strings_preferences.xml @@ -12,8 +12,6 @@ Menentukan pilihan yang mempengaruhi jaringan meteran Eksperimental Aktifkan akses awal ke fitur yang berpotensi tidak stabil - Mendapatkan Frost Pro - Membeli atau mengembalikan pro dan membukan potensi penuh dai Frost! termasuk pemblokir iklan, tema kustom, konfigurasi penuh, dan banyak lagi untuk mendatang! Tentang Frost for Facebook Versi, Reputasi, dan Tanya Jawab Bantuan Terjemahan diff --git a/app/src/main/res/values-it-rIT/strings_play_store.xml b/app/src/main/res/values-it-rIT/strings_play_store.xml index 4ac14487..6c886eb3 100644 --- a/app/src/main/res/values-it-rIT/strings_play_store.xml +++ b/app/src/main/res/values-it-rIT/strings_play_store.xml @@ -1,17 +1,7 @@ - Frost Pro Trovato! - Sembra che tu abbia Frost Pro! Ricaricheremo l\'app così che possa sfruttare fantastiche funzioni! - Grazie per il tuo supporto! Goditi tutte le funzioni di Frost.\n\nSe ti piace l\'app, per favore vota e supporta questo progetto open source.\n\nSe hai qualche commento, non esitare e contattami! - Sembra che tu sia un utente Pro, ma non siamo riusciti a trovare le tue informazioni sull\'acquisto. Se l\'errore persiste per favore prova a pulire la cache del Play Store e reinstallare l\'app. - Sembra che questa versione dell\'app non sia in grado di completare l\'acquisto. Reinstalla l\'app dal Play Store se l\'errore persiste.\nSe vorresti donare senza ricevere funzionalità aggiuntive, puoi farlo tramite PayPal. - Grazie! - Acquisto Ripristinato - Frost Pro è stato ripristinato. Goditi le funzioni! - Sembra che tu non abbia la versione pro. Se pensi che sia un errore, contattami ed allega la tua ricevuta di pagamento. - Ripristino acquisti… - Personalizzato [Pro] - Uh Oh + Ripristino acquisti… + Uh Oh Ricarica diff --git a/app/src/main/res/values-it-rIT/strings_pref_feed.xml b/app/src/main/res/values-it-rIT/strings_pref_feed.xml index 7d0aa376..c8a330da 100644 --- a/app/src/main/res/values-it-rIT/strings_pref_feed.xml +++ b/app/src/main/res/values-it-rIT/strings_pref_feed.xml @@ -7,8 +7,7 @@ Filtra ulteriori post vecchi dalla sezione originale più recenti di Facebook. Disabilita se il tuo feed è vuoto. Compositore di Stato Mostra la casella per comporre uno stato nelle Notizie - Opzioni Pro - Amici consigliati + Amici consigliati Mostra \"Persone che potresti conoscere\" nelle notizie Gruppi suggeriti Mostra \"Gruppi suggeriti\" nelle notizie diff --git a/app/src/main/res/values-it-rIT/strings_preferences.xml b/app/src/main/res/values-it-rIT/strings_preferences.xml index 98d8e133..3cc945e6 100644 --- a/app/src/main/res/values-it-rIT/strings_preferences.xml +++ b/app/src/main/res/values-it-rIT/strings_preferences.xml @@ -12,9 +12,7 @@ Definisci le opzioni che influiscono sulle reti a consumo Sperimentali Abilita accesso a delle funzionalità potenzialmente pericolose - Acquista Frost Pro - Acquista o ripristina versione pro e sblocca tutte le funzionalità di Frost incluso rimozione annunci, temi personalizzati, configurazioni complete e molto altro ancora! - Riguardo Frost per Facebook + Riguardo Frost per Facebook Versione, Credite e FAQ Aiuta a Tradurre Frost è tradotto attraverso la crowdin. Contribuisci, se lo vuoi nella tua lingua! diff --git a/app/src/main/res/values-it/strings_pref_feed.xml b/app/src/main/res/values-it/strings_pref_feed.xml index 7e814f28..a7479c4a 100644 --- a/app/src/main/res/values-it/strings_pref_feed.xml +++ b/app/src/main/res/values-it/strings_pref_feed.xml @@ -7,8 +7,7 @@ Filtra ulteriori post vecchi dalla sezione originale più recenti di Facebook. Disabilita se il tuo feed è vuoto. Compositore di Stato Mostra la casella per comporre uno stato nelle Notizie - Funzionalità Pro - Amici Suggeriti + Amici Suggeriti Mostra \"Persone Che Potresti Conoscere\" nel feed Gruppi Suggeriti Mostra \"Gruppi Suggeriti\" nel feed diff --git a/app/src/main/res/values-ko-rKR/strings_play_store.xml b/app/src/main/res/values-ko-rKR/strings_play_store.xml index 5c4dc036..0d5ca329 100644 --- a/app/src/main/res/values-ko-rKR/strings_play_store.xml +++ b/app/src/main/res/values-ko-rKR/strings_play_store.xml @@ -1,17 +1,7 @@ - Frost Pro 발견! - Frost Pro 를 소유하고 계신 것 같습니다! 앱이 다시 로드되면 놀라운 기능들을 사용하실 수 있습니다! - 지원에 감사드립니다! Frost 의 모든 기능을 이용하세요.\n\n만약 이 앱이 유용하다면, 평점을 매기고 오픈 소스 프로젝트를 지원해 주세요.\n\n의견이 있다면, 연락을 주저하지 마세요! - Pro 사용자이지만 구매 정보를 찾을 수 없습니다. 이 오류가 지속된다면 플레이 스토어의 캐시를 지우고 앱을 재설치 해 보세요. - 이 앱 버전에서는 프로 버전을 구매할 수 없습니다. 문제가 지속된다면 플레이 스토어에서 재설치 해 보세요. \n추가 기능 없이 기부하고 싶으시다면 PayPal 을 이용하시면 됩니다. - 감사합니다! - 구매 내역 복원됨 - Frost Pro 가 복원되었습니다. 기능을 즐기세요! - Pro 버전이 없으신 것 같습니다. 문제가 지속된다면 개발자에게 영수증과 함께 연락해 주세요. - 구매 내역 복원 중… - 사용자 지정 [Pro] - 이런 + 구매 내역 복원 중… + 이런 새로 고침 diff --git a/app/src/main/res/values-ko-rKR/strings_pref_feed.xml b/app/src/main/res/values-ko-rKR/strings_pref_feed.xml index 1be3783c..cdcc4aef 100644 --- a/app/src/main/res/values-ko-rKR/strings_pref_feed.xml +++ b/app/src/main/res/values-ko-rKR/strings_pref_feed.xml @@ -7,8 +7,7 @@ 페이스북의 원 최신 글 피드에서 조금 오래된 글을 제외합니다. 피드가 비었다면 비활성화 하세요. 상태 도우미 상태 도우미를 피드에 표시할지 결정합니다. - Pro 기능 - 추천 친구 + 추천 친구 \"당신을 알 수도 있는 사람\" 피드를 보여줍니다. 추천 그룹 \"추천 그룹\"을 피드에 보여줍니다. diff --git a/app/src/main/res/values-ko-rKR/strings_preferences.xml b/app/src/main/res/values-ko-rKR/strings_preferences.xml index f7fe488e..79e213ab 100644 --- a/app/src/main/res/values-ko-rKR/strings_preferences.xml +++ b/app/src/main/res/values-ko-rKR/strings_preferences.xml @@ -12,10 +12,7 @@ 네트워크 문제에 관한 옵션 설정 실험적 기능 불안정할 수 있는 기능들을 미리 활성화 - Frost Pro 구매 - Pro 버전을 구매하거나 복원하여 Frost 의 모든 잠재력을 끌어내세요! -광고 제거, 사용자 지정 테마, 완전한 설정 등등이 있습니다! - Facebook 을 위한 Frost 정보 + Facebook 을 위한 Frost 정보 버전, 제작자, FAQ 번역 돕기 Frost 는 crowdin 을 통해 번역할 수 있습니다. 여러분의 언어로 사용하고 싶으시다면 기여해 주세요! diff --git a/app/src/main/res/values-no-rNO/strings_play_store.xml b/app/src/main/res/values-no-rNO/strings_play_store.xml index 3a63ab05..8369599d 100644 --- a/app/src/main/res/values-no-rNO/strings_play_store.xml +++ b/app/src/main/res/values-no-rNO/strings_play_store.xml @@ -1,17 +1,7 @@ - Fant Frost Pro! - Ser ut som du har frost pro! Vi vil starte appen på nytt slik at du kan bruke de fantastiske funksjonene! - Takk for din støtte! Nyt alle funksjoner i Frost.\n\nHvis du liker denne appen, Vennligst legg inn en vurdering og støtte dette åpen kildekode-prosjektet.\n\nHvis du har en kommentar, ikke nøl med å kontakte meg! - Det virker som du er en pro-bruker, men vi kunne ikke finne innkjøps informasjon. Hvis denne feilen vedvarer, kan du prøve å tømme hurtigbufferen i Google Play og installere programmet på nytt. - Det virker som denne app-versjonen ikke kan kjøpe pro. Reinstaller fra Google Play hvis dette er en vedvarende problem.\nHvis du ønsker å donere uten flere funksjoner, kan du gjøre det via PayPal. - Tusen takk! - Kjøp gjenopprettet - Frost Pro er gjenopprettet. Nyt funksjonene! - Det virker som du ikke har pro. Hvis dette er en vedvarende problem, kontakt meg og legg til kvitteringen. - Gjenoppretter kjøp… - Egendefinert [Pro] - Uff da + Gjenoppretter kjøp… + Uff da Last på nytt diff --git a/app/src/main/res/values-no-rNO/strings_pref_feed.xml b/app/src/main/res/values-no-rNO/strings_pref_feed.xml index 3c334f54..219472ff 100644 --- a/app/src/main/res/values-no-rNO/strings_pref_feed.xml +++ b/app/src/main/res/values-no-rNO/strings_pref_feed.xml @@ -7,8 +7,7 @@ Filtrere ut flere gamle innlegg fra Facebooks opprinnelige siste brukte innlegg. Deaktiver dette hvis listen er tom. Lag en status oppdatering Vis \"lag en status oppdatering\" i feeden - Pro funksjoner - Foreslåtte venner + Foreslåtte venner Vis \"Folk du kanskje kjenner\" i feeden Foreslåtte grupper Vis \"Foreslåtte grupper\" i feeden diff --git a/app/src/main/res/values-no-rNO/strings_preferences.xml b/app/src/main/res/values-no-rNO/strings_preferences.xml index 6dffb5a5..0a1572b6 100644 --- a/app/src/main/res/values-no-rNO/strings_preferences.xml +++ b/app/src/main/res/values-no-rNO/strings_preferences.xml @@ -12,9 +12,7 @@ Definere alternativer som påvirker mobilnettverk Eksperimentell Få tidlig tilgang til potensielt ustabile funksjoner - Få Frost Pro - Kjøpe eller gjenopprette pro og få det fulle potensialet av Frost! Inkluderer reklame blokkering, egendefinerte temaer, full konfigurasjoner og mye mer! - Om Frost for Facebook + Om Frost for Facebook Versjon, kreditter og vanlige spørsmål Hjelp til å oversette Frost er oversatt gjennom crowdin. Bidra hvis du ønsker det på ditt språk! diff --git a/app/src/main/res/values-pl-rPL/strings_play_store.xml b/app/src/main/res/values-pl-rPL/strings_play_store.xml index ac86c8f2..a1567659 100644 --- a/app/src/main/res/values-pl-rPL/strings_play_store.xml +++ b/app/src/main/res/values-pl-rPL/strings_play_store.xml @@ -1,17 +1,7 @@ - Znaleziono Frost Pro! - Wygląda na to, że masz Frost Pro! Ponownie załadujemy aplikację, aby można było korzystać z niesamowitych funkcji! - Dziękujemy za Twoje wsparcie! Korzystaj z wersji Pro.\n\nJeśli podoba Ci się aplikacja, oceń ją i wesprzyj ten projekt.\n\nJeśli chcesz zostawić komentarz, nie wahaj się ze mną skontaktować! - Wydaje się, że jesteś użytkownikiem wersji Pro, ale nie mogliśmy znaleźć informacji o zakupie. Jeśli ten błąd nie ustępuje, spróbuj wyczyścić pamięć podręczną Sklepu Google Play i ponownie zainstalować aplikację. - Wygląda na to, że ta wersja aplikacji nie może zostać zakupiona do wersji Pro. Zainstaluj ponownie ze Sklepu Google Play, jeśli jest to trwały problem. \nJeśli chcesz przekazać darowiznę bez dodatkowych funkcji, możesz to zrobić za pośrednictwem PayPal. - Dziękujemy! - Przywrócono zakup - Frost Pro został przywrócony. Korzystaj z funkcji! - Wygląda na to, że nie masz wersji Pro. Jeśli jest to trwały problem, skontaktuj się ze mną i dołącz dowód zakupu. - Przywracanie zakupu… - Własny [Pro] - Uh Oh + Przywracanie zakupu… + Uh Oh Przeładuj diff --git a/app/src/main/res/values-pl-rPL/strings_pref_feed.xml b/app/src/main/res/values-pl-rPL/strings_pref_feed.xml index e54362a2..34ca26c0 100644 --- a/app/src/main/res/values-pl-rPL/strings_pref_feed.xml +++ b/app/src/main/res/values-pl-rPL/strings_pref_feed.xml @@ -7,8 +7,7 @@ Odfiltruj dodatkowe stare posty z najnowszych aktualności Facebooka. Wyłączyć tę opcję, jeśli twoje aktualności są puste. Aktualizacja statusu Wyświetlaj aktualizację statusu - Funkcje Pro - Proponowani znajomi + Proponowani znajomi Wyświetlaj \"Osoby, które możesz znać\" Proponowane grupy Wyświetlaj \"Proponowane grupy\" diff --git a/app/src/main/res/values-pl-rPL/strings_preferences.xml b/app/src/main/res/values-pl-rPL/strings_preferences.xml index fb9f2a6a..5333a293 100644 --- a/app/src/main/res/values-pl-rPL/strings_preferences.xml +++ b/app/src/main/res/values-pl-rPL/strings_preferences.xml @@ -12,9 +12,7 @@ Opcje wpływające na wykorzystanie sieci Eksperymentalne Włącz wcześniejszy dostęp do potencjalnie niestabilnych funkcji - Pobierz Frost Pro - Kup lub przywróć wersję Pro i odblokuj pełny potencjał Frost! Zawiera bloker reklam, własne motywy, pełną konfigurację i wiele więcej w przyszłości! - O aplikacji Frost for Facebook + O aplikacji Frost for Facebook Wersja, podziękowania i FAQ Pomóż tłumaczyć Frost jest tłumaczony w witrynie crowdin. Dołącz, jeśli chcesz zobaczyć go w swoim języku! diff --git a/app/src/main/res/values-pt-rBR/strings_play_store.xml b/app/src/main/res/values-pt-rBR/strings_play_store.xml index bd667651..0c5864f6 100644 --- a/app/src/main/res/values-pt-rBR/strings_play_store.xml +++ b/app/src/main/res/values-pt-rBR/strings_play_store.xml @@ -1,17 +1,7 @@ - Frost Pro encontrado! - Parece que você tem Frost Pro! Vamos recarregar o aplicativo para que você possa desfrutar dos recursos incríveis! - Obrigado pelo seu apoio! Aproveite todos os recursos no Frost.\n\nSe você gosta desse aplicativo, considere avaliá-lo e apoiar este projeto de código aberto.\n\nSe você tiver comentários, não hesite em contatar-me! - Parece que você é um usuário Pro, mas não conseguimos encontrar suas informações de compras. Se esse erro persistir, tente limpar o cache da Play Store e reinstalar o aplicativo. - Parece que esta versão do aplicativo não pode comprar Pro. Reinstale da Play Store se este problema persistir. \nSe você quiser doar sem recursos adicionais, você pode fazer através do PayPal. - Obrigado! - Compras restauradas - Frost Pro foi restaurado. Aproveite os recursos! - Parece que você não tem Pro. Se este problema persistir, entre em contato comigo e anexe seu recibo de compra. - Restaurando compras… - [Pro] personalizado - Uh Oh + Restaurando compras… + Uh Oh Recarregar diff --git a/app/src/main/res/values-pt-rBR/strings_pref_feed.xml b/app/src/main/res/values-pt-rBR/strings_pref_feed.xml index 5ac33a58..25198ced 100644 --- a/app/src/main/res/values-pt-rBR/strings_pref_feed.xml +++ b/app/src/main/res/values-pt-rBR/strings_pref_feed.xml @@ -7,8 +7,7 @@ Filtra as postagens mais antigas do Feed das postagens recentes. Desative esta opção se o Feed estiver vazio. Compositor de Status Mostrar o compositor de status no Feed - Recursos Pro - Amigos Sugeridos + Amigos Sugeridos Mostra \"Pessoas Que Talvez Você Conheça\" no Feed Grupos Sugeridos Mostra \"Grupos Sugeridos\" no Feed diff --git a/app/src/main/res/values-pt-rBR/strings_preferences.xml b/app/src/main/res/values-pt-rBR/strings_preferences.xml index 60aa7703..ab7d3a43 100644 --- a/app/src/main/res/values-pt-rBR/strings_preferences.xml +++ b/app/src/main/res/values-pt-rBR/strings_preferences.xml @@ -12,9 +12,7 @@ Definir opções que afetam planos de dados Experimental Permitir acesso antecipado a recursos potencialmente instáveis - Obter Frost Pro - Compre ou restaure o Pro e desbloqueie todo o potencial do Frost! Inclui bloqueadores de anúncios, temas personalizados, configurações completas e muito mais por vir! - Sobre Frost for Facebook + Sobre Frost for Facebook Versão, Créditos, e FAQs Ajudar a Traduzir Frost é traduzido através do Crowdin. Contribua se você o quer em sua língua! diff --git a/app/src/main/res/values-th-rTH/strings_play_store.xml b/app/src/main/res/values-th-rTH/strings_play_store.xml index b83e6a63..38c51dee 100644 --- a/app/src/main/res/values-th-rTH/strings_play_store.xml +++ b/app/src/main/res/values-th-rTH/strings_play_store.xml @@ -1,17 +1,7 @@ - พบกับ Frost Pro - ดูเหมือนว่าคุณจะมี frost pro เราจะเริ่มต้นแอพใหม่เพื่อใช้คุณสมบัติที่สุดยอด - ขอบคุณสำหรับการสนับสนุก ขอให้เพลิดเพลินไปกับคุณสมบัติของ Frost \n\n ถ้าคุณชอบแอพแบบนี้ โปรดพิจารณาให้คะแนนและช่วยในโครงการโอเพนซอร์ซของแอพ \n\n ถ้ามีข้อเสนอแนะ โปรดอย่าลังเลที่จะติดต่อฉัน - ดูเหมือนว่าคุณจะมีเวอชั่น Pro แต่เราไม่สามารถหาข้อมูลการซื้อของคุณได้ ถ้าข้อผิดพลาดนี้ยังอยู่ กรุณาเคลียร์แคชของ Play Store และติดตั้งแอพนี้อีกครั้ง - ดูเหมือนว่าแอพเวอชั่นนี้ไม่สามารถซื้อเวอชั้นโปรได้ ถ้ายังเจอปัญหานี้อยู่ กรุณาติดตั้งแอพใหม่อีกครั้งจาก play store \n ถ้าคุณต้องการที่จะบริจาคโดยที่ไม่ได้คุณสมบัติใดๆเพิ่มเติมคุณสามารถทำได้ผ่านทาง Paypal - ขอบคุณ! - เรียกคืนการซื้อสำเร็จ - Frost Pro ได้รับการฟื้นฟู สนุกกับการใช้! - ดูเหมือนว่าคุณไม่มีเวอชั่นPro ถ้ายังเจอปัญหานี้อยู่ กรุณาติดต่อฉันและแนบใบเสร็จมาด้วย - กำลังเรียกคืนการซื้อ - กำหนดเอง [Pro] - โอ้โห! + กำลังเรียกคืนการซื้อ + โอ้โห! โหลดใหม่ diff --git a/app/src/main/res/values-th-rTH/strings_pref_feed.xml b/app/src/main/res/values-th-rTH/strings_pref_feed.xml index 65c1f106..a491d160 100644 --- a/app/src/main/res/values-th-rTH/strings_pref_feed.xml +++ b/app/src/main/res/values-th-rTH/strings_pref_feed.xml @@ -7,8 +7,7 @@ กรองออกโพสต์เก่าเพิ่มเติมจาก Facebook ในส่วนใหญ่ล่าสุดฟีด ปิดใช้งานนี้ถ้าฟีดของคุณว่างเปล่า สร้างโพสต์ แสดงสร้างโพสตืในฟีท - คุณสมบัติโปร - เพื่อนที่แนะนำ + เพื่อนที่แนะนำ แสดงเพื่อนที่คุยอาจรู้จักในฟีด กลุ่มแนะนำ แสดงกลุ่มแนะนำในฟีด diff --git a/app/src/main/res/values-th-rTH/strings_preferences.xml b/app/src/main/res/values-th-rTH/strings_preferences.xml index ce847de5..ea9c590b 100644 --- a/app/src/main/res/values-th-rTH/strings_preferences.xml +++ b/app/src/main/res/values-th-rTH/strings_preferences.xml @@ -12,9 +12,7 @@ กำหนดตัวเลือกที่มีผลต่อปริมาณข้อมูลเครือข่าย ทดลอง เปิดใช้งานการเข้าถึงคุณลักษณะที่อาจไม่เสถียร - รับ Frost Pro - ซื้อหรือเรียกคืนเวอชั่นโปร และปลดล็อคคุณสมบัติทั้งหมดของ Frost! ประกอบด้วย บล๊อคโฆษณา ธีมแบบกำหนดเอง การตั้งค่าทุกอย่าง และอื่นๆที่จะตามมา - เกี่ยวกับ Frost for Facebook + เกี่ยวกับ Frost for Facebook รุ่น, เครดิต และถามตอบ ช่วยแปล Frost จะถูกแปลผ่าน crowdin คุณสามารถช่วยแปลภาษาของคุณได้ถ้าต้องการ! diff --git a/app/src/main/res/values-tr-rTR/strings_preferences.xml b/app/src/main/res/values-tr-rTR/strings_preferences.xml index 87fa86c4..2ccc5f2b 100644 --- a/app/src/main/res/values-tr-rTR/strings_preferences.xml +++ b/app/src/main/res/values-tr-rTR/strings_preferences.xml @@ -12,8 +12,6 @@ Ölcülen ağları etkiliyen secenekleri tanımlayın Deneysel Potansiyel olarak kararsız özelliklere erken erişim sağlamayı etkin kıl - Frost Pro al - Pro\'yu satın alın veya yenileyin ve Frost\'un tam potansiyelini açın! Reklam engelleyiciler, özel temalar, tam yapılandırmalar ve daha pek çok şey var! Frost Hakkında Facebook için Versiyon, Crediler, ve SSS Çeviri Yardımı diff --git a/app/src/main/res/values-vi-rVN/strings_play_store.xml b/app/src/main/res/values-vi-rVN/strings_play_store.xml index 3122937d..ee9465ae 100644 --- a/app/src/main/res/values-vi-rVN/strings_play_store.xml +++ b/app/src/main/res/values-vi-rVN/strings_play_store.xml @@ -1,18 +1,7 @@ - Tìm thấy bản Pro! - Có vẻ bạn có bản pro! Chúng tôi sẽ tải lại ứng dụng để bạn có thể thưởng thức các tính năng tuyệt vời! - Cảm ơn bạn đã hỗ trợ! Hãy tận hưởng các tính năng của Frost.\n\nNếu bạn thích ứng dụng này, hãy bình chọn và hỗ trợ dự án mã mở này.\n\nNếu bạn muốn cho ý kiến, hãy liên lạc ngay với tôi! - Có vẻ bạn là người dùng trả phí, nhưng chung tôi không tìm thấy thông tin mua hàng của bạn. Nếu lỗi này lặp lại, hãy thử xoá bộ nhớ đệm của Ch Play và cài lại ứng dụng. - Có vẻ như phiên bản này của ứng dụng không thể mua bản pro. Hãy cài lại từ Ch Play nếu lỗi tiếp tục lặp lại. - \nNếu bạn chỉ muốn đóng góp mà không cần các tính năng thêm, bạn có thể làm qua PayPal. - Cảm ơn bạn! - Đã khôi phục mua hàng - Frost Pro đã được khôi phục. Hãy thưởng thức các tính năng! - Có vẻ như bạn không có bản pro. Nếu lỗi tiếp tục lặp lại, hãy liên hệ với tôi và gửi kèm hoá đơn mua hàng. - Đang khôi phục mua hàng… - Tự chọn [Pro] - Ồ… + Đang khôi phục mua hàng… + Ồ… Tải lại diff --git a/app/src/main/res/values-vi-rVN/strings_pref_feed.xml b/app/src/main/res/values-vi-rVN/strings_pref_feed.xml index 8e303665..c2f80f99 100644 --- a/app/src/main/res/values-vi-rVN/strings_pref_feed.xml +++ b/app/src/main/res/values-vi-rVN/strings_pref_feed.xml @@ -7,8 +7,7 @@ Lọc bớt những bài đăng cũ trên bảng tin gần đây của Facebook. Tắt nếu bạn thấy bảng tin trống. Soạn trạng thái Hiện mục soạn trạng thái trên bảng tin - Tính năng Pro - Gợi ý bạn + Gợi ý bạn Hiện \'Gợi ý nhóm\' trên bảng tin Gợi ý nhóm Hiện \'Gợi ý nhóm\' trên bảng tin diff --git a/app/src/main/res/values-vi-rVN/strings_preferences.xml b/app/src/main/res/values-vi-rVN/strings_preferences.xml index ced0fd6b..20a9dc48 100644 --- a/app/src/main/res/values-vi-rVN/strings_preferences.xml +++ b/app/src/main/res/values-vi-rVN/strings_preferences.xml @@ -12,9 +12,7 @@ Chọn các tuỳ chọn đối với mạng di động Thử nghiệm Bật các tính năng chưa hoàn thiện - Mua Frost Pro - Mua hoặc khôi phục bản pro và mở khoá đầy đủ các tính năng của Frost, bao gồm cả chặn quảng cáo, tuỳ chọn kiểu giao diện, tuỳ chỉnh và còn hơn thế nữa! - Giới thiệu về Frost for Facebook + Giới thiệu về Frost for Facebook Phiên bản, tác giả, và câu hỏi thường gặp Tham gia dịch Frost được dịch thông qua crowdin. Hãy đóng góp bản dịch để có ứng dụng theo ngôn ngữ của bạn! diff --git a/app/src/main/res/values-zh-rCN/strings_play_store.xml b/app/src/main/res/values-zh-rCN/strings_play_store.xml index b5d35750..f7ab0f67 100644 --- a/app/src/main/res/values-zh-rCN/strings_play_store.xml +++ b/app/src/main/res/values-zh-rCN/strings_play_store.xml @@ -1,17 +1,7 @@ - 以找到 Frost Pro! - 看起来你蛮喜欢 Frost Pro !我们会重新加载应用程序,所以你可以享受很棒的功能 ! - 谢谢您的支持 !享受所有的功能在 Frost.\n\n如果你喜欢这个应用程序,请考虑它评分和支持这个开源项目.\n\n如果你有意见,请不要犹豫与我联系 ! - 好像你是 pro 用户,但我们找不到您的采购信息。如果此错误仍然存在,请尝试清除播放存储缓存并重新安装该应用程序。 - 好像这个应用程序的版本不能购买临。请如果这是一个持续的问题,重新安装从播放存储。 \nIf 你想捐没有任何额外的功能,你可以这样做通过PayPal。 - 谢谢你! - 购买恢复 - Frost Pro 已恢复。享受功能 ! - 你好像也没有Frost Pro。如果这是一个持续的问题,与我联系并附上您的购买收据。 - 正在恢复购买… - 自定义 [Pro] - 啊呃! + 正在恢复购买… + 啊呃! 重新加载 diff --git a/app/src/main/res/values-zh-rCN/strings_pref_feed.xml b/app/src/main/res/values-zh-rCN/strings_pref_feed.xml index 1ad813e3..1c290152 100644 --- a/app/src/main/res/values-zh-rCN/strings_pref_feed.xml +++ b/app/src/main/res/values-zh-rCN/strings_pref_feed.xml @@ -7,8 +7,7 @@ 过滤掉原先Facebook最新更新当中的过时发贴。如果新闻源是空的,请禁用此选项。 状态编辑器 在新闻源中显示状态编辑器 - 高级版功能 - 推荐好友 + 推荐好友 在新闻源中现实\"你可能认识的人\" 推荐群组 在新闻源中显示\"推荐群组\" diff --git a/app/src/main/res/values-zh-rCN/strings_preferences.xml b/app/src/main/res/values-zh-rCN/strings_preferences.xml index 63b88f64..889af7e9 100644 --- a/app/src/main/res/values-zh-rCN/strings_preferences.xml +++ b/app/src/main/res/values-zh-rCN/strings_preferences.xml @@ -12,9 +12,7 @@ 定义影响计量网络的选项 实验性功能 启用对潜在不稳定功能 - 获得Frost Pro - 购买或恢复临, 并解开Frost Pro的全部潜力! 包括广告拦截, 自定义主题, 完整配置, 还有更多的东西! - 关于Frost + 关于Frost 版本、学分、归功于和常见问题 帮助我们翻译 帮助我们翻译说明 diff --git a/app/src/main/res/values/strings_no_translate.xml b/app/src/main/res/values/strings_no_translate.xml index 17e6c8f7..fef4ebcd 100644 --- a/app/src/main/res/values/strings_no_translate.xml +++ b/app/src/main/res/values/strings_no_translate.xml @@ -3,7 +3,6 @@ pitchedapps@gmail.com https://www.paypal.me/Allanw9 PayPal - com.pitchedapps.frost https://crwd.in/frost-for-facebook https://github.com/AllanWang/Frost-for-Facebook https://www.reddit.com/r/FrostForFacebook diff --git a/app/src/main/res/values/strings_play_store.xml b/app/src/main/res/values/strings_play_store.xml index 36ad6143..22543802 100644 --- a/app/src/main/res/values/strings_play_store.xml +++ b/app/src/main/res/values/strings_play_store.xml @@ -1,21 +1,8 @@ - Found Frost Pro! - Looks like you have frost pro! We\'ll reload the app so you can enjoy the awesome features! - - Thank you for your support! Enjoy all the features in Frost.\n\nIf you like this app, please consider rating it and supporting this open source project.\n\nIf you have comments, please do not hesitate to contact me! - It seems like you are a pro user, but we couldn\'t find your purchasing info. If this error persists, please try clearing the Play Store cache and reinstalling the app. - It seems like this app version can\'t purchase pro. Please reinstall from the play store if this is a persistent issue. - \nIf you would like to donate without any additional features, you may do so through PayPal. - Thank you! - - Purchases Restored - Frost Pro has been restored. Enjoy the features! - It seems like you don\'t have pro. If this is a persistent issue, contact me and attach your purchase receipt. Restoring purchases… - Custom [Pro] Uh Oh Reload diff --git a/app/src/main/res/values/strings_pref_behaviour.xml b/app/src/main/res/values/strings_pref_behaviour.xml index 93f3ac61..62e94112 100644 --- a/app/src/main/res/values/strings_pref_behaviour.xml +++ b/app/src/main/res/values/strings_pref_behaviour.xml @@ -20,6 +20,6 @@ Exit Confirmation Show confirmation dialog before exiting the app Analytics - Enable anonymous analytics to help improve the app. No personal information is ever exposed. + Enable anonymous analytics and bug reports to help improve the app. No personal information is ever exposed. \ No newline at end of file diff --git a/app/src/main/res/values/strings_pref_feed.xml b/app/src/main/res/values/strings_pref_feed.xml index f858ee39..bacd6b32 100644 --- a/app/src/main/res/values/strings_pref_feed.xml +++ b/app/src/main/res/values/strings_pref_feed.xml @@ -8,7 +8,6 @@ Status Composer Show status composer in the feed - Pro Features Suggested Friends Show "People You May Know" in the feed Suggested Groups diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml index a54b95e7..84f39850 100644 --- a/app/src/main/res/values/strings_preferences.xml +++ b/app/src/main/res/values/strings_preferences.xml @@ -16,9 +16,6 @@ Experimental Enable early access to potentially unstable features - Get Frost Pro - Purchase or restore pro and unlock the full potential of Frost! Includes ad blockers, custom themes, full configurations, and much more to come! - About Frost for Facebook Version, Credits, and FAQs -- cgit v1.2.3