Twidere-App-Android-Twitter.../twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ExtraFeaturesIntroductionDi...

133 lines
5.0 KiB
Kotlin
Raw Normal View History

package org.mariotaku.twidere.fragment
2017-01-18 18:48:29 +01:00
import android.app.Activity
import android.app.Dialog
2017-01-18 18:48:29 +01:00
import android.content.DialogInterface
import android.content.Intent
import android.os.Bundle
2020-01-26 08:35:15 +01:00
import androidx.fragment.app.FragmentManager
import androidx.appcompat.app.AlertDialog
2016-12-26 04:25:55 +01:00
import android.view.View
2017-06-19 15:45:41 +02:00
import kotlinx.android.synthetic.main.dialog_extra_features_introduction.*
2017-01-09 06:16:23 +01:00
import org.mariotaku.ktextension.Bundle
import org.mariotaku.ktextension.set
import org.mariotaku.twidere.R
2017-01-07 11:02:32 +01:00
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_REQUEST_CODE
2017-02-05 14:42:20 +01:00
import org.mariotaku.twidere.extension.applyTheme
2017-06-19 15:45:41 +02:00
import org.mariotaku.twidere.extension.onShow
2017-01-07 12:16:17 +01:00
import org.mariotaku.twidere.model.analyzer.PurchaseConfirm
import org.mariotaku.twidere.model.analyzer.PurchaseFinished
import org.mariotaku.twidere.model.analyzer.PurchaseIntroduction
import org.mariotaku.twidere.util.Analyzer
2017-01-01 16:28:00 +01:00
import org.mariotaku.twidere.util.premium.ExtraFeaturesService
/**
* Show extra features introduction
* Created by mariotaku on 2016/12/25.
*/
class ExtraFeaturesIntroductionDialogFragment : BaseDialogFragment() {
2016-12-26 04:25:55 +01:00
2020-01-26 08:35:15 +01:00
val feature: String get() = arguments?.getString(EXTRA_FEATURE)!!
val source: String? get() = arguments?.getString(EXTRA_SOURCE)
val requestCode: Int get() = arguments?.getInt(EXTRA_REQUEST_CODE, 0) ?: 0
2017-01-09 06:16:23 +01:00
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val builder = AlertDialog.Builder(requireContext())
builder.setTitle(R.string.title_extra_features)
builder.setView(R.layout.dialog_extra_features_introduction)
builder.setPositiveButton(R.string.action_purchase) { _, _ ->
2017-01-09 06:16:23 +01:00
startPurchase(feature)
2017-01-07 12:16:17 +01:00
Analyzer.log(PurchaseConfirm(PurchaseFinished.NAME_EXTRA_FEATURES))
}
builder.setNegativeButton(R.string.action_later) { _, _ ->
2017-01-18 18:48:29 +01:00
onDialogCancelled()
}
val restorePurchaseIntent = extraFeaturesService.createRestorePurchaseIntent(requireContext(), feature)
2016-12-26 04:25:55 +01:00
if (restorePurchaseIntent != null) {
builder.setNeutralButton(R.string.action_restore_purchase) { _, _ ->
2017-01-18 18:48:29 +01:00
startActivityForResultOnTarget(restorePurchaseIntent)
2016-12-26 04:25:55 +01:00
}
}
val dialog = builder.create()
2017-06-19 15:45:41 +02:00
dialog.onShow {
2017-02-05 14:42:20 +01:00
it.applyTheme()
2017-06-19 15:45:41 +02:00
it.restorePurchaseHint.visibility = if (restorePurchaseIntent != null) {
2016-12-26 04:25:55 +01:00
View.VISIBLE
} else {
View.GONE
}
val description = ExtraFeaturesService.getIntroduction(requireContext(), feature)
2017-06-19 15:45:41 +02:00
val featureIcon = it.featureIcon
val featureDescription = it.featureDescription
2017-01-09 06:16:23 +01:00
featureIcon.setImageResource(description.icon)
featureDescription.text = description.description
2017-06-19 15:45:41 +02:00
it.buyFeaturesPack.setOnClickListener {
2017-01-09 06:16:23 +01:00
startPurchase(ExtraFeaturesService.FEATURE_FEATURES_PACK)
dismiss()
}
}
2017-01-07 12:16:17 +01:00
if (savedInstanceState == null) {
Analyzer.log(PurchaseIntroduction(feature, source))
2017-01-07 12:16:17 +01:00
}
2016-12-26 04:25:55 +01:00
return dialog
}
2017-01-09 06:16:23 +01:00
2020-01-26 08:35:15 +01:00
override fun onCancel(dialog: DialogInterface) {
2017-01-18 18:48:29 +01:00
onDialogCancelled()
}
private fun onDialogCancelled() {
if (targetRequestCode != 0) {
targetFragment?.onActivityResult(targetRequestCode, Activity.RESULT_CANCELED, null)
}
}
2017-01-09 06:16:23 +01:00
private fun startPurchase(feature: String) {
2020-01-26 08:35:15 +01:00
val currentContext = context ?: return
val purchaseIntent = extraFeaturesService.createPurchaseIntent(currentContext, feature) ?: return
2017-01-18 18:48:29 +01:00
startActivityForResultOnTarget(purchaseIntent)
}
private fun startActivityForResultOnTarget(intent: Intent) {
2020-06-09 02:21:48 +02:00
when {
targetFragment != null -> {
targetFragment?.startActivityForResult(intent, targetRequestCode)
}
requestCode == 0 -> {
startActivity(intent)
}
parentFragment != null -> {
parentFragment?.startActivityForResult(intent, requestCode)
}
else -> {
activity?.startActivityForResult(intent, requestCode)
}
2017-01-09 06:16:23 +01:00
}
}
companion object {
const val EXTRA_FEATURE = "feature"
const val EXTRA_SOURCE = "source"
const val FRAGMENT_TAG = "extra_features_introduction"
fun create(feature: String, source: String? = null, requestCode: Int = 0):
ExtraFeaturesIntroductionDialogFragment {
2017-01-09 06:16:23 +01:00
val df = ExtraFeaturesIntroductionDialogFragment()
df.arguments = Bundle {
this[EXTRA_FEATURE] = feature
this[EXTRA_SOURCE] = source
2017-01-09 06:16:23 +01:00
this[EXTRA_REQUEST_CODE] = requestCode
}
return df
}
fun show(fm: FragmentManager, feature: String, source: String? = null, requestCode: Int = 0):
ExtraFeaturesIntroductionDialogFragment {
val df = create(feature, source, requestCode)
df.show(fm, FRAGMENT_TAG)
2017-01-09 06:16:23 +01:00
return df
}
}
}