Remove unused billing code

pull/996/head
Alex Baker 6 years ago
parent 0e3cb95c07
commit fcf083c5fb

@ -3,41 +3,23 @@ package org.tasks.billing;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.Observer;
import java.util.List;
import javax.inject.Inject;
import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracker;
public class BillingClientImpl implements BillingClient { public class BillingClientImpl implements BillingClient {
@Inject
public static final String TYPE_SUBS = "";
public BillingClientImpl(Context context, Inventory inventory, Tracker tracker) {} public BillingClientImpl(Context context, Inventory inventory, Tracker tracker) {}
@Override @Override
public void queryPurchases() {} public void queryPurchases() {}
@Override
public int getErrorMessage() {
return 0;
}
@Override @Override
public void initiatePurchaseFlow( public void initiatePurchaseFlow(
Activity activity, String sku, String skuType, @Nullable String oldSku) {} Activity activity, String sku, String skuType, @Nullable String oldSku) {}
@Override @Override
public void addPurchaseCallback(OnPurchasesUpdated onPurchasesUpdated) { public void addPurchaseCallback(OnPurchasesUpdated onPurchasesUpdated) {}
}
@Override
public void querySkuDetails() {}
@Override
public void observeSkuDetails(
LifecycleOwner owner,
Observer<List<SkuDetails>> subscriptionObserver,
Observer<List<SkuDetails>> iapObserver) {}
@Override @Override
public void consume(String sku) {} public void consume(String sku) {}

@ -2,7 +2,7 @@ package org.tasks.billing;
public class Purchase { public class Purchase {
public Purchase(String json) {} public Purchase(@SuppressWarnings("unused") String json) {}
public String getSku() { public String getSku() {
return null; return null;
@ -24,7 +24,7 @@ public class Purchase {
return false; return false;
} }
public boolean isProSubscription() { boolean isProSubscription() {
return false; return false;
} }
} }

@ -1,28 +0,0 @@
package org.tasks.billing;
public class SkuDetails {
static final String SKU_PRO = "";
static final String TYPE_SUBS = "";
static final String TYPE_INAPP = "";
public String getSku() {
return null;
}
public String getTitle() {
return null;
}
public String getPrice() {
return null;
}
public String getDescription() {
return null;
}
public String getSkuType() {
return null;
}
}

@ -1,20 +1,11 @@
package org.tasks.billing; package org.tasks.billing;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.transform;
import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Lists.transform;
import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread; import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread;
import static org.tasks.billing.Inventory.SKU_TASKER;
import static org.tasks.billing.Inventory.SKU_THEMES;
import static org.tasks.billing.Inventory.SKU_VIP;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer;
import com.android.billingclient.api.BillingClient.BillingResponse; import com.android.billingclient.api.BillingClient.BillingResponse;
import com.android.billingclient.api.BillingClient.FeatureType; import com.android.billingclient.api.BillingClient.FeatureType;
import com.android.billingclient.api.BillingClient.SkuType; import com.android.billingclient.api.BillingClient.SkuType;
@ -23,17 +14,13 @@ import com.android.billingclient.api.BillingFlowParams.ProrationMode;
import com.android.billingclient.api.ConsumeResponseListener; import com.android.billingclient.api.ConsumeResponseListener;
import com.android.billingclient.api.Purchase.PurchasesResult; import com.android.billingclient.api.Purchase.PurchasesResult;
import com.android.billingclient.api.PurchasesUpdatedListener; import com.android.billingclient.api.PurchasesUpdatedListener;
import com.android.billingclient.api.SkuDetailsParams;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import io.reactivex.Single; import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import java.util.List; import java.util.List;
import javax.inject.Inject;
import org.tasks.BuildConfig; import org.tasks.BuildConfig;
import org.tasks.R;
import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracker;
import org.tasks.injection.ForApplication; import org.tasks.injection.ForApplication;
import timber.log.Timber; import timber.log.Timber;
@ -41,19 +28,14 @@ import timber.log.Timber;
@SuppressWarnings("all") @SuppressWarnings("all")
public class BillingClientImpl implements BillingClient, PurchasesUpdatedListener { public class BillingClientImpl implements BillingClient, PurchasesUpdatedListener {
private static final List<String> DEBUG_SKUS = ImmutableList.of(SKU_THEMES, SKU_TASKER, SKU_VIP); public static final String TYPE_SUBS = SkuType.SUBS;
private final MutableLiveData<List<SkuDetails>> skuDetails = new MutableLiveData<>();
private final Inventory inventory; private final Inventory inventory;
private final Tracker tracker; private final Tracker tracker;
MutableLiveData<List<SkuDetails>> subscriptions = new MutableLiveData<>();
MutableLiveData<List<SkuDetails>> iaps = new MutableLiveData<>();
private com.android.billingclient.api.BillingClient billingClient; private com.android.billingclient.api.BillingClient billingClient;
private boolean connected; private boolean connected;
private int billingClientResponseCode = -1;
private OnPurchasesUpdated onPurchasesUpdated; private OnPurchasesUpdated onPurchasesUpdated;
@Inject
public BillingClientImpl(@ForApplication Context context, Inventory inventory, Tracker tracker) { public BillingClientImpl(@ForApplication Context context, Inventory inventory, Tracker tracker) {
this.inventory = inventory; this.inventory = inventory;
this.tracker = tracker; this.tracker = tracker;
@ -188,15 +170,6 @@ public class BillingClientImpl implements BillingClient, PurchasesUpdatedListene
this.onPurchasesUpdated = onPurchasesUpdated; this.onPurchasesUpdated = onPurchasesUpdated;
} }
public void destroy() {
Timber.d("Destroying the manager.");
if (billingClient != null && billingClient.isReady()) {
billingClient.endConnection();
billingClient = null;
}
}
private void startServiceConnection(final Runnable executeOnSuccess) { private void startServiceConnection(final Runnable executeOnSuccess) {
billingClient.startConnection( billingClient.startConnection(
new com.android.billingclient.api.BillingClientStateListener() { new com.android.billingclient.api.BillingClientStateListener() {
@ -210,7 +183,6 @@ public class BillingClientImpl implements BillingClient, PurchasesUpdatedListene
executeOnSuccess.run(); executeOnSuccess.run();
} }
} }
billingClientResponseCode = billingResponseCode;
} }
@Override @Override
@ -246,63 +218,6 @@ public class BillingClientImpl implements BillingClient, PurchasesUpdatedListene
return responseCode == BillingResponse.OK; return responseCode == BillingResponse.OK;
} }
@Override
public void observeSkuDetails(
LifecycleOwner owner,
Observer<List<SkuDetails>> subscriptionObserver,
Observer<List<SkuDetails>> iapObserver) {
subscriptions.observe(owner, subscriptionObserver);
iaps.observe(owner, iapObserver);
}
@Override
public void querySkuDetails() {
executeServiceRequest(this::fetchSubscription);
}
private void fetchSubscription() {
billingClient.querySkuDetailsAsync(
SkuDetailsParams.newBuilder().setSkusList(SkuDetails.SKU_SUBS).setType(SkuType.SUBS).build(),
new com.android.billingclient.api.SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(
int responseCode, List<com.android.billingclient.api.SkuDetails> skuDetailsList) {
if (responseCode == BillingResponse.OK) {
subscriptions.setValue(transform(skuDetailsList, SkuDetails::new));
} else {
Timber.e(
"Query for subs failed: %s (%s)",
BillingResponseToString(responseCode), responseCode);
}
executeServiceRequest(BillingClientImpl.this::fetchIAPs);
}
});
}
private void fetchIAPs() {
Iterable<String> purchased =
transform(filter(inventory.getPurchases(), Purchase::isIap), Purchase::getSku);
billingClient.querySkuDetailsAsync(
SkuDetailsParams.newBuilder()
.setSkusList(BuildConfig.DEBUG ? DEBUG_SKUS : newArrayList(purchased))
.setType(SkuType.INAPP)
.build(),
new com.android.billingclient.api.SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(
int responseCode, List<com.android.billingclient.api.SkuDetails> skuDetailsList) {
if (responseCode == BillingResponse.OK) {
iaps.setValue(transform(skuDetailsList, SkuDetails::new));
} else {
Timber.e(
"Query for iaps failed: %s (%s)",
BillingResponseToString(responseCode), responseCode);
}
}
});
}
@Override @Override
public void consume(String sku) { public void consume(String sku) {
if (!BuildConfig.DEBUG) { if (!BuildConfig.DEBUG) {
@ -322,11 +237,4 @@ public class BillingClientImpl implements BillingClient, PurchasesUpdatedListene
billingClient.consumeAsync( billingClient.consumeAsync(
inventory.getPurchase(sku).getPurchaseToken(), onConsumeListener)); inventory.getPurchase(sku).getPurchaseToken(), onConsumeListener));
} }
@Override
public int getErrorMessage() {
return billingClientResponseCode == BillingResponse.BILLING_UNAVAILABLE
? R.string.error_billing_unavailable
: R.string.error_billing_default;
}
} }

@ -38,10 +38,6 @@ public class Purchase {
return purchase.getPurchaseToken(); return purchase.getPurchaseToken();
} }
boolean isIap() {
return !SkuDetails.SKU_SUBS.contains(getSku());
}
boolean isProSubscription() { boolean isProSubscription() {
return PATTERN.matcher(getSku()).matches(); return PATTERN.matcher(getSku()).matches();
} }

@ -1,40 +0,0 @@
package org.tasks.billing;
import com.android.billingclient.api.BillingClient.SkuType;
import com.google.common.collect.ImmutableList;
import java.util.List;
public class SkuDetails {
static final String SKU_PRO = "annual_499";
static final List<String> SKU_SUBS = ImmutableList.of(SKU_PRO);
static final String TYPE_INAPP = SkuType.INAPP;
static final String TYPE_SUBS = SkuType.SUBS;
private final com.android.billingclient.api.SkuDetails skuDetails;
SkuDetails(com.android.billingclient.api.SkuDetails skuDetails) {
this.skuDetails = skuDetails;
}
public String getSku() {
return skuDetails.getSku();
}
public String getTitle() {
return skuDetails.getTitle();
}
public String getPrice() {
return skuDetails.getPrice();
}
public String getDescription() {
return skuDetails.getDescription();
}
public String getSkuType() {
return skuDetails.getType();
}
}

@ -2,22 +2,10 @@ package org.tasks.billing;
import android.app.Activity; import android.app.Activity;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.Observer;
import java.util.List;
public interface BillingClient { public interface BillingClient {
void queryPurchases(); void queryPurchases();
void querySkuDetails();
void observeSkuDetails(
LifecycleOwner owner,
Observer<List<SkuDetails>> subscriptionObserver,
Observer<List<SkuDetails>> iapObserver);
int getErrorMessage();
void consume(String sku); void consume(String sku);
void initiatePurchaseFlow(Activity activity, String sku, String skuType, @Nullable String oldSku); void initiatePurchaseFlow(Activity activity, String sku, String skuType, @Nullable String oldSku);

@ -1,10 +1,6 @@
package org.tasks.billing; package org.tasks.billing;
import static java.util.Collections.singletonList;
import com.google.common.collect.ImmutableList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.BuildConfig; import org.tasks.BuildConfig;
@ -17,7 +13,7 @@ import timber.log.Timber;
@ApplicationScope @ApplicationScope
public class Inventory { public class Inventory {
static final String SKU_VIP = "vip"; private static final String SKU_VIP = "vip";
public static final String SKU_TASKER = "tasker"; public static final String SKU_TASKER = "tasker";
public static final String SKU_THEMES = "themes"; public static final String SKU_THEMES = "themes";
@ -46,10 +42,6 @@ public class Inventory {
purchases.clear(); purchases.clear();
} }
public void add(Purchase purchase) {
add(singletonList(purchase));
}
public void add(Iterable<Purchase> purchases) { public void add(Iterable<Purchase> purchases) {
for (Purchase purchase : purchases) { for (Purchase purchase : purchases) {
verifyAndAdd(purchase); verifyAndAdd(purchase);
@ -76,10 +68,6 @@ public class Inventory {
return hasPro() || purchases.containsKey(SKU_THEMES); return hasPro() || purchases.containsKey(SKU_THEMES);
} }
public List<Purchase> getPurchases() {
return ImmutableList.copyOf(purchases.values());
}
public Purchase getSubscription() { public Purchase getSubscription() {
return subscription; return subscription;
} }
@ -92,7 +80,7 @@ public class Inventory {
|| (BuildConfig.DEBUG && preferences.getBoolean(R.string.p_debug_pro, false)); || (BuildConfig.DEBUG && preferences.getBoolean(R.string.p_debug_pro, false));
} }
public boolean purchased(String sku) { boolean purchased(String sku) {
return purchases.containsKey(sku); return purchases.containsKey(sku);
} }

@ -84,10 +84,10 @@ class PurchaseActivity : ThemedInjectingAppCompatActivity(), OnPurchasesUpdated,
fun subscribe() { fun subscribe() {
if (currentSubscriptionSelected() && currentSubscription?.isCanceled == true) { if (currentSubscriptionSelected() && currentSubscription?.isCanceled == true) {
billingClient.initiatePurchaseFlow( billingClient.initiatePurchaseFlow(
this, currentSubscription!!.sku, SkuDetails.TYPE_SUBS, null) this, currentSubscription!!.sku, BillingClientImpl.TYPE_SUBS, null)
} else { } else {
billingClient.initiatePurchaseFlow(this, String.format("%s_%02d", if (isMonthly()) "monthly" else "annual", adapter.selected), billingClient.initiatePurchaseFlow(this, String.format("%s_%02d", if (isMonthly()) "monthly" else "annual", adapter.selected),
SkuDetails.TYPE_SUBS, BillingClientImpl.TYPE_SUBS,
currentSubscription?.sku) currentSubscription?.sku)
} }
billingClient.addPurchaseCallback(this) billingClient.addPurchaseCallback(this)

@ -446,9 +446,6 @@
<string name="refresh_purchases">Обнови покупки</string> <string name="refresh_purchases">Обнови покупки</string>
<string name="button_subscribe">Подпиши се</string> <string name="button_subscribe">Подпиши се</string>
<string name="button_more_info">Повече информация</string> <string name="button_more_info">Повече информация</string>
<string name="error_billing_unavailable">Таксуването не е налице. Уверете се, че приложението ви в Google Play
е настроено правилно</string>
<string name="error_billing_default">Таксуването не е налице. Моля, проверете устройството си.</string>
<string name="about">Относно</string> <string name="about">Относно</string>
<string name="pro_dashclock_extension">Dashclock разширение</string> <string name="pro_dashclock_extension">Dashclock разширение</string>
<string name="requires_pro_subscription">Изисква pro абонамент</string> <string name="requires_pro_subscription">Изисква pro абонамент</string>

@ -458,8 +458,6 @@
<string name="refresh_purchases">Obnovit nákupy</string> <string name="refresh_purchases">Obnovit nákupy</string>
<string name="button_subscribe">Odebírat</string> <string name="button_subscribe">Odebírat</string>
<string name="button_more_info">Více informací</string> <string name="button_more_info">Více informací</string>
<string name="error_billing_unavailable">Platby nedostupné. Zkontrolujte, jestli aplikace Google Play funguje správně</string>
<string name="error_billing_default">Platby nedostupné. Prosím, zkotrojute Vaše zařízení.</string>
<string name="about">O aplikaci</string> <string name="about">O aplikaci</string>
<string name="license_summary">Aplikace Tasks je svobodný software s otevřeným zdrojovým kódem licencovaný pod GNU General Public License v3.0</string> <string name="license_summary">Aplikace Tasks je svobodný software s otevřeným zdrojovým kódem licencovaný pod GNU General Public License v3.0</string>
<string name="icon">Ikona</string> <string name="icon">Ikona</string>

@ -437,8 +437,6 @@
<string name="refresh_purchases">Einkäufe aktualisieren</string> <string name="refresh_purchases">Einkäufe aktualisieren</string>
<string name="button_subscribe">Abonnieren</string> <string name="button_subscribe">Abonnieren</string>
<string name="button_more_info">Weitere Informationen</string> <string name="button_more_info">Weitere Informationen</string>
<string name="error_billing_unavailable">Abrechnung nicht verfügbar. Stelle sicher, dass deine Google Play App korrekt installiert ist</string>
<string name="error_billing_default">Abrechnung nicht verfügbar. Bitte überprüfe dein Gerät.</string>
<string name="about">Über</string> <string name="about">Über</string>
<string name="license_summary">Tasks ist freie, quelloffene Software, die unter der GNU General Public License v3.0 lizenziert ist</string> <string name="license_summary">Tasks ist freie, quelloffene Software, die unter der GNU General Public License v3.0 lizenziert ist</string>
<string name="pro_dashclock_extension">Dashclock-Erweiterung</string> <string name="pro_dashclock_extension">Dashclock-Erweiterung</string>

@ -445,8 +445,6 @@
<string name="refresh_purchases">Actualizar los acquisiciones</string> <string name="refresh_purchases">Actualizar los acquisiciones</string>
<string name="button_subscribe">Suscribe</string> <string name="button_subscribe">Suscribe</string>
<string name="button_more_info">Más información</string> <string name="button_more_info">Más información</string>
<string name="error_billing_unavailable">Pago no disponible. Asegúrese de que Google Play está bien configurado</string>
<string name="error_billing_default">Pago no disponible. Comprueba su dispositivo.</string>
<string name="about">Sobre</string> <string name="about">Sobre</string>
<string name="license_summary">Tasks es software libre de código abierto, licenciado bajo la GNU General Public License v3.0</string> <string name="license_summary">Tasks es software libre de código abierto, licenciado bajo la GNU General Public License v3.0</string>
<string name="pro_dashclock_extension">Extensión Dashclock</string> <string name="pro_dashclock_extension">Extensión Dashclock</string>

@ -453,8 +453,6 @@
<string name="refresh_purchases">Freskatu erosketak</string> <string name="refresh_purchases">Freskatu erosketak</string>
<string name="button_subscribe">Harpidetu</string> <string name="button_subscribe">Harpidetu</string>
<string name="button_more_info">Informazio gehiago</string> <string name="button_more_info">Informazio gehiago</string>
<string name="error_billing_unavailable">Fakturazioa ez dago eskuragarri. Egiaztatu Google Play ondo ezarrita dagoela</string>
<string name="error_billing_default">Fakturazioa ez dago eskuragarri. Egiaztatu zure gailua.</string>
<string name="about">Honi buruz</string> <string name="about">Honi buruz</string>
<string name="license_summary">Tasks aplikazioa software librea eta kode irekikoa da, GNU General Public License v3.0 lizentziapean</string> <string name="license_summary">Tasks aplikazioa software librea eta kode irekikoa da, GNU General Public License v3.0 lizentziapean</string>
<string name="pro_dashclock_extension">Dashclock luzapena</string> <string name="pro_dashclock_extension">Dashclock luzapena</string>

@ -427,9 +427,6 @@
<string name="refresh_purchases">Rafraîchir les achats</string> <string name="refresh_purchases">Rafraîchir les achats</string>
<string name="button_subscribe">S\'abonner</string> <string name="button_subscribe">S\'abonner</string>
<string name="button_more_info">Plus d\'info</string> <string name="button_more_info">Plus d\'info</string>
<string name="error_billing_unavailable">Facturation indisponible. Assurez-vous que votre application Google Play
est configuré correctement</string>
<string name="error_billing_default">Achat indisponible. Veuillez vérifier votre appareil.</string>
<string name="about">À propos</string> <string name="about">À propos</string>
<string name="license_summary">Tasks est un logiciel libre et open-source, licencié selon le GNU General Public License v3.0</string> <string name="license_summary">Tasks est un logiciel libre et open-source, licencié selon le GNU General Public License v3.0</string>
<string name="pro_dashclock_extension">Extension Dashclock</string> <string name="pro_dashclock_extension">Extension Dashclock</string>

@ -446,8 +446,6 @@
<string name="refresh_purchases">Vásárlások frissítése</string> <string name="refresh_purchases">Vásárlások frissítése</string>
<string name="button_subscribe">Előfizetés</string> <string name="button_subscribe">Előfizetés</string>
<string name="button_more_info">További információk</string> <string name="button_more_info">További információk</string>
<string name="error_billing_unavailable">Számlázási rendszer nem elérhető. Ellenőrizze a Google Play alkalmazás beállításait.</string>
<string name="error_billing_default">Számlázási rendszer nem elérhető. Ellenőrizze az eszközét.</string>
<string name="about">Névjegy</string> <string name="about">Névjegy</string>
<string name="license_summary">A Tasks nyílt forráskódú program, a GNU Általános Nyilvános Licenc v3.0 alapján licenszelve</string> <string name="license_summary">A Tasks nyílt forráskódú program, a GNU Általános Nyilvános Licenc v3.0 alapján licenszelve</string>
<string name="pro_dashclock_extension">Dashclock kiterjesztés</string> <string name="pro_dashclock_extension">Dashclock kiterjesztés</string>

@ -427,7 +427,6 @@
<string name="caldav_selection_description">Sinkronisasi yang berbasis pada standar internet publik</string> <string name="caldav_selection_description">Sinkronisasi yang berbasis pada standar internet publik</string>
<string name="etesync_selection_description">Sinkronisasi dengan enkripsi ujung-ke-ujung dan bersumber terbuka</string> <string name="etesync_selection_description">Sinkronisasi dengan enkripsi ujung-ke-ujung dan bersumber terbuka</string>
<string name="theme_wallpaper">Wallpaper</string> <string name="theme_wallpaper">Wallpaper</string>
<string name="error_billing_default">Billing tidak tersedia. Silakan periksa perangkat anda.</string>
<string name="passwords_do_not_match">Sandi tidak sama</string> <string name="passwords_do_not_match">Sandi tidak sama</string>
<string name="reenter_encryption_password">Konfirmasi sandi enkripsi</string> <string name="reenter_encryption_password">Konfirmasi sandi enkripsi</string>
<string name="show_advanced_settings">Tampilkan pengaturan lanjutan</string> <string name="show_advanced_settings">Tampilkan pengaturan lanjutan</string>

@ -444,8 +444,6 @@
<string name="refresh_purchases">Aggiorna acquisti</string> <string name="refresh_purchases">Aggiorna acquisti</string>
<string name="button_subscribe">Sottoscrivi</string> <string name="button_subscribe">Sottoscrivi</string>
<string name="button_more_info">Più informazioni</string> <string name="button_more_info">Più informazioni</string>
<string name="error_billing_unavailable">Fatturazione non disponibile. Verifica che Google Play sia impostato correttamente</string>
<string name="error_billing_default">Modalità addebito non disponibile. Verifica il tuo dispositivo</string>
<string name="about">A riguardo</string> <string name="about">A riguardo</string>
<string name="license_summary">Tasks è un software gratuito e open-source, rilasciato sotto licenza GNU General Public License v3.0</string> <string name="license_summary">Tasks è un software gratuito e open-source, rilasciato sotto licenza GNU General Public License v3.0</string>
<string name="pro_dashclock_extension">Estensione Dashclock</string> <string name="pro_dashclock_extension">Estensione Dashclock</string>

@ -482,9 +482,6 @@
<string name="refresh_purchases">עדכן רכישות</string> <string name="refresh_purchases">עדכן רכישות</string>
<string name="button_subscribe">רישום כמנוי</string> <string name="button_subscribe">רישום כמנוי</string>
<string name="button_more_info">עוד מידע</string> <string name="button_more_info">עוד מידע</string>
<string name="error_billing_unavailable">חיוב לא זמין.
וודא שיישומון Google Play מוגדר נכון</string>
<string name="error_billing_default">חיוב לא זמין. בדוק את מכשירך.</string>
<string name="about">אודות</string> <string name="about">אודות</string>
<string name="license_summary">Tasks הוא חופשי ובקוד פתוח, מוגש בתנאי הרישיון הציבורי הכללי של GNU בגרסה 3.0</string> <string name="license_summary">Tasks הוא חופשי ובקוד פתוח, מוגש בתנאי הרישיון הציבורי הכללי של GNU בגרסה 3.0</string>
<string name="pro_dashclock_extension">הרחבת Dashclock</string> <string name="pro_dashclock_extension">הרחבת Dashclock</string>

@ -443,9 +443,6 @@
<string name="refresh_purchases">購入を更新</string> <string name="refresh_purchases">購入を更新</string>
<string name="button_subscribe">購入</string> <string name="button_subscribe">購入</string>
<string name="button_more_info">詳細情報</string> <string name="button_more_info">詳細情報</string>
<string name="error_billing_unavailable">支払が利用できません。 Google Play アプリが
正しく設定されていることを確認してください</string>
<string name="error_billing_default">支払がりようできません。お使いの端末を確認してください</string>
<string name="about">アプリについて</string> <string name="about">アプリについて</string>
<string name="license_summary">Tasks は、GNU General Public License v3.0 でライセンスされる、自由オープンソースソフトウェアです</string> <string name="license_summary">Tasks は、GNU General Public License v3.0 でライセンスされる、自由オープンソースソフトウェアです</string>
<string name="pro_dashclock_extension">Dashclock 拡張</string> <string name="pro_dashclock_extension">Dashclock 拡張</string>

@ -445,8 +445,6 @@
<string name="refresh_purchases">구매 새로고침</string> <string name="refresh_purchases">구매 새로고침</string>
<string name="button_subscribe">신청</string> <string name="button_subscribe">신청</string>
<string name="button_more_info">추가정보</string> <string name="button_more_info">추가정보</string>
<string name="error_billing_unavailable">결제가 불가합니다. 구글플레이 앱의 설정이 올바른지 확인하십시오</string>
<string name="error_billing_default">결제가 불가합니다. 기기를 확인하십시오.</string>
<string name="about">정보</string> <string name="about">정보</string>
<string name="license_summary">Tasks는 GNU 일반공중사용권 3.0 (GPLv3)에 따라 사용이 허가된 리브레 오픈소스 소프트웨어입니다</string> <string name="license_summary">Tasks는 GNU 일반공중사용권 3.0 (GPLv3)에 따라 사용이 허가된 리브레 오픈소스 소프트웨어입니다</string>
<string name="pro_dashclock_extension">Dashclock 확장프로그램</string> <string name="pro_dashclock_extension">Dashclock 확장프로그램</string>

@ -442,9 +442,6 @@
<string name="refresh_purchases">Atnaujinti pirkimus</string> <string name="refresh_purchases">Atnaujinti pirkimus</string>
<string name="button_subscribe">Prenumeruoti</string> <string name="button_subscribe">Prenumeruoti</string>
<string name="button_more_info">Daugiau informacijos</string> <string name="button_more_info">Daugiau informacijos</string>
<string name="error_billing_unavailable">Sąskaita negalima. Įsitikinkite, kad Google Play programėlė
sukonfigūruota tinkamai.</string>
<string name="error_billing_default">Sąskaita negalima. Patikrinkite savo įrenginį.</string>
<string name="about">Apie</string> <string name="about">Apie</string>
<string name="license_summary">Tasks yra nemokama ir atviro kodo programinė įranga, licencijuota pagal GNU General Public License v3.0 licenciją.</string> <string name="license_summary">Tasks yra nemokama ir atviro kodo programinė įranga, licencijuota pagal GNU General Public License v3.0 licenciją.</string>
<string name="pro_dashclock_extension">Dashclock plėtinys</string> <string name="pro_dashclock_extension">Dashclock plėtinys</string>

@ -453,8 +453,6 @@
<string name="refresh_purchases">Gjenoppfrisk kjøp</string> <string name="refresh_purchases">Gjenoppfrisk kjøp</string>
<string name="button_subscribe">Abonner</string> <string name="button_subscribe">Abonner</string>
<string name="button_more_info">Mer info</string> <string name="button_more_info">Mer info</string>
<string name="error_billing_unavailable">Fakturering utilgjengelig. Forsikre deg om at ditt Google Play-program er satt opp rett</string>
<string name="error_billing_default">Fakturering utilgjengelig. Sjekk din enhet.</string>
<string name="about">Om</string> <string name="about">Om</string>
<string name="license_summary">Tasks er fri programvare, lisensiert med GNU General Public-lisens v3.0</string> <string name="license_summary">Tasks er fri programvare, lisensiert med GNU General Public-lisens v3.0</string>
<string name="pro_dashclock_extension">Dashclock-utvidelse</string> <string name="pro_dashclock_extension">Dashclock-utvidelse</string>

@ -435,8 +435,6 @@
<string name="refresh_purchases">Vernieuw aankopen</string> <string name="refresh_purchases">Vernieuw aankopen</string>
<string name="button_subscribe">Aanmelden</string> <string name="button_subscribe">Aanmelden</string>
<string name="button_more_info">Meer informatie</string> <string name="button_more_info">Meer informatie</string>
<string name="error_billing_unavailable">Betaling onmogelijk. Zorg dat de Google Pay app goed is ingesteld</string>
<string name="error_billing_default">Betaling onmogelijk. Controleer je apparaat.</string>
<string name="about">Over</string> <string name="about">Over</string>
<string name="license_summary">Tasks is vrije open-source software, gelicensieerd onder de GNU General Public License v3.0</string> <string name="license_summary">Tasks is vrije open-source software, gelicensieerd onder de GNU General Public License v3.0</string>
<string name="pro_dashclock_extension">Dashclock extentie</string> <string name="pro_dashclock_extension">Dashclock extentie</string>

@ -456,8 +456,6 @@
<string name="refresh_purchases">Odśwież zakupy</string> <string name="refresh_purchases">Odśwież zakupy</string>
<string name="button_subscribe">Zasubskrybuj</string> <string name="button_subscribe">Zasubskrybuj</string>
<string name="button_more_info">Więcej informacji</string> <string name="button_more_info">Więcej informacji</string>
<string name="error_billing_unavailable">Płatność niedostępna. Upewnij się, że aplikacja Google Play jest poprawnie skonfigurowana.</string>
<string name="error_billing_default">Płatność niedostępna. Sprawdź swoje urządzenie.</string>
<string name="about">O</string> <string name="about">O</string>
<string name="license_summary">Tasks jest aplikacją darmową/libre z otwartym kodem źródłowym, na licencji GNU General Public License v3.0</string> <string name="license_summary">Tasks jest aplikacją darmową/libre z otwartym kodem źródłowym, na licencji GNU General Public License v3.0</string>
<string name="requires_pro_subscription">Wymaga subskrypcji pro</string> <string name="requires_pro_subscription">Wymaga subskrypcji pro</string>

@ -443,9 +443,6 @@
<string name="refresh_purchases">Atualizar compras</string> <string name="refresh_purchases">Atualizar compras</string>
<string name="button_subscribe">Subscrever</string> <string name="button_subscribe">Subscrever</string>
<string name="button_more_info">Mais informações</string> <string name="button_more_info">Mais informações</string>
<string name="error_billing_unavailable">Faturamento indisponível. Tenha certeza que seu
aplicativo Google Play está configurado corretamente</string>
<string name="error_billing_default">Faturamento indisponível. Por favor cheque seu dispositivo</string>
<string name="about">Sobre</string> <string name="about">Sobre</string>
<string name="license_summary">Tasks é um software livre e de código aberto licenciado sob a Licença Pública Geral GNU v3.0</string> <string name="license_summary">Tasks é um software livre e de código aberto licenciado sob a Licença Pública Geral GNU v3.0</string>
<string name="pro_dashclock_extension">Extensão Dashclock</string> <string name="pro_dashclock_extension">Extensão Dashclock</string>

@ -464,8 +464,6 @@
<string name="refresh_purchases">Обновить покупки</string> <string name="refresh_purchases">Обновить покупки</string>
<string name="button_subscribe">Подписаться</string> <string name="button_subscribe">Подписаться</string>
<string name="button_more_info">Подробнее</string> <string name="button_more_info">Подробнее</string>
<string name="error_billing_unavailable">Счёт невозможен. Убедитесь, что приложение Google Play настроено правильно</string>
<string name="error_billing_default">Оплата невозможна. Проверьте ваше устройство.</string>
<string name="about">О программе</string> <string name="about">О программе</string>
<string name="license_summary">Tasks является свободным программным обеспечением с открытым исходным кодом, лицензированным под GNU General Public License v3.0</string> <string name="license_summary">Tasks является свободным программным обеспечением с открытым исходным кодом, лицензированным под GNU General Public License v3.0</string>
<string name="pro_dashclock_extension">Расширение для Dashclock</string> <string name="pro_dashclock_extension">Расширение для Dashclock</string>

@ -442,9 +442,6 @@
<string name="refresh_purchases">Obnoviť nákupy</string> <string name="refresh_purchases">Obnoviť nákupy</string>
<string name="button_subscribe">Prihlásiť sa</string> <string name="button_subscribe">Prihlásiť sa</string>
<string name="button_more_info">Podrobnosti</string> <string name="button_more_info">Podrobnosti</string>
<string name="error_billing_unavailable">Platba nedostupná. Uistite sa, že aplikácia
Google Play je správne nastavená</string>
<string name="error_billing_default">Platba nedostupná. Skontrolujte svoje zariadenie.</string>
<string name="about">O</string> <string name="about">O</string>
<string name="license_summary">Úlohy je bezplatný softvér s otvoreným kódom pod GNU Public Licence v3.0</string> <string name="license_summary">Úlohy je bezplatný softvér s otvoreným kódom pod GNU Public Licence v3.0</string>
<string name="pro_dashclock_extension">Rozšírenie Dashclock</string> <string name="pro_dashclock_extension">Rozšírenie Dashclock</string>

@ -446,8 +446,6 @@
<string name="refresh_purchases">Uppdatera inköp</string> <string name="refresh_purchases">Uppdatera inköp</string>
<string name="button_subscribe">Prenumerera</string> <string name="button_subscribe">Prenumerera</string>
<string name="button_more_info">Mer info</string> <string name="button_more_info">Mer info</string>
<string name="error_billing_unavailable">Faktureringen är inte tillgänglig. Kontrollera att Google Play-appen har rätt inställning</string>
<string name="error_billing_default">Faktureringen är inte tillgänglig. Kontrollera din enhet.</string>
<string name="about">Om</string> <string name="about">Om</string>
<string name="license_summary">Tasks är Libre Open-Source programvara, licensierad under GNU General Public License v 3.0</string> <string name="license_summary">Tasks är Libre Open-Source programvara, licensierad under GNU General Public License v 3.0</string>
<string name="pro_dashclock_extension">DashClock extension</string> <string name="pro_dashclock_extension">DashClock extension</string>

@ -448,8 +448,6 @@
<string name="refresh_purchases">Satın alımları yenile</string> <string name="refresh_purchases">Satın alımları yenile</string>
<string name="button_subscribe">Abone ol</string> <string name="button_subscribe">Abone ol</string>
<string name="button_more_info">Daha çok bilgi</string> <string name="button_more_info">Daha çok bilgi</string>
<string name="error_billing_unavailable">Faturalama kullanılamıyor. Google Play uygulamanızın doğru kurulduğundan emin olun</string>
<string name="error_billing_default">Faturalama kullanılabilir değil. Lütfen aygıtınızı denetleyin.</string>
<string name="about">Hakkında</string> <string name="about">Hakkında</string>
<string name="license_summary">Tasks özgür açık kaynaklı yazılımdır, GNU Genel Kamu Lisansı sürüm 3.0 altında lisanslanmıştır</string> <string name="license_summary">Tasks özgür açık kaynaklı yazılımdır, GNU Genel Kamu Lisansı sürüm 3.0 altında lisanslanmıştır</string>
<string name="pro_dashclock_extension">Dashclock eklentisi</string> <string name="pro_dashclock_extension">Dashclock eklentisi</string>

@ -461,8 +461,6 @@
<string name="refresh_purchases">Оновити покупки</string> <string name="refresh_purchases">Оновити покупки</string>
<string name="button_subscribe">Підписатися</string> <string name="button_subscribe">Підписатися</string>
<string name="button_more_info">Більше інформації</string> <string name="button_more_info">Більше інформації</string>
<string name="error_billing_unavailable">Оплата недоступна. Перевірте налаштування Google Play</string>
<string name="error_billing_default">Оплата недоступна. Перевірте ваш пристрій.</string>
<string name="about">Про Tasks</string> <string name="about">Про Tasks</string>
<string name="license_summary">Tasks є програмою з відкритим кодом з ліцензією GNU General Public License v3.0</string> <string name="license_summary">Tasks є програмою з відкритим кодом з ліцензією GNU General Public License v3.0</string>
<string name="pro_dashclock_extension">Розширення Dashclock</string> <string name="pro_dashclock_extension">Розширення Dashclock</string>

@ -428,8 +428,6 @@
<string name="refresh_purchases">刷新购买</string> <string name="refresh_purchases">刷新购买</string>
<string name="button_subscribe">订购</string> <string name="button_subscribe">订购</string>
<string name="button_more_info">更多信息</string> <string name="button_more_info">更多信息</string>
<string name="error_billing_unavailable">帐单不可用。请确保你的Google Play应用已正确设置</string>
<string name="error_billing_default">帐单不可用。请检查你的设备。</string>
<string name="about">关于</string> <string name="about">关于</string>
<string name="license_summary">Tasks是遵循GNU通用公共许可证v3.0许可证的开源软件</string> <string name="license_summary">Tasks是遵循GNU通用公共许可证v3.0许可证的开源软件</string>
<string name="pro_dashclock_extension">Dashclock扩展</string> <string name="pro_dashclock_extension">Dashclock扩展</string>

@ -480,9 +480,6 @@ File %1$s contained %2$s.\n\n
<string name="button_upgrade">Upgrade subscription</string> <string name="button_upgrade">Upgrade subscription</string>
<string name="button_unsubscribe">Cancel subscription</string> <string name="button_unsubscribe">Cancel subscription</string>
<string name="button_more_info">More info</string> <string name="button_more_info">More info</string>
<string name="error_billing_unavailable">Billing unavailable. Make sure your Google Play app
is set up correctly</string>
<string name="error_billing_default">Billing unavailable. Please check your device.</string>
<string name="about">About</string> <string name="about">About</string>
<string name="license_summary">Tasks is libre open-source software, licensed under the GNU General Public License v3.0</string> <string name="license_summary">Tasks is libre open-source software, licensed under the GNU General Public License v3.0</string>
<string name="pro_dashclock_extension">Dashclock extension</string> <string name="pro_dashclock_extension">Dashclock extension</string>

Loading…
Cancel
Save