Set formatting to kotlin style guide

pull/935/head
Alex Baker 4 years ago
parent 940785ceec
commit fe611468e3

@ -56,7 +56,7 @@ android {
val tasksKeyPassword: String? by project
keyAlias = tasksKeyAlias
storeFile = file(tasksStoreFile?: "none")
storeFile = file(tasksStoreFile ?: "none")
storePassword = tasksStorePassword
keyPassword = tasksKeyPassword
}

@ -23,14 +23,17 @@ class Debug : InjectingPreferenceFragment() {
setPreferencesFromResource(R.xml.preferences_debug, rootKey)
for (pref in Ints.asList(
R.string.p_leakcanary,
R.string.p_flipper,
R.string.p_strict_mode_vm,
R.string.p_strict_mode_thread)) findPreference(pref)
R.string.p_leakcanary,
R.string.p_flipper,
R.string.p_strict_mode_vm,
R.string.p_strict_mode_thread
)) {
findPreference(pref)
.setOnPreferenceChangeListener { _: Preference?, _: Any? ->
showRestartDialog()
true
}
}
findPreference(R.string.debug_reset_ssl).setOnPreferenceClickListener {
resetCertificates(context!!)

@ -33,15 +33,15 @@ abstract class InjectingPreferenceFragment : PreferenceFragmentCompat() {
protected open fun showRestartDialog() {
dialogBuilder
.newDialog()
.setMessage(R.string.restart_required)
.setPositiveButton(R.string.restart_now) { _: DialogInterface?, _: Int ->
val nextIntent = Intent(context, MainActivity::class.java)
nextIntent.putExtra(MainActivity.OPEN_FILTER, null as Filter?)
ProcessPhoenix.triggerRebirth(context, nextIntent)
}
.setNegativeButton(R.string.restart_later, null)
.show()
.newDialog()
.setMessage(R.string.restart_required)
.setPositiveButton(R.string.restart_now) { _: DialogInterface?, _: Int ->
val nextIntent = Intent(context, MainActivity::class.java)
nextIntent.putExtra(MainActivity.OPEN_FILTER, null as Filter?)
ProcessPhoenix.triggerRebirth(context, nextIntent)
}
.setNegativeButton(R.string.restart_later, null)
.show()
}
protected fun requires(@StringRes prefGroup: Int, check: Boolean, vararg resIds: Int) {

@ -20,8 +20,9 @@ abstract class AbstractFragmentPluginPreference : BasePreferences() {
if (isLocalePluginIntent(intent)) {
Timber.d(
"Creating Activity with Intent=%s, savedInstanceState=%s, EXTRA_BUNDLE=%s",
intent, savedInstanceState, getPreviousBundle())
"Creating Activity with Intent=%s, savedInstanceState=%s, EXTRA_BUNDLE=%s",
intent, savedInstanceState, getPreviousBundle()
)
}
}
@ -32,7 +33,10 @@ abstract class AbstractFragmentPluginPreference : BasePreferences() {
if (null != resultBundle) {
val blurb = getResultBlurb(resultBundle)
val result = Bundle()
result.putBundle(com.twofortyfouram.locale.api.Intent.EXTRA_BUNDLE, resultBundle)
result.putBundle(
com.twofortyfouram.locale.api.Intent.EXTRA_BUNDLE,
resultBundle
)
result.putString(com.twofortyfouram.locale.api.Intent.EXTRA_STRING_BLURB, blurb)
setResult(RESULT_OK, Intent().putExtras(result))
}

@ -36,5 +36,6 @@ class TaskerSettingsActivity : AbstractFragmentPluginPreference() {
override fun inject(component: ActivityComponent) = component.inject(this)
private fun getFragment() = supportFragmentManager.findFragmentById(R.id.settings) as TaskerListNotification
private fun getFragment() =
supportFragmentManager.findFragmentById(R.id.settings) as TaskerListNotification
}

@ -13,7 +13,7 @@ import org.tasks.ui.MenuColorizer
private const val EXTRA_TITLE = "extra_title"
abstract class BasePreferences : ThemedInjectingAppCompatActivity(),
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
lateinit var toolbar: Toolbar
@ -24,9 +24,9 @@ abstract class BasePreferences : ThemedInjectingAppCompatActivity(),
toolbar = binding.toolbar.toolbar
if (savedInstanceState == null) {
supportFragmentManager
.beginTransaction()
.replace(R.id.settings, getRootPreference())
.commit()
.beginTransaction()
.replace(R.id.settings, getRootPreference())
.commit()
toolbar.title = getString(getRootTitle())
} else {
toolbar.title = savedInstanceState.getCharSequence(EXTRA_TITLE)
@ -36,7 +36,8 @@ abstract class BasePreferences : ThemedInjectingAppCompatActivity(),
toolbar.title = getString(getRootTitle())
}
}
toolbar.navigationIcon = ContextCompat.getDrawable(this, R.drawable.ic_outline_arrow_back_24px);
toolbar.navigationIcon =
ContextCompat.getDrawable(this, R.drawable.ic_outline_arrow_back_24px);
toolbar.setNavigationOnClickListener { onBackPressed() }
setupMenu()
MenuColorizer.colorToolbar(this, toolbar)
@ -61,21 +62,21 @@ abstract class BasePreferences : ThemedInjectingAppCompatActivity(),
}
override fun onPreferenceStartFragment(
caller: PreferenceFragmentCompat,
pref: Preference
caller: PreferenceFragmentCompat,
pref: Preference
): Boolean {
val args = pref.extras
val fragment = supportFragmentManager.fragmentFactory.instantiate(
classLoader,
pref.fragment
classLoader,
pref.fragment
).apply {
arguments = args
setTargetFragment(caller, 0)
}
supportFragmentManager.beginTransaction()
.replace(R.id.settings, fragment)
.addToBackStack(null)
.commit()
.replace(R.id.settings, fragment)
.addToBackStack(null)
.commit()
toolbar.title = pref.title
return true
}

@ -3,8 +3,6 @@ package org.tasks.preferences
import org.tasks.R
import org.tasks.injection.ActivityComponent
import org.tasks.preferences.fragments.Advanced
import org.tasks.preferences.fragments.HelpAndFeedback
import org.tasks.preferences.fragments.Notifications
class ManageSpaceActivity : BasePreferences() {

@ -2,7 +2,6 @@ package org.tasks.preferences
import org.tasks.R
import org.tasks.injection.ActivityComponent
import org.tasks.preferences.fragments.HelpAndFeedback
import org.tasks.preferences.fragments.Notifications
class NotificationPreferences : BasePreferences() {

@ -50,43 +50,48 @@ class Advanced : InjectingPreferenceFragment() {
setPreferencesFromResource(R.xml.preferences_advanced, rootKey)
findPreference(R.string.EPr_manage_purge_deleted)
.setOnPreferenceClickListener {
purgeDeletedTasks()
false
}
.setOnPreferenceClickListener {
purgeDeletedTasks()
false
}
findPreference(R.string.EPr_manage_delete_completed_gcal)
.setOnPreferenceClickListener {
deleteCompletedEvents()
false
}
.setOnPreferenceClickListener {
deleteCompletedEvents()
false
}
findPreference(R.string.EPr_manage_delete_all_gcal)
.setOnPreferenceClickListener {
deleteAllCalendarEvents()
false
}
.setOnPreferenceClickListener {
deleteAllCalendarEvents()
false
}
findPreference(R.string.EPr_reset_preferences)
.setOnPreferenceClickListener {
resetPreferences()
false
}
.setOnPreferenceClickListener {
resetPreferences()
false
}
findPreference(R.string.EPr_delete_task_data)
.setOnPreferenceClickListener {
deleteTaskData()
false
}
.setOnPreferenceClickListener {
deleteTaskData()
false
}
findPreference(R.string.p_attachment_dir)
.setOnPreferenceClickListener {
FileHelper.newDirectoryPicker(this, REQUEST_CODE_FILES_DIR, preferences.attachmentsDirectory)
false
}
.setOnPreferenceClickListener {
FileHelper.newDirectoryPicker(
this,
REQUEST_CODE_FILES_DIR,
preferences.attachmentsDirectory
)
false
}
updateAttachmentDirectory()
calendarReminderPreference = findPreference(R.string.p_calendar_reminders) as SwitchPreferenceCompat
calendarReminderPreference =
findPreference(R.string.p_calendar_reminders) as SwitchPreferenceCompat
initializeCalendarReminderPreference()
}
@ -96,9 +101,10 @@ class Advanced : InjectingPreferenceFragment() {
val uri = data!!.data!!
if (AndroidUtilities.atLeastLollipop()) {
context!!.contentResolver
.takePersistableUriPermission(
uri,
Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
.takePersistableUriPermission(
uri,
Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
)
}
preferences.setUri(R.string.p_attachment_dir, uri)
updateAttachmentDirectory()
@ -109,7 +115,8 @@ class Advanced : InjectingPreferenceFragment() {
}
override fun onRequestPermissionsResult(
requestCode: Int, permissions: Array<String?>, grantResults: IntArray) {
requestCode: Int, permissions: Array<String?>, grantResults: IntArray
) {
if (requestCode == PermissionRequestor.REQUEST_CALENDAR) {
if (PermissionUtil.verifyPermissions(grantResults)) {
calendarReminderPreference.isChecked = true
@ -132,100 +139,103 @@ class Advanced : InjectingPreferenceFragment() {
}
private fun initializeCalendarReminderPreference() {
calendarReminderPreference.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
if (newValue == null) {
false
} else if (!(newValue as Boolean)) {
true
} else if (permissionRequester.requestCalendarPermissions()) {
CalendarNotificationIntentService.enqueueWork(context)
true
} else {
false
calendarReminderPreference.onPreferenceChangeListener =
Preference.OnPreferenceChangeListener { _, newValue ->
if (newValue == null) {
false
} else if (!(newValue as Boolean)) {
true
} else if (permissionRequester.requestCalendarPermissions()) {
CalendarNotificationIntentService.enqueueWork(context)
true
} else {
false
}
}
}
calendarReminderPreference.isChecked = calendarReminderPreference.isChecked && permissionChecker.canAccessCalendars()
calendarReminderPreference.isChecked =
calendarReminderPreference.isChecked && permissionChecker.canAccessCalendars()
}
private fun updateAttachmentDirectory() {
findPreference(R.string.p_attachment_dir).summary =
FileHelper.uri2String(preferences.attachmentsDirectory)
FileHelper.uri2String(preferences.attachmentsDirectory)
}
private fun purgeDeletedTasks() {
dialogBuilder
.newDialog()
.setMessage(R.string.EPr_manage_purge_deleted_message)
.setPositiveButton(android.R.string.ok) { _, _ ->
performAction(
R.string.EPr_manage_purge_deleted_status, Callable { taskDeleter.purgeDeleted() })
}
.setNegativeButton(android.R.string.cancel, null)
.show()
.newDialog()
.setMessage(R.string.EPr_manage_purge_deleted_message)
.setPositiveButton(android.R.string.ok) { _, _ ->
performAction(
R.string.EPr_manage_purge_deleted_status,
Callable { taskDeleter.purgeDeleted() })
}
.setNegativeButton(android.R.string.cancel, null)
.show()
}
private fun deleteCompletedEvents() {
dialogBuilder
.newDialog()
.setMessage(R.string.EPr_manage_delete_completed_gcal_message)
.setPositiveButton(android.R.string.ok) { _, _ ->
performAction(
R.string.EPr_manage_delete_completed_gcal_status,
Callable {
calendarEventProvider.deleteEvents(taskDao.completedCalendarEvents)
taskDao.clearCompletedCalendarEvents()
})
}
.setNegativeButton(android.R.string.cancel, null)
.show()
.newDialog()
.setMessage(R.string.EPr_manage_delete_completed_gcal_message)
.setPositiveButton(android.R.string.ok) { _, _ ->
performAction(
R.string.EPr_manage_delete_completed_gcal_status,
Callable {
calendarEventProvider.deleteEvents(taskDao.completedCalendarEvents)
taskDao.clearCompletedCalendarEvents()
})
}
.setNegativeButton(android.R.string.cancel, null)
.show()
}
private fun deleteAllCalendarEvents() {
dialogBuilder
.newDialog()
.setMessage(R.string.EPr_manage_delete_all_gcal_message)
.setPositiveButton(android.R.string.ok) { _, _ ->
performAction(
R.string.EPr_manage_delete_all_gcal_status,
Callable {
calendarEventProvider.deleteEvents(taskDao.allCalendarEvents)
taskDao.clearAllCalendarEvents()
})
}
.setNegativeButton(android.R.string.cancel, null)
.show()
.newDialog()
.setMessage(R.string.EPr_manage_delete_all_gcal_message)
.setPositiveButton(android.R.string.ok) { _, _ ->
performAction(
R.string.EPr_manage_delete_all_gcal_status,
Callable {
calendarEventProvider.deleteEvents(taskDao.allCalendarEvents)
taskDao.clearAllCalendarEvents()
})
}
.setNegativeButton(android.R.string.cancel, null)
.show()
}
private fun performAction(@StringRes message: Int, callable: Callable<Int>) {
disposables.add(
Single.fromCallable(callable)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { c: Int? -> toaster.longToastUnformatted(message, c!!) })
Single.fromCallable(callable)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { c: Int? -> toaster.longToastUnformatted(message, c!!) })
}
private fun resetPreferences() {
dialogBuilder
.newDialog()
.setMessage(R.string.EPr_reset_preferences_warning)
.setPositiveButton(R.string.EPr_reset_preferences) { _, _ ->
preferences.reset()
exitProcess(0)
}
.setNegativeButton(android.R.string.cancel, null)
.show()
.newDialog()
.setMessage(R.string.EPr_reset_preferences_warning)
.setPositiveButton(R.string.EPr_reset_preferences) { _, _ ->
preferences.reset()
exitProcess(0)
}
.setNegativeButton(android.R.string.cancel, null)
.show()
}
private fun deleteTaskData() {
dialogBuilder
.newDialog()
.setMessage(R.string.EPr_delete_task_data_warning)
.setPositiveButton(R.string.EPr_delete_task_data) { _, _ ->
context!!.deleteDatabase(database.name)
exitProcess(0)
}
.setNegativeButton(android.R.string.cancel, null)
.show()
.newDialog()
.setMessage(R.string.EPr_delete_task_data_warning)
.setPositiveButton(R.string.EPr_delete_task_data) { _, _ ->
context!!.deleteDatabase(database.name)
exitProcess(0)
}
.setNegativeButton(android.R.string.cancel, null)
.show()
}
override fun inject(component: FragmentComponent) {

@ -41,47 +41,52 @@ class Backups : InjectingPreferenceFragment() {
initializeBackupDirectory()
findPreference(R.string.backup_BAc_import)
.setOnPreferenceClickListener {
startActivityForResult(
FileHelper.newFilePickerIntent(activity, preferences.backupDirectory),
REQUEST_PICKER)
false
}
.setOnPreferenceClickListener {
startActivityForResult(
FileHelper.newFilePickerIntent(activity, preferences.backupDirectory),
REQUEST_PICKER
)
false
}
findPreference(R.string.backup_BAc_export)
.setOnPreferenceClickListener {
ExportTasksDialog.newExportTasksDialog()
.show(fragmentManager!!, FRAG_TAG_EXPORT_TASKS)
false
}
.setOnPreferenceClickListener {
ExportTasksDialog.newExportTasksDialog()
.show(fragmentManager!!, FRAG_TAG_EXPORT_TASKS)
false
}
val googleDriveBackup = findPreference(R.string.p_google_drive_backup) as SwitchPreferenceCompat
googleDriveBackup.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { preference: Preference, newValue: Any? ->
when {
newValue == null -> {
false
}
newValue as Boolean -> {
if (permissionRequestor.requestAccountPermissions()) {
requestGoogleDriveLogin()
val googleDriveBackup =
findPreference(R.string.p_google_drive_backup) as SwitchPreferenceCompat
googleDriveBackup.onPreferenceChangeListener =
Preference.OnPreferenceChangeListener { preference: Preference, newValue: Any? ->
when {
newValue == null -> {
false
}
newValue as Boolean -> {
if (permissionRequestor.requestAccountPermissions()) {
requestGoogleDriveLogin()
}
false
}
else -> {
preference.summary = null
true
}
false
}
else -> {
preference.summary = null
true
}
}
}
}
override fun onResume() {
super.onResume()
val googleDriveBackup = findPreference(R.string.p_google_drive_backup) as SwitchPreferenceCompat
val googleDriveBackup =
findPreference(R.string.p_google_drive_backup) as SwitchPreferenceCompat
val account = preferences.getStringValue(R.string.p_google_drive_backup_account)
if (preferences.getBoolean(R.string.p_google_drive_backup, false)
&& googleAccountManager.canAccessAccount(account)) {
&& googleAccountManager.canAccessAccount(account)
) {
googleDriveBackup.isChecked = true
googleDriveBackup.summary = account
} else {
@ -90,7 +95,11 @@ class Backups : InjectingPreferenceFragment() {
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
if (requestCode == PermissionRequestor.REQUEST_GOOGLE_ACCOUNTS) {
if (PermissionUtil.verifyPermissions(grantResults)) {
requestGoogleDriveLogin()
@ -106,9 +115,10 @@ class Backups : InjectingPreferenceFragment() {
val uri = data.data!!
if (AndroidUtilities.atLeastLollipop()) {
context?.contentResolver
?.takePersistableUriPermission(
uri,
Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
?.takePersistableUriPermission(
uri,
Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
)
}
preferences.setUri(R.string.p_backup_dir, uri)
updateBackupDirectory()
@ -117,15 +127,21 @@ class Backups : InjectingPreferenceFragment() {
if (resultCode == RESULT_OK) {
val uri = data!!.data
val extension = FileHelper.getExtension(activity, uri)
if (!("json".equals(extension, ignoreCase = true) || "xml".equals(extension, ignoreCase = true))) {
if (!("json".equals(extension, ignoreCase = true) || "xml".equals(
extension,
ignoreCase = true
))
) {
toaster.longToast(R.string.invalid_backup_file)
} else {
ImportTasksDialog.newImportTasksDialog(uri, extension).show(fragmentManager!!, FRAG_TAG_IMPORT_TASKS)
ImportTasksDialog.newImportTasksDialog(uri, extension)
.show(fragmentManager!!, FRAG_TAG_IMPORT_TASKS)
}
}
} else if (requestCode == REQUEST_DRIVE_BACKUP) {
val success = resultCode == RESULT_OK
(findPreference(R.string.p_google_drive_backup) as SwitchPreferenceCompat).isChecked = success
(findPreference(R.string.p_google_drive_backup) as SwitchPreferenceCompat).isChecked =
success
if (!success && data != null) {
toaster.longToast(data.getStringExtra(GtasksLoginActivity.EXTRA_ERROR))
}
@ -136,21 +152,26 @@ class Backups : InjectingPreferenceFragment() {
}
private fun requestGoogleDriveLogin() {
startActivityForResult(Intent(context, DriveLoginActivity::class.java), REQUEST_DRIVE_BACKUP)
startActivityForResult(
Intent(context, DriveLoginActivity::class.java),
REQUEST_DRIVE_BACKUP
)
}
private fun initializeBackupDirectory() {
findPreference(R.string.p_backup_dir)
.setOnPreferenceClickListener {
FileHelper.newDirectoryPicker(
this, REQUEST_CODE_BACKUP_DIR, preferences.backupDirectory)
false
}
.setOnPreferenceClickListener {
FileHelper.newDirectoryPicker(
this, REQUEST_CODE_BACKUP_DIR, preferences.backupDirectory
)
false
}
updateBackupDirectory()
}
private fun updateBackupDirectory() {
findPreference(R.string.p_backup_dir).summary = FileHelper.uri2String(preferences.backupDirectory)
findPreference(R.string.p_backup_dir).summary =
FileHelper.uri2String(preferences.backupDirectory)
}
override fun inject(component: FragmentComponent) {

@ -27,26 +27,31 @@ class DashClock : InjectingPreferenceFragment() {
setPreferencesFromResource(R.xml.preferences_dashclock, rootKey)
findPreference(R.string.p_dashclock_filter)
.setOnPreferenceClickListener {
val intent = Intent(context, FilterSelectionActivity::class.java)
intent.putExtra(
FilterSelectionActivity.EXTRA_FILTER, defaultFilterProvider.dashclockFilter)
intent.putExtra(FilterSelectionActivity.EXTRA_RETURN_FILTER, true)
startActivityForResult(intent, REQUEST_SELECT_FILTER)
false
}
.setOnPreferenceClickListener {
val intent = Intent(context, FilterSelectionActivity::class.java)
intent.putExtra(
FilterSelectionActivity.EXTRA_FILTER, defaultFilterProvider.dashclockFilter
)
intent.putExtra(FilterSelectionActivity.EXTRA_RETURN_FILTER, true)
startActivityForResult(intent, REQUEST_SELECT_FILTER)
false
}
refreshPreferences()
if (!inventory.purchasedDashclock()) {
startActivityForResult(Intent(context, PurchaseActivity::class.java), REQUEST_SUBSCRIPTION)
startActivityForResult(
Intent(context, PurchaseActivity::class.java),
REQUEST_SUBSCRIPTION
)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_SELECT_FILTER) {
if (resultCode == Activity.RESULT_OK) {
val filter: Filter = data!!.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER)!!
val filter: Filter =
data!!.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER)!!
defaultFilterProvider.dashclockFilter = filter
refreshPreferences()
localBroadcastManager.broadcastRefresh()

@ -19,29 +19,34 @@ class HelpAndFeedback : InjectingPreferenceFragment() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.help_and_feedback, rootKey)
findPreference(R.string.changelog).summary = getString(R.string.version_string, BuildConfig.VERSION_NAME)
findPreference(R.string.changelog).summary =
getString(R.string.version_string, BuildConfig.VERSION_NAME)
findPreference(R.string.contact_developer)
.setOnPreferenceClickListener {
val uri = Uri.fromParts("mailto", "Alex <" + getString(R.string.support_email) + ">", null)
val intent = Intent(Intent.ACTION_SENDTO, uri)
.putExtra(Intent.EXTRA_SUBJECT, "Tasks Feedback")
.putExtra(Intent.EXTRA_TEXT, device.debugInfo)
startActivity(intent)
false
}
.setOnPreferenceClickListener {
val uri = Uri.fromParts(
"mailto",
"Alex <" + getString(R.string.support_email) + ">",
null
)
val intent = Intent(Intent.ACTION_SENDTO, uri)
.putExtra(Intent.EXTRA_SUBJECT, "Tasks Feedback")
.putExtra(Intent.EXTRA_TEXT, device.debugInfo)
startActivity(intent)
false
}
findPreference(R.string.refresh_purchases)
.setOnPreferenceClickListener {
billingClient.queryPurchases()
false
}
.setOnPreferenceClickListener {
billingClient.queryPurchases()
false
}
findPreference(R.string.p_collect_statistics)
.setOnPreferenceClickListener {
showRestartDialog()
true
}
.setOnPreferenceClickListener {
showRestartDialog()
true
}
if (inventory.hasPro()) {
val findPreference = findPreference(R.string.upgrade_to_pro)
@ -51,10 +56,12 @@ class HelpAndFeedback : InjectingPreferenceFragment() {
@Suppress("ConstantConditionIf")
if (BuildConfig.FLAVOR == "generic") {
remove(R.string.p_collect_statistics,
R.string.rate_tasks,
R.string.upgrade_to_pro,
R.string.refresh_purchases)
remove(
R.string.p_collect_statistics,
R.string.rate_tasks,
R.string.upgrade_to_pro,
R.string.refresh_purchases
)
}
}

@ -73,21 +73,29 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
setupColorPreference(R.string.p_theme, themeBase.name, THEMES, REQUEST_THEME_PICKER)
setupColorPreference(R.string.p_theme_color, themeColor.name, COLORS, REQUEST_COLOR_PICKER)
setupColorPreference(R.string.p_theme_accent, themeAccent.name, ACCENTS, REQUEST_ACCENT_PICKER)
setupColorPreference(
R.string.p_theme_accent,
themeAccent.name,
ACCENTS,
REQUEST_ACCENT_PICKER
)
updateLauncherPreference()
findPreference(R.string.p_show_subtasks)
.setOnPreferenceChangeListener { _: Preference?, _: Any? ->
localBroadcastManager.broadcastRefresh()
true
}
.setOnPreferenceChangeListener { _: Preference?, _: Any? ->
localBroadcastManager.broadcastRefresh()
true
}
val defaultList = findPreference(R.string.p_default_list)
val filter: Filter = defaultFilterProvider.defaultFilter
defaultList.summary = filter.listingTitle
defaultList.onPreferenceClickListener = Preference.OnPreferenceClickListener {
val intent = Intent(context, FilterSelectionActivity::class.java)
intent.putExtra(FilterSelectionActivity.EXTRA_FILTER, defaultFilterProvider.defaultFilter)
intent.putExtra(
FilterSelectionActivity.EXTRA_FILTER,
defaultFilterProvider.defaultFilter
)
intent.putExtra(FilterSelectionActivity.EXTRA_RETURN_FILTER, true)
startActivityForResult(intent, REQUEST_DEFAULT_LIST)
true
@ -133,67 +141,70 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
}
private fun updateLauncherPreference() =
setupColorPreference(
R.string.p_theme_launcher,
themeCache.getThemeColor(preferences.getInt(R.string.p_theme_launcher, 7)).name,
LAUNCHER,
REQUEST_LAUNCHER_PICKER)
setupColorPreference(
R.string.p_theme_launcher,
themeCache.getThemeColor(preferences.getInt(R.string.p_theme_launcher, 7)).name,
LAUNCHER,
REQUEST_LAUNCHER_PICKER
)
private fun setupLocationPickers() {
val choices = listOf(getString(R.string.map_provider_mapbox), getString(R.string.map_provider_google))
val choices =
listOf(getString(R.string.map_provider_mapbox), getString(R.string.map_provider_google))
val singleCheckedArrayAdapter = SingleCheckedArrayAdapter(context!!, choices, themeAccent)
val mapProviderPreference = findPreference(R.string.p_map_provider)
mapProviderPreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
dialogBuilder
.newDialog()
.setSingleChoiceItems(
singleCheckedArrayAdapter,
getMapProvider()
) { dialog: DialogInterface, which: Int ->
if (which == 1) {
if (!playServices.refreshAndCheck()) {
playServices.resolve(activity)
dialog.dismiss()
return@setSingleChoiceItems
}
.newDialog()
.setSingleChoiceItems(
singleCheckedArrayAdapter,
getMapProvider()
) { dialog: DialogInterface, which: Int ->
if (which == 1) {
if (!playServices.refreshAndCheck()) {
playServices.resolve(activity)
dialog.dismiss()
return@setSingleChoiceItems
}
preferences.setInt(R.string.p_map_provider, which)
mapProviderPreference.summary = choices[which]
dialog.dismiss()
}
.setNegativeButton(android.R.string.cancel, null)
.showThemedListView()
preferences.setInt(R.string.p_map_provider, which)
mapProviderPreference.summary = choices[which]
dialog.dismiss()
}
.setNegativeButton(android.R.string.cancel, null)
.showThemedListView()
false
}
val mapProvider: Int = getMapProvider()
mapProviderPreference.summary = if (mapProvider == -1) getString(R.string.none) else choices[mapProvider]
mapProviderPreference.summary =
if (mapProvider == -1) getString(R.string.none) else choices[mapProvider]
val placeProviderPreference = findPreference(R.string.p_place_provider)
placeProviderPreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
dialogBuilder
.newDialog()
.setSingleChoiceItems(
singleCheckedArrayAdapter,
getPlaceProvider()
) { dialog: DialogInterface, which: Int ->
if (which == 1) {
if (!playServices.refreshAndCheck()) {
playServices.resolve(activity)
dialog.dismiss()
return@setSingleChoiceItems
}
if (!inventory.hasPro()) {
toaster.longToast(R.string.requires_pro_subscription)
dialog.dismiss()
return@setSingleChoiceItems
}
.newDialog()
.setSingleChoiceItems(
singleCheckedArrayAdapter,
getPlaceProvider()
) { dialog: DialogInterface, which: Int ->
if (which == 1) {
if (!playServices.refreshAndCheck()) {
playServices.resolve(activity)
dialog.dismiss()
return@setSingleChoiceItems
}
if (!inventory.hasPro()) {
toaster.longToast(R.string.requires_pro_subscription)
dialog.dismiss()
return@setSingleChoiceItems
}
preferences.setInt(R.string.p_place_provider, which)
placeProviderPreference.summary = choices[which]
dialog.dismiss()
}
.setNegativeButton(android.R.string.cancel, null)
.showThemedListView()
preferences.setInt(R.string.p_place_provider, which)
placeProviderPreference.summary = choices[which]
dialog.dismiss()
}
.setNegativeButton(android.R.string.cancel, null)
.showThemedListView()
false
}
val placeProvider: Int = getPlaceProvider()
@ -201,11 +212,17 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
}
private fun getPlaceProvider(): Int {
return if (playServices.isPlayServicesAvailable && inventory.hasPro()) preferences.getInt(R.string.p_place_provider, 0) else 0
return if (playServices.isPlayServicesAvailable && inventory.hasPro()) preferences.getInt(
R.string.p_place_provider,
0
) else 0
}
private fun getMapProvider(): Int {
return if (playServices.isPlayServicesAvailable) preferences.getInt(R.string.p_map_provider, 0) else 0
return if (playServices.isPlayServicesAvailable) preferences.getInt(
R.string.p_map_provider,
0
) else 0
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@ -239,14 +256,16 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
}
} else if (requestCode == REQUEST_DEFAULT_LIST) {
if (resultCode == RESULT_OK) {
val filter: Filter = data!!.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER)!!
val filter: Filter =
data!!.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER)!!
defaultFilterProvider.defaultFilter = filter
findPreference(R.string.p_default_list).summary = filter.listingTitle
localBroadcastManager.broadcastRefresh()
}
} else if (requestCode == REQUEST_LOCALE) {
if (resultCode == RESULT_OK) {
val newValue: Locale = data!!.getSerializableExtra(LocalePickerDialog.EXTRA_LOCALE) as Locale
val newValue: Locale =
data!!.getSerializableExtra(LocalePickerDialog.EXTRA_LOCALE) as Locale
val override: String? = newValue.languageOverride
if (Strings.isNullOrEmpty(override)) {
preferences.remove(R.string.p_language)
@ -288,11 +307,15 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
private fun setLauncherIcon(index: Int) {
val packageManager: PackageManager? = context?.packageManager
for (i in ThemeColor.LAUNCHERS.indices) {
val componentName = ComponentName(context!!, "com.todoroo.astrid.activity.TaskListActivity" + ThemeColor.LAUNCHERS[i])
val componentName = ComponentName(
context!!,
"com.todoroo.astrid.activity.TaskListActivity" + ThemeColor.LAUNCHERS[i]
)
packageManager?.setComponentEnabledSetting(
componentName,
if (index == i) PackageManager.COMPONENT_ENABLED_STATE_ENABLED else PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP)
componentName,
if (index == i) PackageManager.COMPONENT_ENABLED_STATE_ENABLED else PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP
)
}
}
@ -300,7 +323,11 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
component.inject(this)
}
private fun setupColorPreference(@StringRes prefId: Int, summary: String, palette: ColorPickerActivity.ColorPalette, requestCode: Int) {
private fun setupColorPreference(
@StringRes prefId: Int, summary: String,
palette: ColorPickerActivity.ColorPalette,
requestCode: Int
) {
val themePref: Preference = findPreference(prefId)
themePref.summary = summary
themePref.setOnPreferenceClickListener {
@ -368,10 +395,11 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
private fun invalidSetting(errorResId: Int, settingResId: Int, relativeResId: Int) {
Toast.makeText(
context,
getString(errorResId, getString(settingResId), getString(relativeResId)),
Toast.LENGTH_SHORT)
.show()
context,
getString(errorResId, getString(settingResId), getString(relativeResId)),
Toast.LENGTH_SHORT
)
.show()
}
private fun updateStartOfWeek(value: String) {
@ -411,9 +439,9 @@ class LookAndFeel : InjectingPreferenceFragment(), Preference.OnPreferenceChange
private fun getWeekdayEntries(): Array<String?>? {
return arrayOf(
getString(R.string.use_locale_default),
getWeekdayDisplayName(DayOfWeek.SUNDAY),
getWeekdayDisplayName(DayOfWeek.MONDAY)
getString(R.string.use_locale_default),
getWeekdayDisplayName(DayOfWeek.SUNDAY),
getWeekdayDisplayName(DayOfWeek.MONDAY)
)
}
}

@ -46,11 +46,12 @@ class Notifications : InjectingPreferenceFragment() {
setPreferencesFromResource(R.xml.preferences_notifications, rootKey)
rescheduleNotificationsOnChange(
R.string.p_rmd_time,
R.string.p_rmd_enable_quiet,
R.string.p_rmd_quietStart,
R.string.p_rmd_quietEnd,
R.string.p_rmd_persistent)
R.string.p_rmd_time,
R.string.p_rmd_enable_quiet,
R.string.p_rmd_quietStart,
R.string.p_rmd_quietEnd,
R.string.p_rmd_persistent
)
initializeRingtonePreference()
initializeTimePreference(getDefaultRemindTimePreference()!!, REQUEST_DEFAULT_REMIND)
@ -58,29 +59,29 @@ class Notifications : InjectingPreferenceFragment() {
initializeTimePreference(getQuietEndPreference()!!, REQUEST_QUIET_END)
findPreference(R.string.notification_channel_settings)
.setOnPreferenceClickListener(::openNotificationChannelSettings)
.setOnPreferenceClickListener(::openNotificationChannelSettings)
findPreference(R.string.battery_optimization_settings)
.setOnPreferenceClickListener(::openBatteryOptimizationSettings)
.setOnPreferenceClickListener(::openBatteryOptimizationSettings)
findPreference(R.string.p_bundle_notifications)
.setOnPreferenceChangeListener { _: Preference?, _: Any? ->
NotificationSchedulerIntentService.enqueueWork(context, true)
true
}
.setOnPreferenceChangeListener { _: Preference?, _: Any? ->
NotificationSchedulerIntentService.enqueueWork(context, true)
true
}
findPreference(R.string.p_badges_enabled)
.setOnPreferenceChangeListener { _: Preference?, newValue: Any? ->
if (newValue != null) {
if (newValue as Boolean) {
showRestartDialog()
} else {
ShortcutBadger.removeCount(context)
}
true
.setOnPreferenceChangeListener { _: Preference?, newValue: Any? ->
if (newValue != null) {
if (newValue as Boolean) {
showRestartDialog()
} else {
false
ShortcutBadger.removeCount(context)
}
true
} else {
false
}
}
val badgePreference: Preference = findPreference(R.string.p_badge_list)
val filter = defaultFilterProvider.badgeFilter
@ -88,35 +89,40 @@ class Notifications : InjectingPreferenceFragment() {
badgePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
val intent = Intent(context, FilterSelectionActivity::class.java)
intent.putExtra(
FilterSelectionActivity.EXTRA_FILTER, defaultFilterProvider.badgeFilter)
FilterSelectionActivity.EXTRA_FILTER, defaultFilterProvider.badgeFilter
)
intent.putExtra(FilterSelectionActivity.EXTRA_RETURN_FILTER, true)
startActivityForResult(intent, REQUEST_BADGE_LIST)
true
}
findPreference(R.string.p_voiceRemindersEnabled)
.setOnPreferenceChangeListener { preference: Preference, newValue: Any ->
val enabled = newValue as Boolean
try {
if (enabled && !voiceOutputAssistant.isTTSInitialized) {
val checkIntent = Intent()
checkIntent.action = TextToSpeech.Engine.ACTION_CHECK_TTS_DATA
startActivityForResult(checkIntent, REQUEST_CODE_TTS_CHECK)
} else if (!enabled && voiceOutputAssistant.isTTSInitialized) {
voiceOutputAssistant.shutdown()
}
} catch (e: VerifyError) {
Timber.e(e)
preference.isEnabled = false
preferences.setBoolean(preference.key, false)
.setOnPreferenceChangeListener { preference: Preference, newValue: Any ->
val enabled = newValue as Boolean
try {
if (enabled && !voiceOutputAssistant.isTTSInitialized) {
val checkIntent = Intent()
checkIntent.action = TextToSpeech.Engine.ACTION_CHECK_TTS_DATA
startActivityForResult(checkIntent, REQUEST_CODE_TTS_CHECK)
} else if (!enabled && voiceOutputAssistant.isTTSInitialized) {
voiceOutputAssistant.shutdown()
}
true
} catch (e: VerifyError) {
Timber.e(e)
preference.isEnabled = false
preferences.setBoolean(preference.key, false)
}
true
}
requires(AndroidUtilities.atLeastOreo(), R.string.notification_channel_settings)
requires(AndroidUtilities.atLeastMarshmallow(), R.string.battery_optimization_settings)
requires(
AndroidUtilities.preOreo(), R.string.p_rmd_ringtone, R.string.p_rmd_vibrate, R.string.p_led_notification)
AndroidUtilities.preOreo(),
R.string.p_rmd_ringtone,
R.string.p_rmd_vibrate,
R.string.p_led_notification
)
}
override fun onDestroy() {
@ -132,10 +138,10 @@ class Notifications : InjectingPreferenceFragment() {
private fun rescheduleNotificationsOnChange(vararg resIds: Int) {
for (resId in resIds) {
findPreference(resId)
.setOnPreferenceChangeListener { _: Preference?, _: Any? ->
NotificationSchedulerIntentService.enqueueWork(context, false)
true
}
.setOnPreferenceChangeListener { _: Preference?, _: Any? ->
NotificationSchedulerIntentService.enqueueWork(context, false)
true
}
}
}
@ -145,16 +151,25 @@ class Notifications : InjectingPreferenceFragment() {
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION)
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true)
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true)
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, Settings.System.DEFAULT_NOTIFICATION_URI)
intent.putExtra(
RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI,
Settings.System.DEFAULT_NOTIFICATION_URI
)
val existingValue: String? = preferences.getStringValue(R.string.p_rmd_ringtone)
if (existingValue != null) {
if (existingValue.isEmpty()) {
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, null as Uri?)
} else {
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(existingValue))
intent.putExtra(
RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,
Uri.parse(existingValue)
)
}
} else {
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Settings.System.DEFAULT_NOTIFICATION_URI)
intent.putExtra(
RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,
Settings.System.DEFAULT_NOTIFICATION_URI
)
}
startActivityForResult(intent, REQUEST_CODE_ALERT_RINGTONE)
true
@ -190,23 +205,28 @@ class Notifications : InjectingPreferenceFragment() {
}
private fun initializeRingtonePreference() {
val ringtoneChangedListener = Preference.OnPreferenceChangeListener { preference: Preference, value: Any? ->
if ("" == value) {
preference.setSummary(R.string.silent)
} else {
val ringtone = RingtoneManager.getRingtone(
val ringtoneChangedListener =
Preference.OnPreferenceChangeListener { preference: Preference, value: Any? ->
if ("" == value) {
preference.setSummary(R.string.silent)
} else {
val ringtone = RingtoneManager.getRingtone(
context,
if (value == null) Settings.System.DEFAULT_NOTIFICATION_URI else Uri.parse(value as String?))
preference.summary = if (ringtone == null) "" else ringtone.getTitle(context)
if (value == null) Settings.System.DEFAULT_NOTIFICATION_URI else Uri.parse(
value as String?
)
)
preference.summary = if (ringtone == null) "" else ringtone.getTitle(context)
}
true
}
true
}
val ringtoneKey = R.string.p_rmd_ringtone
val ringtonePreference: Preference = findPreference(ringtoneKey)
ringtonePreference.onPreferenceChangeListener = ringtoneChangedListener
ringtoneChangedListener.onPreferenceChange(
ringtonePreference,
preferences.getStringValue(ringtoneKey))
ringtonePreference,
preferences.getStringValue(ringtoneKey)
)
}
@TargetApi(Build.VERSION_CODES.O)
@ -228,7 +248,8 @@ class Notifications : InjectingPreferenceFragment() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_CODE_ALERT_RINGTONE) {
if (resultCode == RESULT_OK && data != null) {
val ringtone: Uri? = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)
val ringtone: Uri? =
data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)
if (ringtone != null) {
preferences.setString(R.string.p_rmd_ringtone, ringtone.toString())
} else {
@ -250,7 +271,8 @@ class Notifications : InjectingPreferenceFragment() {
}
} else if (requestCode == REQUEST_BADGE_LIST) {
if (resultCode == RESULT_OK) {
val filter: Filter = data!!.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER)!!
val filter: Filter =
data!!.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER)!!
defaultFilterProvider.badgeFilter = filter
findPreference(R.string.p_badge_list).summary = filter.listingTitle
localBroadcastManager.broadcastRefresh()

@ -66,32 +66,35 @@ class ScrollableWidget : InjectingPreferenceFragment() {
showSettings.dependency = showHeader.key
findPreference(R.string.p_widget_filter)
.setOnPreferenceClickListener {
val intent = Intent(context, FilterSelectionActivity::class.java)
intent.putExtra(FilterSelectionActivity.EXTRA_FILTER, getFilter())
intent.putExtra(FilterSelectionActivity.EXTRA_RETURN_FILTER, true)
startActivityForResult(intent, REQUEST_FILTER)
false
}
.setOnPreferenceClickListener {
val intent = Intent(context, FilterSelectionActivity::class.java)
intent.putExtra(FilterSelectionActivity.EXTRA_FILTER, getFilter())
intent.putExtra(FilterSelectionActivity.EXTRA_RETURN_FILTER, true)
startActivityForResult(intent, REQUEST_FILTER)
false
}
findPreference(R.string.p_widget_theme)
.setOnPreferenceClickListener {
val intent = Intent(context, ColorPickerActivity::class.java)
intent.putExtra(
ColorPickerActivity.EXTRA_PALETTE,
ColorPickerActivity.ColorPalette.WIDGET_BACKGROUND)
intent.putExtra(
ColorPickerActivity.EXTRA_THEME_INDEX, widgetPreferences.themeIndex)
startActivityForResult(intent, REQUEST_THEME_SELECTION)
false
}
.setOnPreferenceClickListener {
val intent = Intent(context, ColorPickerActivity::class.java)
intent.putExtra(
ColorPickerActivity.EXTRA_PALETTE,
ColorPickerActivity.ColorPalette.WIDGET_BACKGROUND
)
intent.putExtra(
ColorPickerActivity.EXTRA_THEME_INDEX, widgetPreferences.themeIndex
)
startActivityForResult(intent, REQUEST_THEME_SELECTION)
false
}
val colorPreference = findPreference(R.string.p_widget_color)
colorPreference.dependency = showHeader.key
colorPreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
val intent = Intent(context, ColorPickerActivity::class.java)
intent.putExtra(
ColorPickerActivity.EXTRA_PALETTE, ColorPickerActivity.ColorPalette.COLORS)
ColorPickerActivity.EXTRA_PALETTE, ColorPickerActivity.ColorPalette.COLORS
)
intent.putExtra(ColorPickerActivity.EXTRA_THEME_INDEX, widgetPreferences.colorIndex)
startActivityForResult(intent, REQUEST_COLOR_SELECTION)
false
@ -105,18 +108,29 @@ class ScrollableWidget : InjectingPreferenceFragment() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_FILTER) {
if (resultCode == Activity.RESULT_OK) {
val filter: Filter = data!!.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER)!!
val filter: Filter =
data!!.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER)!!
widgetPreferences.setFilter(defaultFilterProvider.getFilterPreferenceValue(filter))
updateFilter()
}
} else if (requestCode == REQUEST_THEME_SELECTION) {
if (resultCode == Activity.RESULT_OK) {
widgetPreferences.setTheme(data!!.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0))
widgetPreferences.setTheme(
data!!.getIntExtra(
ColorPickerActivity.EXTRA_THEME_INDEX,
0
)
)
updateTheme()
}
} else if (requestCode == REQUEST_COLOR_SELECTION) {
if (resultCode == Activity.RESULT_OK) {
widgetPreferences.setColor(data!!.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0))
widgetPreferences.setColor(
data!!.getIntExtra(
ColorPickerActivity.EXTRA_THEME_INDEX,
0
)
)
updateColor()
}
} else {

@ -41,33 +41,37 @@ class Synchronization : InjectingPreferenceFragment() {
setPreferencesFromResource(R.xml.preferences_synchronization, rootKey)
findPreference(R.string.p_background_sync_unmetered_only)
.setOnPreferenceChangeListener { _: Preference?, o: Any? ->
workManager.updateBackgroundSync(null, null, o as Boolean?)
true
}
.setOnPreferenceChangeListener { _: Preference?, o: Any? ->
workManager.updateBackgroundSync(null, null, o as Boolean?)
true
}
findPreference(R.string.p_background_sync)
.setOnPreferenceChangeListener { _: Preference?, o: Any? ->
workManager.updateBackgroundSync(null, o as Boolean?, null)
true
}
val positionHack = findPreference(R.string.google_tasks_position_hack) as SwitchPreferenceCompat
positionHack.isChecked = preferences.isPositionHackEnabled
positionHack.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _: Preference?, newValue: Any? ->
if (newValue == null) {
false
} else {
preferences.setLong(
R.string.p_google_tasks_position_hack, if (newValue as Boolean) DateUtilities.now() else 0)
.setOnPreferenceChangeListener { _: Preference?, o: Any? ->
workManager.updateBackgroundSync(null, o as Boolean?, null)
true
}
}
findPreference(R.string.add_account)
.setOnPreferenceClickListener {
AddAccountDialog.showAddAccountDialog(activity, dialogBuilder)
val positionHack =
findPreference(R.string.google_tasks_position_hack) as SwitchPreferenceCompat
positionHack.isChecked = preferences.isPositionHackEnabled
positionHack.onPreferenceChangeListener =
Preference.OnPreferenceChangeListener { _: Preference?, newValue: Any? ->
if (newValue == null) {
false
} else {
preferences.setLong(
R.string.p_google_tasks_position_hack,
if (newValue as Boolean) DateUtilities.now() else 0
)
true
}
}
findPreference(R.string.add_account)
.setOnPreferenceClickListener {
AddAccountDialog.showAddAccountDialog(activity, dialogBuilder)
false
}
}
override fun onResume() {
@ -106,17 +110,23 @@ class Synchronization : InjectingPreferenceFragment() {
}
preference.setOnPreferenceClickListener {
dialogBuilder
.newDialog(account)
.setItems(listOf(getString(R.string.reinitialize_account), getString(R.string.logout))) { _, which ->
if (which == 0) {
startActivityForResult(
Intent(context, GtasksLoginActivity::class.java),
REQUEST_GOOGLE_TASKS)
} else {
logoutConfirmation(googleTaskAccount)
}
.newDialog(account)
.setItems(
listOf(
getString(R.string.reinitialize_account),
getString(R.string.logout)
)
) { _, which ->
if (which == 0) {
startActivityForResult(
Intent(context, GtasksLoginActivity::class.java),
REQUEST_GOOGLE_TASKS
)
} else {
logoutConfirmation(googleTaskAccount)
}
.showThemedListView()
}
.showThemedListView()
false
}
category.addPreference(preference)
@ -132,15 +142,17 @@ class Synchronization : InjectingPreferenceFragment() {
val error = account.error
if (Strings.isNullOrEmpty(error)) {
preference.setSummary(
if (account.isCaldavAccount) R.string.caldav else R.string.etesync)
if (account.isCaldavAccount) R.string.caldav else R.string.etesync
)
} else {
preference.summary = error
}
preference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
val intent = Intent(
context,
if (account.isCaldavAccount) CaldavAccountSettingsActivity::class.java
else EteSyncAccountSettingsActivity::class.java)
context,
if (account.isCaldavAccount) CaldavAccountSettingsActivity::class.java
else EteSyncAccountSettingsActivity::class.java
)
intent.putExtra(CaldavAccountSettingsActivity.EXTRA_CALDAV_DATA, account)
startActivityForResult(intent, REQUEST_CALDAV_SETTINGS)
false
@ -153,14 +165,14 @@ class Synchronization : InjectingPreferenceFragment() {
private fun logoutConfirmation(account: GoogleTaskAccount) {
val name = account.account
val alertDialog = dialogBuilder
.newDialog()
.setMessage(R.string.logout_warning, name)
.setPositiveButton(R.string.logout) { _, _ ->
taskDeleter.delete(account)
refresh()
}
.setNegativeButton(android.R.string.cancel, null)
.create()
.newDialog()
.setMessage(R.string.logout_warning, name)
.setPositiveButton(R.string.logout) { _, _ ->
taskDeleter.delete(account)
refresh()
}
.setNegativeButton(android.R.string.cancel, null)
.create()
alertDialog.setCanceledOnTouchOutside(false)
alertDialog.setCancelable(false)
alertDialog.show()
@ -174,7 +186,8 @@ class Synchronization : InjectingPreferenceFragment() {
val hasCaldavAccounts = addCaldavAccounts(synchronizationPreferences)
findPreference(R.string.gtasks_GPr_header).isVisible = hasGoogleAccounts
findPreference(R.string.accounts).isVisible = hasGoogleAccounts || hasCaldavAccounts
findPreference(R.string.sync_SPr_interval_title).isVisible = hasGoogleAccounts || hasCaldavAccounts
findPreference(R.string.sync_SPr_interval_title).isVisible =
hasGoogleAccounts || hasCaldavAccounts
}
override fun inject(component: FragmentComponent) {

@ -45,20 +45,28 @@ class TaskDefaults : InjectingPreferenceFragment() {
}
val defaultCalendarName: String? = getDefaultCalendarName()
defaultCalendarPref.summary = defaultCalendarName
?: getString(R.string.dont_add_to_calendar)
?: getString(R.string.dont_add_to_calendar)
findPreference(R.string.p_default_remote_list)
.setOnPreferenceClickListener {
RemoteListPicker.newRemoteListSupportPicker(defaultFilterProvider.defaultRemoteList, this, REQUEST_REMOTE_LIST)
.show(fragmentManager!!, FRAG_TAG_REMOTE_LIST_SELECTION)
false
}
.setOnPreferenceClickListener {
RemoteListPicker.newRemoteListSupportPicker(
defaultFilterProvider.defaultRemoteList,
this,
REQUEST_REMOTE_LIST
)
.show(fragmentManager!!, FRAG_TAG_REMOTE_LIST_SELECTION)
false
}
updateRemoteListSummary()
requires(device.supportsGeofences(), R.string.p_default_location_reminder_key)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
if (requestCode == PermissionRequestor.REQUEST_CALENDAR) {
if (PermissionUtil.verifyPermissions(grantResults)) {
startCalendarSelectionActivity()
@ -82,9 +90,11 @@ class TaskDefaults : InjectingPreferenceFragment() {
} else if (requestCode == REQUEST_CALENDAR_SELECTION) {
if (resultCode == RESULT_OK) {
preferences.setString(
R.string.gcal_p_default,
data!!.getStringExtra(CalendarSelectionActivity.EXTRA_CALENDAR_ID))
defaultCalendarPref.summary = data.getStringExtra(CalendarSelectionActivity.EXTRA_CALENDAR_NAME)
R.string.gcal_p_default,
data!!.getStringExtra(CalendarSelectionActivity.EXTRA_CALENDAR_ID)
)
defaultCalendarPref.summary =
data.getStringExtra(CalendarSelectionActivity.EXTRA_CALENDAR_NAME)
}
} else {
super.onActivityResult(requestCode, resultCode, data)
@ -105,8 +115,8 @@ class TaskDefaults : InjectingPreferenceFragment() {
private fun updateRemoteListSummary() {
val defaultFilter = defaultFilterProvider.defaultRemoteList
findPreference(R.string.p_default_remote_list).summary =
if (defaultFilter == null) getString(R.string.dont_sync)
else defaultFilter.listingTitle
if (defaultFilter == null) getString(R.string.dont_sync)
else defaultFilter.listingTitle
}
override fun inject(component: FragmentComponent) {

@ -56,7 +56,10 @@ class TaskerListNotification : InjectingPreferenceFragment() {
}
if (!inventory.purchasedTasker()) {
startActivityForResult(Intent(context, PurchaseActivity::class.java), REQUEST_SUBSCRIPTION)
startActivityForResult(
Intent(context, PurchaseActivity::class.java),
REQUEST_SUBSCRIPTION
)
}
}
@ -92,7 +95,8 @@ class TaskerListNotification : InjectingPreferenceFragment() {
fun getBundle(): Bundle {
return ListNotificationBundle.generateBundle(
defaultFilterProvider.getFilterPreferenceValue(filter))
defaultFilterProvider.getFilterPreferenceValue(filter)
)
}
override fun inject(component: FragmentComponent) = component.inject(this)

@ -27,141 +27,141 @@ object CustomIcons {
@kotlin.jvm.JvmField
var ICONS = mapOf(
LABEL to R.drawable.ic_outline_label_24px,
FILTER to R.drawable.ic_outline_filter_list_24px,
CLOUD to R.drawable.ic_outline_cloud_24px,
ALL_INBOX to R.drawable.ic_outline_all_inbox_24px,
LABEL_OFF to R.drawable.ic_outline_label_off_24px,
HISTORY to R.drawable.ic_outline_history_24px,
TODAY to R.drawable.ic_outline_today_24px,
1000 to R.drawable.ic_outline_flag_24px,
1062 to R.drawable.ic_outline_home_24px,
1041 to R.drawable.ic_outline_work_outline_24px,
1001 to R.drawable.ic_outline_pets_24px,
1002 to R.drawable.ic_outline_payment_24px,
1003 to R.drawable.ic_outline_attach_money_24px,
1059 to R.drawable.ic_outline_euro_symbol_24px,
1042 to R.drawable.ic_outline_store_24px,
1043 to R.drawable.ic_outline_shopping_cart_24px,
1004 to R.drawable.ic_outline_hourglass_empty_24px,
1005 to R.drawable.ic_outline_favorite_border_24px,
1006 to R.drawable.ic_outline_school_24px,
1007 to R.drawable.ic_outline_drive_eta_24px,
1008 to R.drawable.ic_outline_whatshot_24px,
1009 to R.drawable.ic_outline_star_border_24px,
1010 to R.drawable.ic_outline_account_balance_24px,
1011 to R.drawable.ic_outline_location_city_24px,
1012 to R.drawable.ic_outline_cake_24px,
1013 to R.drawable.ic_outline_kitchen_24px,
1014 to R.drawable.ic_outline_fitness_center_24px,
1015 to R.drawable.ic_outline_child_friendly_24px,
1016 to R.drawable.ic_outline_free_breakfast_24px,
1017 to R.drawable.ic_outline_golf_course_24px,
1018 to R.drawable.ic_outline_beach_access_24px,
1019 to R.drawable.ic_outline_restaurant_menu_24px,
1020 to R.drawable.ic_outline_local_pharmacy_24px,
1021 to R.drawable.ic_outline_fastfood_24px,
1022 to R.drawable.ic_outline_hotel_24px,
1023 to R.drawable.ic_outline_flight_24px,
1057 to R.drawable.ic_outline_flight_takeoff_24px,
1058 to R.drawable.ic_outline_flight_land_24px,
1024 to R.drawable.ic_outline_directions_run_24px,
1025 to R.drawable.ic_outline_wb_sunny_24px,
1026 to R.drawable.ic_outline_desktop_mac_24px,
1027 to R.drawable.ic_outline_computer_24px,
1028 to R.drawable.ic_outline_format_paint_24px,
1029 to R.drawable.ic_outline_storage_24px,
1030 to R.drawable.ic_outline_send_24px,
1031 to R.drawable.ic_outline_weekend_24px,
1032 to R.drawable.ic_outline_link_24px,
1033 to R.drawable.ic_outline_business_24px,
1034 to R.drawable.ic_outline_chat_bubble_outline_24px,
1035 to R.drawable.ic_outline_voicemail_24px,
1036 to R.drawable.ic_outline_email_24px,
1037 to R.drawable.ic_outline_call_24px,
1039 to R.drawable.ic_outline_movie_24px,
1040 to R.drawable.ic_outline_equalizer_24px,
1071 to R.drawable.ic_outline_pie_chart_24px,
1072 to R.drawable.ic_outline_show_chart_24px,
1044 to R.drawable.ic_outline_schedule_24px,
1045 to R.drawable.ic_outline_photo_camera_24px,
1046 to R.drawable.ic_outline_delete_24px,
1047 to R.drawable.ic_outline_attachment_24px,
1048 to R.drawable.ic_outline_vpn_key_24px,
1049 to R.drawable.ic_outline_event_24px,
1050 to R.drawable.ic_outline_place_24px,
1051 to R.drawable.ic_outline_markunread_mailbox_24px,
1052 to R.drawable.ic_outline_label_important_24px,
1053 to R.drawable.ic_outline_android_24px,
1054 to R.drawable.ic_outline_build_24px,
1055 to R.drawable.ic_outline_bug_report_24px,
1056 to R.drawable.ic_outline_book_24px,
1060 to R.drawable.ic_outline_explore_24px,
1061 to R.drawable.ic_outline_gavel_24px,
1063 to R.drawable.ic_outline_print_24px,
1064 to R.drawable.ic_outline_receipt_24px,
1038 to R.drawable.ic_outline_new_releases_24px,
1065 to R.drawable.ic_outline_report_problem_24px,
1068 to R.drawable.ic_outline_error_outline_24px,
1069 to R.drawable.ic_outline_not_interested_24px,
1070 to R.drawable.ic_outline_report_24px,
1066 to R.drawable.ic_outline_turned_in_24px,
1067 to R.drawable.ic_outline_turned_in_not_24px,
1073 to R.drawable.ic_outline_headset_24px,
1074 to R.drawable.ic_outline_mic_none_24px,
1075 to R.drawable.ic_outline_timer_24px,
1076 to R.drawable.ic_outline_clear_24px,
1077 to R.drawable.ic_outline_search_24px,
1078 to R.drawable.ic_outline_repeat_24px,
1079 to R.drawable.ic_outline_notifications_24px,
1080 to R.drawable.ic_outline_star_half_24px,
1081 to R.drawable.ic_outline_share_24px,
1082 to R.drawable.ic_outline_sentiment_very_satisfied_24px,
1083 to R.drawable.ic_outline_sentiment_very_dissatisfied_24px,
1084 to R.drawable.ic_outline_sentiment_satisfied_24px,
1085 to R.drawable.ic_outline_sentiment_dissatisfied_24px,
1086 to R.drawable.ic_outline_mood_bad_24px,
1087 to R.drawable.ic_outline_mood_24px,
1088 to R.drawable.ic_outline_spa_24px,
1089 to R.drawable.ic_outline_room_service_24px,
1090 to R.drawable.ic_outline_meeting_room_24px,
1091 to R.drawable.ic_outline_hot_tub_24px,
1092 to R.drawable.ic_outline_business_center_24px,
1093 to R.drawable.ic_outline_priority_high_24px,
1094 to R.drawable.ic_outline_power_24px,
1095 to R.drawable.ic_outline_power_off_24px,
1096 to R.drawable.ic_outline_directions_bike_24px,
1097 to R.drawable.ic_outline_local_florist_24px,
1098 to R.drawable.ic_outline_local_pizza_24px,
1099 to R.drawable.ic_outline_navigation_24px,
1100 to R.drawable.ic_outline_local_play_24px,
1101 to R.drawable.ic_outline_local_bar_24px,
1102 to R.drawable.ic_outline_local_laundry_service_24px,
1103 to R.drawable.ic_outline_local_offer_24px,
1104 to R.drawable.ic_outline_local_shipping_24px,
1105 to R.drawable.ic_outline_local_hospital_24px,
1106 to R.drawable.ic_outline_directions_boat_24px,
1107 to R.drawable.ic_outline_directions_walk_24px,
1108 to R.drawable.ic_outline_wb_incandescent_24px,
1109 to R.drawable.ic_outline_landscape_24px,
1110 to R.drawable.ic_outline_music_note_24px,
1111 to R.drawable.ic_outline_healing_24px,
1112 to R.drawable.ic_outline_brush_24px,
1113 to R.drawable.ic_outline_brightness_2_24px,
1114 to R.drawable.ic_outline_security_24px,
1115 to R.drawable.ic_outline_scanner_24px,
1116 to R.drawable.ic_outline_router_24px,
1117 to R.drawable.ic_outline_watch_24px,
1118 to R.drawable.ic_outline_videogame_asset_24px,
1119 to R.drawable.ic_cached_24px,
1120 to R.drawable.ic_octocat,
1121 to R.drawable.ic_outline_perm_identity_24px,
1122 to R.drawable.ic_track_changes_24px,
1123 to R.drawable.ic_open_in_new_24px,
1124 to R.drawable.ic_outline_edit_24px,
1125 to R.drawable.ic_outline_info_24px,
1126 to R.drawable.ic_outline_palette_24px,
1127 to R.drawable.ic_outline_sd_storage_24px
LABEL to R.drawable.ic_outline_label_24px,
FILTER to R.drawable.ic_outline_filter_list_24px,
CLOUD to R.drawable.ic_outline_cloud_24px,
ALL_INBOX to R.drawable.ic_outline_all_inbox_24px,
LABEL_OFF to R.drawable.ic_outline_label_off_24px,
HISTORY to R.drawable.ic_outline_history_24px,
TODAY to R.drawable.ic_outline_today_24px,
1000 to R.drawable.ic_outline_flag_24px,
1062 to R.drawable.ic_outline_home_24px,
1041 to R.drawable.ic_outline_work_outline_24px,
1001 to R.drawable.ic_outline_pets_24px,
1002 to R.drawable.ic_outline_payment_24px,
1003 to R.drawable.ic_outline_attach_money_24px,
1059 to R.drawable.ic_outline_euro_symbol_24px,
1042 to R.drawable.ic_outline_store_24px,
1043 to R.drawable.ic_outline_shopping_cart_24px,
1004 to R.drawable.ic_outline_hourglass_empty_24px,
1005 to R.drawable.ic_outline_favorite_border_24px,
1006 to R.drawable.ic_outline_school_24px,
1007 to R.drawable.ic_outline_drive_eta_24px,
1008 to R.drawable.ic_outline_whatshot_24px,
1009 to R.drawable.ic_outline_star_border_24px,
1010 to R.drawable.ic_outline_account_balance_24px,
1011 to R.drawable.ic_outline_location_city_24px,
1012 to R.drawable.ic_outline_cake_24px,
1013 to R.drawable.ic_outline_kitchen_24px,
1014 to R.drawable.ic_outline_fitness_center_24px,
1015 to R.drawable.ic_outline_child_friendly_24px,
1016 to R.drawable.ic_outline_free_breakfast_24px,
1017 to R.drawable.ic_outline_golf_course_24px,
1018 to R.drawable.ic_outline_beach_access_24px,
1019 to R.drawable.ic_outline_restaurant_menu_24px,
1020 to R.drawable.ic_outline_local_pharmacy_24px,
1021 to R.drawable.ic_outline_fastfood_24px,
1022 to R.drawable.ic_outline_hotel_24px,
1023 to R.drawable.ic_outline_flight_24px,
1057 to R.drawable.ic_outline_flight_takeoff_24px,
1058 to R.drawable.ic_outline_flight_land_24px,
1024 to R.drawable.ic_outline_directions_run_24px,
1025 to R.drawable.ic_outline_wb_sunny_24px,
1026 to R.drawable.ic_outline_desktop_mac_24px,
1027 to R.drawable.ic_outline_computer_24px,
1028 to R.drawable.ic_outline_format_paint_24px,
1029 to R.drawable.ic_outline_storage_24px,
1030 to R.drawable.ic_outline_send_24px,
1031 to R.drawable.ic_outline_weekend_24px,
1032 to R.drawable.ic_outline_link_24px,
1033 to R.drawable.ic_outline_business_24px,
1034 to R.drawable.ic_outline_chat_bubble_outline_24px,
1035 to R.drawable.ic_outline_voicemail_24px,
1036 to R.drawable.ic_outline_email_24px,
1037 to R.drawable.ic_outline_call_24px,
1039 to R.drawable.ic_outline_movie_24px,
1040 to R.drawable.ic_outline_equalizer_24px,
1071 to R.drawable.ic_outline_pie_chart_24px,
1072 to R.drawable.ic_outline_show_chart_24px,
1044 to R.drawable.ic_outline_schedule_24px,
1045 to R.drawable.ic_outline_photo_camera_24px,
1046 to R.drawable.ic_outline_delete_24px,
1047 to R.drawable.ic_outline_attachment_24px,
1048 to R.drawable.ic_outline_vpn_key_24px,
1049 to R.drawable.ic_outline_event_24px,
1050 to R.drawable.ic_outline_place_24px,
1051 to R.drawable.ic_outline_markunread_mailbox_24px,
1052 to R.drawable.ic_outline_label_important_24px,
1053 to R.drawable.ic_outline_android_24px,
1054 to R.drawable.ic_outline_build_24px,
1055 to R.drawable.ic_outline_bug_report_24px,
1056 to R.drawable.ic_outline_book_24px,
1060 to R.drawable.ic_outline_explore_24px,
1061 to R.drawable.ic_outline_gavel_24px,
1063 to R.drawable.ic_outline_print_24px,
1064 to R.drawable.ic_outline_receipt_24px,
1038 to R.drawable.ic_outline_new_releases_24px,
1065 to R.drawable.ic_outline_report_problem_24px,
1068 to R.drawable.ic_outline_error_outline_24px,
1069 to R.drawable.ic_outline_not_interested_24px,
1070 to R.drawable.ic_outline_report_24px,
1066 to R.drawable.ic_outline_turned_in_24px,
1067 to R.drawable.ic_outline_turned_in_not_24px,
1073 to R.drawable.ic_outline_headset_24px,
1074 to R.drawable.ic_outline_mic_none_24px,
1075 to R.drawable.ic_outline_timer_24px,
1076 to R.drawable.ic_outline_clear_24px,
1077 to R.drawable.ic_outline_search_24px,
1078 to R.drawable.ic_outline_repeat_24px,
1079 to R.drawable.ic_outline_notifications_24px,
1080 to R.drawable.ic_outline_star_half_24px,
1081 to R.drawable.ic_outline_share_24px,
1082 to R.drawable.ic_outline_sentiment_very_satisfied_24px,
1083 to R.drawable.ic_outline_sentiment_very_dissatisfied_24px,
1084 to R.drawable.ic_outline_sentiment_satisfied_24px,
1085 to R.drawable.ic_outline_sentiment_dissatisfied_24px,
1086 to R.drawable.ic_outline_mood_bad_24px,
1087 to R.drawable.ic_outline_mood_24px,
1088 to R.drawable.ic_outline_spa_24px,
1089 to R.drawable.ic_outline_room_service_24px,
1090 to R.drawable.ic_outline_meeting_room_24px,
1091 to R.drawable.ic_outline_hot_tub_24px,
1092 to R.drawable.ic_outline_business_center_24px,
1093 to R.drawable.ic_outline_priority_high_24px,
1094 to R.drawable.ic_outline_power_24px,
1095 to R.drawable.ic_outline_power_off_24px,
1096 to R.drawable.ic_outline_directions_bike_24px,
1097 to R.drawable.ic_outline_local_florist_24px,
1098 to R.drawable.ic_outline_local_pizza_24px,
1099 to R.drawable.ic_outline_navigation_24px,
1100 to R.drawable.ic_outline_local_play_24px,
1101 to R.drawable.ic_outline_local_bar_24px,
1102 to R.drawable.ic_outline_local_laundry_service_24px,
1103 to R.drawable.ic_outline_local_offer_24px,
1104 to R.drawable.ic_outline_local_shipping_24px,
1105 to R.drawable.ic_outline_local_hospital_24px,
1106 to R.drawable.ic_outline_directions_boat_24px,
1107 to R.drawable.ic_outline_directions_walk_24px,
1108 to R.drawable.ic_outline_wb_incandescent_24px,
1109 to R.drawable.ic_outline_landscape_24px,
1110 to R.drawable.ic_outline_music_note_24px,
1111 to R.drawable.ic_outline_healing_24px,
1112 to R.drawable.ic_outline_brush_24px,
1113 to R.drawable.ic_outline_brightness_2_24px,
1114 to R.drawable.ic_outline_security_24px,
1115 to R.drawable.ic_outline_scanner_24px,
1116 to R.drawable.ic_outline_router_24px,
1117 to R.drawable.ic_outline_watch_24px,
1118 to R.drawable.ic_outline_videogame_asset_24px,
1119 to R.drawable.ic_cached_24px,
1120 to R.drawable.ic_octocat,
1121 to R.drawable.ic_outline_perm_identity_24px,
1122 to R.drawable.ic_track_changes_24px,
1123 to R.drawable.ic_open_in_new_24px,
1124 to R.drawable.ic_outline_edit_24px,
1125 to R.drawable.ic_outline_info_24px,
1126 to R.drawable.ic_outline_palette_24px,
1127 to R.drawable.ic_outline_sd_storage_24px
)
@kotlin.jvm.JvmStatic

@ -13,7 +13,10 @@ class WidgetConfigActivity : BasePreferences() {
private var appWidgetId: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID)
appWidgetId = intent.getIntExtra(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID
)
super.onCreate(savedInstanceState)

Loading…
Cancel
Save