mirror of https://github.com/tasks/tasks
Display What's New dialog after upgrade
parent
b9e045574f
commit
4d17a290fd
@ -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>
|
@ -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)
|
||||
}
|
@ -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>
|
@ -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>
|
@ -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>
|
Loading…
Reference in New Issue