Add openUri extension method

pull/1432/head
Alex Baker 3 years ago
parent b1c6c9b7cc
commit 0cbab11d2c

@ -7,7 +7,6 @@ package com.todoroo.astrid.activity
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.graphics.Paint
import android.graphics.drawable.ColorDrawable
import android.net.Uri
@ -50,6 +49,7 @@ import org.tasks.databinding.FragmentTaskEditBinding
import org.tasks.date.DateTimeUtils.newDateTime
import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.Linkify
import org.tasks.extensions.Context.openUri
import org.tasks.files.FileHelper
import org.tasks.fragments.TaskEditControlSetFragmentManager
import org.tasks.notifications.NotificationManager
@ -268,11 +268,7 @@ class TaskEditFragment : Fragment(), Toolbar.OnMenuItemClickListener {
taskListFragment.onTaskCreated(model.uuid)
if (!isNullOrEmpty(model.calendarURI)) {
taskListFragment.makeSnackbar(R.string.calendar_event_created, model.title)
?.setAction(R.string.action_open) {
val uri = model.calendarURI
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(uri))
taskListFragment.startActivity(intent)
}
?.setAction(R.string.action_open) { context.openUri(model.calendarURI) }
?.show()
}
}

@ -4,7 +4,6 @@ import android.app.Activity
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.MenuItem
import android.view.inputmethod.InputMethodManager
@ -41,6 +40,7 @@ import org.tasks.data.Filter
import org.tasks.data.FilterDao
import org.tasks.data.TaskDao.TaskCriteria.activeAndVisible
import org.tasks.db.QueryUtils
import org.tasks.extensions.Context.openUri
import org.tasks.filters.FilterCriteriaProvider
import org.tasks.locale.Locale
import java.util.*
@ -308,9 +308,7 @@ class FilterSettingsActivity : BaseListSettingsActivity() {
super.onMenuItemClick(item)
}
private fun help() {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://tasks.org/filters")))
}
private fun help() = openUri(R.string.url_filters)
private fun updateList() {
var max = 0

@ -14,7 +14,6 @@
package org.tasks.auth
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
@ -43,6 +42,7 @@ import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity
import org.tasks.billing.PurchaseActivity.Companion.EXTRA_GITHUB
import org.tasks.dialogs.DialogBuilder
import org.tasks.extensions.Context.openUri
import org.tasks.injection.InjectingAppCompatActivity
import org.tasks.themes.ThemeColor
import timber.log.Timber
@ -123,12 +123,7 @@ class SignInActivity : InjectingAppCompatActivity() {
dialogBuilder.newDialog()
.setTitle(R.string.sign_in_to_tasks)
.setNeutralButton(R.string.help) { _, _ ->
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(getString(R.string.help_url_sync))
)
)
openUri(R.string.help_url_sync)
finish()
}
.setNegativeButton(R.string.cancel) { _, _ ->

@ -1,8 +1,6 @@
package org.tasks.billing
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Handler
import androidx.lifecycle.MutableLiveData
import dagger.hilt.android.qualifiers.ApplicationContext
@ -11,6 +9,7 @@ import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.data.CaldavAccount.Companion.TYPE_TASKS
import org.tasks.data.CaldavDao
import org.tasks.extensions.Context.openUri
import org.tasks.preferences.Preferences
import timber.log.Timber
import java.util.*
@ -93,11 +92,7 @@ class Inventory @Inject constructor(
fun unsubscribe(context: Context): Boolean {
subscription.value?.let {
context.startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(context.getString(R.string.manage_subscription_url, it.sku)))
)
context.openUri(R.string.manage_subscription_url, it.sku)
}
return false
}

@ -32,6 +32,7 @@ import org.tasks.data.CaldavDao
import org.tasks.databinding.ActivityCaldavAccountSettingsBinding
import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.Linkify
import org.tasks.extensions.Context.openUri
import org.tasks.injection.ThemedInjectingAppCompatActivity
import org.tasks.security.KeyStoreEncryption
import org.tasks.ui.DisplayableException
@ -354,7 +355,7 @@ abstract class BaseCaldavAccountSettingsActivity : ThemedInjectingAppCompatActiv
override fun onMenuItemClick(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menu_help -> startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(helpUrl))))
R.id.menu_help -> openUri(helpUrl)
R.id.remove -> removeAccountPrompt()
}
return onOptionsItemSelected(item)

@ -1,7 +1,5 @@
package org.tasks.compose
import android.content.Intent
import android.net.Uri
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
@ -47,6 +45,7 @@ import org.tasks.Tasks.Companion.IS_GENERIC
import org.tasks.compose.Constants.HALF_KEYLINE
import org.tasks.compose.Constants.KEYLINE_FIRST
import org.tasks.compose.PurchaseText.PurchaseText
import org.tasks.extensions.Context.openUri
@Preview(showBackground = true, backgroundColor = 0xFFFFFF)
@Composable
@ -165,14 +164,7 @@ object PurchaseText {
fun SponsorButton() {
val context = LocalContext.current
OutlinedButton(
onClick = {
context.startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(context.getString(R.string.url_sponsor))
)
)
},
onClick = { context.openUri(R.string.url_sponsor) },
colors = ButtonDefaults.textButtonColors(
backgroundColor = MaterialTheme.colors.secondary,
contentColor = MaterialTheme.colors.onSecondary

@ -1,7 +1,6 @@
package org.tasks.data
import android.content.Context
import android.content.Intent
import android.location.Location
import android.net.Uri
import android.os.Parcel
@ -12,7 +11,7 @@ import com.todoroo.astrid.api.FilterListItem.NO_ORDER
import com.todoroo.astrid.helper.UUIDHelper
import net.fortuna.ical4j.model.property.Geo
import org.tasks.Strings
import org.tasks.extensions.Context.safeStartActivity
import org.tasks.extensions.Context.openUri
import org.tasks.location.MapPosition
import org.tasks.themes.CustomIcons.PLACE
import java.io.Serializable
@ -109,14 +108,8 @@ class Place : Serializable, Parcelable {
val displayAddress: String?
get() = if (Strings.isNullOrEmpty(address)) null else address!!.replace("$name, ", "")
fun open(context: Context?) {
context?.safeStartActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse("geo:$latitude,$longitude?q=${Uri.encode(displayName)}")
)
)
}
fun open(context: Context?) =
context?.openUri("geo:$latitude,$longitude?q=${Uri.encode(displayName)}")
val mapPosition: MapPosition
get() = MapPosition(latitude, longitude)

@ -3,7 +3,6 @@ package org.tasks.dialogs
import android.app.Dialog
import android.content.DialogInterface
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.text.method.LinkMovementMethod
import android.view.View
@ -16,6 +15,7 @@ import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory
import org.tasks.billing.PurchaseActivity
import org.tasks.databinding.DialogWhatsNewBinding
import org.tasks.extensions.Context.openUri
import org.tasks.preferences.Preferences
import java.io.BufferedReader
import javax.inject.Inject
@ -98,12 +98,12 @@ class WhatsNewDialog : DialogFragment() {
logClick(true)
preferences.setBoolean(R.string.p_clicked_rate, true)
dismiss()
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.market_url))))
context?.openUri(R.string.market_url)
}
private fun onDonateClick() {
dismiss()
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.url_donate))))
context?.openUri(R.string.url_donate)
}
override fun onCancel(dialog: DialogInterface) {

@ -2,7 +2,6 @@ package org.tasks.etesync
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.MenuItem
import android.view.View
@ -25,6 +24,7 @@ import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.CaldavAccount
import org.tasks.databinding.ActivityEtesyncEncryptionSettingsBinding
import org.tasks.extensions.Context.openUri
import org.tasks.injection.ThemedInjectingAppCompatActivity
import org.tasks.security.KeyStoreEncryption
import org.tasks.ui.DisplayableException
@ -174,7 +174,7 @@ class EncryptionSettingsActivity : ThemedInjectingAppCompatActivity(), Toolbar.O
override fun onMenuItemClick(item: MenuItem): Boolean {
return if (item.itemId == R.id.menu_help) {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.url_etesync))))
openUri(R.string.url_etesync)
true
} else {
onOptionsItemSelected(item)

@ -3,6 +3,8 @@ package org.tasks.extensions
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.content.Intent.ACTION_VIEW
import android.net.Uri
import android.widget.Toast
import org.tasks.R
@ -15,6 +17,11 @@ object Context {
}
}
fun Context.openUri(resId: Int, vararg formatArgs: Any) = openUri(getString(resId, formatArgs))
fun Context.openUri(url: String?) =
url?.let { safeStartActivity(Intent(ACTION_VIEW, Uri.parse(it))) }
fun Context.toast(resId: Int, vararg formatArgs: Any, duration: Int = Toast.LENGTH_LONG) =
toast(getString(resId, formatArgs), duration)

@ -1,7 +1,6 @@
package org.tasks.locale.ui.activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.MenuItem;
@ -14,6 +13,7 @@ import org.tasks.R;
import org.tasks.billing.Inventory;
import org.tasks.billing.PurchaseActivity;
import org.tasks.databinding.ActivityTaskerCreateBinding;
import org.tasks.extensions.Context;
import org.tasks.locale.bundle.TaskCreationBundle;
import javax.inject.Inject;
@ -133,8 +133,7 @@ public final class TaskerCreateTaskActivity extends AbstractFragmentPluginAppCom
@Override
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.menu_help) {
startActivity(
new Intent(Intent.ACTION_VIEW).setData(Uri.parse(getString(R.string.url_tasker))));
Context.INSTANCE.openUri(this, R.string.url_tasker);
return true;
}
return onOptionsItemSelected(item);

@ -1,7 +1,6 @@
package org.tasks.preferences.fragments
import android.content.*
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@ -27,6 +26,7 @@ import org.tasks.billing.Purchase
import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavAccount.Companion.isPaymentRequired
import org.tasks.data.CaldavDao
import org.tasks.extensions.Context.openUri
import org.tasks.extensions.Context.toast
import org.tasks.jobs.WorkManager
import org.tasks.locale.Locale
@ -121,10 +121,7 @@ class TasksAccount : BaseAccountPreference() {
}
.setCancelable(false)
.setNeutralButton(R.string.help) { _, _ ->
startActivity(Intent(
Intent.ACTION_VIEW,
Uri.parse(getString(R.string.url_app_passwords)))
)
context?.openUri(R.string.url_app_passwords)
}
.show()
}
@ -170,7 +167,7 @@ class TasksAccount : BaseAccountPreference() {
onPreferenceClickListener = null
} else {
setOnPreferenceClickListener {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.url_sponsor))))
context?.openUri(R.string.url_sponsor)
false
}
}

@ -2,8 +2,6 @@ package org.tasks.sync
import android.app.Dialog
import android.content.Intent
import android.content.Intent.ACTION_VIEW
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
@ -19,6 +17,7 @@ import org.tasks.auth.SignInActivity
import org.tasks.caldav.CaldavAccountSettingsActivity
import org.tasks.dialogs.DialogBuilder
import org.tasks.etebase.EtebaseAccountSettingsActivity
import org.tasks.extensions.Context.openUri
import org.tasks.extensions.Resources.getMutableIntList
import org.tasks.extensions.Resources.getMutableStringList
import org.tasks.preferences.fragments.MainSettingsFragment.Companion.REQUEST_CALDAV_SETTINGS
@ -70,27 +69,18 @@ class AddAccountDialog : DialogFragment() {
1 -> activity?.startActivityForResult(
Intent(activity, GtasksLoginActivity::class.java),
REQUEST_GOOGLE_TASKS)
2 -> activity?.startActivity(
Intent(ACTION_VIEW, Uri.parse(getString(R.string.url_davx5))))
2 -> activity?.openUri(R.string.url_davx5)
3 -> activity?.startActivityForResult(
Intent(activity, CaldavAccountSettingsActivity::class.java),
REQUEST_CALDAV_SETTINGS)
4 -> activity?.startActivityForResult(
Intent(activity, EtebaseAccountSettingsActivity::class.java),
REQUEST_CALDAV_SETTINGS)
5 -> activity?.startActivity(
Intent(ACTION_VIEW, Uri.parse(getString(R.string.url_decsync))))
5 -> activity?.openUri(R.string.url_decsync)
}
dialog.dismiss()
}
.setNeutralButton(R.string.help) { _, _ ->
activity?.startActivity(
Intent(
ACTION_VIEW,
Uri.parse(context?.getString(R.string.help_url_sync))
)
)
}
.setNeutralButton(R.string.help) { _, _ -> activity?.openUri(R.string.help_url_sync) }
.setNegativeButton(R.string.cancel, null)
.show()
}

@ -21,6 +21,7 @@ import org.tasks.data.Location
import org.tasks.data.Place
import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.GeofenceDialog
import org.tasks.extensions.Context.openUri
import org.tasks.location.LocationPermissionDialog.Companion.newLocationPermissionDialog
import org.tasks.location.LocationPickerActivity
import org.tasks.preferences.Device
@ -147,9 +148,7 @@ class LocationControlSet : TaskEditControlFragment() {
override val isClickable = true
private fun openWebsite() {
viewModel.selectedLocation?.let {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(it.url)))
}
viewModel.selectedLocation?.let { context?.openUri(it.url) }
}
private fun call() {

@ -5,7 +5,6 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.graphics.Rect
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@ -27,6 +26,7 @@ import org.tasks.R
import org.tasks.billing.PurchaseActivity
import org.tasks.data.TaskDao
import org.tasks.dialogs.NewFilterDialog.Companion.newFilterDialog
import org.tasks.extensions.Context.openUri
import org.tasks.filters.FilterProvider
import org.tasks.filters.NavigationDrawerAction
import org.tasks.intents.TaskIntents
@ -85,7 +85,7 @@ class NavigationDrawerFragment : Fragment() {
when (item.requestCode) {
REQUEST_PURCHASE ->
startActivity(Intent(context, PurchaseActivity::class.java))
REQUEST_DONATE -> startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.url_donate))))
REQUEST_DONATE -> context?.openUri(R.string.url_donate)
REQUEST_NEW_FILTER -> newFilterDialog().show(parentFragmentManager, FRAG_TAG_NEW_FILTER)
else -> activity?.startActivityForResult(item.intent, item.requestCode)
}

@ -31,6 +31,7 @@
<string name="url_sponsor">https://github.com/sponsors/abaker</string>
<string name="url_app_passwords">https://tasks.org/passwords</string>
<string name="url_sharing">https://tasks.org/sharing</string>
<string name="url_filters">https://tasks.org/filters</string>
<string name="p_date_shortcut_morning">date_shortcut_morning</string>
<string name="p_date_shortcut_afternoon">date_shortcut_afternoon</string>

Loading…
Cancel
Save