diff --git a/app/src/amazon/res/values/arrays.xml b/app/src/amazon/res/values/arrays.xml deleted file mode 100644 index 269a9b40a..000000000 --- a/app/src/amazon/res/values/arrays.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - @string/themes - @string/pro_caldav_sync - @string/pro_multiple_google_task_accounts - @string/pro_tasker_plugins - @string/pro_dashclock_extension - - \ No newline at end of file diff --git a/app/src/generic/res/values/arrays.xml b/app/src/generic/res/values/arrays.xml deleted file mode 100644 index 5ce713747..000000000 --- a/app/src/generic/res/values/arrays.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/googleplay/java/org/tasks/billing/BillingClientImpl.java b/app/src/googleplay/java/org/tasks/billing/BillingClientImpl.java index 8f5941c6f..a00e8b73d 100644 --- a/app/src/googleplay/java/org/tasks/billing/BillingClientImpl.java +++ b/app/src/googleplay/java/org/tasks/billing/BillingClientImpl.java @@ -149,11 +149,12 @@ public class BillingClientImpl implements BillingClient, PurchasesUpdatedListene @Override public void onPurchasesUpdated( @BillingResponse int resultCode, List 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 diff --git a/app/src/googleplay/res/values/arrays.xml b/app/src/googleplay/res/values/arrays.xml deleted file mode 100644 index 92d80dfb2..000000000 --- a/app/src/googleplay/res/values/arrays.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - @string/themes - @string/pro_caldav_sync - @string/pro_etesync - @string/pro_multiple_google_task_accounts - @string/pro_google_places_search - @string/pro_tasker_plugins - @string/pro_dashclock_extension - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index aa8e91c1d..3a8e5ee6a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -464,7 +464,7 @@ + android:theme="@style/Tasks" /> finish()); - } - - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } -} diff --git a/app/src/main/java/org/tasks/billing/PurchaseActivity.kt b/app/src/main/java/org/tasks/billing/PurchaseActivity.kt new file mode 100644 index 000000000..1f684acef --- /dev/null +++ b/app/src/main/java/org/tasks/billing/PurchaseActivity.kt @@ -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 + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/billing/PurchaseDialog.java b/app/src/main/java/org/tasks/billing/PurchaseDialog.java deleted file mode 100644 index 25d930ffe..000000000 --- a/app/src/main/java/org/tasks/billing/PurchaseDialog.java +++ /dev/null @@ -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); - } -} diff --git a/app/src/main/java/org/tasks/caldav/BaseCaldavAccountSettingsActivity.java b/app/src/main/java/org/tasks/caldav/BaseCaldavAccountSettingsActivity.java index 55224f062..467a8eb57 100644 --- a/app/src/main/java/org/tasks/caldav/BaseCaldavAccountSettingsActivity.java +++ b/app/src/main/java/org/tasks/caldav/BaseCaldavAccountSettingsActivity.java @@ -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(); } } diff --git a/app/src/main/java/org/tasks/dialogs/ColorPalettePicker.kt b/app/src/main/java/org/tasks/dialogs/ColorPalettePicker.kt index 16adde05a..26acdf647 100644 --- a/app/src/main/java/org/tasks/dialogs/ColorPalettePicker.kt +++ b/app/src/main/java/org/tasks/dialogs/ColorPalettePicker.kt @@ -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() diff --git a/app/src/main/java/org/tasks/dialogs/IconPickerDialog.java b/app/src/main/java/org/tasks/dialogs/IconPickerDialog.java index 2619eaa12..2e6dea310 100644 --- a/app/src/main/java/org/tasks/dialogs/IconPickerDialog.java +++ b/app/src/main/java/org/tasks/dialogs/IconPickerDialog.java @@ -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(); } diff --git a/app/src/main/java/org/tasks/injection/DialogFragmentComponent.java b/app/src/main/java/org/tasks/injection/DialogFragmentComponent.java index e5ac3e93b..8fdae1828 100644 --- a/app/src/main/java/org/tasks/injection/DialogFragmentComponent.java +++ b/app/src/main/java/org/tasks/injection/DialogFragmentComponent.java @@ -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); diff --git a/app/src/main/java/org/tasks/locale/ui/activity/TaskerCreateTaskActivity.java b/app/src/main/java/org/tasks/locale/ui/activity/TaskerCreateTaskActivity.java index 7d9a93c5e..c1de10d3e 100755 --- a/app/src/main/java/org/tasks/locale/ui/activity/TaskerCreateTaskActivity.java +++ b/app/src/main/java/org/tasks/locale/ui/activity/TaskerCreateTaskActivity.java @@ -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 diff --git a/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.java b/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.java index b8cb5a5a6..8f18c90eb 100644 --- a/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.java +++ b/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.java @@ -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 { diff --git a/app/src/main/res/color/button_accent_stroke.xml b/app/src/main/res/color/button_accent_stroke.xml index ef283a50a..8ae70677c 100644 --- a/app/src/main/res/color/button_accent_stroke.xml +++ b/app/src/main/res/color/button_accent_stroke.xml @@ -1,5 +1,5 @@ - - + + diff --git a/app/src/main/res/color/button_selected_accent_stroke.xml b/app/src/main/res/color/button_selected_accent_stroke.xml new file mode 100644 index 000000000..ef283a50a --- /dev/null +++ b/app/src/main/res/color/button_selected_accent_stroke.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/activity_purchase.xml b/app/src/main/res/layout/activity_purchase.xml new file mode 100644 index 000000000..44000a2a0 --- /dev/null +++ b/app/src/main/res/layout/activity_purchase.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_name_your_price.xml b/app/src/main/res/layout/dialog_name_your_price.xml deleted file mode 100644 index d7a8ff030..000000000 --- a/app/src/main/res/layout/dialog_name_your_price.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_purchase.xml b/app/src/main/res/layout/dialog_purchase.xml deleted file mode 100644 index 5b4ead0d5..000000000 --- a/app/src/main/res/layout/dialog_purchase.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/menu_purchase_activity.xml b/app/src/main/res/menu/menu_purchase_activity.xml new file mode 100644 index 000000000..3b4d83d66 --- /dev/null +++ b/app/src/main/res/menu/menu_purchase_activity.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 2ee850a52..59d581ec9 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -452,11 +452,6 @@ е настроено правилно Таксуването не е налице. Моля, проверете устройството си. Относно - Допълнителни теми - CalDAV синхранизация - Множество Google Tasks акаунти - Търсене в Google Места - Tasker добавки Dashclock разширение Изисква pro абонамент Излизане diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 15a48b2b8..2a3bd0e19 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -465,14 +465,12 @@ O aplikaci Aplikace Tasks je svobodný software s otevřeným zdrojovým kódem licencovaný pod GNU General Public License v3.0 Ikona - Aplikace Tasks potřebuje Vaši podporu! Zvýšit, snížit nebo zrušit Váš odběr Aktuální odběr Obnovit odběr Snížit odběr Zvýšit odběr Zrušit odběr - Aplikace Tasks je svobodný software s otevřeným zdrojovým kódem, který neobsahuje žádné reklamy ani neprodává Vaše osobní informace Pro odkaz nebyla nalezena žádná aplikace Zadejte heslo pro šifrování Heslo pro šifrování @@ -480,13 +478,6 @@ Zopakujte heslo pro šifrování Špatné heslo pro šifrování Nápověda a zpětná vazba - Více motivů a ikon - Synchronizace pomocí CalDAV - Odběrem podpoříte vývoj aplikace a odemknete si další funkce - Synchronizace pomocí EteSync - Několik Google účtů - Vyhledávání v Google Places - Tasker pluginy Dashclock rozšíření Vyžaduje PRO odběr Odhlásit se diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2543769cb..5b516ef03 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -443,11 +443,6 @@ Abrechnung nicht verfügbar. Bitte überprüfe dein Gerät. Über Tasks ist freie, quelloffene Software, die unter der GNU General Public License v3.0 lizenziert ist - Zusätzliche Themen und Symbole - CalDAV-Synchronisierung - Mehrere Google-Tasks-Konten - Google-Ortssuche - Tasker Plugins Dashclock-Erweiterung Pro-Freischaltung benötigt Abmelden @@ -492,15 +487,12 @@ Version %s Fehler: %s Symbol - Tasks braucht deine Unterstützung! Abonnement hoch-/herabstufen oder kündigen Aktuelles Abonnement Abonnement wiederherstellen Abonnement herabstufen Abonnement hochstufen Abonnement kündigen - Tasks ist freie, quelloffene Software, die weder Werbung enthält, noch deine persönlichen Daten verkauft - Abonniere jetzt, um die Entwicklung zu unterstützen und zusätzliche Funktionen freizuschalten Nenne deinen Preis monatlich jährlich @@ -524,7 +516,6 @@ Verschlüsselungspasswort erforderlich Verschlüsselungs-Passwort Anzeigename - EteSync-Synchronisierung Diese Funktion erfordert ein Abonnement Passwörter stimmen nicht überein Verschlüsselungs-Passwort bestätigen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 92b430d84..2a6cd2422 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -451,11 +451,6 @@ Pago no disponible. Comprueba su dispositivo. Sobre Tasks es software libre de código abierto, licenciado bajo la GNU General Public License v3.0 - Temas e iconos adicionales - Sincronización de CalDAV - Múltiples cuentas de Google Task - Buscar en Google Places - Plugins de Tasker Extensión Dashclock Requiere suscripción profesional Cerrar sesión @@ -497,15 +492,12 @@ Error : %s ", " Icono - ¡Tasks necesitan su apoyo! Actualizar, rebajar o cancelar su suscripción Suscripción actual Restaurar la suscripción Suscripción de degradación Suscripción de actualización Cancelar la suscripción - Tasks es un software libre de código abierto que no muestra publicidad ni vende su información personal - Suscríbase ahora para apoyar el desarrollo y desbloquear funciones adicionales Escoger tu precio Mensualmente Anualmente @@ -532,7 +524,6 @@ Contraseña de encriptado requerida Contraseña de encriptado Mostrar el nombre - Sincronización de EteSync Esta característica requiere una suscripción Seleccione una plataforma Servicio básico que se sincroniza con tu cuenta de Google diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index d370570ba..8b110739c 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -272,10 +272,6 @@ Telli Lisainfo Info - Lisateemad - CalDAV sünkroonimine - Mitu Google Taski kontot - Taskeri pluginad Dashclock laiendused Nõuavad PRO versiooni Logi välja diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 095333048..17c5f429d 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -459,11 +459,6 @@ Fakturazioa ez dago eskuragarri. Egiaztatu zure gailua. Honi buruz Tasks aplikazioa software librea eta kode irekikoa da, GNU General Public License v3.0 lizentziapean - Gai eta ikono gehigarriak - CalDAV sinkronizazioa - Hainbat Google Task kontu - Google Places bilaketa - Tasker gehigarriak Dashclock luzapena Pro harpidetza eskatzen du Amaitu saioa @@ -498,15 +493,12 @@ Baliogabeko babes-kopia fitxategia Zeregin berriak goialdean Ikonoa - Tasks zure laguntza behar du! Handiagotu, txikiagotu edo ezeztatu zure harpidetza Uneko harpidetza Berrezarri harpidetza Txikiagotu harpidetza Handiagotu harpidetza Ezeztatu harpidetza - Tasks aplikazioa software librea eta kode irekikoa da, ez dizkizu iragarkiak ikusarazten eta ez ditu zure datu pertsonalak saltzen - Harpidetu garapena babesteko eta ezaugarri gehigarriak eskuratzeko Jarri zuk prezioa Hilero Urtero @@ -534,7 +526,6 @@ Zifratze pasahitza behar da Zifratze pasahitza Erakutsi izena - EteSync sinkronizazioa Ezaugarri honek harpidetza eskatzen du Hautatu plataforma Zure Google kontuarekin sinkronizatzen den oinarrizko zerbitzua diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index b18ca9767..7cd16f630 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -411,5 +411,4 @@ Luo tehtävä Ilmoituslista Apua - Lisäteemat \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 40f238c55..5a9c90d93 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -434,11 +434,6 @@ est configuré correctement Achat indisponible. Veuillez vérifier votre appareil. À propos Tasks est un logiciel libre et open-source, licencié selon le GNU General Public License v3.0 - Thèmes et icônes additionnels - Synchronisation de CalDAV - Plusieurs comptes Google Task - Recherche avec Google Places - Plugins pour Tasker Extension Dashclock Abonnement professionnel requis Se déconnecter @@ -492,7 +487,6 @@ est configuré correctement ", " Version %s Icône - Tâches à besoin de votre soutien ! Augmentez, diminuez ou annulez votre abonnement Abonnement actuel Restaurer l\'abonnement @@ -503,8 +497,6 @@ est configuré correctement Chaque mois Chaque année Erreur : %s - Tasks est un logiciel libre open-source qui n\'affiche pas de publicités et ne vend pas vos informations personnelles - Abonnez-vous dès maintenant pour soutenir le développement et débloquer des fonctionnalités supplémentaires Mon tri Permet au serveur de programmer des tâches récurrentes Afficher temporairement les tâches une fois terminées @@ -528,7 +520,6 @@ est configuré correctement Mot de passe de chiffrement requis Mot de passe de chiffrement Afficher le nom - Synchronisation de EteSync Cette fonctionnalité nécessite un abonnement Sélectionnez une plate-forme Service de base qui se synchronise avec votre compte Google diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 75a6e7b5d..e77f7d868 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -290,5 +290,4 @@ %s borradas ¿Borrar tareas seleccionadas? ¿Copiar tareas seleccionadas? - Temas adicionales \ No newline at end of file diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 26d4ecc09..c77f456df 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -452,11 +452,6 @@ Számlázási rendszer nem elérhető. Ellenőrizze az eszközét. Névjegy A Tasks nyílt forráskódú program, a GNU Általános Nyilvános Licenc v3.0 alapján licenszelve - További témák és ikonok - CalDAV szinkronizáció - Több Google Task fiók - Google Helyek keresés - Tasker plugin-ok Dashclock kiterjesztés Pro előfizetést igényel Kijelentkezés @@ -494,15 +489,12 @@ %s m ", " Ikon - Támogasd a Tasks-ot! Előfizetés upgrade-je, downgrade-je vagy lemondása Jelenlegi előfizetés Előfizetés visszaállítása Előfizetés downgrade-je Előfizetés upgrade-je Előfizetés lemondása - A Tasks egy olyan nyílt forráskódú program, amely nem jelenít meg hirdetéseket és nem adja el személyes adataidat - Fizess elő most, ezzel támogatod a fejlesztést, és új funkciókat oldhatsz fel Nevezd meg az árat Havi Éves @@ -530,7 +522,6 @@ A titkosításhoz jelszó szükséges Jelszó titkosításhoz Megjelenített név - EteSync szinkronizáció Ez a funkció csak előfizetéssel vehető igénybe Platform választása Alapvető szolgáltatás, ami a Google accounttal szinkronizál diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index efbe25b4a..bc903eaa9 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -374,7 +374,6 @@ Koneksi gagal Hanya pada koneksi tak terbatas Tingkatkan ke pro - Tasks membutuhkan dukungan anda! Kelola langganan Tingkatkan, turunkan, atau batalkan langganan anda Segarkan pembelian @@ -387,13 +386,6 @@ Info lainnya Tentang Tasks adalah perangkat lunak bebas bersumber terbuka, dilindungi Lisensi Publik Umum GNU v3.0 - Tasks adalah perangkat lunak bebas bersumber terbuka yang tidak menampilkan iklan atau menjual informasi personal anda - Langganan sekarang untuk mendukung pengembangan dan mengaktifkan fitur tambahan lainnya - Ikon dan tema tambahan - Sinkronisasi CalDAV - Beberapa akun Google Tasks - Pencarian Google Places - Plugin Tasker Ekstensi Dashclock Membutuhkan langganan versi pro Keluar @@ -430,7 +422,6 @@ Menampilkan subtugas akan mengurangi performa aplikasi Masukkan nama tag Buat \"%s\" - Sinkronisasi EteSync Fitur ini membutuhkan anda berlangganan versi pro Pilih platform Layanan standar yang disinkronkan dengan akun Google anda diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 38058248e..dc4b3b67d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -449,11 +449,6 @@ Google Play app sia impostata correttamente Modalità addebito non disponibile. Verifica il tuo dispositivo A riguardo Tasks è un software gratuito e open-source, rilasciato secondo la GNU General Public License v3.0 - Ulteriori temi - Sincronizzazione CalDAV - Account attività Google multipli - Cerca Google Places - Plugin Tasker Estensione Dashclock Richiede versione pro Esci diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index ea0fb703b..3da40c9b4 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -489,11 +489,6 @@ חיוב לא זמין. בדוק את מכשירך. אודות Tasks הוא חופשי ובקוד פתוח, מוגש בתנאי הרישיון הציבורי הכללי של GNU בגרסה 3.0 - ערכות נושא וסמלים נוספים - סנכרון CalDAV - ריבוי חשבונות Google Task - חיפוש ב\"Google לעסק שלי\" - תוסף Tasker הרחבת Dashclock לא דורש הרשמה התנתקות מהחשבון @@ -529,14 +524,12 @@ משימות חדשות בראש הרשימה ", " סמל - Tasks צריך את התמיכה שלך! שדרוג, שנמוך או ביטול המינוי מינוי נוכחי שחזור מינוי שנמוך מינוי שדרוג מינוי ביטול מינוי - יש להירשם כעת כדי לתמוך בפיתוח ולפתוח תכונתו נוספות מה המחיר שלך חודשי שנתי diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 59ea065b0..c0e534eb6 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -450,11 +450,6 @@ 支払がりようできません。お使いの端末を確認してください アプリについて Tasks は、GNU General Public License v3.0 でライセンスされる、自由オープンソースソフトウェアです - 追加のテーマとアイコン - CalDAV 同期 - 複数の Google ToDo リストカウント - Google 場所検索 - Tasker プラグイン Dashclock 拡張 プロ版のサブスクリプションが必要です ログアウト @@ -492,15 +487,12 @@ URL ", " アイコン - Tasksはあなたのサポートが必要です! サブスクリプションのアップグレード、ダウングレード、またはキャンセル 現在のサブスクリプション サブスクリプションの復元 サブスクリプションのダウングレード サブスクリプションのアップグレード サブスクリプションのキャンセル - Tasksは、広告を表示したり、あなたの個人情報を販売しない、自由オープンソースソフトウェアです - 今すぐサブスクリプションを購入して、開発をサポートし、追加機能のロックを解除しましょう 価格の名前 毎月 毎年 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index c3cd2bce4..c9530f3a0 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -451,10 +451,6 @@ 결제가 불가합니다. 기기를 확인하십시오. 정보 Tasks는 GNU 일반공중사용권 3.0 (GPLv3)에 따라 사용이 허가된 리브레 오픈소스 소프트웨어입니다 - 추가적인 테마와 아이콘 - CalDAV 동기화 - 여러개의 구글 할일목록 계정 연결 - Tasker 플러그인 Dashclock 확장프로그램 프로 서비스 구독이 필요합니다 로그아웃 @@ -477,7 +473,6 @@ 오류: %s ", " 구독 관리 - 구글 플레이스 검색 웹사이트 방문 위치 선택 현위치 선택 @@ -495,15 +490,12 @@ 부적합한 백업 파일 새 할일을 가장 위로 아이콘 - Tasks는 여러분의 도움이 필요합니다! 업그레이드, 다운그레이드, 구독 취소 현재 구독 구독 복원 구독 다운그레이드 구독 업그레이드 구독 취소 - Tasks는 광고를 게시하거나 개인정보를 판매하지 않는 리브레 오픈소스 소프트웨어입니다 - 개발을 후원하고 부가 기능을 사용할 수 있도록 지금 구독하기 구독 금액 정하기 매월 매년 @@ -528,7 +520,6 @@ \"%s\" 생성 암호화 비밀번호 필수 암호화 비밀번호 - EteSync 동기화 이 기능을 사용하려면 구독해야 합니다 플랫폼 선택 기본 서비스는 구글 계정과 동기화합니다 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 533a78dac..63303991c 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -449,11 +449,6 @@ sukonfigūruota tinkamai. Sąskaita negalima. Patikrinkite savo įrenginį. Apie Tasks yra nemokama ir atviro kodo programinė įranga, licencijuota pagal GNU General Public License v3.0 licenciją. - Papildomos temos - CalDAV sinchronizacija - Kelios Google Task paskyros - Paieška Google Places - Tasker įskiepiai Dashclock plėtinys Reikalinga \"pro\" prenumerata Atsijungti diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index ad26a8c55..2187882a4 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -459,11 +459,6 @@ Fakturering utilgjengelig. Sjekk din enhet. Om Tasks er fri programvare, lisensiert med GNU General Public-lisens v3.0 - Ytterligere drakter og ikoner - CalDAV-synkronisering - Flerfoldige Google Task-kontoer - Google Places-søk - Tasker-programtillegg Dashclock-utvidelse Krever pro-abonnement Logg ut @@ -498,15 +493,12 @@ Ugyldig sikkerhetskopifil Nye oppgaver øverst Ikon - Tasks trenger din støtte. Oppgrader, nedgrader eller avbryt ditt abonnement Nåværende abonnement Gjenopprett abonnement Nedgrader abonnement Oppgrader abonnement Avbryt abonnement - Tasks er fri programvare som ikke viser reklame eller selger din personvernsinfo - Abonner nå for å støtte utviklingen og låse opp ytterligere funksjoner Betal det du vil Månedlig Årlig @@ -534,7 +526,6 @@ Krypteringspassord kreves Krypteringspassord Visningsnavn - EteSynk-synkronisering Denne funksjonen krever abonnement Velg en plattform Enkel tjeneste som synkroniserer med din Google-konto diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 26079882c..1531d4cf7 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -441,10 +441,6 @@ Betaling onmogelijk. Controleer je apparaat. Over Tasks is vrije open-source software, gelicensieerd onder de GNU General Public License v3.0 - Extra thema\'s en icons - CalDAV synchroniseren - Meerdere Google Task accounts - Google Plaatsen zoeken Dashclock extentie Pro aanmelding vereist Uitloggen @@ -485,16 +481,12 @@ Filters Filter Accent - Tasker plugins - Tasks heeft je ondersteuning nodig! Aanmelden, afmelden of annuleer je aanmelding Huidige abonnement Abonnement herstellen Terugdraaien abonnement Abonnement upgraden Abonnement annuleren - Tasks is vrije open-source software zonder advertenties of het doorverkopen van Je persoonlijke gegevens - Meld je nu aan om de verdere ontwikkeling te ondersteunen en krijg extra functionaliteiten Bepaal je prijs Maandelijks Jaarlijks @@ -527,7 +519,6 @@ Coderingswachtwoord vereist Coderingswachtwoord Weergavenaam - EteSync synchronisatie Deze functionaliteit vereist een abonnement Selecteer een platform Basisservice die synchroniseert met uw Google-account diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 1c6a3e40b..e13051173 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -462,10 +462,6 @@ Płatność niedostępna. Sprawdź swoje urządzenie. O Tasks jest aplikacją darmową/libre z otwartym kodem źródłowym, na licencji GNU General Public License v3.0 - Dodatkowe motywy i ikony - Synchronizacja CalDAV - Wiele kont Google Task - Wyszukiwanie w Google Places Wymaga subskrypcji pro Wyloguj Wyloguj z %s? Wszystkie dane z tego konta zostaną usunięte z urządzenia @@ -501,21 +497,17 @@ Błąd: %s ", " Nie znaleziono zestawu domowego - Wtyczki do Tasker Rozszerzenie do Dashclock Pokaż listy Nieprawidłowy plik kopii zapasowej Nowe zadania na górze Ikona - Tasks potrzebuje Twojego wsparcia! Podwyższyć, obniżyć poziom albo anulować subskrypcję Aktualna subskrypcja Przywróć subskrypcję Obniżyć poziom subskrypcji Podwyższyć poziom subskrypcji Anuluj subskrypcję - Tasks to aplikacja darmową/libre z otwartym kodem źródłowym, która nie wyświetla reklam ani nie sprzedaje Twojch danych osobowych - Subskrybuj teraz, aby wspierać rozwój aplikacji i odblokować dodatkowe funkcje Nazwij swoją cenę Miesięczne Rocznie @@ -543,7 +535,6 @@ Wymagane hasło szyfrowania Hasło szyfrowania Imię - Synchronizacja EteSync Ta funkcja wymaga subskrypcji Wybierz platformę Podstawowy serwis, synchronizujący dane z Twoim kontem Google diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 502512865..789c925c8 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -450,10 +450,6 @@ aplicativo Google Play está configurado corretamente Faturamento indisponível. Por favor cheque seu dispositivo Sobre Tasks é um software livre e de código aberto licenciado sob a Licença Pública Geral GNU v3.0 - Temas adicionais - Sincronização CalDAV - Múltiplas contas do Google Tarefas - Plugins do Tasker Extensão Dashclock Requer subscrição Pro Sair diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index e20f46b87..079d1ed43 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -400,7 +400,6 @@ terceiro quarto último - Temas adicionais Cópias de segurança Ligar Abrir diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index ee8665509..8befd8f42 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -470,10 +470,6 @@ Оплата невозможна. Проверьте ваше устройство. О программе Tasks является свободным программным обеспечением с открытым исходным кодом, лицензированным под GNU General Public License v3.0 - Дополнительные темы и иконки - Синхронизация CalDAV - Несколько учётных записей Google Task - Плагины для Tasker Расширение для Dashclock Требуется версия Про Отключиться @@ -503,7 +499,6 @@ Выберите новое местоположение Неверный файл резервной копии Иконка - Tasks нуждается в вашей поддержке! Текущая подписка Восстановить подписку Отменить подписку @@ -511,14 +506,11 @@ URL Ошибка: %s ", " - Поиск в Google Places Показать списки Генерация уведомлений Повысить, понизить уровень подписки или отменить ее Понизить уровень подписки Повысить уровень подписки - Tasks - это свободное программное обеспечение с открытым исходным кодом, которое не показывает рекламу и не продает вашу личную информацию - Подпишитесь сейчас, чтобы поддержать разработку и разблокировать дополнительные функции Ручная сортировка Временно показывать задачи после завершения Задачи будут временно видны в списке после завершения @@ -549,7 +541,6 @@ Требуется пароль шифрования Пароль шифрования Имя - Синхронизация EteSync Эта функция требует подписки Выберите платформу Простой сервис, который синхронизируется с Вашим аккаунтом Google diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index ac5a0fb1c..dfa3e0ad1 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -449,11 +449,6 @@ Google Play je správne nastavená Platba nedostupná. Skontrolujte svoje zariadenie. O Úlohy je bezplatný softvér s otvoreným kódom pod GNU Public Licence v3.0 - Ďaľšie témy - CaIDAV synchronizácia - Viac účtov Google Task - Miesta Google vyhľadanie - Zásuvný modul Tasker Rozšírenie Dashclock Vyžaduje platenú verziu pro Odhlásiť sa diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 27c84ef1e..b912d025a 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -279,7 +279,6 @@ Inga kalendrar hittades Inställningar för widget Rensa bort slutförda uppgifter? - Ytterligare teman och ikoner Ring Öppna förfallodatum @@ -453,10 +452,6 @@ Faktureringen är inte tillgänglig. Kontrollera din enhet. Om Tasks är Libre Open-Source programvara, licensierad under GNU General Public License v 3.0 - CalDAV-synkronisering - Flera Google-Tasks-konton - Google platssökning - Taskertillägg DashClock extension Kräver Pro-prenumeration Logga ut @@ -491,15 +486,12 @@ Ogiltig säkerhetskopia Nya uppgifter överst Ikon - Tasks behöver ditt stöd! Uppgradera, nedgradera eller Avbryt prenumerationen Hantera prenumerationer Återställ prenumeration Nedgradera prenumeration Uppgradera prenumerationen Avbryt prenumeration - Tasks är Libre programvara med öppen källkod som inte visar annonser eller säljer dina personuppgifter - Prenumerera nu för att stödja utveckling och låsa upp ytterligare funktioner Namnge ditt pris Månadsvis Årligen diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index e6cedd7d4..845f5c769 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -454,11 +454,6 @@ Faturalama kullanılabilir değil. Lütfen aygıtınızı denetleyin. Hakkında Tasks özgür açık kaynaklı yazılımdır, GNU Genel Kamu Lisansı sürüm 3.0 altında lisanslanmıştır - Ek gövdeler ve simgeler - CalDAV eşzamanlama - Çoklu Google Görev hesabı - Google Yerler araması - Tasker eklentileri Dashclock eklentisi Pro aboneliği gerektirir Oturumu kapat @@ -497,15 +492,12 @@ Hata: %s ", " Simge - Tasks, desteğinize gereksiniyor! Aboneliğinizi yükseltin, alçaltın veya iptal edin Geçerli abonelik Aboneliği geri getir Aboneliği alçalt Aboneliği yükselt Aboneliği iptal et - Tasks, kişisel bilginizi satmayan ve reklam göstermeyen özgür açık kaynaklı yazılımdır - Gelişimi desteklemek ve ek özelliklerin kilidini kaldırmak için şimdi abone olun Fiyat belirleyin Aylık Yıllık diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 5bbb153e7..c13ded38a 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -452,11 +452,6 @@ Оплата недоступна. Перевірте ваш пристрій Про Tasks Tasks є програмою з відкритим кодом з ліцензією GNU General Public License v3.0 - Додаткові схеми - Синхронізація CalDAV - Декілька облікових записів Google Tasks - Пошук в Google Місця - Tasker плагіни Розширення Dashclock Потребує преміум підписки Вийти diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index cda091ebe..b49d4e8ca 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -434,10 +434,6 @@ 帐单不可用。请检查你的设备。 关于 Tasks是遵循GNU通用公共许可证v3.0许可证的开源软件 - 其他主题和图标 - CalDAV同步 - 多Google Taks帐户 - Tasker 插件 Dashclock扩展 需要订阅专业版 登出 @@ -463,7 +459,6 @@ 半径 %s 米 管理订阅 - Google Place搜索 抵达时提醒 离开时提醒 访问网站 @@ -486,15 +481,12 @@ 无效的备份文件 新任务显示在顶部 图标 - Tasks需要您的支持! 升级,降级或取消您的订阅 当前订阅 恢复订阅 降级订阅 升级订阅 取消订阅 - Tasks是不显示广告或销售您个人信息的自由开源软件 - 现在订阅支持开发并解锁额外功能 您愿意支付多少费用 每月 每年 @@ -523,7 +515,6 @@ 需要加密密码 加密密码 显示名称 - EteSync 同步 该功能需要订阅 选择平台 与您的谷歌账户同步的基本服务 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 59149916c..fe9865921 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -218,7 +218,6 @@ 每月 每年 每 %s 重複 - 其他主題 輸入過濾名稱 您要放棄更改嗎? 繼續編輯 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ca3d28ebe..009dbcc1a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -471,7 +471,6 @@ File %1$s contained %2$s.\n\n Connection failed Only on unmetered connections Upgrade to pro - Tasks needs your support! Manage subscription Upgrade, downgrade, or cancel your subscription Refresh purchases @@ -487,14 +486,6 @@ File %1$s contained %2$s.\n\n Billing unavailable. Please check your device. About Tasks is libre open-source software, licensed under the GNU General Public License v3.0 - Tasks is libre open-source software that does not display advertisements or sell your personal information - Subscribe now to support development and unlock additional features - Additional themes and icons - CalDAV synchronization - EteSync synchronization - Multiple Google Task accounts - Google Places search - Tasker plugins Dashclock extension Requires pro subscription This feature requires a subscription @@ -563,4 +554,9 @@ File %1$s contained %2$s.\n\n Ringtone, vibrations, and more Invalid username or password Color wheel + Hi! My name is Alex. I am the independent developer behind Tasks + 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 + Choose any subscription price below to start your free trial. You may cancel at any time + Your support means a lot to me, thank you! + Back diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 75a32c73d..2ea0ffdf7 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -171,7 +171,7 @@ @color/button_accent_text @color/button_accent_background @color/button_accent_ripple - @color/button_accent_stroke + @color/button_selected_accent_stroke