require write_calendar permission before activating caldav sync

This commit is contained in:
tibbi
2017-08-10 21:04:32 +02:00
parent cde8deb059
commit 3eef430226
4 changed files with 31 additions and 2 deletions

View File

@@ -11,6 +11,9 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<application <application
android:name=".App" android:name=".App"
android:allowBackup="true" android:allowBackup="true"

View File

@@ -90,6 +90,10 @@ class MainActivity : SimpleActivity(), NavigationListener {
config.googleSync = false config.googleSync = false
} }
if (!hasCalendarPermission()) {
config.caldavSync = false
}
if (isGoogleSyncActive()) { if (isGoogleSyncActive()) {
FetchGoogleEventsTask(applicationContext, googleSyncListener).execute() FetchGoogleEventsTask(applicationContext, googleSyncListener).execute()
} }

View File

@@ -39,6 +39,7 @@ class SettingsActivity : SimpleActivity() {
private val ACCOUNTS_PERMISSION = 2 private val ACCOUNTS_PERMISSION = 2
private val REQUEST_ACCOUNT_NAME = 3 private val REQUEST_ACCOUNT_NAME = 3
private val REQUEST_GOOGLE_PLAY_SERVICES = 4 private val REQUEST_GOOGLE_PLAY_SERVICES = 4
private val CALENDAR_PERMISSION = 5
lateinit var res: Resources lateinit var res: Resources
private var mStoredPrimaryColor = 0 private var mStoredPrimaryColor = 0
@@ -135,10 +136,22 @@ class SettingsActivity : SimpleActivity() {
private fun setupCaldavSync() { private fun setupCaldavSync() {
settings_caldav_sync.isChecked = config.caldavSync settings_caldav_sync.isChecked = config.caldavSync
settings_caldav_sync_holder.setOnClickListener { settings_caldav_sync_holder.setOnClickListener {
if (config.caldavSync) {
toggleCaldavSync()
} else {
if (hasCalendarPermission()) {
toggleCaldavSync()
} else {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_CALENDAR), CALENDAR_PERMISSION)
}
}
}
}
private fun toggleCaldavSync() {
settings_caldav_sync.toggle() settings_caldav_sync.toggle()
config.caldavSync = settings_caldav_sync.isChecked config.caldavSync = settings_caldav_sync.isChecked
} }
}
private fun toggleGoogleSync() { private fun toggleGoogleSync() {
settings_google_sync.toggle() settings_google_sync.toggle()
@@ -438,6 +451,10 @@ class SettingsActivity : SimpleActivity() {
} else { } else {
disableGoogleSync() disableGoogleSync()
} }
} else if (requestCode == CALENDAR_PERMISSION) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
toggleCaldavSync()
}
} }
} }

View File

@@ -1,5 +1,6 @@
package com.simplemobiletools.calendar.extensions package com.simplemobiletools.calendar.extensions
import android.Manifest
import android.annotation.TargetApi import android.annotation.TargetApi
import android.app.AlarmManager import android.app.AlarmManager
import android.app.Notification import android.app.Notification
@@ -9,10 +10,12 @@ import android.appwidget.AppWidgetManager
import android.content.ComponentName import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color import android.graphics.Color
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.support.v4.content.ContextCompat
import android.support.v7.app.NotificationCompat import android.support.v7.app.NotificationCompat
import com.google.api.client.extensions.android.http.AndroidHttp import com.google.api.client.extensions.android.http.AndroidHttp
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential
@@ -35,6 +38,8 @@ import org.joda.time.DateTimeZone
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
fun Context.hasCalendarPermission() = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR) == PackageManager.PERMISSION_GRANTED
fun Context.updateWidgets() { fun Context.updateWidgets() {
val widgetsCnt = AppWidgetManager.getInstance(this).getAppWidgetIds(ComponentName(this, MyWidgetMonthlyProvider::class.java)) val widgetsCnt = AppWidgetManager.getInstance(this).getAppWidgetIds(ComponentName(this, MyWidgetMonthlyProvider::class.java))
if (widgetsCnt.isNotEmpty()) { if (widgetsCnt.isNotEmpty()) {