Mirror changes in AccountsDrawerHandler

Co-authored-by: Ricki Hirner <hirner@bitfire.at>
This commit is contained in:
Sunik Kupfer 2022-04-15 11:27:21 +02:00 committed by Ricki Hirner
parent 3c0a26bb0c
commit 12802f8697
No known key found for this signature in database
GPG key ID: 79A019FCAAEDD3AA
14 changed files with 175 additions and 98 deletions

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="navigation_drawer_support_project">Support the project</string>
<string name="nav_earn_badges">Support us with badges</string>
<string name="nav_rate_us">Review in Google Play</string>
<plurals name="you_earned_badges">
<item quantity="one">You\'ve earned a badge, thank you!</item>
<item quantity="other">You have earned %d badges, thank you!</item>
</plurals>
<string name="available_badges">Available badges</string>
<string name="available_badges_empty">Sorry, there are no badges available for purchase at the moment!</string>
<string name="what_are_badges">What are badges?</string>
<string name="what_are_badges_title">What are badges?</string>
<string name="what_are_badges_body">Badges are simple in-app one-time-payments. You will earn a nice little badge and with it you can support us over time.</string>
<string name="why_badges_title">Why does DAVx5 offer feature-free badges?</string>
<string name="why_badges_body">DAVx5 has really grown over the years! We are still actively developing new features, providing support and we always update the app for upcoming Android versions. These badges are one-time payments where you can simply show your support by buying us a coffee, or two&#8230; or 10 :-) We want to be as open as possible, so there will never-ever be any new stuff locked to in-app payment.</string>
<string name="button_buy_badge_free">FREE</string>
<string name="button_buy_badge_bought">Thank you!</string>
<string name="earn_badges">Earn badges to support us!</string>
</resources>

View file

@ -3,10 +3,15 @@
**************************************************************************************************/
package at.bitfire.davdroid
import java.io.File
object Constants {
const val DAVDROID_GREEN_RGBA = 0xFF8bc34a.toInt()
// gplay billing
const val BILLINGCLIENT_CONNECTION_MAX_RETRIES = 4
/**
* Context label for [org.apache.commons.lang3.exception.ContextedException].
* Context value is the [at.bitfire.davdroid.resource.LocalResource]

View file

@ -182,7 +182,9 @@ class AboutActivity: AppCompatActivity() {
private lateinit var binding: AboutTranslationBinding
class ViewHolder(val context: Context, val binding: AboutTranslationBinding): RecyclerView.ViewHolder(binding.root)
class ViewHolder(
val context: Context, val binding: AboutTranslationBinding
): RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
binding = AboutTranslationBinding.inflate(LayoutInflater.from(parent.context), parent, false)

View file

@ -32,12 +32,11 @@ import com.google.android.material.snackbar.Snackbar
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.util.*
class AccountsActivity: AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
companion object {
val accountsDrawerHandler = DefaultAccountsDrawerHandler()
val accountsDrawerHandler = OseAccountsDrawerHandler()
const val REQUEST_INTRO = 0
}
@ -122,9 +121,9 @@ class AccountsActivity: AppCompatActivity(), NavigationView.OnNavigationItemSele
}
override fun onNavigationItemSelected(item: MenuItem): Boolean {
val processed = accountsDrawerHandler.onNavigationItemSelected(this, item)
accountsDrawerHandler.onNavigationItemSelected(this, item)
binding.drawerLayout.closeDrawer(GravityCompat.START)
return processed
return true
}

View file

@ -0,0 +1,57 @@
/***************************************************************************************************
* Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details.
**************************************************************************************************/
package at.bitfire.davdroid.ui
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import androidx.annotation.CallSuper
import at.bitfire.davdroid.App
import at.bitfire.davdroid.BuildConfig
import at.bitfire.davdroid.R
import at.bitfire.davdroid.log.Logger
import at.bitfire.davdroid.ui.webdav.WebdavMountsActivity
/**
* Default menu items control
*/
abstract class BaseAccountsDrawerHandler: IAccountsDrawerHandler {
companion object {
private const val BETA_FEEDBACK_URI = "mailto:play@bitfire.at?subject=${BuildConfig.APPLICATION_ID}/${BuildConfig.VERSION_NAME} feedback (${BuildConfig.VERSION_CODE})"
}
@CallSuper
override fun initMenu(context: Context, menu: Menu) {
if (BuildConfig.VERSION_NAME.contains("-alpha") || BuildConfig.VERSION_NAME.contains("-beta") || BuildConfig.VERSION_NAME.contains("-rc"))
menu.findItem(R.id.nav_beta_feedback).isVisible = true
}
@CallSuper
override fun onNavigationItemSelected(activity: Activity, item: MenuItem) {
when (item.itemId) {
R.id.nav_about ->
activity.startActivity(Intent(activity, AboutActivity::class.java))
R.id.nav_beta_feedback ->
if (!UiUtils.launchUri(
activity,
Uri.parse(BETA_FEEDBACK_URI),
Intent.ACTION_SENDTO,
false
)
)
Toast.makeText(activity, R.string.install_email_client, Toast.LENGTH_LONG).show()
R.id.nav_app_settings ->
activity.startActivity(Intent(activity, AppSettingsActivity::class.java))
}
}
}

View file

@ -1,78 +0,0 @@
/***************************************************************************************************
* Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details.
**************************************************************************************************/
package at.bitfire.davdroid.ui
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import at.bitfire.davdroid.App
import at.bitfire.davdroid.BuildConfig
import at.bitfire.davdroid.R
import at.bitfire.davdroid.ui.webdav.WebdavMountsActivity
class DefaultAccountsDrawerHandler: IAccountsDrawerHandler {
companion object {
private const val BETA_FEEDBACK_URI = "mailto:play@bitfire.at?subject=${BuildConfig.APPLICATION_ID}/${BuildConfig.VERSION_NAME} feedback (${BuildConfig.VERSION_CODE})"
const val COMMUNITY_URL = "https://github.com/bitfireAT/davx5-ose/discussions"
}
override fun initMenu(context: Context, menu: Menu) {
if (BuildConfig.VERSION_NAME.contains("-alpha") || BuildConfig.VERSION_NAME.contains("-beta") || BuildConfig.VERSION_NAME.contains("-rc"))
menu.findItem(R.id.nav_beta_feedback).isVisible = true
if (/* ose */ true)
menu.findItem(R.id.nav_donate).isVisible = true
}
override fun onNavigationItemSelected(activity: Activity, item: MenuItem): Boolean {
when (item.itemId) {
R.id.nav_about ->
activity.startActivity(Intent(activity, AboutActivity::class.java))
R.id.nav_beta_feedback ->
if (!UiUtils.launchUri(activity, Uri.parse(BETA_FEEDBACK_URI), Intent.ACTION_SENDTO, false))
Toast.makeText(activity, R.string.install_email_client, Toast.LENGTH_LONG).show()
R.id.nav_app_settings ->
activity.startActivity(Intent(activity, AppSettingsActivity::class.java))
R.id.nav_twitter ->
UiUtils.launchUri(activity,
Uri.parse("https://twitter.com/" + activity.getString(R.string.twitter_handle)))
R.id.nav_website ->
UiUtils.launchUri(activity,
App.homepageUrl(activity))
R.id.nav_webdav_mounts ->
activity.startActivity(Intent(activity, WebdavMountsActivity::class.java))
R.id.nav_manual ->
UiUtils.launchUri(activity,
App.homepageUrl(activity).buildUpon().appendPath("manual").build())
R.id.nav_faq ->
UiUtils.launchUri(activity,
App.homepageUrl(activity).buildUpon().appendPath("faq").build())
R.id.nav_community ->
UiUtils.launchUri(activity, Uri.parse(COMMUNITY_URL))
R.id.nav_donate ->
//if (BuildConfig.FLAVOR != App.FLAVOR_GOOGLE_PLAY)
UiUtils.launchUri(activity,
App.homepageUrl(activity).buildUpon().appendPath("donate").build())
R.id.nav_privacy ->
UiUtils.launchUri(activity,
App.homepageUrl(activity).buildUpon().appendPath("privacy").build())
else ->
return false
}
return true
}
}

View file

@ -13,6 +13,6 @@ interface IAccountsDrawerHandler {
fun initMenu(context: Context, menu: Menu)
fun onNavigationItemSelected(activity: Activity, item: MenuItem): Boolean
fun onNavigationItemSelected(activity: Activity, item: MenuItem)
}

View file

@ -0,0 +1,69 @@
/***************************************************************************************************
* Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details.
**************************************************************************************************/
package at.bitfire.davdroid.ui
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.view.MenuItem
import at.bitfire.davdroid.App
import at.bitfire.davdroid.R
import at.bitfire.davdroid.ui.webdav.WebdavMountsActivity
/**
* Default menu items control
*/
class OseAccountsDrawerHandler: BaseAccountsDrawerHandler() {
companion object {
const val COMMUNITY_URL = "https://github.com/bitfireAT/davx5-ose/discussions"
}
override fun onNavigationItemSelected(activity: Activity, item: MenuItem) {
when (item.itemId) {
R.id.nav_twitter ->
UiUtils.launchUri(
activity,
Uri.parse("https://twitter.com/" + activity.getString(R.string.twitter_handle))
)
R.id.nav_webdav_mounts ->
activity.startActivity(Intent(activity, WebdavMountsActivity::class.java))
R.id.nav_website ->
UiUtils.launchUri(
activity,
App.homepageUrl(activity)
)
R.id.nav_manual ->
UiUtils.launchUri(
activity,
App.homepageUrl(activity).buildUpon().appendPath("manual").build()
)
R.id.nav_faq ->
UiUtils.launchUri(
activity,
App.homepageUrl(activity).buildUpon().appendPath("faq").build()
)
R.id.nav_community ->
UiUtils.launchUri(activity, Uri.parse(COMMUNITY_URL))
R.id.nav_donate ->
UiUtils.launchUri(
activity,
App.homepageUrl(activity).buildUpon().appendPath("donate").build()
)
R.id.nav_privacy ->
UiUtils.launchUri(
activity,
App.homepageUrl(activity).buildUpon().appendPath("privacy").build()
)
else ->
super.onNavigationItemSelected(activity, item)
}
}
}

View file

@ -6,7 +6,6 @@ package at.bitfire.davdroid.ui.setup
import android.app.Application
import android.app.Dialog
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View

View file

@ -15,11 +15,7 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.text.HtmlCompat
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.MediatorLiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.*
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.ListAdapter
@ -36,7 +32,6 @@ import at.bitfire.davdroid.webdav.CredentialsStore
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.apache.commons.io.FileUtils
import java.util.*
class WebdavMountsActivity: AppCompatActivity() {

View file

@ -0,0 +1,5 @@
<vector android:autoMirrored="true" android:height="15dp"
android:tint="?attr/colorControlNormal" android:viewportHeight="24"
android:viewportWidth="24" android:width="15dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M14.43,10l-2.43,-8l-2.43,8l-7.57,0l6.18,4.41l-2.35,7.59l6.17,-4.69l6.18,4.69l-2.35,-7.59l6.17,-4.41z"/>
</vector>

View file

@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"

View file

@ -58,8 +58,7 @@
<item
android:id="@+id/nav_donate"
android:icon="@drawable/ic_attach_money"
android:title="@string/navigation_drawer_donate"
android:visible="false"/>
android:title="@string/navigation_drawer_donate"/>
<item
android:id="@+id/nav_privacy"
android:icon="@drawable/ic_cloud_off"

View file

@ -35,6 +35,10 @@
<color name="backgroundColor">@color/grey200</color>
<color name="errorColor">@color/red700</color>
<color name="badge_coffee">#352B1B</color>
<color name="badge_life_buoy">#FF6A00</color>
<color name="badge_medal">#FFC200</color>
<color name="badge_sailboat">#083d77</color>
<!-- app theme -->