Display What's New dialog after upgrade

pull/996/head
Alex Baker 4 years ago
parent b9e045574f
commit 4d17a290fd

@ -7,4 +7,6 @@ class Firebase @Inject constructor() {
fun reportException(t: Throwable) = Timber.e(t)
fun updateRemoteConfig() {}
fun noChurn() = true
}

@ -8,6 +8,7 @@ import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.google.firebase.remoteconfig.ktx.remoteConfigSettings
import io.fabric.sdk.android.Fabric
import org.tasks.R
import org.tasks.billing.BillingClientImpl
import org.tasks.injection.ApplicationScope
import org.tasks.injection.ForApplication
@ -50,6 +51,8 @@ class Firebase @Inject constructor(@ForApplication context: Context?, preference
}
}
fun noChurn(): Boolean = remoteConfig?.getBoolean("no_churn") ?: false
init {
if (enabled) {
analytics = FirebaseAnalytics.getInstance(context!!)
@ -60,6 +63,7 @@ class Firebase @Inject constructor(@ForApplication context: Context?, preference
minimumFetchIntervalInSeconds =
TimeUnit.HOURS.toSeconds(WorkManager.REMOTE_CONFIG_INTERVAL_HOURS)
})
remoteConfig?.setDefaultsAsync(R.xml.remote_config_defaults)
}
}
}

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<defaultsMap xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingDefaultResource">
<entry>
<key>no_churn</key>
<value>false</value>
</entry>
</defaultsMap>

@ -47,6 +47,7 @@ import org.tasks.billing.Inventory;
import org.tasks.data.Place;
import org.tasks.databinding.TaskListActivityBinding;
import org.tasks.dialogs.SortDialog;
import org.tasks.dialogs.WhatsNewDialog;
import org.tasks.filters.PlaceFilter;
import org.tasks.fragments.CommentBarFragment;
import org.tasks.gtasks.PlayServices;
@ -82,6 +83,7 @@ public class MainActivity extends InjectingAppCompatActivity
public static final String CREATE_TASK = "open_task"; // $NON-NLS-1$
public static final String OPEN_TASK = "open_new_task"; // $NON-NLS-1$
private static final String FRAG_TAG_TASK_LIST = "frag_tag_task_list";
private static final String FRAG_TAG_WHATS_NEW = "frag_tag_whats_new";
private static final String EXTRA_FILTER = "extra_filter";
@Inject Preferences preferences;
@ -350,6 +352,16 @@ public class MainActivity extends InjectingAppCompatActivity
}
disposables = new CompositeDisposable(playServices.check(this));
if (preferences.getBoolean(R.string.p_just_updated, false)) {
if (preferences.getBoolean(R.string.p_show_whats_new, true)) {
FragmentManager fragmentManager = getSupportFragmentManager();
if (fragmentManager.findFragmentByTag(FRAG_TAG_WHATS_NEW) == null) {
new WhatsNewDialog().show(fragmentManager, FRAG_TAG_WHATS_NEW);
}
}
preferences.setBoolean(R.string.p_just_updated, false);
}
}
@Override

@ -125,6 +125,7 @@ public class Upgrader {
preferences.setBoolean(R.string.p_auto_dismiss_datetime_edit_screen, true);
});
run(from, V8_10, this::migrateWidgets);
preferences.setBoolean(R.string.p_just_updated, true);
}
preferences.setCurrentVersion(to);
}

@ -0,0 +1,93 @@
package org.tasks.dialogs
import android.app.Dialog
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.widget.TextView
import butterknife.BindView
import butterknife.ButterKnife
import butterknife.OnClick
import com.google.android.material.button.MaterialButton
import org.tasks.BuildConfig
import org.tasks.R
import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity
import org.tasks.injection.DialogFragmentComponent
import org.tasks.injection.InjectingDialogFragment
import org.tasks.preferences.Preferences
import javax.inject.Inject
class WhatsNewDialog : InjectingDialogFragment() {
@Inject lateinit var dialogBuilder: DialogBuilder
@Inject lateinit var firebase: Firebase
@Inject lateinit var preferences: Preferences
@Inject lateinit var inventory: Inventory
@BindView(R.id.changelog) lateinit var changelog: TextView
@BindView(R.id.action_question) lateinit var actionQuestion: TextView
@BindView(R.id.action_text) lateinit var actionText: TextView
@BindView(R.id.action_button) lateinit var actionButton: MaterialButton
@BindView(R.id.dismiss_button) lateinit var dismissButton: MaterialButton
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val view: View = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_whats_new, null)
ButterKnife.bind(this, view)
val entries = resources.getStringArray(R.array.changelog).joinToString("\n\n") { "\u2022 $it" }
val text = "$entries\n\nVisit https://tasks.org/changelog for more info"
changelog.text = text
@Suppress("ConstantConditionIf")
if (BuildConfig.FLAVOR == "generic") {
actionText.text = getString(R.string.upgrade_blurb_4)
actionButton.text = getString(R.string.TLA_menu_donate)
actionButton.setOnClickListener { onDonateClick() }
} else if (firebase.noChurn() && !preferences.getBoolean(R.string.p_clicked_rate, false)) {
actionButton.text = getString(R.string.rate_tasks)
actionButton.setOnClickListener { onRateClick() }
} else if (firebase.noChurn() && !inventory.hasPro()) {
actionText.text = getString(R.string.support_development_subscribe)
actionButton.text = getString(R.string.button_subscribe)
actionButton.setOnClickListener { onSubscribeClick() }
} else {
actionQuestion.visibility = View.GONE
actionText.visibility = View.GONE
actionButton.visibility = View.GONE
dismissButton.text = getString(R.string.got_it)
}
if (!resources.getBoolean(R.bool.whats_new_action)) {
actionText.visibility = View.GONE
}
return dialogBuilder.newDialog(R.string.whats_new_in_version, BuildConfig.VERSION_NAME)
.setView(view)
.show()
}
private fun onSubscribeClick() {
dismiss()
startActivity(Intent(context, PurchaseActivity::class.java))
}
private fun onRateClick() {
preferences.setBoolean(R.string.p_clicked_rate, true)
dismiss()
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.market_url))))
}
private fun onDonateClick() {
dismiss()
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://tasks.org/donate")))
}
@OnClick(R.id.dismiss_button)
fun onDismissClick() = dismiss()
override fun inject(component: DialogFragmentComponent) = component.inject(this)
}

@ -15,6 +15,7 @@ import org.tasks.dialogs.NewFilterDialog;
import org.tasks.dialogs.RecordAudioDialog;
import org.tasks.dialogs.SortDialog;
import org.tasks.dialogs.ThemePickerDialog;
import org.tasks.dialogs.WhatsNewDialog;
import org.tasks.locale.LocalePickerDialog;
import org.tasks.reminders.NotificationDialog;
import org.tasks.reminders.SnoozeDialog;
@ -61,4 +62,6 @@ public interface DialogFragmentComponent {
void inject(DateTimePicker dateTimePicker);
void inject(NewFilterDialog newFilterDialog);
void inject(WhatsNewDialog whatsNewDialog);
}

@ -3,14 +3,18 @@ package org.tasks.preferences.fragments
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import androidx.fragment.app.FragmentManager
import org.tasks.BuildConfig
import org.tasks.R
import org.tasks.billing.BillingClient
import org.tasks.billing.Inventory
import org.tasks.dialogs.WhatsNewDialog
import org.tasks.injection.FragmentComponent
import org.tasks.injection.InjectingPreferenceFragment
import javax.inject.Inject
private val FRAG_TAG_WHATS_NEW = "frag_tag_whats_new"
class HelpAndFeedback : InjectingPreferenceFragment() {
@Inject lateinit var billingClient: BillingClient
@ -19,8 +23,15 @@ class HelpAndFeedback : InjectingPreferenceFragment() {
override fun getPreferenceXml() = R.xml.help_and_feedback
override fun setupPreferences(savedInstanceState: Bundle?) {
findPreference(R.string.changelog).summary =
getString(R.string.version_string, BuildConfig.VERSION_NAME)
val whatsNew = findPreference(R.string.whats_new)
whatsNew.summary = getString(R.string.version_string, BuildConfig.VERSION_NAME)
whatsNew.setOnPreferenceClickListener {
val fragmentManager: FragmentManager = parentFragmentManager
if (fragmentManager.findFragmentByTag(FRAG_TAG_WHATS_NEW) == null) {
WhatsNewDialog().show(fragmentManager, FRAG_TAG_WHATS_NEW)
}
true
}
findPreference(R.string.contact_developer)
.setOnPreferenceClickListener {

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<ScrollView
android:id="@+id/scrollView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constrainedHeight="true"
app:layout_constraintHeight_max="@dimen/whats_new_height">
<TextView
android:id="@+id/changelog"
style="@style/TextAppearance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="all"
android:padding="@dimen/keyline_first" />
</ScrollView>
<LinearLayout
android:id="@+id/action_block"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@+id/scrollView2">
<View style="@style/horizontal_divider" />
<TextView
android:id="@+id/action_question"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/keyline_first"
android:text="@string/enjoying_tasks"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6" />
<TextView
android:id="@+id/action_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingStart="@dimen/keyline_first"
android:paddingEnd="@dimen/keyline_first"
android:text="@string/tell_me_how_im_doing"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance" />
<com.google.android.material.button.MaterialButton
android:id="@+id/action_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/keyline_first"
android:layout_marginStart="@dimen/keyline_first"
android:layout_marginEnd="@dimen/keyline_first"
android:textColor="?attr/colorOnSecondary"
app:backgroundTint="?attr/colorSecondary"
tools:text="@string/rate_tasks" />
<com.google.android.material.button.MaterialButton
android:id="@+id/dismiss_button"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/keyline_first"
android:layout_marginEnd="@dimen/keyline_first"
android:text="@string/no_thanks"
android:textColor="@color/text_secondary" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

@ -472,7 +472,6 @@
<string name="open_map">Отворете картата</string>
<string name="choose_new_location">Изберете ново местоположение</string>
<string name="third_party_licenses">Лицензи на трети страни</string>
<string name="changelog">Дневник на промените</string>
<string name="version_string">Версия %s</string>
<string name="invalid_backup_file">Невалиден резервен файл</string>
<string name="google_tasks_add_to_top">Нови задачи отгоре</string>

@ -501,7 +501,6 @@
<string name="open_map">Otevřít mapu</string>
<string name="choose_new_location">Vybrat novou polohu</string>
<string name="third_party_licenses">Licence třetích stran</string>
<string name="changelog">Seznam změn</string>
<string name="version_string">Verze %s</string>
<string name="invalid_backup_file">Neplatný soubor zálohy</string>
<string name="google_tasks_add_to_top">Nové úkoly na vrchu</string>

@ -464,7 +464,6 @@
<string name="open_map">Karte öffnen</string>
<string name="choose_new_location">Neuen Ort auswählen</string>
<string name="third_party_licenses">Drittsoftware-Lizenzen</string>
<string name="changelog">Änderungshistorie</string>
<string name="invalid_backup_file">Ungültige Backupdatei</string>
<string name="google_tasks_add_to_top">Neue Aufgaben oben</string>
<string name="backup_BPr_header">Sicherungen</string>

@ -472,7 +472,6 @@
<string name="open_map">Abrir mapa</string>
<string name="choose_new_location">Escoger nueva ubicación</string>
<string name="third_party_licenses">Licencias de terceros</string>
<string name="changelog">Registro de cambios</string>
<string name="version_string">Versión %s</string>
<string name="invalid_backup_file">Copia de seguridad no válida</string>
<string name="google_tasks_add_to_top">Nuevas tareas encima</string>

@ -282,7 +282,6 @@
<string name="missing_permissions">Puuduvad õigused</string>
<string name="open_map">Ava kaart</string>
<string name="choose_new_location">Vali uus asukoht</string>
<string name="changelog">Muudatuste nimekiri</string>
<string name="version_string">Versioon %s</string>
<string name="invalid_backup_file">Vigane varukoopia fail</string>
<string name="google_tasks_add_to_top">Uued ülesanded üleval</string>

@ -480,7 +480,6 @@
<string name="open_map">Ireki mapa</string>
<string name="choose_new_location">Hautatu kokaleku berria</string>
<string name="third_party_licenses">Hirugarrengoen lizentziak</string>
<string name="changelog">Aldaketa egunkaria</string>
<string name="version_string">%s bertsioa</string>
<string name="invalid_backup_file">Baliogabeko babes-kopia fitxategia</string>
<string name="google_tasks_add_to_top">Zeregin berriak goialdean</string>

@ -454,7 +454,6 @@
<string name="google_tasks_add_to_top">Uudet tehtävät huipulla</string>
<string name="invalid_backup_file">Epäsopiva varmuuskopiotiedosto</string>
<string name="version_string">Versio %s</string>
<string name="changelog">Muutosloki</string>
<string name="third_party_licenses">Kolmannen osapuolen lisenssit</string>
<string name="choose_new_location">Valitse uusi sijainti</string>
<string name="open_map">Avaa kartta</string>

@ -454,7 +454,6 @@
<string name="open_map">Ouvrir la carte</string>
<string name="choose_new_location">Choisir une nouvelle localisation</string>
<string name="third_party_licenses">Licences tierces</string>
<string name="changelog">Journal des changements</string>
<string name="invalid_backup_file">Fichier de récupération invalide</string>
<string name="google_tasks_add_to_top">Nouvelle tâche au dessus</string>
<string name="TEA_note_label">Description</string>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="whats_new_action">true</bool>
</resources>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="whats_new_height">250dp</dimen>
</resources>

@ -473,7 +473,6 @@
<string name="open_map">Térkép megnyitása</string>
<string name="choose_new_location">Új hely kiválasztása</string>
<string name="third_party_licenses">Harmadik fél licenszei</string>
<string name="changelog">Változások</string>
<string name="version_string">Verzió %s</string>
<string name="invalid_backup_file">Érvénytelen mentési file</string>
<string name="google_tasks_add_to_top">Az új feladatok felül</string>

@ -404,7 +404,6 @@
<string name="open_map">Buka peta</string>
<string name="choose_new_location">Pilih lokasi baru</string>
<string name="third_party_licenses">Lisensi pihak ketiga</string>
<string name="changelog">Catatan perubahan</string>
<string name="version_string">Versi %s</string>
<string name="invalid_backup_file">Berkas cadangan tidak valid</string>
<string name="google_tasks_add_to_top">Tugas baru di atas</string>

@ -533,7 +533,6 @@
<string name="enter_title_hint">Inserisci titolo</string>
<string name="collapse_subtasks">Nascondi sotto-attività</string>
<string name="name_your_price">Decidi tu il prezzo</string>
<string name="changelog">Changelog</string>
<string name="third_party_licenses">Licenze di terze parti</string>
<string name="this_feature_requires_a_subscription">Questa funzione richiede un abbonamento</string>
<string name="button_unsubscribe">Annulla abbonamento</string>

@ -509,7 +509,6 @@
<string name="open_map">פתיחת מפה</string>
<string name="choose_new_location">בחירת מיקום חדש</string>
<string name="third_party_licenses">רשיונות צד ג\'</string>
<string name="changelog">רישומון שינויים</string>
<string name="version_string">גירסה %s</string>
<string name="invalid_backup_file">קובץ גיבוי לא תקין</string>
<string name="google_tasks_add_to_top">משימות חדשות בראש הרשימה</string>

@ -470,7 +470,6 @@
<string name="open_map">地図を開く</string>
<string name="choose_new_location">新しい場所を選択</string>
<string name="third_party_licenses">サードパーティライセンス</string>
<string name="changelog">変更履歴</string>
<string name="version_string">バージョン %s</string>
<string name="invalid_backup_file">バックアップファイルが無効です</string>
<string name="google_tasks_add_to_top">新しいタスクを上に</string>

@ -477,7 +477,6 @@
<string name="open_map">지도 열기</string>
<string name="choose_new_location">새 위치 선택</string>
<string name="third_party_licenses">타사 라이센스</string>
<string name="changelog">변경이력</string>
<string name="version_string">버전 %s</string>
<string name="invalid_backup_file">부적합한 백업 파일</string>
<string name="google_tasks_add_to_top">새 할일을 가장 위로</string>

@ -469,7 +469,6 @@
<string name="open_map">Atidaryti žemėlapį</string>
<string name="choose_new_location">Pasirinkti naują vietą</string>
<string name="third_party_licenses">Trečiųjų šališ licenzijos</string>
<string name="changelog">Pakeitimų sąrašas</string>
<string name="version_string">Versija %s</string>
<string name="invalid_backup_file">Blogas atsarginės kopijos failas</string>
<string name="google_tasks_add_to_top">Naujos užduotys viršuje</string>

@ -480,7 +480,6 @@
<string name="open_map">Åpne kart</string>
<string name="choose_new_location">Velg nytt sted</string>
<string name="third_party_licenses">Tredjepartslisenser</string>
<string name="changelog">Endringslogg</string>
<string name="version_string">Versjon %s</string>
<string name="invalid_backup_file">Ugyldig sikkerhetskopifil</string>
<string name="google_tasks_add_to_top">Nye gjøremål øverst</string>

@ -462,7 +462,6 @@
<string name="open_map">Open kaart</string>
<string name="choose_new_location">Kies nieuwe locatie</string>
<string name="third_party_licenses">Third-party licensies</string>
<string name="changelog">Wijzigingenlijst</string>
<string name="version_string">Versie %s</string>
<string name="invalid_backup_file">Ongeldig backup bestand</string>
<string name="google_tasks_add_to_top">Nieuwe taken bovenaan</string>

@ -481,7 +481,6 @@
<string name="open_map">Otwórz mapę</string>
<string name="choose_new_location">Wybierz nową lokalizację</string>
<string name="third_party_licenses">Licencje innych podmiotów</string>
<string name="changelog">Lista zmian</string>
<string name="version_string">Wersja %s</string>
<string name="CFC_tag_text">Tag; \?</string>
<string name="location_radius_meters">%s m</string>

@ -484,7 +484,6 @@
<string name="map_provider">Поставщик системы карт</string>
<string name="map_search_provider">Поставщик системы поиска</string>
<string name="missing_permissions">Отсутствующие разрешения</string>
<string name="changelog">Список изменений</string>
<string name="version_string">Версия %s</string>
<string name="gtasks_GPr_header">Google Tasks</string>
<string name="open_map">Открыть карту</string>

@ -469,7 +469,6 @@
<string name="open_map">Otvoriť mapu</string>
<string name="choose_new_location">Zvoliť novú polohu</string>
<string name="third_party_licenses">Licencie tretích strán</string>
<string name="changelog">Zoznam zmien</string>
<string name="version_string">Verzia %s</string>
<string name="EPr_temp_show_completed_tasks">Dočasne Zobraziť úlohy po dokončení</string>
<string name="TEA_add_subtask">Pridať podúlohu</string>

@ -473,7 +473,6 @@
<string name="open_map">Öppna karta</string>
<string name="choose_new_location">Välj ny plats</string>
<string name="third_party_licenses">Licenser från tredje part</string>
<string name="changelog">Ändringslogg</string>
<string name="version_string">Version %s</string>
<string name="invalid_backup_file">Ogiltig säkerhetskopia</string>
<string name="google_tasks_add_to_top">Nya uppgifter överst</string>

@ -475,7 +475,6 @@
<string name="open_map">Haritayı</string>
<string name="choose_new_location">Yeni konum seç</string>
<string name="third_party_licenses">Üçüncü taraf lisanslar</string>
<string name="changelog">Değişim Günlüğü</string>
<string name="version_string">Sürüm %s</string>
<string name="invalid_backup_file">Geçersiz yedek dosyası</string>
<string name="google_tasks_add_to_top">Yeni görevler üstte</string>

@ -488,7 +488,6 @@
<string name="open_map">Відкрити карту</string>
<string name="choose_new_location">Обрати нове місце</string>
<string name="third_party_licenses">Ліцензії третіх сторін</string>
<string name="changelog">Історія змін</string>
<string name="version_string">Версія %s</string>
<string name="invalid_backup_file">Невірний формат файлу резервної копії</string>
<string name="google_tasks_add_to_top">Нові завдання зверху</string>

@ -468,7 +468,6 @@
<string name="open_map">打开地图</string>
<string name="choose_new_location">选择新位置</string>
<string name="third_party_licenses">第三方许可证</string>
<string name="changelog">更新日志</string>
<string name="version_string">版本号%s</string>
<string name="invalid_backup_file">无效的备份文件</string>
<string name="google_tasks_add_to_top">新任务显示在顶部</string>

@ -3,4 +3,5 @@
<bool name="two_pane_layout">false</bool>
<bool name="default_bundle_notifications">false</bool>
<bool name="is_dark">false</bool>
<bool name="whats_new_action">false</bool>
</resources>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="changelog">
<item>Display What\'s New after updates</item>
<item>Collapsible subtasks enabled by default</item>
<item>Show subtask chip even if list chips are disabled</item>
<item>Ignore location reminders for hidden or snoozed tasks</item>
<item>Indent subtasks in \'Share\' output</item>
<item>Minimum supported version is now Android 6.0</item>
<item>Update translations</item>
</string-array>
</resources>

@ -45,4 +45,5 @@
<dimen name="icon_picker_size">48dp</dimen>
<dimen name="list_item_spacing">8dp</dimen>
<dimen name="whats_new_height">150dp</dimen>
</resources>

@ -358,4 +358,7 @@
<string name="p_auto_dismiss_datetime_list_screen">auto_dismiss_datetime_list_screen</string>
<string name="p_auto_dismiss_datetime_widget">auto_dismiss_datetime_widget</string>
<string name="p_hide_check_button">Hide check button</string>
<string name="p_show_whats_new">show_whats_new</string>
<string name="p_just_updated">just_updated</string>
<string name="p_clicked_rate">clicked_rate</string>
</resources>

@ -524,7 +524,7 @@ File %1$s contained %2$s.\n\n
<string name="open_map">Open map</string>
<string name="choose_new_location">Choose new location</string>
<string name="third_party_licenses">Third-party licenses</string>
<string name="changelog">Changelog</string>
<string name="whats_new">What\'s New</string>
<string name="version_string">Version %s</string>
<string name="invalid_backup_file">Invalid backup file</string>
<string name="google_tasks_add_to_top">New tasks on top</string>
@ -620,4 +620,10 @@ File %1$s contained %2$s.\n\n
<string name="filter_eisenhower_box_2">Eisenhower box 2</string>
<string name="filter_eisenhower_box_3">Eisenhower box 3</string>
<string name="filter_eisenhower_box_4">Eisenhower box 4</string>
<string name="whats_new_in_version">What\'s New in Version %s</string>
<string name="enjoying_tasks">Enjoying Tasks?</string>
<string name="tell_me_how_im_doing">Please tell me how I\'m doing</string>
<string name="support_development_subscribe">Unlock additional features and support open source software</string>
<string name="no_thanks">No thanks</string>
<string name="got_it">Got it!</string>
</resources>

@ -2,6 +2,11 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Preference
android:key="@string/whats_new"
android:title="@string/whats_new"
app:icon="@drawable/ic_outline_new_releases_24px"/>
<Preference
android:title="@string/documentation"
app:icon="@drawable/ic_outline_help_outline_24px">
@ -24,19 +29,10 @@
android:data="@string/market_url" />
</Preference>
<Preference
android:key="@string/changelog"
android:title="@string/changelog"
app:allowDividerAbove="true"
app:icon="@drawable/ic_track_changes_24px">
<intent
android:action="android.intent.action.VIEW"
android:data="https://tasks.org/changelog" />
</Preference>
<Preference
android:summary="@string/license_summary"
android:title="@string/source_code"
app:allowDividerAbove="true"
app:icon="@drawable/ic_octocat">
<intent
android:action="android.intent.action.VIEW"

Loading…
Cancel
Save