New purchase activity

pull/935/head
Alex Baker 6 years ago
parent 505ad779f2
commit dc8f722589

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="pro_description">
<item>@string/themes</item>
<item>@string/pro_caldav_sync</item>
<item>@string/pro_multiple_google_task_accounts</item>
<item>@string/pro_tasker_plugins</item>
<item>@string/pro_dashclock_extension</item>
</string-array>
</resources>

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="pro_description"/>
</resources>

@ -149,11 +149,12 @@ public class BillingClientImpl implements BillingClient, PurchasesUpdatedListene
@Override
public void onPurchasesUpdated(
@BillingResponse int resultCode, List<com.android.billingclient.api.Purchase> purchases) {
if (resultCode == BillingResponse.OK) {
boolean success = resultCode == BillingResponse.OK;
if (success) {
add(purchases);
}
if (onPurchasesUpdated != null) {
onPurchasesUpdated.onPurchasesUpdated();
onPurchasesUpdated.onPurchasesUpdated(success);
}
String skus =
purchases == null

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="pro_description">
<item>@string/themes</item>
<item>@string/pro_caldav_sync</item>
<item>@string/pro_etesync</item>
<item>@string/pro_multiple_google_task_accounts</item>
<item>@string/pro_google_places_search</item>
<item>@string/pro_tasker_plugins</item>
<item>@string/pro_dashclock_extension</item>
</string-array>
</resources>

@ -464,7 +464,7 @@
<activity
android:name=".billing.PurchaseActivity"
android:theme="@style/TranslucentDialog"/>
android:theme="@style/Tasks" />
<activity-alias
android:enabled="true"

@ -1,261 +0,0 @@
package org.tasks.billing;
import static com.google.common.collect.Lists.newArrayList;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.button.MaterialButtonToggleGroup;
import com.google.common.collect.ContiguousSet;
import com.google.common.collect.DiscreteDomain;
import com.google.common.collect.Range;
import javax.inject.Inject;
import org.tasks.LocalBroadcastManager;
import org.tasks.R;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.dialogs.IconLayoutManager;
import org.tasks.injection.DialogFragmentComponent;
import org.tasks.injection.ForActivity;
import org.tasks.injection.InjectingDialogFragment;
import org.tasks.locale.Locale;
import org.tasks.themes.Theme;
public class NameYourPriceDialog extends InjectingDialogFragment implements OnPurchasesUpdated {
private static final String EXTRA_MONTHLY = "extra_monthly";
private static final String EXTRA_PRICE = "extra_price";
@Inject DialogBuilder dialogBuilder;
@Inject @ForActivity Context context;
@Inject BillingClient billingClient;
@Inject LocalBroadcastManager localBroadcastManager;
@Inject Inventory inventory;
@Inject Locale locale;
@Inject Theme theme;
@BindView(R.id.recycler_view)
RecyclerView recyclerView;
@BindView(R.id.screen_wait)
View loadingView;
@BindView(R.id.buttons)
MaterialButtonToggleGroup buttons;
@BindView(R.id.subscribe)
MaterialButton subscribe;
@BindView(R.id.unsubscribe)
MaterialButton unsubscribe;
private PurchaseAdapter adapter;
private Purchase currentSubscription = null;
private BroadcastReceiver purchaseReceiver =
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
setup();
}
};
private OnDismissListener listener;
static NameYourPriceDialog newNameYourPriceDialog() {
return new NameYourPriceDialog();
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
View view = theme.getLayoutInflater(context).inflate(R.layout.dialog_name_your_price, null);
ButterKnife.bind(this, view);
setWaitScreen(true);
adapter = new PurchaseAdapter(context, theme, locale, this::onPriceChanged);
buttons.addOnButtonCheckedListener(this::onButtonChecked);
if (savedInstanceState != null) {
buttons.check(
savedInstanceState.getBoolean(EXTRA_MONTHLY)
? R.id.button_monthly
: R.id.button_annually);
adapter.setSelected(savedInstanceState.getInt(EXTRA_PRICE));
}
return dialogBuilder.newDialog(R.string.name_your_price).setView(view).show();
}
private void onButtonChecked(MaterialButtonToggleGroup group, int id, boolean checked) {
if (id == R.id.button_monthly) {
if (!checked && group.getCheckedButtonId() != R.id.button_annually) {
group.check(R.id.button_monthly);
}
} else {
if (!checked && group.getCheckedButtonId() != R.id.button_monthly) {
group.check(R.id.button_annually);
}
}
updateSubscribeButton();
}
private boolean isMonthly() {
return buttons.getCheckedButtonId() == R.id.button_monthly;
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(EXTRA_MONTHLY, isMonthly());
outState.putInt(EXTRA_PRICE, adapter.getSelected());
}
@SuppressLint("DefaultLocale")
@OnClick(R.id.subscribe)
protected void subscribe() {
if (currentSubscriptionSelected() && currentSubscription.isCanceled()) {
billingClient.initiatePurchaseFlow(
(Activity) context, currentSubscription.getSku(), SkuDetails.TYPE_SUBS, null);
} else {
billingClient.initiatePurchaseFlow(
(Activity) context,
String.format("%s_%02d", isMonthly() ? "monthly" : "annual", adapter.getSelected()),
SkuDetails.TYPE_SUBS,
currentSubscription == null ? null : currentSubscription.getSku());
}
billingClient.addPurchaseCallback(this);
dismiss();
}
private void setup() {
currentSubscription = inventory.getSubscription();
if (adapter.getSelected() == 0) {
if (currentSubscription == null) {
adapter.setSelected(1);
} else {
adapter.setSelected(currentSubscription.getSubscriptionPrice());
buttons.check(currentSubscription.isMonthly() ? R.id.button_monthly : R.id.button_annually);
}
}
unsubscribe.setVisibility(
currentSubscription == null || currentSubscription.isCanceled() ? View.GONE : View.VISIBLE);
updateSubscribeButton();
setWaitScreen(false);
adapter.submitList(
newArrayList(ContiguousSet.create(Range.closed(1, 10), DiscreteDomain.integers())));
recyclerView.setLayoutManager(new IconLayoutManager(context));
recyclerView.setAdapter(adapter);
}
@OnClick(R.id.unsubscribe)
protected void manageSubscription() {
startActivity(
new Intent(
Intent.ACTION_VIEW,
Uri.parse(getString(R.string.manage_subscription_url, currentSubscription.getSku()))));
dismiss();
}
private void onPriceChanged(Integer price) {
adapter.setSelected(price);
updateSubscribeButton();
}
private void updateSubscribeButton() {
subscribe.setEnabled(true);
if (currentSubscription == null) {
subscribe.setText(R.string.button_subscribe);
} else if (currentSubscriptionSelected()) {
if (currentSubscription.isCanceled()) {
subscribe.setText(R.string.button_restore_subscription);
} else {
subscribe.setText(R.string.button_current_subscription);
subscribe.setEnabled(false);
}
} else {
subscribe.setText(isUpgrade() ? R.string.button_upgrade : R.string.button_downgrade);
}
}
private boolean isUpgrade() {
return isMonthly() == currentSubscription.isMonthly()
? currentSubscription.getSubscriptionPrice() < adapter.getSelected()
: isMonthly();
}
private boolean currentSubscriptionSelected() {
return currentSubscription != null
&& isMonthly() == currentSubscription.isMonthly()
&& adapter.getSelected() == currentSubscription.getSubscriptionPrice();
}
@Override
protected void inject(DialogFragmentComponent component) {
component.inject(this);
}
private void setWaitScreen(boolean isWaitScreen) {
recyclerView.setVisibility(isWaitScreen ? View.GONE : View.VISIBLE);
buttons.setVisibility(isWaitScreen ? View.GONE : View.VISIBLE);
subscribe.setVisibility(isWaitScreen ? View.GONE : View.VISIBLE);
loadingView.setVisibility(isWaitScreen ? View.VISIBLE : View.GONE);
}
@Override
public void onStart() {
super.onStart();
localBroadcastManager.registerPurchaseReceiver(purchaseReceiver);
billingClient.queryPurchases();
}
@Override
public void onStop() {
super.onStop();
localBroadcastManager.unregisterReceiver(purchaseReceiver);
}
NameYourPriceDialog setOnDismissListener(OnDismissListener listener) {
this.listener = listener;
return this;
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
super.onDismiss(dialog);
if (listener != null) {
listener.onDismiss(dialog);
}
}
@Override
public void onPurchasesUpdated() {
dismiss();
}
@OnClick(R.id.button_more_info)
public void openDocumentation() {
startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.subscription_help_url))));
dismiss();
}
}

@ -1,5 +1,5 @@
package org.tasks.billing;
public interface OnPurchasesUpdated {
void onPurchasesUpdated();
void onPurchasesUpdated(boolean success);
}

@ -1,38 +0,0 @@
package org.tasks.billing;
import static org.tasks.billing.PurchaseDialog.newPurchaseDialog;
import android.os.Bundle;
import androidx.fragment.app.FragmentManager;
import javax.inject.Inject;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.themes.ThemeAccent;
public class PurchaseActivity extends InjectingAppCompatActivity {
private static final String FRAG_TAG_PURCHASE = "frag_tag_purchase";
@Inject Inventory inventory;
@Inject ThemeAccent themeAccent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
themeAccent.applyStyle(getTheme());
FragmentManager fragmentManager = getSupportFragmentManager();
PurchaseDialog dialog = (PurchaseDialog) fragmentManager.findFragmentByTag(FRAG_TAG_PURCHASE);
if (dialog == null) {
dialog = newPurchaseDialog();
dialog.show(fragmentManager, FRAG_TAG_PURCHASE);
}
dialog.setOnDismissListener(d -> finish());
}
@Override
public void inject(ActivityComponent component) {
component.inject(this);
}
}

@ -0,0 +1,215 @@
package org.tasks.billing
import android.annotation.SuppressLint
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.MenuItem
import android.view.View
import androidx.appcompat.widget.Toolbar
import butterknife.ButterKnife
import butterknife.OnClick
import com.google.android.material.button.MaterialButtonToggleGroup
import com.google.common.collect.ContiguousSet
import com.google.common.collect.DiscreteDomain
import com.google.common.collect.Lists
import com.google.common.collect.Range
import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.databinding.ActivityPurchaseBinding
import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.IconLayoutManager
import org.tasks.injection.ActivityComponent
import org.tasks.injection.ThemedInjectingAppCompatActivity
import org.tasks.locale.Locale
import org.tasks.themes.Theme
import timber.log.Timber
import java.lang.String
import javax.inject.Inject
private const val EXTRA_MONTHLY = "extra_monthly"
private const val EXTRA_PRICE = "extra_price"
class PurchaseActivity : ThemedInjectingAppCompatActivity(), OnPurchasesUpdated, Toolbar.OnMenuItemClickListener {
@Inject lateinit var inventory: Inventory
@Inject lateinit var dialogBuilder: DialogBuilder
@Inject lateinit var billingClient: BillingClient
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var locale: Locale
@Inject lateinit var theme: Theme
private lateinit var binding: ActivityPurchaseBinding
private lateinit var adapter: PurchaseAdapter
private var currentSubscription: Purchase? = null
private val purchaseReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
setup()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityPurchaseBinding.inflate(layoutInflater)
setContentView(binding.root)
ButterKnife.bind(this)
adapter = PurchaseAdapter(this, theme, locale, ::onPriceChanged)
if (savedInstanceState != null) {
binding.buttons.check(
if (savedInstanceState.getBoolean(EXTRA_MONTHLY)) R.id.button_monthly else R.id.button_annually)
adapter.selected = savedInstanceState.getInt(EXTRA_PRICE)
}
binding.buttons.addOnButtonCheckedListener { group: MaterialButtonToggleGroup?, id: Int, checked: Boolean -> this.onButtonChecked(group!!, id, checked) }
val toolbar = binding.toolbar.toolbar
toolbar.setNavigationIcon(R.drawable.ic_outline_arrow_back_24px)
toolbar.setNavigationContentDescription(R.string.back)
toolbar.setNavigationOnClickListener { finish() }
toolbar.setTitle(R.string.upgrade_to_pro)
toolbar.inflateMenu(R.menu.menu_purchase_activity)
toolbar.setOnMenuItemClickListener(this)
themeColor.apply(toolbar)
setWaitScreen(true)
}
@SuppressLint("DefaultLocale")
@OnClick(R.id.subscribe)
fun subscribe() {
if (currentSubscriptionSelected() && currentSubscription?.isCanceled == true) {
billingClient.initiatePurchaseFlow(
this, currentSubscription!!.sku, SkuDetails.TYPE_SUBS, null)
} else {
billingClient.initiatePurchaseFlow(this, String.format("%s_%02d", if (isMonthly()) "monthly" else "annual", adapter.selected),
SkuDetails.TYPE_SUBS,
currentSubscription?.sku)
}
billingClient.addPurchaseCallback(this)
}
private fun onButtonChecked(group: MaterialButtonToggleGroup, id: Int, checked: Boolean) {
if (id == R.id.button_monthly) {
if (!checked && group.checkedButtonId != R.id.button_annually) {
group.check(R.id.button_monthly)
}
} else {
if (!checked && group.checkedButtonId != R.id.button_monthly) {
group.check(R.id.button_annually)
}
}
updateSubscribeButton()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putBoolean(EXTRA_MONTHLY, isMonthly())
outState.putInt(EXTRA_PRICE, adapter.selected)
}
private fun isMonthly() = binding.buttons.checkedButtonId == R.id.button_monthly
private fun setWaitScreen(isWaitScreen: Boolean) {
Timber.d("setWaitScreen(%s)", isWaitScreen)
binding.recyclerView.visibility = if (isWaitScreen) View.GONE else View.VISIBLE
binding.buttons.visibility = if (isWaitScreen) View.GONE else View.VISIBLE
binding.subscribe.visibility = if (isWaitScreen) View.GONE else View.VISIBLE
binding.screenWait.visibility = if (isWaitScreen) View.VISIBLE else View.GONE
}
override fun onStart() {
super.onStart()
localBroadcastManager.registerPurchaseReceiver(purchaseReceiver)
billingClient.queryPurchases()
}
override fun onStop() {
super.onStop()
localBroadcastManager.unregisterReceiver(purchaseReceiver)
}
override fun inject(component: ActivityComponent) {
component.inject(this)
}
private fun setup() {
currentSubscription = inventory.subscription
if (adapter.selected == 0) {
adapter.selected = currentSubscription?.subscriptionPrice ?: 3
if (currentSubscription != null) {
binding.buttons.check(if (currentSubscription?.isMonthly == true) R.id.button_monthly else R.id.button_annually)
}
}
binding.unsubscribe.visibility = if (currentSubscription == null || currentSubscription?.isCanceled == true) View.GONE else View.VISIBLE
updateSubscribeButton()
setWaitScreen(false)
adapter.submitList(
Lists.newArrayList(ContiguousSet.create(Range.closed(1, 10), DiscreteDomain.integers())))
binding.recyclerView.layoutManager = IconLayoutManager(this)
binding.recyclerView.adapter = adapter
}
private fun updateSubscribeButton() {
binding.subscribe.isEnabled = true
if (currentSubscription == null) {
binding.subscribe.setText(R.string.button_subscribe)
} else if (currentSubscriptionSelected()) {
if (currentSubscription!!.isCanceled) {
binding.subscribe.setText(R.string.button_restore_subscription)
} else {
binding.subscribe.setText(R.string.button_current_subscription)
binding.subscribe.isEnabled = false
}
} else {
binding.subscribe.setText(if (isUpgrade()) R.string.button_upgrade else R.string.button_downgrade)
}
}
private fun currentSubscriptionSelected() =
currentSubscription != null
&& isMonthly() == currentSubscription!!.isMonthly
&& adapter.selected == currentSubscription!!.subscriptionPrice
private fun isUpgrade() = if (isMonthly() == currentSubscription!!.isMonthly) {
currentSubscription!!.subscriptionPrice < adapter.selected
} else {
isMonthly()
}
private fun onPriceChanged(price: Int) {
adapter.selected = price
updateSubscribeButton()
}
@OnClick(R.id.unsubscribe)
fun manageSubscription() {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(getString(R.string.manage_subscription_url, currentSubscription!!.sku))))
}
override fun onPurchasesUpdated(success: Boolean) {
if (success) {
finish()
}
}
override fun onMenuItemClick(item: MenuItem?): Boolean {
return if (item?.itemId == R.id.menu_more_info) {
startActivity(
Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.subscription_help_url))))
true
} else {
false
}
}
}

@ -1,77 +0,0 @@
package org.tasks.billing;
import static com.google.common.collect.Lists.transform;
import static java.util.Arrays.asList;
import static org.tasks.billing.NameYourPriceDialog.newNameYourPriceDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.common.base.Joiner;
import javax.inject.Inject;
import org.tasks.R;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.injection.DialogFragmentComponent;
import org.tasks.injection.ForActivity;
import org.tasks.injection.InjectingDialogFragment;
import org.tasks.themes.Theme;
public class PurchaseDialog extends InjectingDialogFragment {
private static final String FRAG_TAG_PRICE = "frag_tag_price";
@Inject DialogBuilder dialogBuilder;
@Inject Theme theme;
@Inject @ForActivity Context context;
private OnDismissListener listener;
public static PurchaseDialog newPurchaseDialog() {
return new PurchaseDialog();
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
View view = theme.getLayoutInflater(context).inflate(R.layout.dialog_purchase, null);
TextView textView = view.findViewById(R.id.feature_list);
String[] rows = context.getResources().getStringArray(R.array.pro_description);
textView.setText(Joiner.on('\n').join(transform(asList(rows), item -> "\u2022 " + item)));
return dialogBuilder
.newDialog(R.string.pro_support_development)
.setView(view)
.setPositiveButton(
R.string.name_your_price,
(dialog, which) -> {
newNameYourPriceDialog()
.setOnDismissListener(listener)
.show(getFragmentManager(), FRAG_TAG_PRICE);
listener = null;
dialog.dismiss();
})
.show();
}
void setOnDismissListener(OnDismissListener listener) {
this.listener = listener;
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
super.onDismiss(dialog);
if (listener != null) {
listener.onDismiss(dialog);
}
}
@Override
protected void inject(DialogFragmentComponent component) {
component.inject(this);
}
}

@ -2,7 +2,6 @@ package org.tasks.caldav;
import static android.text.TextUtils.isEmpty;
import static com.todoroo.astrid.data.Task.NO_ID;
import static org.tasks.billing.PurchaseDialog.newPurchaseDialog;
import android.content.Context;
import android.content.Intent;
@ -31,6 +30,7 @@ import java.net.URISyntaxException;
import javax.inject.Inject;
import org.tasks.R;
import org.tasks.billing.Inventory;
import org.tasks.billing.PurchaseActivity;
import org.tasks.data.CaldavAccount;
import org.tasks.data.CaldavDao;
import org.tasks.databinding.ActivityCaldavAccountSettingsBinding;
@ -113,7 +113,7 @@ public abstract class BaseCaldavAccountSettingsActivity extends ThemedInjectingA
.setDuration(BaseTransientBottomBar.LENGTH_INDEFINITE)
.setAction(
R.string.button_subscribe,
v -> newPurchaseDialog().show(getSupportFragmentManager(), null))
v -> startActivity(new Intent(this, PurchaseActivity.class)))
.show();
}
}

@ -16,7 +16,7 @@ import butterknife.ButterKnife
import org.tasks.Callback
import org.tasks.R
import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseDialog
import org.tasks.billing.PurchaseActivity
import org.tasks.dialogs.ColorPickerAdapter.Palette
import org.tasks.dialogs.ColorWheelPicker.Companion.newColorWheel
import org.tasks.injection.DialogFragmentComponent
@ -28,7 +28,6 @@ import javax.inject.Inject
class ColorPalettePicker : InjectingDialogFragment() {
companion object {
private const val FRAG_TAG_PURCHASE = "frag_tag_purchase"
private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker"
private const val EXTRA_PALETTE = "extra_palette"
const val EXTRA_SELECTED = ColorWheelPicker.EXTRA_SELECTED
@ -117,7 +116,7 @@ class ColorPalettePicker : InjectingDialogFragment() {
builder.setNegativeButton(android.R.string.cancel, null)
} else {
builder.setPositiveButton(R.string.button_subscribe) { _: DialogInterface?, _: Int ->
PurchaseDialog.newPurchaseDialog().show(parentFragmentManager, FRAG_TAG_PURCHASE)
context?.startActivity(Intent(context!!, PurchaseActivity::class.java))
}
}
return builder.show()

@ -1,11 +1,10 @@
package org.tasks.dialogs;
import static org.tasks.billing.PurchaseDialog.newPurchaseDialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@ -17,6 +16,7 @@ import butterknife.ButterKnife;
import javax.inject.Inject;
import org.tasks.R;
import org.tasks.billing.Inventory;
import org.tasks.billing.PurchaseActivity;
import org.tasks.injection.DialogFragmentComponent;
import org.tasks.injection.ForActivity;
import org.tasks.injection.InjectingDialogFragment;
@ -24,7 +24,6 @@ import org.tasks.themes.CustomIcons;
public class IconPickerDialog extends InjectingDialogFragment {
private static final String FRAG_TAG_PURCHASE = "frag_tag_purchase";
private static final String EXTRA_CURRENT = "extra_current";
@BindView(R.id.icons)
@ -66,7 +65,7 @@ public class IconPickerDialog extends InjectingDialogFragment {
if (!inventory.hasPro()) {
builder.setPositiveButton(
R.string.button_subscribe,
(dialog, which) -> newPurchaseDialog().show(getFragmentManager(), FRAG_TAG_PURCHASE));
(dialog, which) -> context.startActivity(new Intent(context, PurchaseActivity.class)));
}
return builder.show();
}

@ -1,13 +1,11 @@
package org.tasks.injection;
import dagger.Subcomponent;
import org.tasks.calendars.CalendarPicker;
import org.tasks.activities.RemoteListPicker;
import org.tasks.billing.NameYourPriceDialog;
import org.tasks.billing.PurchaseDialog;
import org.tasks.calendars.CalendarPicker;
import org.tasks.dialogs.AddAttachmentDialog;
import org.tasks.dialogs.ColorWheelPicker;
import org.tasks.dialogs.ColorPalettePicker;
import org.tasks.dialogs.ColorWheelPicker;
import org.tasks.dialogs.ExportTasksDialog;
import org.tasks.dialogs.GeofenceDialog;
import org.tasks.dialogs.IconPickerDialog;
@ -49,10 +47,6 @@ public interface DialogFragmentComponent {
void inject(IconPickerDialog iconPickerDialog);
void inject(PurchaseDialog purchaseDialog);
void inject(NameYourPriceDialog nameYourPriceDialog);
void inject(ExportTasksDialog exportTasksDialog);
void inject(ImportTasksDialog importTasksDialog);

@ -1,7 +1,5 @@
package org.tasks.locale.ui.activity;
import static org.tasks.billing.PurchaseDialog.newPurchaseDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
@ -13,6 +11,7 @@ import net.dinglisch.android.tasker.TaskerPlugin;
import org.tasks.LocalBroadcastManager;
import org.tasks.R;
import org.tasks.billing.Inventory;
import org.tasks.billing.PurchaseActivity;
import org.tasks.databinding.ActivityTaskerCreateBinding;
import org.tasks.injection.ActivityComponent;
import org.tasks.locale.bundle.TaskCreationBundle;
@ -21,8 +20,6 @@ import org.tasks.preferences.Preferences;
public final class TaskerCreateTaskActivity extends AbstractFragmentPluginAppCompatActivity
implements Toolbar.OnMenuItemClickListener {
private static final String FRAG_TAG_PURCHASE = "frag_tag_purchase";
@Inject Preferences preferences;
@Inject Inventory inventory;
@Inject LocalBroadcastManager localBroadcastManager;
@ -71,7 +68,7 @@ public final class TaskerCreateTaskActivity extends AbstractFragmentPluginAppCom
}
private void showPurchaseDialog() {
newPurchaseDialog().show(getSupportFragmentManager(), FRAG_TAG_PURCHASE);
startActivity(new Intent(this, PurchaseActivity.class));
}
@Override

@ -6,7 +6,6 @@ import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop;
import static com.todoroo.andlib.utility.AndroidUtilities.preLollipop;
import static org.tasks.LocalBroadcastManager.REFRESH;
import static org.tasks.LocalBroadcastManager.REFRESH_LIST;
import static org.tasks.billing.PurchaseDialog.newPurchaseDialog;
import android.app.Activity;
import android.content.BroadcastReceiver;
@ -41,6 +40,7 @@ import java.util.Map;
import javax.inject.Inject;
import org.tasks.LocalBroadcastManager;
import org.tasks.R;
import org.tasks.billing.PurchaseActivity;
import org.tasks.filters.FilterProvider;
import org.tasks.filters.NavigationDrawerAction;
import org.tasks.injection.FragmentComponent;
@ -54,7 +54,6 @@ public class NavigationDrawerFragment extends InjectingFragment {
public static final int REQUEST_SETTINGS = 10101;
public static final int REQUEST_PURCHASE = 10102;
public static final int REQUEST_DONATE = 10103;
private static final String FRAG_TAG_PURCHASE_DIALOG = "frag_tag_purchase_dialog";
private final RefreshReceiver refreshReceiver = new RefreshReceiver();
@Inject LocalBroadcastManager localBroadcastManager;
@ -118,7 +117,7 @@ public class NavigationDrawerFragment extends InjectingFragment {
} else if (item instanceof NavigationDrawerAction) {
NavigationDrawerAction action = (NavigationDrawerAction) item;
if (action.requestCode == REQUEST_PURCHASE) {
newPurchaseDialog().show(getFragmentManager(), FRAG_TAG_PURCHASE_DIALOG);
startActivity(new Intent(getContext(), PurchaseActivity.class));
} else if (action.requestCode == REQUEST_DONATE) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://tasks.org/donate")));
} else {

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?attr/colorAccent" android:state_checked="true"/>
<item android:alpha="0.12" android:color="?attr/colorOnSurface" android:state_checked="false"/>
<item android:color="?attr/colorAccent" android:state_enabled="true"/>
<item android:alpha="0.12" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
</selector>

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?attr/colorAccent" android:state_checked="true"/>
<item android:alpha="0.12" android:color="?attr/colorOnSurface" android:state_checked="false"/>
</selector>

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
style="@style/TextAppearance.AppCompat.Medium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:text="@string/upgrade_blurb_1"
android:padding="@dimen/keyline_first"
android:layout_gravity="center_horizontal" />
<TextView
style="@style/TextAppearance.AppCompat.Medium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:text="@string/upgrade_blurb_2"
android:padding="@dimen/keyline_first"
android:layout_gravity="center_horizontal" />
<TextView
style="@style/TextAppearance.AppCompat.Medium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:text="@string/upgrade_blurb_3"
android:padding="@dimen/keyline_first"
android:layout_gravity="center_horizontal" />
<TextView
style="@style/TextAppearance.AppCompat.Medium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:text="@string/upgrade_blurb_4"
android:padding="@dimen/keyline_first"
android:layout_gravity="center_horizontal" />
<ProgressBar
android:id="@+id/screen_wait"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"
android:visibility="gone" />
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:visibility="gone"
app:checkedButton="@id/button_monthly"
app:singleSelection="true"
android:paddingLeft="@dimen/keyline_content_inset"
android:paddingStart="@dimen/keyline_content_inset"
android:paddingEnd="@dimen/keyline_content_inset"
android:paddingRight="@dimen/keyline_content_inset">
<com.google.android.material.button.MaterialButton
android:id="@+id/button_monthly"
style="@style/OutlineButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/monthly" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_annually"
style="@style/OutlineButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/annually" />
</com.google.android.material.button.MaterialButtonToggleGroup>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingLeft="@dimen/keyline_content_inset"
android:paddingStart="@dimen/keyline_content_inset"
android:paddingEnd="@dimen/keyline_content_inset"
android:paddingRight="@dimen/keyline_content_inset" />
<com.google.android.material.button.MaterialButton
android:id="@+id/subscribe"
style="@style/OutlineButton"
android:padding="@dimen/keyline_first"
android:layout_width="match_parent"
android:layout_margin="@dimen/keyline_first"
android:layout_height="wrap_content"
app:strokeColor="@color/button_accent_stroke"
android:text="@string/button_subscribe" />
<com.google.android.material.button.MaterialButton
android:id="@+id/unsubscribe"
style="@style/OutlineButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/keyline_first"
android:padding="@dimen/keyline_first"
app:strokeColor="?attr/colorSecondary"
android:text="@string/button_unsubscribe"
android:visibility="gone" />
</LinearLayout>
</ScrollView>
</LinearLayout>

@ -1,83 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/keyline_first"
android:orientation="vertical">
<ProgressBar
android:id="@+id/screen_wait"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"
android:visibility="gone"/>
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/buttons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:visibility="gone"
app:checkedButton="@id/button_monthly"
app:singleSelection="true">
<com.google.android.material.button.MaterialButton
android:id="@+id/button_monthly"
style="@style/OutlineButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/monthly"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/button_annually"
style="@style/OutlineButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/annually"/>
</com.google.android.material.button.MaterialButtonToggleGroup>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/subscribe"
style="@style/TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:text="@string/button_subscribe"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/unsubscribe"
style="@style/TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:text="@string/button_unsubscribe"
android:visibility="gone"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/button_more_info"
style="@style/TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:text="@string/button_more_info"/>
</LinearLayout>
</ScrollView>

@ -1,34 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/keyline_first"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/pro_description"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/keyline_first"
android:text="@string/pro_subscribe_now"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"/>
<TextView
android:id="@+id/feature_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2"/>
</LinearLayout>
</ScrollView>

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tasks="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_more_info"
android:title="@string/button_more_info"
android:icon="@drawable/ic_outline_help_outline_24px"
android:contentDescription="@string/button_more_info"
tasks:showAsAction="ifRoom" />
</menu>

@ -452,11 +452,6 @@
е настроено правилно</string>
<string name="error_billing_default">Таксуването не е налице. Моля, проверете устройството си.</string>
<string name="about">Относно</string>
<string name="themes">Допълнителни теми</string>
<string name="pro_caldav_sync">CalDAV синхранизация</string>
<string name="pro_multiple_google_task_accounts">Множество Google Tasks акаунти</string>
<string name="pro_google_places_search">Търсене в Google Места</string>
<string name="pro_tasker_plugins">Tasker добавки</string>
<string name="pro_dashclock_extension">Dashclock разширение</string>
<string name="requires_pro_subscription">Изисква pro абонамент</string>
<string name="logout">Излизане</string>

@ -465,14 +465,12 @@
<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="icon">Ikona</string>
<string name="pro_support_development">Aplikace Tasks potřebuje Vaši podporu!</string>
<string name="manage_subscription_summary">Zvýšit, snížit nebo zrušit Váš odběr</string>
<string name="button_current_subscription">Aktuální odběr</string>
<string name="button_restore_subscription">Obnovit odběr</string>
<string name="button_downgrade">Snížit odběr</string>
<string name="button_upgrade">Zvýšit odběr</string>
<string name="button_unsubscribe">Zrušit odběr</string>
<string name="pro_description">Aplikace Tasks je svobodný software s otevřeným zdrojovým kódem, který neobsahuje žádné reklamy ani neprodává Vaše osobní informace</string>
<string name="no_application_found_link">Pro odkaz nebyla nalezena žádná aplikace</string>
<string name="encryption_password_required">Zadejte heslo pro šifrování</string>
<string name="encryption_password">Heslo pro šifrování</string>
@ -480,13 +478,6 @@
<string name="reenter_encryption_password">Zopakujte heslo pro šifrování</string>
<string name="encryption_password_wrong">Špatné heslo pro šifrování</string>
<string name="help_and_feedback">Nápověda a zpětná vazba</string>
<string name="themes">Více motivů a ikon</string>
<string name="pro_caldav_sync">Synchronizace pomocí CalDAV</string>
<string name="pro_subscribe_now">Odběrem podpoříte vývoj aplikace a odemknete si další funkce</string>
<string name="pro_etesync">Synchronizace pomocí EteSync</string>
<string name="pro_multiple_google_task_accounts">Několik Google účtů</string>
<string name="pro_google_places_search">Vyhledávání v Google Places</string>
<string name="pro_tasker_plugins">Tasker pluginy</string>
<string name="pro_dashclock_extension">Dashclock rozšíření</string>
<string name="requires_pro_subscription">Vyžaduje PRO odběr</string>
<string name="logout">Odhlásit se</string>

@ -443,11 +443,6 @@
<string name="error_billing_default">Abrechnung nicht verfügbar. Bitte überprüfe dein Gerät.</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="themes">Zusätzliche Themen und Symbole</string>
<string name="pro_caldav_sync">CalDAV-Synchronisierung</string>
<string name="pro_multiple_google_task_accounts">Mehrere Google-Tasks-Konten</string>
<string name="pro_google_places_search">Google-Ortssuche</string>
<string name="pro_tasker_plugins">Tasker Plugins</string>
<string name="pro_dashclock_extension">Dashclock-Erweiterung</string>
<string name="requires_pro_subscription">Pro-Freischaltung benötigt</string>
<string name="logout">Abmelden</string>
@ -492,15 +487,12 @@
<string name="version_string">Version %s</string>
<string name="error_adding_account">Fehler: %s</string>
<string name="icon">Symbol</string>
<string name="pro_support_development">Tasks braucht deine Unterstützung!</string>
<string name="manage_subscription_summary">Abonnement hoch-/herabstufen oder kündigen</string>
<string name="button_current_subscription">Aktuelles Abonnement</string>
<string name="button_restore_subscription">Abonnement wiederherstellen</string>
<string name="button_downgrade">Abonnement herabstufen</string>
<string name="button_upgrade">Abonnement hochstufen</string>
<string name="button_unsubscribe">Abonnement kündigen</string>
<string name="pro_description">Tasks ist freie, quelloffene Software, die weder Werbung enthält, noch deine persönlichen Daten verkauft</string>
<string name="pro_subscribe_now">Abonniere jetzt, um die Entwicklung zu unterstützen und zusätzliche Funktionen freizuschalten</string>
<string name="name_your_price">Nenne deinen Preis</string>
<string name="monthly">monatlich</string>
<string name="annually">jährlich</string>
@ -524,7 +516,6 @@
<string name="encryption_password_required">Verschlüsselungspasswort erforderlich</string>
<string name="encryption_password">Verschlüsselungs-Passwort</string>
<string name="display_name">Anzeigename</string>
<string name="pro_etesync">EteSync-Synchronisierung</string>
<string name="this_feature_requires_a_subscription">Diese Funktion erfordert ein Abonnement</string>
<string name="passwords_do_not_match">Passwörter stimmen nicht überein</string>
<string name="reenter_encryption_password">Verschlüsselungs-Passwort bestätigen</string>

@ -451,11 +451,6 @@
<string name="error_billing_default">Pago no disponible. Comprueba su dispositivo.</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="themes">Temas e iconos adicionales</string>
<string name="pro_caldav_sync">Sincronización de CalDAV</string>
<string name="pro_multiple_google_task_accounts">Múltiples cuentas de Google Task</string>
<string name="pro_google_places_search">Buscar en Google Places</string>
<string name="pro_tasker_plugins">Plugins de Tasker</string>
<string name="pro_dashclock_extension">Extensión Dashclock</string>
<string name="requires_pro_subscription">Requiere suscripción profesional</string>
<string name="logout">Cerrar sesión</string>
@ -497,15 +492,12 @@
<string name="error_adding_account">Error : %s</string>
<string name="list_separator_with_space">", "</string>
<string name="icon">Icono</string>
<string name="pro_support_development">¡Tasks necesitan su apoyo!</string>
<string name="manage_subscription_summary">Actualizar, rebajar o cancelar su suscripción</string>
<string name="button_current_subscription">Suscripción actual</string>
<string name="button_restore_subscription">Restaurar la suscripción</string>
<string name="button_downgrade">Suscripción de degradación</string>
<string name="button_upgrade">Suscripción de actualización</string>
<string name="button_unsubscribe">Cancelar la suscripción</string>
<string name="pro_description">Tasks es un software libre de código abierto que no muestra publicidad ni vende su información personal</string>
<string name="pro_subscribe_now">Suscríbase ahora para apoyar el desarrollo y desbloquear funciones adicionales</string>
<string name="name_your_price">Escoger tu precio</string>
<string name="monthly">Mensualmente</string>
<string name="annually">Anualmente</string>
@ -532,7 +524,6 @@
<string name="encryption_password_required">Contraseña de encriptado requerida</string>
<string name="encryption_password">Contraseña de encriptado</string>
<string name="display_name">Mostrar el nombre</string>
<string name="pro_etesync">Sincronización de EteSync</string>
<string name="this_feature_requires_a_subscription">Esta característica requiere una suscripción</string>
<string name="choose_synchronization_service">Seleccione una plataforma</string>
<string name="google_tasks_selection_description">Servicio básico que se sincroniza con tu cuenta de Google</string>

@ -272,10 +272,6 @@
<string name="button_subscribe">Telli</string>
<string name="button_more_info">Lisainfo</string>
<string name="about">Info</string>
<string name="themes">Lisateemad</string>
<string name="pro_caldav_sync">CalDAV sünkroonimine</string>
<string name="pro_multiple_google_task_accounts">Mitu Google Taski kontot</string>
<string name="pro_tasker_plugins">Taskeri pluginad</string>
<string name="pro_dashclock_extension">Dashclock laiendused</string>
<string name="requires_pro_subscription">Nõuavad PRO versiooni</string>
<string name="logout">Logi välja</string>

@ -459,11 +459,6 @@
<string name="error_billing_default">Fakturazioa ez dago eskuragarri. Egiaztatu zure gailua.</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="themes">Gai eta ikono gehigarriak</string>
<string name="pro_caldav_sync">CalDAV sinkronizazioa</string>
<string name="pro_multiple_google_task_accounts">Hainbat Google Task kontu</string>
<string name="pro_google_places_search">Google Places bilaketa</string>
<string name="pro_tasker_plugins">Tasker gehigarriak</string>
<string name="pro_dashclock_extension">Dashclock luzapena</string>
<string name="requires_pro_subscription">Pro harpidetza eskatzen du</string>
<string name="logout">Amaitu saioa</string>
@ -498,15 +493,12 @@
<string name="invalid_backup_file">Baliogabeko babes-kopia fitxategia</string>
<string name="google_tasks_add_to_top">Zeregin berriak goialdean</string>
<string name="icon">Ikonoa</string>
<string name="pro_support_development">Tasks zure laguntza behar du!</string>
<string name="manage_subscription_summary">Handiagotu, txikiagotu edo ezeztatu zure harpidetza</string>
<string name="button_current_subscription">Uneko harpidetza</string>
<string name="button_restore_subscription">Berrezarri harpidetza</string>
<string name="button_downgrade">Txikiagotu harpidetza</string>
<string name="button_upgrade">Handiagotu harpidetza</string>
<string name="button_unsubscribe">Ezeztatu harpidetza</string>
<string name="pro_description">Tasks aplikazioa software librea eta kode irekikoa da, ez dizkizu iragarkiak ikusarazten eta ez ditu zure datu pertsonalak saltzen</string>
<string name="pro_subscribe_now">Harpidetu garapena babesteko eta ezaugarri gehigarriak eskuratzeko</string>
<string name="name_your_price">Jarri zuk prezioa</string>
<string name="monthly">Hilero</string>
<string name="annually">Urtero</string>
@ -534,7 +526,6 @@
<string name="encryption_password_required">Zifratze pasahitza behar da</string>
<string name="encryption_password">Zifratze pasahitza</string>
<string name="display_name">Erakutsi izena</string>
<string name="pro_etesync">EteSync sinkronizazioa</string>
<string name="this_feature_requires_a_subscription">Ezaugarri honek harpidetza eskatzen du</string>
<string name="choose_synchronization_service">Hautatu plataforma</string>
<string name="google_tasks_selection_description">Zure Google kontuarekin sinkronizatzen den oinarrizko zerbitzua</string>

@ -411,5 +411,4 @@
<string name="tasker_create_task">Luo tehtävä</string>
<string name="tasker_list_notification">Ilmoituslista</string>
<string name="help">Apua</string>
<string name="themes">Lisäteemat</string>
</resources>

@ -434,11 +434,6 @@ est configuré correctement</string>
<string name="error_billing_default">Achat indisponible. Veuillez vérifier votre appareil.</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="themes">Thèmes et icônes additionnels</string>
<string name="pro_caldav_sync">Synchronisation de CalDAV</string>
<string name="pro_multiple_google_task_accounts">Plusieurs comptes Google Task</string>
<string name="pro_google_places_search">Recherche avec Google Places</string>
<string name="pro_tasker_plugins">Plugins pour Tasker</string>
<string name="pro_dashclock_extension">Extension Dashclock</string>
<string name="requires_pro_subscription">Abonnement professionnel requis</string>
<string name="logout">Se déconnecter</string>
@ -492,7 +487,6 @@ est configuré correctement</string>
<string name="list_separator_with_space">", "</string>
<string name="version_string">Version %s</string>
<string name="icon">Icône</string>
<string name="pro_support_development">Tâches à besoin de votre soutien !</string>
<string name="manage_subscription_summary">Augmentez, diminuez ou annulez votre abonnement</string>
<string name="button_current_subscription">Abonnement actuel</string>
<string name="button_restore_subscription">Restaurer l\'abonnement</string>
@ -503,8 +497,6 @@ est configuré correctement</string>
<string name="monthly">Chaque mois</string>
<string name="annually">Chaque année</string>
<string name="error_adding_account">Erreur : %s</string>
<string name="pro_description">Tasks est un logiciel libre open-source qui n\'affiche pas de publicités et ne vend pas vos informations personnelles</string>
<string name="pro_subscribe_now">Abonnez-vous dès maintenant pour soutenir le développement et débloquer des fonctionnalités supplémentaires</string>
<string name="SSD_sort_my_order">Mon tri</string>
<string name="caldav_account_repeating_tasks">Permet au serveur de programmer des tâches récurrentes</string>
<string name="EPr_temp_show_completed_tasks">Afficher temporairement les tâches une fois terminées</string>
@ -528,7 +520,6 @@ est configuré correctement</string>
<string name="encryption_password_required">Mot de passe de chiffrement requis</string>
<string name="encryption_password">Mot de passe de chiffrement</string>
<string name="display_name">Afficher le nom</string>
<string name="pro_etesync">Synchronisation de EteSync</string>
<string name="this_feature_requires_a_subscription">Cette fonctionnalité nécessite un abonnement</string>
<string name="choose_synchronization_service">Sélectionnez une plate-forme</string>
<string name="google_tasks_selection_description">Service de base qui se synchronise avec votre compte Google</string>

@ -290,5 +290,4 @@
<string name="delete_multiple_tasks_confirmation">%s borradas</string>
<string name="delete_selected_tasks">¿Borrar tareas seleccionadas?</string>
<string name="copy_selected_tasks">¿Copiar tareas seleccionadas?</string>
<string name="themes">Temas adicionales</string>
</resources>

@ -452,11 +452,6 @@
<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="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="themes">További témák és ikonok</string>
<string name="pro_caldav_sync">CalDAV szinkronizáció</string>
<string name="pro_multiple_google_task_accounts">Több Google Task fiók</string>
<string name="pro_google_places_search">Google Helyek keresés</string>
<string name="pro_tasker_plugins">Tasker plugin-ok</string>
<string name="pro_dashclock_extension">Dashclock kiterjesztés</string>
<string name="requires_pro_subscription">Pro előfizetést igényel</string>
<string name="logout">Kijelentkezés</string>
@ -494,15 +489,12 @@
<string name="location_radius_meters">%s m</string>
<string name="list_separator_with_space">", "</string>
<string name="icon">Ikon</string>
<string name="pro_support_development">Támogasd a Tasks-ot!</string>
<string name="manage_subscription_summary">Előfizetés upgrade-je, downgrade-je vagy lemondása</string>
<string name="button_current_subscription">Jelenlegi előfizetés</string>
<string name="button_restore_subscription">Előfizetés visszaállítása</string>
<string name="button_downgrade">Előfizetés downgrade-je</string>
<string name="button_upgrade">Előfizetés upgrade-je</string>
<string name="button_unsubscribe">Előfizetés lemondása</string>
<string name="pro_description">A Tasks egy olyan nyílt forráskódú program, amely nem jelenít meg hirdetéseket és nem adja el személyes adataidat</string>
<string name="pro_subscribe_now">Fizess elő most, ezzel támogatod a fejlesztést, és új funkciókat oldhatsz fel</string>
<string name="name_your_price">Nevezd meg az árat</string>
<string name="monthly">Havi</string>
<string name="annually">Éves</string>
@ -530,7 +522,6 @@
<string name="encryption_password_required">A titkosításhoz jelszó szükséges</string>
<string name="encryption_password">Jelszó titkosításhoz</string>
<string name="display_name">Megjelenített név</string>
<string name="pro_etesync">EteSync szinkronizáció</string>
<string name="this_feature_requires_a_subscription">Ez a funkció csak előfizetéssel vehető igénybe</string>
<string name="choose_synchronization_service">Platform választása</string>
<string name="google_tasks_selection_description">Alapvető szolgáltatás, ami a Google accounttal szinkronizál</string>

@ -374,7 +374,6 @@
<string name="network_error">Koneksi gagal</string>
<string name="background_sync_unmetered_only">Hanya pada koneksi tak terbatas</string>
<string name="upgrade_to_pro">Tingkatkan ke pro</string>
<string name="pro_support_development">Tasks membutuhkan dukungan anda!</string>
<string name="manage_subscription">Kelola langganan</string>
<string name="manage_subscription_summary">Tingkatkan, turunkan, atau batalkan langganan anda</string>
<string name="refresh_purchases">Segarkan pembelian</string>
@ -387,13 +386,6 @@
<string name="button_more_info">Info lainnya</string>
<string name="about">Tentang</string>
<string name="license_summary">Tasks adalah perangkat lunak bebas bersumber terbuka, dilindungi Lisensi Publik Umum GNU v3.0</string>
<string name="pro_description">Tasks adalah perangkat lunak bebas bersumber terbuka yang tidak menampilkan iklan atau menjual informasi personal anda</string>
<string name="pro_subscribe_now">Langganan sekarang untuk mendukung pengembangan dan mengaktifkan fitur tambahan lainnya</string>
<string name="themes">Ikon dan tema tambahan</string>
<string name="pro_caldav_sync">Sinkronisasi CalDAV</string>
<string name="pro_multiple_google_task_accounts">Beberapa akun Google Tasks</string>
<string name="pro_google_places_search">Pencarian Google Places</string>
<string name="pro_tasker_plugins">Plugin Tasker</string>
<string name="pro_dashclock_extension">Ekstensi Dashclock</string>
<string name="requires_pro_subscription">Membutuhkan langganan versi pro</string>
<string name="logout">Keluar</string>
@ -430,7 +422,6 @@
<string name="show_subtasks_summary">Menampilkan subtugas akan mengurangi performa aplikasi</string>
<string name="enter_tag_name">Masukkan nama tag</string>
<string name="create_new_tag">Buat \"%s\"</string>
<string name="pro_etesync">Sinkronisasi EteSync</string>
<string name="this_feature_requires_a_subscription">Fitur ini membutuhkan anda berlangganan versi pro</string>
<string name="choose_synchronization_service">Pilih platform</string>
<string name="google_tasks_selection_description">Layanan standar yang disinkronkan dengan akun Google anda</string>

@ -449,11 +449,6 @@ Google Play app sia impostata correttamente</string>
<string name="error_billing_default">Modalità addebito non disponibile. Verifica il tuo dispositivo</string>
<string name="about">A riguardo</string>
<string name="license_summary">Tasks è un software gratuito e open-source, rilasciato secondo la GNU General Public License v3.0</string>
<string name="themes">Ulteriori temi</string>
<string name="pro_caldav_sync">Sincronizzazione CalDAV</string>
<string name="pro_multiple_google_task_accounts"> Account attività Google multipli </string>
<string name="pro_google_places_search">Cerca Google Places</string>
<string name="pro_tasker_plugins">Plugin Tasker</string>
<string name="pro_dashclock_extension">Estensione Dashclock</string>
<string name="requires_pro_subscription">Richiede versione pro</string>
<string name="logout">Esci</string>

@ -489,11 +489,6 @@
<string name="error_billing_default">חיוב לא זמין. בדוק את מכשירך.</string>
<string name="about">אודות</string>
<string name="license_summary">Tasks הוא חופשי ובקוד פתוח, מוגש בתנאי הרישיון הציבורי הכללי של GNU בגרסה 3.0</string>
<string name="themes">ערכות נושא וסמלים נוספים</string>
<string name="pro_caldav_sync">סנכרון CalDAV</string>
<string name="pro_multiple_google_task_accounts">ריבוי חשבונות Google Task</string>
<string name="pro_google_places_search">חיפוש ב\"Google לעסק שלי\"</string>
<string name="pro_tasker_plugins">תוסף Tasker</string>
<string name="pro_dashclock_extension">הרחבת Dashclock</string>
<string name="requires_pro_subscription">לא דורש הרשמה</string>
<string name="logout">התנתקות מהחשבון</string>
@ -529,14 +524,12 @@
<string name="google_tasks_add_to_top">משימות חדשות בראש הרשימה</string>
<string name="list_separator_with_space">", "</string>
<string name="icon">סמל</string>
<string name="pro_support_development">Tasks צריך את התמיכה שלך!</string>
<string name="manage_subscription_summary">שדרוג, שנמוך או ביטול המינוי</string>
<string name="button_current_subscription">מינוי נוכחי</string>
<string name="button_restore_subscription">שחזור מינוי</string>
<string name="button_downgrade">שנמוך מינוי</string>
<string name="button_upgrade">שדרוג מינוי</string>
<string name="button_unsubscribe">ביטול מינוי</string>
<string name="pro_subscribe_now">יש להירשם כעת כדי לתמוך בפיתוח ולפתוח תכונתו נוספות</string>
<string name="name_your_price">מה המחיר שלך</string>
<string name="monthly">חודשי</string>
<string name="annually">שנתי</string>

@ -450,11 +450,6 @@
<string name="error_billing_default">支払がりようできません。お使いの端末を確認してください</string>
<string name="about">アプリについて</string>
<string name="license_summary">Tasks は、GNU General Public License v3.0 でライセンスされる、自由オープンソースソフトウェアです</string>
<string name="themes">追加のテーマとアイコン</string>
<string name="pro_caldav_sync">CalDAV 同期</string>
<string name="pro_multiple_google_task_accounts">複数の Google ToDo リストカウント</string>
<string name="pro_google_places_search">Google 場所検索</string>
<string name="pro_tasker_plugins">Tasker プラグイン</string>
<string name="pro_dashclock_extension">Dashclock 拡張</string>
<string name="requires_pro_subscription">プロ版のサブスクリプションが必要です</string>
<string name="logout">ログアウト</string>
@ -492,15 +487,12 @@
<string name="url">URL</string>
<string name="list_separator_with_space">", "</string>
<string name="icon">アイコン</string>
<string name="pro_support_development">Tasksはあなたのサポートが必要です!</string>
<string name="manage_subscription_summary">サブスクリプションのアップグレード、ダウングレード、またはキャンセル</string>
<string name="button_current_subscription">現在のサブスクリプション</string>
<string name="button_restore_subscription">サブスクリプションの復元</string>
<string name="button_downgrade">サブスクリプションのダウングレード</string>
<string name="button_upgrade">サブスクリプションのアップグレード</string>
<string name="button_unsubscribe">サブスクリプションのキャンセル</string>
<string name="pro_description">Tasksは、広告を表示したり、あなたの個人情報を販売しない、自由オープンソースソフトウェアです</string>
<string name="pro_subscribe_now">今すぐサブスクリプションを購入して、開発をサポートし、追加機能のロックを解除しましょう</string>
<string name="name_your_price">価格の名前</string>
<string name="monthly">毎月</string>
<string name="annually">毎年</string>

@ -451,10 +451,6 @@
<string name="error_billing_default">결제가 불가합니다. 기기를 확인하십시오.</string>
<string name="about">정보</string>
<string name="license_summary">Tasks는 GNU 일반공중사용권 3.0 (GPLv3)에 따라 사용이 허가된 리브레 오픈소스 소프트웨어입니다</string>
<string name="themes">추가적인 테마와 아이콘</string>
<string name="pro_caldav_sync">CalDAV 동기화</string>
<string name="pro_multiple_google_task_accounts">여러개의 구글 할일목록 계정 연결</string>
<string name="pro_tasker_plugins">Tasker 플러그인</string>
<string name="pro_dashclock_extension">Dashclock 확장프로그램</string>
<string name="requires_pro_subscription">프로 서비스 구독이 필요합니다</string>
<string name="logout">로그아웃</string>
@ -477,7 +473,6 @@
<string name="error_adding_account">오류: %s</string>
<string name="list_separator_with_space">", "</string>
<string name="manage_subscription">구독 관리</string>
<string name="pro_google_places_search">구글 플레이스 검색</string>
<string name="visit_website">웹사이트 방문</string>
<string name="choose_a_location">위치 선택</string>
<string name="pick_this_location">현위치 선택</string>
@ -495,15 +490,12 @@
<string name="invalid_backup_file">부적합한 백업 파일</string>
<string name="google_tasks_add_to_top">새 할일을 가장 위로</string>
<string name="icon">아이콘</string>
<string name="pro_support_development">Tasks는 여러분의 도움이 필요합니다!</string>
<string name="manage_subscription_summary">업그레이드, 다운그레이드, 구독 취소</string>
<string name="button_current_subscription">현재 구독</string>
<string name="button_restore_subscription">구독 복원</string>
<string name="button_downgrade">구독 다운그레이드</string>
<string name="button_upgrade">구독 업그레이드</string>
<string name="button_unsubscribe">구독 취소</string>
<string name="pro_description">Tasks는 광고를 게시하거나 개인정보를 판매하지 않는 리브레 오픈소스 소프트웨어입니다</string>
<string name="pro_subscribe_now">개발을 후원하고 부가 기능을 사용할 수 있도록 지금 구독하기</string>
<string name="name_your_price">구독 금액 정하기</string>
<string name="monthly">매월</string>
<string name="annually">매년</string>
@ -528,7 +520,6 @@
<string name="create_new_tag">\"%s\" 생성</string>
<string name="encryption_password_required">암호화 비밀번호 필수</string>
<string name="encryption_password">암호화 비밀번호</string>
<string name="pro_etesync">EteSync 동기화</string>
<string name="this_feature_requires_a_subscription">이 기능을 사용하려면 구독해야 합니다</string>
<string name="choose_synchronization_service">플랫폼 선택</string>
<string name="google_tasks_selection_description">기본 서비스는 구글 계정과 동기화합니다</string>

@ -449,11 +449,6 @@ sukonfigūruota tinkamai.</string>
<string name="error_billing_default">Sąskaita negalima. Patikrinkite savo įrenginį.</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="themes">Papildomos temos</string>
<string name="pro_caldav_sync">CalDAV sinchronizacija</string>
<string name="pro_multiple_google_task_accounts">Kelios Google Task paskyros</string>
<string name="pro_google_places_search">Paieška Google Places</string>
<string name="pro_tasker_plugins">Tasker įskiepiai</string>
<string name="pro_dashclock_extension">Dashclock plėtinys</string>
<string name="requires_pro_subscription">Reikalinga \"pro\" prenumerata</string>
<string name="logout">Atsijungti</string>

@ -459,11 +459,6 @@
<string name="error_billing_default">Fakturering utilgjengelig. Sjekk din enhet.</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="themes">Ytterligere drakter og ikoner</string>
<string name="pro_caldav_sync">CalDAV-synkronisering</string>
<string name="pro_multiple_google_task_accounts">Flerfoldige Google Task-kontoer</string>
<string name="pro_google_places_search">Google Places-søk</string>
<string name="pro_tasker_plugins">Tasker-programtillegg</string>
<string name="pro_dashclock_extension">Dashclock-utvidelse</string>
<string name="requires_pro_subscription">Krever pro-abonnement</string>
<string name="logout">Logg ut</string>
@ -498,15 +493,12 @@
<string name="invalid_backup_file">Ugyldig sikkerhetskopifil</string>
<string name="google_tasks_add_to_top">Nye oppgaver øverst</string>
<string name="icon">Ikon</string>
<string name="pro_support_development">Tasks trenger din støtte.</string>
<string name="manage_subscription_summary">Oppgrader, nedgrader eller avbryt ditt abonnement</string>
<string name="button_current_subscription">Nåværende abonnement</string>
<string name="button_restore_subscription">Gjenopprett abonnement</string>
<string name="button_downgrade">Nedgrader abonnement</string>
<string name="button_upgrade">Oppgrader abonnement</string>
<string name="button_unsubscribe">Avbryt abonnement</string>
<string name="pro_description">Tasks er fri programvare som ikke viser reklame eller selger din personvernsinfo</string>
<string name="pro_subscribe_now">Abonner nå for å støtte utviklingen og låse opp ytterligere funksjoner</string>
<string name="name_your_price">Betal det du vil</string>
<string name="monthly">Månedlig</string>
<string name="annually">Årlig</string>
@ -534,7 +526,6 @@
<string name="encryption_password_required">Krypteringspassord kreves</string>
<string name="encryption_password">Krypteringspassord</string>
<string name="display_name">Visningsnavn</string>
<string name="pro_etesync">EteSynk-synkronisering</string>
<string name="this_feature_requires_a_subscription">Denne funksjonen krever abonnement</string>
<string name="choose_synchronization_service">Velg en plattform</string>
<string name="google_tasks_selection_description">Enkel tjeneste som synkroniserer med din Google-konto</string>

@ -441,10 +441,6 @@
<string name="error_billing_default">Betaling onmogelijk. Controleer je apparaat.</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="themes">Extra thema\'s en icons</string>
<string name="pro_caldav_sync">CalDAV synchroniseren</string>
<string name="pro_multiple_google_task_accounts">Meerdere Google Task accounts</string>
<string name="pro_google_places_search">Google Plaatsen zoeken</string>
<string name="pro_dashclock_extension">Dashclock extentie</string>
<string name="requires_pro_subscription">Pro aanmelding vereist</string>
<string name="logout">Uitloggen</string>
@ -485,16 +481,12 @@
<string name="filters">Filters</string>
<string name="filter">Filter</string>
<string name="accent">Accent</string>
<string name="pro_tasker_plugins">Tasker plugins</string>
<string name="pro_support_development">Tasks heeft je ondersteuning nodig!</string>
<string name="manage_subscription_summary">Aanmelden, afmelden of annuleer je aanmelding</string>
<string name="button_current_subscription">Huidige abonnement</string>
<string name="button_restore_subscription">Abonnement herstellen</string>
<string name="button_downgrade">Terugdraaien abonnement</string>
<string name="button_upgrade">Abonnement upgraden</string>
<string name="button_unsubscribe">Abonnement annuleren</string>
<string name="pro_description">Tasks is vrije open-source software zonder advertenties of het doorverkopen van Je persoonlijke gegevens</string>
<string name="pro_subscribe_now">Meld je nu aan om de verdere ontwikkeling te ondersteunen en krijg extra functionaliteiten</string>
<string name="name_your_price">Bepaal je prijs</string>
<string name="monthly">Maandelijks</string>
<string name="annually">Jaarlijks</string>
@ -527,7 +519,6 @@
<string name="encryption_password_required">Coderingswachtwoord vereist</string>
<string name="encryption_password">Coderingswachtwoord</string>
<string name="display_name">Weergavenaam</string>
<string name="pro_etesync">EteSync synchronisatie</string>
<string name="this_feature_requires_a_subscription">Deze functionaliteit vereist een abonnement</string>
<string name="choose_synchronization_service">Selecteer een platform</string>
<string name="google_tasks_selection_description">Basisservice die synchroniseert met uw Google-account</string>

@ -462,10 +462,6 @@
<string name="error_billing_default">Płatność niedostępna. Sprawdź swoje urządzenie.</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="themes">Dodatkowe motywy i ikony</string>
<string name="pro_caldav_sync">Synchronizacja CalDAV</string>
<string name="pro_multiple_google_task_accounts">Wiele kont Google Task</string>
<string name="pro_google_places_search">Wyszukiwanie w Google Places</string>
<string name="requires_pro_subscription">Wymaga subskrypcji pro</string>
<string name="logout">Wyloguj</string>
<string name="logout_warning">Wyloguj z %s? Wszystkie dane z tego konta zostaną usunięte z urządzenia</string>
@ -501,21 +497,17 @@
<string name="error_adding_account">Błąd: %s</string>
<string name="list_separator_with_space">", "</string>
<string name="caldav_home_set_not_found">Nie znaleziono zestawu domowego</string>
<string name="pro_tasker_plugins">Wtyczki do Tasker</string>
<string name="pro_dashclock_extension">Rozszerzenie do Dashclock</string>
<string name="show_list_indicators">Pokaż listy</string>
<string name="invalid_backup_file">Nieprawidłowy plik kopii zapasowej</string>
<string name="google_tasks_add_to_top">Nowe zadania na górze</string>
<string name="icon">Ikona</string>
<string name="pro_support_development">Tasks potrzebuje Twojego wsparcia!</string>
<string name="manage_subscription_summary">Podwyższyć, obniżyć poziom albo anulować subskrypcję</string>
<string name="button_current_subscription">Aktualna subskrypcja</string>
<string name="button_restore_subscription">Przywróć subskrypcję</string>
<string name="button_downgrade">Obniżyć poziom subskrypcji</string>
<string name="button_upgrade">Podwyższyć poziom subskrypcji</string>
<string name="button_unsubscribe">Anuluj subskrypcję</string>
<string name="pro_description">Tasks to aplikacja darmową/libre z otwartym kodem źródłowym, która nie wyświetla reklam ani nie sprzedaje Twojch danych osobowych</string>
<string name="pro_subscribe_now">Subskrybuj teraz, aby wspierać rozwój aplikacji i odblokować dodatkowe funkcje</string>
<string name="name_your_price">Nazwij swoją cenę</string>
<string name="monthly">Miesięczne</string>
<string name="annually">Rocznie</string>
@ -543,7 +535,6 @@
<string name="encryption_password_required">Wymagane hasło szyfrowania</string>
<string name="encryption_password">Hasło szyfrowania</string>
<string name="display_name">Imię</string>
<string name="pro_etesync">Synchronizacja EteSync</string>
<string name="this_feature_requires_a_subscription">Ta funkcja wymaga subskrypcji</string>
<string name="choose_synchronization_service">Wybierz platformę</string>
<string name="google_tasks_selection_description">Podstawowy serwis, synchronizujący dane z Twoim kontem Google</string>

@ -450,10 +450,6 @@ 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="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="themes">Temas adicionais</string>
<string name="pro_caldav_sync">Sincronização CalDAV</string>
<string name="pro_multiple_google_task_accounts">Múltiplas contas do Google Tarefas</string>
<string name="pro_tasker_plugins">Plugins do Tasker</string>
<string name="pro_dashclock_extension">Extensão Dashclock</string>
<string name="requires_pro_subscription">Requer subscrição Pro</string>
<string name="logout">Sair</string>

@ -400,7 +400,6 @@
<string name="repeat_monthly_third_week">terceiro</string>
<string name="repeat_monthly_fourth_week">quarto</string>
<string name="repeat_monthly_last_week">último</string>
<string name="themes">Temas adicionais</string>
<string name="backup_BPr_header">Cópias de segurança</string>
<string name="action_call">Ligar</string>
<string name="action_open">Abrir</string>

@ -470,10 +470,6 @@
<string name="error_billing_default">Оплата невозможна. Проверьте ваше устройство.</string>
<string name="about">О программе</string>
<string name="license_summary">Tasks является свободным программным обеспечением с открытым исходным кодом, лицензированным под GNU General Public License v3.0</string>
<string name="themes">Дополнительные темы и иконки</string>
<string name="pro_caldav_sync">Синхронизация CalDAV</string>
<string name="pro_multiple_google_task_accounts">Несколько учётных записей Google Task</string>
<string name="pro_tasker_plugins">Плагины для Tasker</string>
<string name="pro_dashclock_extension">Расширение для Dashclock</string>
<string name="requires_pro_subscription">Требуется версия Про</string>
<string name="logout">Отключиться</string>
@ -503,7 +499,6 @@
<string name="choose_new_location">Выберите новое местоположение</string>
<string name="invalid_backup_file">Неверный файл резервной копии</string>
<string name="icon">Иконка</string>
<string name="pro_support_development">Tasks нуждается в вашей поддержке!</string>
<string name="button_current_subscription">Текущая подписка</string>
<string name="button_restore_subscription">Восстановить подписку</string>
<string name="button_unsubscribe">Отменить подписку</string>
@ -511,14 +506,11 @@
<string name="url">URL</string>
<string name="error_adding_account">Ошибка: %s</string>
<string name="list_separator_with_space">", "</string>
<string name="pro_google_places_search">Поиск в Google Places</string>
<string name="show_list_indicators">Показать списки</string>
<string name="building_notifications">Генерация уведомлений</string>
<string name="manage_subscription_summary">Повысить, понизить уровень подписки или отменить ее</string>
<string name="button_downgrade">Понизить уровень подписки</string>
<string name="button_upgrade">Повысить уровень подписки</string>
<string name="pro_description">Tasks - это свободное программное обеспечение с открытым исходным кодом, которое не показывает рекламу и не продает вашу личную информацию</string>
<string name="pro_subscribe_now">Подпишитесь сейчас, чтобы поддержать разработку и разблокировать дополнительные функции</string>
<string name="SSD_sort_my_order">Ручная сортировка</string>
<string name="EPr_temp_show_completed_tasks">Временно показывать задачи после завершения</string>
<string name="EPr_temp_completed_tasks_showing">Задачи будут временно видны в списке после завершения</string>
@ -549,7 +541,6 @@
<string name="encryption_password_required">Требуется пароль шифрования</string>
<string name="encryption_password">Пароль шифрования</string>
<string name="display_name">Имя</string>
<string name="pro_etesync">Синхронизация EteSync</string>
<string name="this_feature_requires_a_subscription">Эта функция требует подписки</string>
<string name="choose_synchronization_service">Выберите платформу</string>
<string name="google_tasks_selection_description">Простой сервис, который синхронизируется с Вашим аккаунтом Google</string>

@ -449,11 +449,6 @@ 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="license_summary">Úlohy je bezplatný softvér s otvoreným kódom pod GNU Public Licence v3.0</string>
<string name="themes">Ďaľšie témy</string>
<string name="pro_caldav_sync">CaIDAV synchronizácia</string>
<string name="pro_multiple_google_task_accounts">Viac účtov Google Task</string>
<string name="pro_google_places_search">Miesta Google vyhľadanie</string>
<string name="pro_tasker_plugins">Zásuvný modul Tasker</string>
<string name="pro_dashclock_extension">Rozšírenie Dashclock</string>
<string name="requires_pro_subscription">Vyžaduje platenú verziu pro</string>
<string name="logout">Odhlásiť sa</string>

@ -279,7 +279,6 @@
<string name="no_calendars_found">Inga kalendrar hittades</string>
<string name="widget_settings">Inställningar för widget</string>
<string name="clear_completed_tasks_confirmation">Rensa bort slutförda uppgifter?</string>
<string name="themes">Ytterligare teman och ikoner</string>
<string name="action_call">Ring</string>
<string name="action_open">Öppna</string>
<string name="TEA_hideUntil_due_date" comment="Used for displaying the chosen hide until value in the task edit screen. Should be the same as due_date, just without capitalization.">förfallodatum</string>
@ -453,10 +452,6 @@
<string name="error_billing_default">Faktureringen är inte tillgänglig. Kontrollera din enhet.</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="pro_caldav_sync">CalDAV-synkronisering</string>
<string name="pro_multiple_google_task_accounts">Flera Google-Tasks-konton</string>
<string name="pro_google_places_search">Google platssökning</string>
<string name="pro_tasker_plugins">Taskertillägg</string>
<string name="pro_dashclock_extension">DashClock extension</string>
<string name="requires_pro_subscription">Kräver Pro-prenumeration</string>
<string name="logout">Logga ut</string>
@ -491,15 +486,12 @@
<string name="invalid_backup_file">Ogiltig säkerhetskopia</string>
<string name="google_tasks_add_to_top">Nya uppgifter överst</string>
<string name="icon">Ikon</string>
<string name="pro_support_development">Tasks behöver ditt stöd!</string>
<string name="manage_subscription_summary">Uppgradera, nedgradera eller Avbryt prenumerationen</string>
<string name="button_current_subscription">Hantera prenumerationer</string>
<string name="button_restore_subscription">Återställ prenumeration</string>
<string name="button_downgrade">Nedgradera prenumeration</string>
<string name="button_upgrade">Uppgradera prenumerationen</string>
<string name="button_unsubscribe">Avbryt prenumeration</string>
<string name="pro_description">Tasks är Libre programvara med öppen källkod som inte visar annonser eller säljer dina personuppgifter</string>
<string name="pro_subscribe_now">Prenumerera nu för att stödja utveckling och låsa upp ytterligare funktioner</string>
<string name="name_your_price">Namnge ditt pris</string>
<string name="monthly">Månadsvis</string>
<string name="annually">Årligen</string>

@ -454,11 +454,6 @@
<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="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="themes">Ek gövdeler ve simgeler</string>
<string name="pro_caldav_sync">CalDAV eşzamanlama</string>
<string name="pro_multiple_google_task_accounts">Çoklu Google Görev hesabı</string>
<string name="pro_google_places_search">Google Yerler araması</string>
<string name="pro_tasker_plugins">Tasker eklentileri</string>
<string name="pro_dashclock_extension">Dashclock eklentisi</string>
<string name="requires_pro_subscription">Pro aboneliği gerektirir</string>
<string name="logout">Oturumu kapat</string>
@ -497,15 +492,12 @@
<string name="error_adding_account">Hata: %s</string>
<string name="list_separator_with_space">", "</string>
<string name="icon">Simge</string>
<string name="pro_support_development">Tasks, desteğinize gereksiniyor!</string>
<string name="manage_subscription_summary">Aboneliğinizi yükseltin, alçaltın veya iptal edin</string>
<string name="button_current_subscription">Geçerli abonelik</string>
<string name="button_restore_subscription">Aboneliği geri getir</string>
<string name="button_downgrade">Aboneliği alçalt</string>
<string name="button_upgrade">Aboneliği yükselt</string>
<string name="button_unsubscribe">Aboneliği iptal et</string>
<string name="pro_description">Tasks, kişisel bilginizi satmayan ve reklam göstermeyen özgür açık kaynaklı yazılımdır</string>
<string name="pro_subscribe_now">Gelişimi desteklemek ve ek özelliklerin kilidini kaldırmak için şimdi abone olun</string>
<string name="name_your_price">Fiyat belirleyin</string>
<string name="monthly">Aylık</string>
<string name="annually">Yıllık</string>

@ -452,11 +452,6 @@
<string name="error_billing_default">Оплата недоступна. Перевірте ваш пристрій</string>
<string name="about">Про Tasks</string>
<string name="license_summary">Tasks є програмою з відкритим кодом з ліцензією GNU General Public License v3.0</string>
<string name="themes">Додаткові схеми</string>
<string name="pro_caldav_sync">Синхронізація CalDAV</string>
<string name="pro_multiple_google_task_accounts">Декілька облікових записів Google Tasks</string>
<string name="pro_google_places_search">Пошук в Google Місця</string>
<string name="pro_tasker_plugins">Tasker плагіни</string>
<string name="pro_dashclock_extension">Розширення Dashclock</string>
<string name="requires_pro_subscription">Потребує преміум підписки</string>
<string name="logout">Вийти</string>

@ -434,10 +434,6 @@
<string name="error_billing_default">帐单不可用。请检查你的设备。</string>
<string name="about">关于</string>
<string name="license_summary">Tasks是遵循GNU通用公共许可证v3.0许可证的开源软件</string>
<string name="themes">其他主题和图标</string>
<string name="pro_caldav_sync">CalDAV同步</string>
<string name="pro_multiple_google_task_accounts">多Google Taks帐户</string>
<string name="pro_tasker_plugins">Tasker 插件</string>
<string name="pro_dashclock_extension">Dashclock扩展</string>
<string name="requires_pro_subscription">需要订阅专业版</string>
<string name="logout">登出</string>
@ -463,7 +459,6 @@
<string name="geofence_radius">半径</string>
<string name="location_radius_meters">%s 米</string>
<string name="manage_subscription">管理订阅</string>
<string name="pro_google_places_search">Google Place搜索</string>
<string name="location_remind_arrival">抵达时提醒</string>
<string name="location_remind_departure">离开时提醒</string>
<string name="visit_website">访问网站</string>
@ -486,15 +481,12 @@
<string name="invalid_backup_file">无效的备份文件</string>
<string name="google_tasks_add_to_top">新任务显示在顶部</string>
<string name="icon">图标</string>
<string name="pro_support_development">Tasks需要您的支持!</string>
<string name="manage_subscription_summary">升级,降级或取消您的订阅</string>
<string name="button_current_subscription">当前订阅</string>
<string name="button_restore_subscription">恢复订阅</string>
<string name="button_downgrade">降级订阅</string>
<string name="button_upgrade">升级订阅</string>
<string name="button_unsubscribe">取消订阅</string>
<string name="pro_description">Tasks是不显示广告或销售您个人信息的自由开源软件</string>
<string name="pro_subscribe_now">现在订阅支持开发并解锁额外功能</string>
<string name="name_your_price">您愿意支付多少费用</string>
<string name="monthly">每月</string>
<string name="annually">每年</string>
@ -523,7 +515,6 @@
<string name="encryption_password_required">需要加密密码</string>
<string name="encryption_password">加密密码</string>
<string name="display_name">显示名称</string>
<string name="pro_etesync">EteSync 同步</string>
<string name="this_feature_requires_a_subscription">该功能需要订阅</string>
<string name="choose_synchronization_service">选择平台</string>
<string name="google_tasks_selection_description">与您的谷歌账户同步的基本服务</string>

@ -218,7 +218,6 @@
<string name="repeats_monthly">每月</string>
<string name="repeats_yearly">每年</string>
<string name="repeats_plural">每 %s 重複</string>
<string name="themes">其他主題</string>
<string name="enter_filter_name">輸入過濾名稱</string>
<string name="discard_confirmation">您要放棄更改嗎?</string>
<string name="keep_editing">繼續編輯</string>

@ -471,7 +471,6 @@ File %1$s contained %2$s.\n\n
<string name="network_error">Connection failed</string>
<string name="background_sync_unmetered_only">Only on unmetered connections</string>
<string name="upgrade_to_pro">Upgrade to pro</string>
<string name="pro_support_development">Tasks needs your support!</string>
<string name="manage_subscription">Manage subscription</string>
<string name="manage_subscription_summary">Upgrade, downgrade, or cancel your subscription</string>
<string name="refresh_purchases">Refresh purchases</string>
@ -487,14 +486,6 @@ File %1$s contained %2$s.\n\n
<string name="error_billing_default">Billing unavailable. Please check your device.</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="pro_description">Tasks is libre open-source software that does not display advertisements or sell your personal information</string>
<string name="pro_subscribe_now">Subscribe now to support development and unlock additional features</string>
<string name="themes">Additional themes and icons</string>
<string name="pro_caldav_sync">CalDAV synchronization</string>
<string name="pro_etesync">EteSync synchronization</string>
<string name="pro_multiple_google_task_accounts">Multiple Google Task accounts</string>
<string name="pro_google_places_search">Google Places search</string>
<string name="pro_tasker_plugins">Tasker plugins</string>
<string name="pro_dashclock_extension">Dashclock extension</string>
<string name="requires_pro_subscription">Requires pro subscription</string>
<string name="this_feature_requires_a_subscription">This feature requires a subscription</string>
@ -563,4 +554,9 @@ File %1$s contained %2$s.\n\n
<string name="more_notification_settings_summary">Ringtone, vibrations, and more</string>
<string name="invalid_username_or_password">Invalid username or password</string>
<string name="color_wheel">Color wheel</string>
<string name="upgrade_blurb_1">Hi! My name is Alex. I am the independent developer behind Tasks</string>
<string name="upgrade_blurb_2">I have spent thousands of hours working on Tasks, and I publish all of the source code online for free. In order to support my work some features require a subscription</string>
<string name="upgrade_blurb_3">Choose any subscription price below to start your free trial. You may cancel at any time</string>
<string name="upgrade_blurb_4">Your support means a lot to me, thank you!</string>
<string name="back">Back</string>
</resources>

@ -171,7 +171,7 @@
<item name="android:textColor">@color/button_accent_text</item>
<item name="backgroundTint">@color/button_accent_background</item>
<item name="rippleColor">@color/button_accent_ripple</item>
<item name="strokeColor">@color/button_accent_stroke</item>
<item name="strokeColor">@color/button_selected_accent_stroke</item>
</style>
<style name="TextButton" parent="Widget.MaterialComponents.Button.TextButton">

Loading…
Cancel
Save