mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
Merge pull request #2189 from naveensingh/sdk_and_viewbinding_migration
Migrate to View binding, SDK 34 and Version catalogs
This commit is contained in:
@@ -1,84 +0,0 @@
|
||||
plugins {
|
||||
id 'com.android.application'
|
||||
id 'kotlin-android'
|
||||
id 'kotlin-android-extensions'
|
||||
id 'kotlin-kapt'
|
||||
id 'de.timfreiheit.resourceplaceholders'
|
||||
}
|
||||
|
||||
def keystorePropertiesFile = rootProject.file("keystore.properties")
|
||||
def keystoreProperties = new Properties()
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 33
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.simplemobiletools.calendar.pro"
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 33
|
||||
versionCode 238
|
||||
versionName "6.22.2"
|
||||
multiDexEnabled true
|
||||
setProperty("archivesBaseName", "calendar")
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
release {
|
||||
keyAlias keystoreProperties['keyAlias']
|
||||
keyPassword keystoreProperties['keyPassword']
|
||||
storeFile file(keystoreProperties['storeFile'])
|
||||
storePassword keystoreProperties['storePassword']
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
debug {
|
||||
applicationIdSuffix ".debug"
|
||||
}
|
||||
release {
|
||||
minifyEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flavorDimensions "variants"
|
||||
productFlavors {
|
||||
core {}
|
||||
fdroid {}
|
||||
prepaid {}
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
checkReleaseBuilds false
|
||||
abortOnError false
|
||||
}
|
||||
|
||||
resourcePlaceholders {
|
||||
files = ['xml/shortcuts.xml']
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.github.SimpleMobileTools:Simple-Commons:8814cd2d4b'
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
||||
implementation "androidx.print:print:1.0.0"
|
||||
|
||||
kapt 'androidx.room:room-compiler:2.5.2'
|
||||
implementation 'androidx.room:room-runtime:2.5.2'
|
||||
annotationProcessor 'androidx.room:room-compiler:2.5.2'
|
||||
}
|
100
app/build.gradle.kts
Normal file
100
app/build.gradle.kts
Normal file
@@ -0,0 +1,100 @@
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
import org.jetbrains.kotlin.konan.properties.Properties
|
||||
import java.io.FileInputStream
|
||||
|
||||
plugins {
|
||||
alias(libs.plugins.android)
|
||||
alias(libs.plugins.kotlinAndroid)
|
||||
alias(libs.plugins.ksp)
|
||||
}
|
||||
|
||||
val keystorePropertiesFile: File = rootProject.file("keystore.properties")
|
||||
val keystoreProperties = Properties()
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk = project.libs.versions.app.build.compileSDKVersion.get().toInt()
|
||||
|
||||
defaultConfig {
|
||||
applicationId = libs.versions.app.version.appId.get()
|
||||
minSdk = project.libs.versions.app.build.minimumSDK.get().toInt()
|
||||
targetSdk = project.libs.versions.app.build.targetSDK.get().toInt()
|
||||
versionCode = project.libs.versions.app.version.versionCode.get().toInt()
|
||||
versionName = project.libs.versions.app.version.versionName.get()
|
||||
multiDexEnabled = true
|
||||
setProperty("archivesBaseName", "calendar")
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
register("release") {
|
||||
keyAlias = keystoreProperties.getProperty("keyAlias")
|
||||
keyPassword = keystoreProperties.getProperty("keyPassword")
|
||||
storeFile = file(keystoreProperties.getProperty("storeFile"))
|
||||
storePassword = keystoreProperties.getProperty("storePassword")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
viewBinding = true
|
||||
buildConfig = true
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
debug {
|
||||
applicationIdSuffix = ".debug"
|
||||
}
|
||||
release {
|
||||
isMinifyEnabled = true
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
signingConfig = signingConfigs.getByName("release")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flavorDimensions.add("variants")
|
||||
productFlavors {
|
||||
register("core")
|
||||
register("fdroid")
|
||||
register("prepaid")
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
getByName("main").java.srcDirs("src/main/kotlin")
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
val currentJavaVersionFromLibs = JavaVersion.valueOf(libs.versions.app.build.javaVersion.get().toString())
|
||||
sourceCompatibility = currentJavaVersionFromLibs
|
||||
targetCompatibility = currentJavaVersionFromLibs
|
||||
}
|
||||
|
||||
tasks.withType<KotlinCompile> {
|
||||
kotlinOptions.jvmTarget = project.libs.versions.app.build.kotlinJVMTarget.get()
|
||||
}
|
||||
|
||||
namespace = libs.versions.app.version.appId.get()
|
||||
|
||||
lint {
|
||||
checkReleaseBuilds = false
|
||||
abortOnError = false
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(libs.simple.mobile.tools.commons)
|
||||
implementation(libs.androidx.multidex)
|
||||
implementation(libs.androidx.constraintlayout)
|
||||
implementation(libs.androidx.swiperefreshlayout)
|
||||
implementation(libs.androidx.print)
|
||||
implementation(libs.bundles.room)
|
||||
ksp(libs.androidx.room.compiler)
|
||||
}
|
@@ -1,7 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.simplemobiletools.calendar.pro"
|
||||
android:installLocation="auto">
|
||||
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
@@ -10,10 +9,13 @@
|
||||
<uses-permission android:name="android.permission.READ_CALENDAR" />
|
||||
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
|
||||
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
<uses-permission
|
||||
android:name="android.permission.SCHEDULE_EXACT_ALARM"
|
||||
android:maxSdkVersion="32" />
|
||||
|
||||
<uses-permission
|
||||
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="28" />
|
||||
|
@@ -28,6 +28,8 @@ import com.google.gson.Gson
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.adapters.AutoCompleteTextViewAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.ActivityEventBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.ItemAttendeeBinding
|
||||
import com.simplemobiletools.calendar.pro.dialogs.*
|
||||
import com.simplemobiletools.calendar.pro.extensions.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.*
|
||||
@@ -40,10 +42,6 @@ import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import com.simplemobiletools.commons.views.MyAutoCompleteTextView
|
||||
import kotlinx.android.synthetic.main.activity_event.*
|
||||
import kotlinx.android.synthetic.main.activity_event.view.event_reminder_2
|
||||
import kotlinx.android.synthetic.main.activity_event.view.event_reminder_3
|
||||
import kotlinx.android.synthetic.main.item_attendee.view.*
|
||||
import org.joda.time.DateTime
|
||||
import org.joda.time.DateTimeZone
|
||||
import java.util.TimeZone
|
||||
@@ -85,10 +83,12 @@ class EventActivity : SimpleActivity() {
|
||||
private lateinit var mEventEndDateTime: DateTime
|
||||
private lateinit var mEvent: Event
|
||||
|
||||
private val binding by viewBinding(ActivityEventBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_event)
|
||||
setContentView(binding.root)
|
||||
setupOptionsMenu()
|
||||
refreshMenuItems()
|
||||
|
||||
@@ -96,8 +96,8 @@ class EventActivity : SimpleActivity() {
|
||||
return
|
||||
}
|
||||
|
||||
updateMaterialActivityViews(event_coordinator, event_holder, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(event_nested_scrollview, event_toolbar)
|
||||
updateMaterialActivityViews(binding.eventCoordinator, binding.eventHolder, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(binding.eventNestedScrollview, binding.eventToolbar)
|
||||
|
||||
val intent = intent ?: return
|
||||
mWasContactsPermissionChecked = hasPermission(PERMISSION_READ_CONTACTS)
|
||||
@@ -123,13 +123,19 @@ class EventActivity : SimpleActivity() {
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(event_toolbar, NavigationIcon.Arrow)
|
||||
setupToolbar(binding.eventToolbar, NavigationIcon.Arrow)
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
if (System.currentTimeMillis() - mLastSavePromptTS > SAVE_DISCARD_PROMPT_INTERVAL && isEventChanged()) {
|
||||
mLastSavePromptTS = System.currentTimeMillis()
|
||||
ConfirmationAdvancedDialog(this, "", R.string.save_before_closing, R.string.save, R.string.discard) {
|
||||
ConfirmationAdvancedDialog(
|
||||
activity = this,
|
||||
message = "",
|
||||
messageId = com.simplemobiletools.commons.R.string.save_before_closing,
|
||||
positive = com.simplemobiletools.commons.R.string.save,
|
||||
negative = com.simplemobiletools.commons.R.string.discard
|
||||
) {
|
||||
if (it) {
|
||||
saveCurrentEvent()
|
||||
} else {
|
||||
@@ -235,7 +241,7 @@ class EventActivity : SimpleActivity() {
|
||||
super.onActivityResult(requestCode, resultCode, resultData)
|
||||
}
|
||||
|
||||
private fun gotEvent(savedInstanceState: Bundle?, localEventType: EventType?, event: Event?) {
|
||||
private fun gotEvent(savedInstanceState: Bundle?, localEventType: EventType?, event: Event?) = binding.apply {
|
||||
if (localEventType == null || localEventType.caldavCalendarId != 0) {
|
||||
config.lastUsedLocalEventTypeId = REGULAR_EVENT_TYPE_ID
|
||||
}
|
||||
@@ -251,7 +257,7 @@ class EventActivity : SimpleActivity() {
|
||||
|
||||
if (intent.getBooleanExtra(IS_DUPLICATE_INTENT, false)) {
|
||||
mEvent.id = null
|
||||
event_toolbar.title = getString(R.string.new_event)
|
||||
eventToolbar.title = getString(R.string.new_event)
|
||||
} else {
|
||||
cancelNotification(mEvent.id!!)
|
||||
}
|
||||
@@ -274,24 +280,24 @@ class EventActivity : SimpleActivity() {
|
||||
updateCalDAVCalendar()
|
||||
}
|
||||
|
||||
event_show_on_map.setOnClickListener { showOnMap() }
|
||||
event_start_date.setOnClickListener { setupStartDate() }
|
||||
event_start_time.setOnClickListener { setupStartTime() }
|
||||
event_end_date.setOnClickListener { setupEndDate() }
|
||||
event_end_time.setOnClickListener { setupEndTime() }
|
||||
event_time_zone.setOnClickListener { setupTimeZone() }
|
||||
eventShowOnMap.setOnClickListener { showOnMap() }
|
||||
eventStartDate.setOnClickListener { setupStartDate() }
|
||||
eventStartTime.setOnClickListener { setupStartTime() }
|
||||
eventEndDate.setOnClickListener { setupEndDate() }
|
||||
eventEndTime.setOnClickListener { setupEndTime() }
|
||||
eventTimeZone.setOnClickListener { setupTimeZone() }
|
||||
|
||||
event_all_day.setOnCheckedChangeListener { _, isChecked -> toggleAllDay(isChecked) }
|
||||
event_repetition.setOnClickListener { showRepeatIntervalDialog() }
|
||||
event_repetition_rule_holder.setOnClickListener { showRepetitionRuleDialog() }
|
||||
event_repetition_limit_holder.setOnClickListener { showRepetitionTypePicker() }
|
||||
eventAllDay.setOnCheckedChangeListener { _, isChecked -> toggleAllDay(isChecked) }
|
||||
eventRepetition.setOnClickListener { showRepeatIntervalDialog() }
|
||||
eventRepetitionRuleHolder.setOnClickListener { showRepetitionRuleDialog() }
|
||||
eventRepetitionLimitHolder.setOnClickListener { showRepetitionTypePicker() }
|
||||
|
||||
event_reminder_1.setOnClickListener {
|
||||
eventReminder1.setOnClickListener {
|
||||
handleNotificationAvailability {
|
||||
if (config.wasAlarmWarningShown) {
|
||||
showReminder1Dialog()
|
||||
} else {
|
||||
ReminderWarningDialog(this) {
|
||||
ReminderWarningDialog(this@EventActivity) {
|
||||
config.wasAlarmWarningShown = true
|
||||
showReminder1Dialog()
|
||||
}
|
||||
@@ -299,31 +305,31 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
event_reminder_2.setOnClickListener { showReminder2Dialog() }
|
||||
event_reminder_3.setOnClickListener { showReminder3Dialog() }
|
||||
eventReminder2.setOnClickListener { showReminder2Dialog() }
|
||||
eventReminder3.setOnClickListener { showReminder3Dialog() }
|
||||
|
||||
event_reminder_1_type.setOnClickListener {
|
||||
eventReminder1Type.setOnClickListener {
|
||||
showReminderTypePicker(mReminder1Type) {
|
||||
mReminder1Type = it
|
||||
updateReminderTypeImage(event_reminder_1_type, Reminder(mReminder1Minutes, mReminder1Type))
|
||||
updateReminderTypeImage(eventReminder1Type, Reminder(mReminder1Minutes, mReminder1Type))
|
||||
}
|
||||
}
|
||||
|
||||
event_reminder_2_type.setOnClickListener {
|
||||
eventReminder2Type.setOnClickListener {
|
||||
showReminderTypePicker(mReminder2Type) {
|
||||
mReminder2Type = it
|
||||
updateReminderTypeImage(event_reminder_2_type, Reminder(mReminder2Minutes, mReminder2Type))
|
||||
updateReminderTypeImage(eventReminder2Type, Reminder(mReminder2Minutes, mReminder2Type))
|
||||
}
|
||||
}
|
||||
|
||||
event_reminder_3_type.setOnClickListener {
|
||||
eventReminder3Type.setOnClickListener {
|
||||
showReminderTypePicker(mReminder3Type) {
|
||||
mReminder3Type = it
|
||||
updateReminderTypeImage(event_reminder_3_type, Reminder(mReminder3Minutes, mReminder3Type))
|
||||
updateReminderTypeImage(eventReminder3Type, Reminder(mReminder3Minutes, mReminder3Type))
|
||||
}
|
||||
}
|
||||
|
||||
event_availability.setOnClickListener {
|
||||
eventAvailability.setOnClickListener {
|
||||
showAvailabilityPicker(mAvailability) {
|
||||
mAvailability = it
|
||||
updateAvailabilityText()
|
||||
@@ -331,21 +337,21 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
event_type_holder.setOnClickListener { showEventTypeDialog() }
|
||||
event_all_day.apply {
|
||||
eventTypeHolder.setOnClickListener { showEventTypeDialog() }
|
||||
eventAllDay.apply {
|
||||
isChecked = mEvent.getIsAllDay()
|
||||
jumpDrawablesToCurrentState()
|
||||
}
|
||||
|
||||
event_all_day_holder.setOnClickListener {
|
||||
event_all_day.toggle()
|
||||
eventAllDayHolder.setOnClickListener {
|
||||
eventAllDay.toggle()
|
||||
}
|
||||
|
||||
event_color_holder.setOnClickListener {
|
||||
eventColorHolder.setOnClickListener {
|
||||
showEventColorDialog()
|
||||
}
|
||||
|
||||
updateTextColors(event_nested_scrollview)
|
||||
updateTextColors(eventNestedScrollview)
|
||||
updateIconColors()
|
||||
refreshMenuItems()
|
||||
showOrHideTimeZone()
|
||||
@@ -353,7 +359,7 @@ class EventActivity : SimpleActivity() {
|
||||
|
||||
private fun refreshMenuItems() {
|
||||
if (::mEvent.isInitialized) {
|
||||
event_toolbar.menu.apply {
|
||||
binding.eventToolbar.menu.apply {
|
||||
findItem(R.id.delete).isVisible = mEvent.id != null
|
||||
findItem(R.id.share).isVisible = mEvent.id != null
|
||||
findItem(R.id.duplicate).isVisible = mEvent.id != null
|
||||
@@ -362,7 +368,7 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun setupOptionsMenu() {
|
||||
event_toolbar.setOnMenuItemClickListener { menuItem ->
|
||||
binding.eventToolbar.setOnMenuItemClickListener { menuItem ->
|
||||
if (!::mEvent.isInitialized) {
|
||||
return@setOnMenuItemClickListener true
|
||||
}
|
||||
@@ -429,10 +435,10 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
val reminders = getReminders()
|
||||
if (event_title.text.toString() != mEvent.title ||
|
||||
event_location.text.toString() != mEvent.location ||
|
||||
event_description.text.toString() != mEvent.description ||
|
||||
event_time_zone.text != mEvent.getTimeZoneString() ||
|
||||
if (binding.eventTitle.text.toString() != mEvent.title ||
|
||||
binding.eventLocation.text.toString() != mEvent.location ||
|
||||
binding.eventDescription.text.toString() != mEvent.description ||
|
||||
binding.eventTimeZone.text != mEvent.getTimeZoneString() ||
|
||||
reminders != mEvent.getReminders() ||
|
||||
mRepeatInterval != mEvent.repeatInterval ||
|
||||
mRepeatRule != mEvent.repeatRule ||
|
||||
@@ -467,7 +473,7 @@ class EventActivity : SimpleActivity() {
|
||||
mOriginalEndTS = realStart + duration
|
||||
|
||||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
|
||||
event_toolbar.title = getString(R.string.edit_event)
|
||||
binding.eventToolbar.title = getString(R.string.edit_event)
|
||||
mOriginalTimeZone = mEvent.timeZone
|
||||
if (config.allowChangingTimeZones) {
|
||||
try {
|
||||
@@ -483,9 +489,9 @@ class EventActivity : SimpleActivity() {
|
||||
mEventEndDateTime = Formatter.getDateTimeFromTS(realStart + duration)
|
||||
}
|
||||
|
||||
event_title.setText(mEvent.title)
|
||||
event_location.setText(mEvent.location)
|
||||
event_description.setText(mEvent.description)
|
||||
binding.eventTitle.setText(mEvent.title)
|
||||
binding.eventLocation.setText(mEvent.location)
|
||||
binding.eventDescription.setText(mEvent.description)
|
||||
|
||||
mReminder1Minutes = mEvent.reminder1Minutes
|
||||
mReminder2Minutes = mEvent.reminder2Minutes
|
||||
@@ -510,8 +516,8 @@ class EventActivity : SimpleActivity() {
|
||||
|
||||
private fun setupNewEvent() {
|
||||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
|
||||
event_title.requestFocus()
|
||||
event_toolbar.title = getString(R.string.new_event)
|
||||
binding.eventTitle.requestFocus()
|
||||
binding.eventToolbar.title = getString(R.string.new_event)
|
||||
if (config.defaultEventTypeId != -1L) {
|
||||
config.lastUsedCaldavCalendarId = mStoredEventTypes.firstOrNull { it.id == config.defaultEventTypeId }?.caldavCalendarId ?: 0
|
||||
}
|
||||
@@ -528,15 +534,15 @@ class EventActivity : SimpleActivity() {
|
||||
|
||||
if (intent.getBooleanExtra("allDay", false)) {
|
||||
mEvent.flags = mEvent.flags or FLAG_ALL_DAY
|
||||
event_all_day.isChecked = true
|
||||
binding.eventAllDay.isChecked = true
|
||||
toggleAllDay(true)
|
||||
}
|
||||
|
||||
event_title.setText(intent.getStringExtra("title"))
|
||||
event_location.setText(intent.getStringExtra("eventLocation"))
|
||||
event_description.setText(intent.getStringExtra("description"))
|
||||
if (event_description.value.isNotEmpty()) {
|
||||
event_description.movementMethod = LinkMovementMethod.getInstance()
|
||||
binding.eventTitle.setText(intent.getStringExtra("title"))
|
||||
binding.eventLocation.setText(intent.getStringExtra("eventLocation"))
|
||||
binding.eventDescription.setText(intent.getStringExtra("description"))
|
||||
if (binding.eventDescription.value.isNotEmpty()) {
|
||||
binding.eventDescription.movementMethod = LinkMovementMethod.getInstance()
|
||||
}
|
||||
} else {
|
||||
val startTS = intent.getLongExtra(NEW_EVENT_START_TS, 0L)
|
||||
@@ -627,10 +633,10 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun checkRepeatTexts(limit: Int) {
|
||||
event_repetition_limit_holder.beGoneIf(limit == 0)
|
||||
binding.eventRepetitionLimitHolder.beGoneIf(limit == 0)
|
||||
checkRepetitionLimitText()
|
||||
|
||||
event_repetition_rule_holder.beVisibleIf(mRepeatInterval.isXWeeklyRepetition() || mRepeatInterval.isXMonthlyRepetition() || mRepeatInterval.isXYearlyRepetition())
|
||||
binding.eventRepetitionRuleHolder.beVisibleIf(mRepeatInterval.isXWeeklyRepetition() || mRepeatInterval.isXMonthlyRepetition() || mRepeatInterval.isXYearlyRepetition())
|
||||
checkRepetitionRuleText()
|
||||
}
|
||||
|
||||
@@ -647,20 +653,20 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun checkRepetitionLimitText() {
|
||||
event_repetition_limit.text = when {
|
||||
binding.eventRepetitionLimit.text = when {
|
||||
mRepeatLimit == 0L -> {
|
||||
event_repetition_limit_label.text = getString(R.string.repeat)
|
||||
binding.eventRepetitionLimitLabel.text = getString(R.string.repeat)
|
||||
resources.getString(R.string.forever)
|
||||
}
|
||||
|
||||
mRepeatLimit > 0 -> {
|
||||
event_repetition_limit_label.text = getString(R.string.repeat_till)
|
||||
binding.eventRepetitionLimitLabel.text = getString(R.string.repeat_till)
|
||||
val repeatLimitDateTime = Formatter.getDateTimeFromTS(mRepeatLimit)
|
||||
Formatter.getFullDate(this, repeatLimitDateTime)
|
||||
}
|
||||
|
||||
else -> {
|
||||
event_repetition_limit_label.text = getString(R.string.repeat)
|
||||
binding.eventRepetitionLimitLabel.text = getString(R.string.repeat)
|
||||
"${-mRepeatLimit} ${getString(R.string.times)}"
|
||||
}
|
||||
}
|
||||
@@ -779,7 +785,7 @@ class EventActivity : SimpleActivity() {
|
||||
|
||||
private fun getRepeatXthDayInMonthString(includeBase: Boolean, repeatRule: Int): String {
|
||||
val weekDayString = getRepeatXthDayString(includeBase, repeatRule)
|
||||
val monthString = resources.getStringArray(R.array.in_months)[mEventStartDateTime.monthOfYear - 1]
|
||||
val monthString = resources.getStringArray(com.simplemobiletools.commons.R.array.in_months)[mEventStartDateTime.monthOfYear - 1]
|
||||
return "$weekDayString $monthString"
|
||||
}
|
||||
|
||||
@@ -794,23 +800,27 @@ class EventActivity : SimpleActivity() {
|
||||
private fun checkRepetitionRuleText() {
|
||||
when {
|
||||
mRepeatInterval.isXWeeklyRepetition() -> {
|
||||
event_repetition_rule.text = if (mRepeatRule == EVERY_DAY_BIT) getString(R.string.every_day) else getShortDaysFromBitmask(mRepeatRule)
|
||||
binding.eventRepetitionRule.text = if (mRepeatRule == EVERY_DAY_BIT) {
|
||||
getString(com.simplemobiletools.commons.R.string.every_day)
|
||||
} else {
|
||||
getShortDaysFromBitmask(mRepeatRule)
|
||||
}
|
||||
}
|
||||
|
||||
mRepeatInterval.isXMonthlyRepetition() -> {
|
||||
val repeatString = if (mRepeatRule == REPEAT_ORDER_WEEKDAY_USE_LAST || mRepeatRule == REPEAT_ORDER_WEEKDAY)
|
||||
R.string.repeat else R.string.repeat_on
|
||||
|
||||
event_repetition_rule_label.text = getString(repeatString)
|
||||
event_repetition_rule.text = getMonthlyRepetitionRuleText()
|
||||
binding.eventRepetitionRuleLabel.text = getString(repeatString)
|
||||
binding.eventRepetitionRule.text = getMonthlyRepetitionRuleText()
|
||||
}
|
||||
|
||||
mRepeatInterval.isXYearlyRepetition() -> {
|
||||
val repeatString = if (mRepeatRule == REPEAT_ORDER_WEEKDAY_USE_LAST || mRepeatRule == REPEAT_ORDER_WEEKDAY)
|
||||
R.string.repeat else R.string.repeat_on
|
||||
|
||||
event_repetition_rule_label.text = getString(repeatString)
|
||||
event_repetition_rule.text = getYearlyRepetitionRuleText()
|
||||
binding.eventRepetitionRuleLabel.text = getString(repeatString)
|
||||
binding.eventRepetitionRule.text = getYearlyRepetitionRuleText()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -903,12 +913,12 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateReminder1Text() {
|
||||
event_reminder_1.text = getFormattedMinutes(mReminder1Minutes)
|
||||
binding.eventReminder1.text = getFormattedMinutes(mReminder1Minutes)
|
||||
}
|
||||
|
||||
private fun updateReminder2Text() {
|
||||
event_reminder_2.apply {
|
||||
beGoneIf(event_reminder_2.isGone() && mReminder1Minutes == REMINDER_OFF)
|
||||
binding.eventReminder2.apply {
|
||||
beGoneIf(isGone() && mReminder1Minutes == REMINDER_OFF)
|
||||
if (mReminder2Minutes == REMINDER_OFF) {
|
||||
text = resources.getString(R.string.add_another_reminder)
|
||||
alpha = 0.4f
|
||||
@@ -920,8 +930,8 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateReminder3Text() {
|
||||
event_reminder_3.apply {
|
||||
beGoneIf(event_reminder_3.isGone() && (mReminder2Minutes == REMINDER_OFF || mReminder1Minutes == REMINDER_OFF))
|
||||
binding.eventReminder3.apply {
|
||||
beGoneIf(isGone() && (mReminder2Minutes == REMINDER_OFF || mReminder1Minutes == REMINDER_OFF))
|
||||
if (mReminder3Minutes == REMINDER_OFF) {
|
||||
text = resources.getString(R.string.add_another_reminder)
|
||||
alpha = 0.4f
|
||||
@@ -934,8 +944,8 @@ class EventActivity : SimpleActivity() {
|
||||
|
||||
private fun showReminderTypePicker(currentValue: Int, callback: (Int) -> Unit) {
|
||||
val items = arrayListOf(
|
||||
RadioItem(REMINDER_NOTIFICATION, getString(R.string.notification)),
|
||||
RadioItem(REMINDER_EMAIL, getString(R.string.email))
|
||||
RadioItem(REMINDER_NOTIFICATION, getString(com.simplemobiletools.commons.R.string.notification)),
|
||||
RadioItem(REMINDER_EMAIL, getString(com.simplemobiletools.commons.R.string.email))
|
||||
)
|
||||
RadioGroupDialog(this, items, currentValue) {
|
||||
callback(it as Int)
|
||||
@@ -953,24 +963,29 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateReminderTypeImages() {
|
||||
updateReminderTypeImage(event_reminder_1_type, Reminder(mReminder1Minutes, mReminder1Type))
|
||||
updateReminderTypeImage(event_reminder_2_type, Reminder(mReminder2Minutes, mReminder2Type))
|
||||
updateReminderTypeImage(event_reminder_3_type, Reminder(mReminder3Minutes, mReminder3Type))
|
||||
updateReminderTypeImage(binding.eventReminder1Type, Reminder(mReminder1Minutes, mReminder1Type))
|
||||
updateReminderTypeImage(binding.eventReminder2Type, Reminder(mReminder2Minutes, mReminder2Type))
|
||||
updateReminderTypeImage(binding.eventReminder3Type, Reminder(mReminder3Minutes, mReminder3Type))
|
||||
}
|
||||
|
||||
private fun updateCalDAVVisibility() {
|
||||
val isSyncedEvent = mEventCalendarId != STORED_LOCALLY_ONLY
|
||||
event_attendees_image.beVisibleIf(isSyncedEvent)
|
||||
event_attendees_holder.beVisibleIf(isSyncedEvent)
|
||||
event_attendees_divider.beVisibleIf(isSyncedEvent)
|
||||
event_availability_divider.beVisibleIf(isSyncedEvent)
|
||||
event_availability_image.beVisibleIf(isSyncedEvent)
|
||||
event_availability.beVisibleIf(isSyncedEvent)
|
||||
binding.eventAttendeesImage.beVisibleIf(isSyncedEvent)
|
||||
binding.eventAttendeesHolder.beVisibleIf(isSyncedEvent)
|
||||
binding.eventAttendeesDivider.beVisibleIf(isSyncedEvent)
|
||||
binding.eventAvailabilityDivider.beVisibleIf(isSyncedEvent)
|
||||
binding.eventAvailabilityImage.beVisibleIf(isSyncedEvent)
|
||||
binding.eventAvailability.beVisibleIf(isSyncedEvent)
|
||||
}
|
||||
|
||||
private fun updateReminderTypeImage(view: ImageView, reminder: Reminder) {
|
||||
view.beVisibleIf(reminder.minutes != REMINDER_OFF && mEventCalendarId != STORED_LOCALLY_ONLY)
|
||||
val drawable = if (reminder.type == REMINDER_NOTIFICATION) R.drawable.ic_bell_vector else R.drawable.ic_mail_vector
|
||||
val drawable = if (reminder.type == REMINDER_NOTIFICATION) {
|
||||
com.simplemobiletools.commons.R.drawable.ic_bell_vector
|
||||
} else {
|
||||
com.simplemobiletools.commons.R.drawable.ic_mail_vector
|
||||
}
|
||||
|
||||
val icon = resources.getColoredDrawableWithColor(drawable, getProperTextColor())
|
||||
view.setImageDrawable(icon)
|
||||
}
|
||||
@@ -978,15 +993,15 @@ class EventActivity : SimpleActivity() {
|
||||
private fun updateAvailabilityImage() {
|
||||
val drawable = if (mAvailability == Attendees.AVAILABILITY_FREE) R.drawable.ic_event_available_vector else R.drawable.ic_event_busy_vector
|
||||
val icon = resources.getColoredDrawableWithColor(drawable, getProperTextColor())
|
||||
event_availability_image.setImageDrawable(icon)
|
||||
binding.eventAvailabilityImage.setImageDrawable(icon)
|
||||
}
|
||||
|
||||
private fun updateAvailabilityText() {
|
||||
event_availability.text = if (mAvailability == Attendees.AVAILABILITY_FREE) getString(R.string.status_free) else getString(R.string.status_busy)
|
||||
binding.eventAvailability.text = if (mAvailability == Attendees.AVAILABILITY_FREE) getString(R.string.status_free) else getString(R.string.status_busy)
|
||||
}
|
||||
|
||||
private fun updateRepetitionText() {
|
||||
event_repetition.text = getRepetitionText(mRepeatInterval)
|
||||
binding.eventRepetition.text = getRepetitionText(mRepeatInterval)
|
||||
}
|
||||
|
||||
private fun updateEventType() {
|
||||
@@ -994,7 +1009,7 @@ class EventActivity : SimpleActivity() {
|
||||
val eventType = eventTypesDB.getEventTypeWithId(mEventTypeId)
|
||||
if (eventType != null) {
|
||||
runOnUiThread {
|
||||
event_type.text = eventType.title
|
||||
binding.eventType.text = eventType.title
|
||||
updateEventColorInfo(eventType.color)
|
||||
}
|
||||
}
|
||||
@@ -1003,16 +1018,16 @@ class EventActivity : SimpleActivity() {
|
||||
|
||||
private fun updateCalDAVCalendar() {
|
||||
if (config.caldavSync) {
|
||||
event_caldav_calendar_image.beVisible()
|
||||
event_caldav_calendar_holder.beVisible()
|
||||
event_caldav_calendar_divider.beVisible()
|
||||
binding.eventCaldavCalendarImage.beVisible()
|
||||
binding.eventCaldavCalendarHolder.beVisible()
|
||||
binding.eventCaldavCalendarDivider.beVisible()
|
||||
|
||||
val calendars = calDAVHelper.getCalDAVCalendars("", true).filter {
|
||||
it.canWrite() && config.getSyncedCalendarIdsAsList().contains(it.id)
|
||||
}
|
||||
updateCurrentCalendarInfo(if (mEventCalendarId == STORED_LOCALLY_ONLY) null else getCalendarWithId(calendars, getCalendarId()))
|
||||
|
||||
event_caldav_calendar_holder.setOnClickListener {
|
||||
binding.eventCaldavCalendarHolder.setOnClickListener {
|
||||
hideKeyboard()
|
||||
SelectEventCalendarDialog(this, calendars, mEventCalendarId) {
|
||||
if (mEventCalendarId != STORED_LOCALLY_ONLY && it == STORED_LOCALLY_ONLY) {
|
||||
@@ -1038,37 +1053,37 @@ class EventActivity : SimpleActivity() {
|
||||
|
||||
private fun getCalendarWithId(calendars: List<CalDAVCalendar>, calendarId: Int) = calendars.firstOrNull { it.id == calendarId }
|
||||
|
||||
private fun updateCurrentCalendarInfo(currentCalendar: CalDAVCalendar?) {
|
||||
event_type_image.beVisibleIf(currentCalendar == null)
|
||||
event_type_holder.beVisibleIf(currentCalendar == null)
|
||||
event_caldav_calendar_divider.beVisibleIf(currentCalendar == null)
|
||||
event_caldav_calendar_email.beGoneIf(currentCalendar == null)
|
||||
private fun updateCurrentCalendarInfo(currentCalendar: CalDAVCalendar?) = binding.apply {
|
||||
eventTypeImage.beVisibleIf(currentCalendar == null)
|
||||
eventTypeHolder.beVisibleIf(currentCalendar == null)
|
||||
eventCaldavCalendarDivider.beVisibleIf(currentCalendar == null)
|
||||
eventCaldavCalendarEmail.beGoneIf(currentCalendar == null)
|
||||
|
||||
if (currentCalendar == null) {
|
||||
mEventCalendarId = STORED_LOCALLY_ONLY
|
||||
val mediumMargin = resources.getDimension(R.dimen.medium_margin).toInt()
|
||||
event_caldav_calendar_name.apply {
|
||||
val mediumMargin = resources.getDimension(com.simplemobiletools.commons.R.dimen.medium_margin).toInt()
|
||||
eventCaldavCalendarName.apply {
|
||||
text = getString(R.string.store_locally_only)
|
||||
setPadding(paddingLeft, paddingTop, paddingRight, mediumMargin)
|
||||
}
|
||||
|
||||
event_caldav_calendar_holder.apply {
|
||||
eventCaldavCalendarHolder.apply {
|
||||
setPadding(paddingLeft, mediumMargin, paddingRight, mediumMargin)
|
||||
}
|
||||
|
||||
ensureBackgroundThread {
|
||||
val eventType = eventTypesDB.getEventTypeWithId(mEventTypeId)
|
||||
runOnUiThread {
|
||||
event_color_image.beVisibleIf(eventType != null)
|
||||
event_color_holder.beVisibleIf(eventType != null)
|
||||
event_color_divider.beVisibleIf(eventType != null)
|
||||
eventColorImage.beVisibleIf(eventType != null)
|
||||
eventColorHolder.beVisibleIf(eventType != null)
|
||||
eventColorDivider.beVisibleIf(eventType != null)
|
||||
if (eventType != null) {
|
||||
updateEventColorInfo(eventType.color)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
event_caldav_calendar_email.text = currentCalendar.accountName
|
||||
eventCaldavCalendarEmail.text = currentCalendar.accountName
|
||||
|
||||
ensureBackgroundThread {
|
||||
val eventType = eventsHelper.getEventTypeWithCalDAVCalendarId(currentCalendar.id)
|
||||
@@ -1080,18 +1095,18 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
runOnUiThread {
|
||||
event_caldav_calendar_name.apply {
|
||||
eventCaldavCalendarName.apply {
|
||||
text = currentCalendar.displayName
|
||||
setPadding(paddingLeft, paddingTop, paddingRight, resources.getDimension(R.dimen.tiny_margin).toInt())
|
||||
setPadding(paddingLeft, paddingTop, paddingRight, resources.getDimension(com.simplemobiletools.commons.R.dimen.tiny_margin).toInt())
|
||||
}
|
||||
|
||||
event_caldav_calendar_holder.apply {
|
||||
eventCaldavCalendarHolder.apply {
|
||||
setPadding(paddingLeft, 0, paddingRight, 0)
|
||||
}
|
||||
|
||||
event_color_image.beVisibleIf(canCustomizeColors)
|
||||
event_color_holder.beVisibleIf(canCustomizeColors)
|
||||
event_color_divider.beVisibleIf(canCustomizeColors)
|
||||
eventColorImage.beVisibleIf(canCustomizeColors)
|
||||
eventColorHolder.beVisibleIf(canCustomizeColors)
|
||||
eventColorDivider.beVisibleIf(canCustomizeColors)
|
||||
if (canCustomizeColors) {
|
||||
updateEventColorInfo(calendarColor)
|
||||
}
|
||||
@@ -1106,7 +1121,7 @@ class EventActivity : SimpleActivity() {
|
||||
} else {
|
||||
mEventColor
|
||||
}
|
||||
event_color.setFillWithStroke(eventColor, getProperBackgroundColor())
|
||||
binding.eventColor.setFillWithStroke(eventColor, getProperBackgroundColor())
|
||||
}
|
||||
|
||||
private fun getEventColors(eventType: EventType): IntArray {
|
||||
@@ -1129,8 +1144,8 @@ class EventActivity : SimpleActivity() {
|
||||
private fun toggleAllDay(isAllDay: Boolean) {
|
||||
hideKeyboard()
|
||||
mIsAllDayEvent = isAllDay
|
||||
event_start_time.beGoneIf(isAllDay)
|
||||
event_end_time.beGoneIf(isAllDay)
|
||||
binding.eventStartTime.beGoneIf(isAllDay)
|
||||
binding.eventEndTime.beGoneIf(isAllDay)
|
||||
updateTimeZoneText()
|
||||
showOrHideTimeZone()
|
||||
resetTime()
|
||||
@@ -1138,9 +1153,9 @@ class EventActivity : SimpleActivity() {
|
||||
|
||||
private fun showOrHideTimeZone() {
|
||||
val allowChangingTimeZones = config.allowChangingTimeZones && !mIsAllDayEvent
|
||||
event_time_zone_divider.beVisibleIf(allowChangingTimeZones)
|
||||
event_time_zone_image.beVisibleIf(allowChangingTimeZones)
|
||||
event_time_zone.beVisibleIf(allowChangingTimeZones)
|
||||
binding.eventTimeZoneDivider.beVisibleIf(allowChangingTimeZones)
|
||||
binding.eventTimeZoneImage.beVisibleIf(allowChangingTimeZones)
|
||||
binding.eventTimeZone.beVisibleIf(allowChangingTimeZones)
|
||||
}
|
||||
|
||||
private fun shareEvent() {
|
||||
@@ -1196,11 +1211,11 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun saveEvent() {
|
||||
val newTitle = event_title.value
|
||||
val newTitle = binding.eventTitle.value
|
||||
if (newTitle.isEmpty()) {
|
||||
toast(R.string.title_empty)
|
||||
runOnUiThread {
|
||||
event_title.requestFocus()
|
||||
binding.eventTitle.requestFocus()
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -1248,7 +1263,7 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
val reminders = getReminders()
|
||||
if (!event_all_day.isChecked) {
|
||||
if (!binding.eventAllDay.isChecked) {
|
||||
if ((reminders.getOrNull(2)?.minutes ?: 0) < -1) {
|
||||
reminders.removeAt(2)
|
||||
}
|
||||
@@ -1282,7 +1297,7 @@ class EventActivity : SimpleActivity() {
|
||||
startTS = newStartTS
|
||||
endTS = newEndTS
|
||||
title = newTitle
|
||||
description = event_description.value
|
||||
description = binding.eventDescription.value
|
||||
reminder1Minutes = reminder1.minutes
|
||||
reminder2Minutes = reminder2.minutes
|
||||
reminder3Minutes = reminder3.minutes
|
||||
@@ -1292,14 +1307,14 @@ class EventActivity : SimpleActivity() {
|
||||
repeatInterval = mRepeatInterval
|
||||
importId = newImportId
|
||||
timeZone = if (mIsAllDayEvent || timeZone.isEmpty()) DateTimeZone.getDefault().id else timeZone
|
||||
flags = mEvent.flags.addBitIf(event_all_day.isChecked, FLAG_ALL_DAY)
|
||||
flags = mEvent.flags.addBitIf(binding.eventAllDay.isChecked, FLAG_ALL_DAY)
|
||||
repeatLimit = if (repeatInterval == 0) 0 else mRepeatLimit
|
||||
repeatRule = mRepeatRule
|
||||
attendees = if (mEventCalendarId == STORED_LOCALLY_ONLY) "" else getAllAttendees(true)
|
||||
eventType = newEventType
|
||||
lastUpdated = System.currentTimeMillis()
|
||||
source = newSource
|
||||
location = event_location.value
|
||||
location = binding.eventLocation.value
|
||||
availability = mAvailability
|
||||
color = mEventColor
|
||||
}
|
||||
@@ -1320,7 +1335,7 @@ class EventActivity : SimpleActivity() {
|
||||
storeEvent(wasRepeatable)
|
||||
}
|
||||
} else {
|
||||
PermissionRequiredDialog(this, R.string.allow_notifications_reminders, { openNotificationSettings() })
|
||||
PermissionRequiredDialog(this, com.simplemobiletools.commons.R.string.allow_notifications_reminders, { openNotificationSettings() })
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -1389,12 +1404,12 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateStartDateText() {
|
||||
event_start_date.text = Formatter.getDate(this, mEventStartDateTime)
|
||||
binding.eventStartDate.text = Formatter.getDate(this, mEventStartDateTime)
|
||||
checkStartEndValidity()
|
||||
}
|
||||
|
||||
private fun updateStartTimeText() {
|
||||
event_start_time.text = Formatter.getTime(this, mEventStartDateTime)
|
||||
binding.eventStartTime.text = Formatter.getTime(this, mEventStartDateTime)
|
||||
checkStartEndValidity()
|
||||
}
|
||||
|
||||
@@ -1404,33 +1419,33 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateEndDateText() {
|
||||
event_end_date.text = Formatter.getDate(this, mEventEndDateTime)
|
||||
binding.eventEndDate.text = Formatter.getDate(this, mEventEndDateTime)
|
||||
checkStartEndValidity()
|
||||
}
|
||||
|
||||
private fun updateEndTimeText() {
|
||||
event_end_time.text = Formatter.getTime(this, mEventEndDateTime)
|
||||
binding.eventEndTime.text = Formatter.getTime(this, mEventEndDateTime)
|
||||
checkStartEndValidity()
|
||||
}
|
||||
|
||||
private fun updateTimeZoneText() {
|
||||
event_time_zone.text = mEvent.getTimeZoneString()
|
||||
binding.eventTimeZone.text = mEvent.getTimeZoneString()
|
||||
}
|
||||
|
||||
private fun checkStartEndValidity() {
|
||||
val textColor = if (mEventStartDateTime.isAfter(mEventEndDateTime)) resources.getColor(R.color.red_text) else getProperTextColor()
|
||||
event_end_date.setTextColor(textColor)
|
||||
event_end_time.setTextColor(textColor)
|
||||
binding.eventEndDate.setTextColor(textColor)
|
||||
binding.eventEndTime.setTextColor(textColor)
|
||||
}
|
||||
|
||||
private fun showOnMap() {
|
||||
if (event_location.value.isEmpty()) {
|
||||
if (binding.eventLocation.value.isEmpty()) {
|
||||
toast(R.string.please_fill_location)
|
||||
return
|
||||
}
|
||||
|
||||
val pattern = Pattern.compile(LAT_LON_PATTERN)
|
||||
val locationValue = event_location.value
|
||||
val locationValue = binding.eventLocation.value
|
||||
val uri = if (pattern.matcher(locationValue).find()) {
|
||||
val delimiter = if (locationValue.contains(';')) ";" else ","
|
||||
val parts = locationValue.split(delimiter)
|
||||
@@ -1648,22 +1663,23 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
addAttendee()
|
||||
|
||||
val imageHeight = event_repetition_image.height
|
||||
if (imageHeight > 0) {
|
||||
event_attendees_image.layoutParams.height = imageHeight
|
||||
} else {
|
||||
event_repetition_image.onGlobalLayout {
|
||||
event_attendees_image.layoutParams.height = event_repetition_image.height
|
||||
binding.apply {
|
||||
val imageHeight = eventRepetitionImage.height
|
||||
if (imageHeight > 0) {
|
||||
eventAttendeesImage.layoutParams.height = imageHeight
|
||||
} else {
|
||||
eventRepetitionImage.onGlobalLayout {
|
||||
eventAttendeesImage.layoutParams.height = eventRepetitionImage.height
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun addAttendee(attendee: Attendee? = null) {
|
||||
val attendeeHolder = layoutInflater.inflate(R.layout.item_attendee, event_attendees_holder, false) as RelativeLayout
|
||||
val autoCompleteView = attendeeHolder.event_attendee
|
||||
val selectedAttendeeHolder = attendeeHolder.event_contact_attendee
|
||||
val selectedAttendeeDismiss = attendeeHolder.event_contact_dismiss
|
||||
val attendeeHolder = ItemAttendeeBinding.inflate(layoutInflater, binding.eventAttendeesHolder, false)
|
||||
val autoCompleteView = attendeeHolder.eventAttendee
|
||||
val selectedAttendeeDismiss = attendeeHolder.eventContactDismiss
|
||||
|
||||
mAttendeeAutoCompleteViews.add(autoCompleteView)
|
||||
autoCompleteView.onTextChangeListener {
|
||||
@@ -1677,18 +1693,18 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
event_attendees_holder.addView(attendeeHolder)
|
||||
binding.eventAttendeesHolder.addView(attendeeHolder.root)
|
||||
|
||||
val textColor = getProperTextColor()
|
||||
val backgroundColor = getProperBackgroundColor()
|
||||
val primaryColor = getProperPrimaryColor()
|
||||
autoCompleteView.setColors(textColor, primaryColor, backgroundColor)
|
||||
selectedAttendeeHolder.event_contact_name.setColors(textColor, primaryColor, backgroundColor)
|
||||
selectedAttendeeHolder.event_contact_me_status.setColors(textColor, primaryColor, backgroundColor)
|
||||
attendeeHolder.eventContactName.setColors(textColor, primaryColor, backgroundColor)
|
||||
attendeeHolder.eventContactMeStatus.setColors(textColor, primaryColor, backgroundColor)
|
||||
selectedAttendeeDismiss.applyColorFilter(textColor)
|
||||
|
||||
selectedAttendeeDismiss.setOnClickListener {
|
||||
attendeeHolder.beGone()
|
||||
attendeeHolder.root.beGone()
|
||||
mSelectedContacts = mSelectedContacts.filter { it.toString() != selectedAttendeeDismiss.tag }.toMutableList() as ArrayList<Attendee>
|
||||
}
|
||||
|
||||
@@ -1698,44 +1714,44 @@ class EventActivity : SimpleActivity() {
|
||||
autoCompleteView.setOnItemClickListener { parent, view, position, id ->
|
||||
val currAttendees = (autoCompleteView.adapter as AutoCompleteTextViewAdapter).resultList
|
||||
val selectedAttendee = currAttendees[position]
|
||||
addSelectedAttendee(selectedAttendee, autoCompleteView, selectedAttendeeHolder)
|
||||
addSelectedAttendee(selectedAttendee, autoCompleteView, attendeeHolder)
|
||||
}
|
||||
|
||||
if (attendee != null) {
|
||||
addSelectedAttendee(attendee, autoCompleteView, selectedAttendeeHolder)
|
||||
addSelectedAttendee(attendee, autoCompleteView, attendeeHolder)
|
||||
}
|
||||
}
|
||||
|
||||
private fun addSelectedAttendee(attendee: Attendee, autoCompleteView: MyAutoCompleteTextView, selectedAttendeeHolder: RelativeLayout) {
|
||||
private fun addSelectedAttendee(attendee: Attendee, autoCompleteView: MyAutoCompleteTextView, attendeeHolder: ItemAttendeeBinding) {
|
||||
mSelectedContacts.add(attendee)
|
||||
|
||||
autoCompleteView.beGone()
|
||||
autoCompleteView.focusSearch(View.FOCUS_DOWN)?.requestFocus()
|
||||
|
||||
selectedAttendeeHolder.apply {
|
||||
beVisible()
|
||||
attendeeHolder.apply {
|
||||
root.beVisible()
|
||||
|
||||
val attendeeStatusBackground = resources.getDrawable(R.drawable.attendee_status_circular_background)
|
||||
(attendeeStatusBackground as LayerDrawable).findDrawableByLayerId(R.id.attendee_status_circular_background)
|
||||
.applyColorFilter(getProperBackgroundColor())
|
||||
event_contact_status_image.apply {
|
||||
eventContactStatusImage.apply {
|
||||
background = attendeeStatusBackground
|
||||
setImageDrawable(getAttendeeStatusImage(attendee))
|
||||
beVisibleIf(attendee.showStatusImage())
|
||||
}
|
||||
|
||||
event_contact_name.text = if (attendee.isMe) getString(R.string.my_status) else attendee.getPublicName()
|
||||
eventContactName.text = if (attendee.isMe) getString(R.string.my_status) else attendee.getPublicName()
|
||||
if (attendee.isMe) {
|
||||
(event_contact_name.layoutParams as RelativeLayout.LayoutParams).addRule(RelativeLayout.START_OF, event_contact_me_status.id)
|
||||
(eventContactName.layoutParams as RelativeLayout.LayoutParams).addRule(RelativeLayout.START_OF, eventContactMeStatus.id)
|
||||
}
|
||||
|
||||
val placeholder = BitmapDrawable(resources, SimpleContactsHelper(context).getContactLetterIcon(event_contact_name.value))
|
||||
event_contact_image.apply {
|
||||
val placeholder = BitmapDrawable(resources, SimpleContactsHelper(this@EventActivity).getContactLetterIcon(eventContactName.value))
|
||||
eventContactImage.apply {
|
||||
attendee.updateImage(this@EventActivity, this, placeholder)
|
||||
beVisible()
|
||||
}
|
||||
|
||||
event_contact_dismiss.apply {
|
||||
eventContactDismiss.apply {
|
||||
tag = attendee.toString()
|
||||
beGoneIf(attendee.isMe)
|
||||
}
|
||||
@@ -1744,12 +1760,12 @@ class EventActivity : SimpleActivity() {
|
||||
updateAttendeeMe(this, attendee)
|
||||
}
|
||||
|
||||
event_contact_me_status.apply {
|
||||
eventContactMeStatus.apply {
|
||||
beVisibleIf(attendee.isMe)
|
||||
}
|
||||
|
||||
if (attendee.isMe) {
|
||||
event_contact_attendee.setOnClickListener {
|
||||
eventContactAttendee.setOnClickListener {
|
||||
val items = arrayListOf(
|
||||
RadioItem(Attendees.ATTENDEE_STATUS_ACCEPTED, getString(R.string.going)),
|
||||
RadioItem(Attendees.ATTENDEE_STATUS_DECLINED, getString(R.string.not_going)),
|
||||
@@ -1775,9 +1791,9 @@ class EventActivity : SimpleActivity() {
|
||||
)
|
||||
}
|
||||
|
||||
private fun updateAttendeeMe(holder: RelativeLayout, attendee: Attendee) {
|
||||
private fun updateAttendeeMe(holder: ItemAttendeeBinding, attendee: Attendee) {
|
||||
holder.apply {
|
||||
event_contact_me_status.text = getString(
|
||||
eventContactMeStatus.text = getString(
|
||||
when (attendee.status) {
|
||||
Attendees.ATTENDEE_STATUS_ACCEPTED -> R.string.going
|
||||
Attendees.ATTENDEE_STATUS_DECLINED -> R.string.not_going
|
||||
@@ -1786,7 +1802,7 @@ class EventActivity : SimpleActivity() {
|
||||
}
|
||||
)
|
||||
|
||||
event_contact_status_image.apply {
|
||||
eventContactStatusImage.apply {
|
||||
beVisibleIf(attendee.showStatusImage())
|
||||
setImageDrawable(getAttendeeStatusImage(attendee))
|
||||
}
|
||||
@@ -1879,19 +1895,19 @@ class EventActivity : SimpleActivity() {
|
||||
return contacts
|
||||
}
|
||||
|
||||
private fun updateIconColors() {
|
||||
event_show_on_map.applyColorFilter(getProperPrimaryColor())
|
||||
private fun updateIconColors() = binding.apply {
|
||||
eventShowOnMap.applyColorFilter(getProperPrimaryColor())
|
||||
val textColor = getProperTextColor()
|
||||
arrayOf(
|
||||
event_time_image, event_time_zone_image, event_repetition_image, event_reminder_image, event_type_image, event_caldav_calendar_image,
|
||||
event_reminder_1_type, event_reminder_2_type, event_reminder_3_type, event_attendees_image, event_availability_image, event_color_image
|
||||
eventTimeImage, eventTimeZoneImage, eventRepetitionImage, eventReminderImage, eventTypeImage, eventCaldavCalendarImage,
|
||||
eventReminder1Type, eventReminder2Type, eventReminder3Type, eventAttendeesImage, eventAvailabilityImage, eventColorImage
|
||||
).forEach {
|
||||
it.applyColorFilter(textColor)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateActionBarTitle() {
|
||||
event_toolbar.title = if (mIsNewEvent) {
|
||||
binding.eventToolbar.title = if (mIsNewEvent) {
|
||||
getString(R.string.new_event)
|
||||
} else {
|
||||
getString(R.string.edit_event)
|
||||
|
@@ -21,6 +21,7 @@ import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.adapters.EventListAdapter
|
||||
import com.simplemobiletools.calendar.pro.adapters.QuickFilterEventTypeAdapter
|
||||
import com.simplemobiletools.calendar.pro.databases.EventsDatabase
|
||||
import com.simplemobiletools.calendar.pro.databinding.ActivityMainBinding
|
||||
import com.simplemobiletools.calendar.pro.dialogs.ExportEventsDialog
|
||||
import com.simplemobiletools.calendar.pro.dialogs.ImportEventsDialog
|
||||
import com.simplemobiletools.calendar.pro.dialogs.SelectEventTypesDialog
|
||||
@@ -49,7 +50,6 @@ import com.simplemobiletools.commons.models.Release
|
||||
import com.simplemobiletools.commons.models.SimpleContact
|
||||
import com.simplemobiletools.commons.views.MyLinearLayoutManager
|
||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
import org.joda.time.DateTime
|
||||
import org.joda.time.DateTimeZone
|
||||
import java.io.FileOutputStream
|
||||
@@ -88,19 +88,21 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
private var searchResultEvents = ArrayList<Event>()
|
||||
private var bottomItemAtRefresh: ListItem? = null
|
||||
|
||||
private val binding by viewBinding(ActivityMainBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_main)
|
||||
setContentView(binding.root)
|
||||
appLaunched(BuildConfig.APPLICATION_ID)
|
||||
setupOptionsMenu()
|
||||
refreshMenuItems()
|
||||
updateMaterialActivityViews(main_coordinator, main_holder, useTransparentNavigation = false, useTopSearchMenu = true)
|
||||
updateMaterialActivityViews(binding.mainCoordinator, binding.mainHolder, useTransparentNavigation = false, useTopSearchMenu = true)
|
||||
|
||||
checkWhatsNewDialog()
|
||||
calendar_fab.beVisibleIf(config.storedView != YEARLY_VIEW && config.storedView != WEEKLY_VIEW)
|
||||
calendar_fab.setOnClickListener {
|
||||
binding.calendarFab.beVisibleIf(config.storedView != YEARLY_VIEW && config.storedView != WEEKLY_VIEW)
|
||||
binding.calendarFab.setOnClickListener {
|
||||
if (config.allowCreatingTasks) {
|
||||
if (fab_extended_overlay.isVisible()) {
|
||||
if (binding.fabExtendedOverlay.isVisible()) {
|
||||
openNewEvent()
|
||||
|
||||
Handler().postDelayed({
|
||||
@@ -113,14 +115,14 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
openNewEvent()
|
||||
}
|
||||
}
|
||||
fab_event_label.setOnClickListener { openNewEvent() }
|
||||
fab_task_label.setOnClickListener { openNewTask() }
|
||||
binding.fabEventLabel.setOnClickListener { openNewEvent() }
|
||||
binding.fabTaskLabel.setOnClickListener { openNewTask() }
|
||||
|
||||
fab_extended_overlay.setOnClickListener {
|
||||
binding.fabExtendedOverlay.setOnClickListener {
|
||||
hideExtendedFab()
|
||||
}
|
||||
|
||||
fab_task_icon.setOnClickListener {
|
||||
binding.fabTaskIcon.setOnClickListener {
|
||||
openNewTask()
|
||||
|
||||
Handler().postDelayed({
|
||||
@@ -138,7 +140,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
refreshCalDAVCalendars(false)
|
||||
}
|
||||
|
||||
swipe_refresh_layout.setOnRefreshListener {
|
||||
binding.swipeRefreshLayout.setOnRefreshListener {
|
||||
refreshCalDAVCalendars(true)
|
||||
}
|
||||
|
||||
@@ -157,7 +159,14 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
addBirthdaysAnniversariesAtStart()
|
||||
|
||||
if (isPackageInstalled("com.simplemobiletools.calendar")) {
|
||||
ConfirmationDialog(this, "", R.string.upgraded_from_free_calendar, R.string.ok, 0, false) {}
|
||||
ConfirmationDialog(
|
||||
activity = this,
|
||||
message = "",
|
||||
messageId = com.simplemobiletools.commons.R.string.upgraded_from_free_calendar,
|
||||
positive = com.simplemobiletools.commons.R.string.ok,
|
||||
negative = 0,
|
||||
cancelOnTouchOutside = false
|
||||
) {}
|
||||
}
|
||||
|
||||
addImportIdsToTasks {
|
||||
@@ -191,23 +200,25 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
|
||||
updateStatusbarColor(getProperBackgroundColor())
|
||||
main_menu.updateColors()
|
||||
storeStateVariables()
|
||||
updateWidgets()
|
||||
updateTextColors(calendar_coordinator)
|
||||
fab_extended_overlay.background = ColorDrawable(getProperBackgroundColor().adjustAlpha(0.8f))
|
||||
fab_event_label.setTextColor(getProperTextColor())
|
||||
fab_task_label.setTextColor(getProperTextColor())
|
||||
binding.apply {
|
||||
mainMenu.updateColors()
|
||||
storeStateVariables()
|
||||
updateWidgets()
|
||||
updateTextColors(calendarCoordinator)
|
||||
fabExtendedOverlay.background = ColorDrawable(getProperBackgroundColor().adjustAlpha(0.8f))
|
||||
fabEventLabel.setTextColor(getProperTextColor())
|
||||
fabTaskLabel.setTextColor(getProperTextColor())
|
||||
|
||||
fab_task_icon.drawable.applyColorFilter(mStoredPrimaryColor.getContrastColor())
|
||||
fab_task_icon.background.applyColorFilter(mStoredPrimaryColor)
|
||||
fabTaskIcon.drawable.applyColorFilter(mStoredPrimaryColor.getContrastColor())
|
||||
fabTaskIcon.background.applyColorFilter(mStoredPrimaryColor)
|
||||
|
||||
search_holder.background = ColorDrawable(getProperBackgroundColor())
|
||||
checkSwipeRefreshAvailability()
|
||||
checkShortcuts()
|
||||
searchHolder.background = ColorDrawable(getProperBackgroundColor())
|
||||
checkSwipeRefreshAvailability()
|
||||
checkShortcuts()
|
||||
|
||||
if (!main_menu.isSearchOpen) {
|
||||
refreshMenuItems()
|
||||
if (!mainMenu.isSearchOpen) {
|
||||
refreshMenuItems()
|
||||
}
|
||||
}
|
||||
|
||||
setupQuickFilter()
|
||||
@@ -231,33 +242,33 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
|
||||
fun refreshMenuItems() {
|
||||
if (fab_extended_overlay.isVisible()) {
|
||||
if (binding.fabExtendedOverlay.isVisible()) {
|
||||
hideExtendedFab()
|
||||
}
|
||||
|
||||
shouldGoToTodayBeVisible = currentFragments.lastOrNull()?.shouldGoToTodayBeVisible() ?: false
|
||||
main_menu.getToolbar().menu.apply {
|
||||
binding.mainMenu.getToolbar().menu.apply {
|
||||
goToTodayButton = findItem(R.id.go_to_today)
|
||||
findItem(R.id.print).isVisible = config.storedView != MONTHLY_DAILY_VIEW
|
||||
findItem(R.id.filter).isVisible = mShouldFilterBeVisible
|
||||
findItem(R.id.go_to_today).isVisible = shouldGoToTodayBeVisible && !main_menu.isSearchOpen
|
||||
findItem(R.id.go_to_today).isVisible = shouldGoToTodayBeVisible && !binding.mainMenu.isSearchOpen
|
||||
findItem(R.id.go_to_date).isVisible = config.storedView != EVENTS_LIST_VIEW
|
||||
findItem(R.id.refresh_caldav_calendars).isVisible = config.caldavSync
|
||||
findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(R.bool.hide_google_relations)
|
||||
findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(com.simplemobiletools.commons.R.bool.hide_google_relations)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupOptionsMenu() {
|
||||
main_menu.getToolbar().inflateMenu(R.menu.menu_main)
|
||||
main_menu.toggleHideOnScroll(false)
|
||||
main_menu.setupMenu()
|
||||
private fun setupOptionsMenu() = binding.apply {
|
||||
mainMenu.getToolbar().inflateMenu(R.menu.menu_main)
|
||||
mainMenu.toggleHideOnScroll(false)
|
||||
mainMenu.setupMenu()
|
||||
|
||||
main_menu.onSearchTextChangedListener = { text ->
|
||||
mainMenu.onSearchTextChangedListener = { text ->
|
||||
searchQueryChanged(text)
|
||||
}
|
||||
|
||||
main_menu.getToolbar().setOnMenuItemClickListener { menuItem ->
|
||||
if (fab_extended_overlay.isVisible()) {
|
||||
mainMenu.getToolbar().setOnMenuItemClickListener { menuItem ->
|
||||
if (fabExtendedOverlay.isVisible()) {
|
||||
hideExtendedFab()
|
||||
}
|
||||
|
||||
@@ -283,13 +294,13 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
if (main_menu.isSearchOpen) {
|
||||
if (binding.mainMenu.isSearchOpen) {
|
||||
closeSearch()
|
||||
} else {
|
||||
swipe_refresh_layout.isRefreshing = false
|
||||
binding.swipeRefreshLayout.isRefreshing = false
|
||||
checkSwipeRefreshAvailability()
|
||||
when {
|
||||
fab_extended_overlay.isVisible() -> hideExtendedFab()
|
||||
binding.fabExtendedOverlay.isVisible() -> hideExtendedFab()
|
||||
currentFragments.size > 1 -> removeTopFragment()
|
||||
else -> super.onBackPressed()
|
||||
}
|
||||
@@ -333,7 +344,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
private fun setupQuickFilter() {
|
||||
eventsHelper.getEventTypes(this, false) {
|
||||
val quickFilterEventTypes = config.quickFilterEventTypes
|
||||
quick_event_type_filter.adapter = QuickFilterEventTypeAdapter(this, it, quickFilterEventTypes) {
|
||||
binding.quickEventTypeFilter.adapter = QuickFilterEventTypeAdapter(this, it, quickFilterEventTypes) {
|
||||
if (config.displayEventTypes.isEmpty() && !config.wasFilteredOutWarningShown) {
|
||||
toast(R.string.everything_filtered_out, Toast.LENGTH_LONG)
|
||||
config.wasFilteredOutWarningShown = true
|
||||
@@ -346,7 +357,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
|
||||
private fun closeSearch() {
|
||||
main_menu.closeSearch()
|
||||
binding.mainMenu.closeSearch()
|
||||
minFetchedSearchTS = 0L
|
||||
maxFetchedSearchTS = 0L
|
||||
searchResultEvents.clear()
|
||||
@@ -433,7 +444,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
intent.removeExtra(VIEW_TO_OPEN)
|
||||
intent.removeExtra(DAY_CODE)
|
||||
if (dayCodeToOpen.isNotEmpty()) {
|
||||
calendar_fab.beVisible()
|
||||
binding.calendarFab.beVisible()
|
||||
if (viewToOpen != LAST_VIEW) {
|
||||
config.storedView = viewToOpen
|
||||
}
|
||||
@@ -523,7 +534,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
|
||||
private fun resetActionBarTitle() {
|
||||
main_menu.updateHintText(getString(R.string.search))
|
||||
binding.mainMenu.updateHintText(getString(com.simplemobiletools.commons.R.string.search))
|
||||
}
|
||||
|
||||
private fun showFilterDialog() {
|
||||
@@ -572,7 +583,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
toast(R.string.refreshing_complete)
|
||||
}
|
||||
runOnUiThread {
|
||||
swipe_refresh_layout.isRefreshing = false
|
||||
binding.swipeRefreshLayout.isRefreshing = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -581,7 +592,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
RadioGroupDialog(this, items) { selectedHoliday ->
|
||||
SetRemindersDialog(this, OTHER_EVENT) {
|
||||
val reminders = it
|
||||
toast(R.string.importing)
|
||||
toast(com.simplemobiletools.commons.R.string.importing)
|
||||
ensureBackgroundThread {
|
||||
val holidays = getString(R.string.holidays)
|
||||
var eventTypeId = eventsHelper.getEventTypeIdWithClass(HOLIDAY_EVENT)
|
||||
@@ -627,7 +638,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
toast(R.string.no_contacts_permission)
|
||||
toast(com.simplemobiletools.commons.R.string.no_contacts_permission)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -658,7 +669,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
toast(R.string.no_contacts_permission)
|
||||
toast(com.simplemobiletools.commons.R.string.no_contacts_permission)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -701,7 +712,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
private fun handleParseResult(result: ImportResult) {
|
||||
toast(
|
||||
when (result) {
|
||||
ImportResult.IMPORT_NOTHING_NEW -> R.string.no_new_items
|
||||
ImportResult.IMPORT_NOTHING_NEW -> com.simplemobiletools.commons.R.string.no_new_items
|
||||
ImportResult.IMPORT_OK -> R.string.holidays_imported_successfully
|
||||
ImportResult.IMPORT_PARTIAL -> R.string.importing_some_holidays_failed
|
||||
else -> R.string.importing_holidays_failed
|
||||
@@ -869,7 +880,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
|
||||
private fun updateView(view: Int) {
|
||||
calendar_fab.beVisibleIf(view != YEARLY_VIEW && view != WEEKLY_VIEW)
|
||||
binding.calendarFab.beVisibleIf(view != YEARLY_VIEW && view != WEEKLY_VIEW)
|
||||
val dateCode = getDateCodeToDisplay(view)
|
||||
config.storedView = view
|
||||
checkSwipeRefreshAvailability()
|
||||
@@ -931,7 +942,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
|
||||
fragment.arguments = bundle
|
||||
supportFragmentManager.beginTransaction().add(R.id.fragments_holder, fragment).commitNow()
|
||||
main_menu.toggleForceArrowBackIcon(false)
|
||||
binding.mainMenu.toggleForceArrowBackIcon(false)
|
||||
}
|
||||
|
||||
private fun fixDayCode(dayCode: String? = null): String? = when {
|
||||
@@ -942,26 +953,30 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
|
||||
private fun showExtendedFab() {
|
||||
animateFabIcon(false)
|
||||
arrayOf(fab_event_label, fab_extended_overlay, fab_task_icon, fab_task_label).forEach {
|
||||
it.fadeIn()
|
||||
binding.apply {
|
||||
arrayOf(fabEventLabel, fabExtendedOverlay, fabTaskIcon, fabTaskLabel).forEach {
|
||||
it.fadeIn()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun hideExtendedFab() {
|
||||
animateFabIcon(true)
|
||||
arrayOf(fab_event_label, fab_extended_overlay, fab_task_icon, fab_task_label).forEach {
|
||||
it.fadeOut()
|
||||
binding.apply {
|
||||
arrayOf(fabEventLabel, fabExtendedOverlay, fabTaskIcon, fabTaskLabel).forEach {
|
||||
it.fadeOut()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun animateFabIcon(showPlus: Boolean) {
|
||||
val newDrawableId = if (showPlus) {
|
||||
R.drawable.ic_plus_vector
|
||||
com.simplemobiletools.commons.R.drawable.ic_plus_vector
|
||||
} else {
|
||||
R.drawable.ic_today_vector
|
||||
}
|
||||
val newDrawable = resources.getColoredDrawableWithColor(newDrawableId, getProperPrimaryColor())
|
||||
calendar_fab.setImageDrawable(newDrawable)
|
||||
binding.calendarFab.setImageDrawable(newDrawable)
|
||||
}
|
||||
|
||||
private fun openNewEvent() {
|
||||
@@ -990,7 +1005,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
fragment.arguments = bundle
|
||||
supportFragmentManager.beginTransaction().add(R.id.fragments_holder, fragment).commitNow()
|
||||
resetActionBarTitle()
|
||||
calendar_fab.beVisible()
|
||||
binding.calendarFab.beVisible()
|
||||
showBackNavigationArrow()
|
||||
}
|
||||
|
||||
@@ -1028,17 +1043,17 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
refreshEvents()
|
||||
}
|
||||
|
||||
calendar_fab.beGoneIf(currentFragments.size == 1 && config.storedView == YEARLY_VIEW)
|
||||
binding.calendarFab.beGoneIf(currentFragments.size == 1 && config.storedView == YEARLY_VIEW)
|
||||
if (currentFragments.size > 1) {
|
||||
showBackNavigationArrow()
|
||||
} else {
|
||||
main_menu.toggleForceArrowBackIcon(false)
|
||||
binding.mainMenu.toggleForceArrowBackIcon(false)
|
||||
}
|
||||
}
|
||||
|
||||
private fun showBackNavigationArrow() {
|
||||
main_menu.toggleForceArrowBackIcon(true)
|
||||
main_menu.onNavigateBackClickListener = {
|
||||
binding.mainMenu.toggleForceArrowBackIcon(true)
|
||||
binding.mainMenu.onNavigateBackClickListener = {
|
||||
onBackPressed()
|
||||
}
|
||||
}
|
||||
@@ -1063,13 +1078,13 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
try {
|
||||
startActivityForResult(this, PICK_IMPORT_SOURCE_INTENT)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
toast(R.string.system_service_disabled, Toast.LENGTH_LONG)
|
||||
toast(com.simplemobiletools.commons.R.string.system_service_disabled, Toast.LENGTH_LONG)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
PermissionRequiredDialog(this, R.string.allow_notifications_reminders, { openNotificationSettings() })
|
||||
PermissionRequiredDialog(this, com.simplemobiletools.commons.R.string.allow_notifications_reminders, { openNotificationSettings() })
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -1088,12 +1103,12 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
|
||||
private fun tryImportEventsFromFile(uri: Uri) {
|
||||
when {
|
||||
uri.scheme == "file" -> showImportEventsDialog(uri.path!!)
|
||||
uri.scheme == "content" -> {
|
||||
when (uri.scheme) {
|
||||
"file" -> showImportEventsDialog(uri.path!!)
|
||||
"content" -> {
|
||||
val tempFile = getTempFile()
|
||||
if (tempFile == null) {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
toast(com.simplemobiletools.commons.R.string.unknown_error_occurred)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1107,7 +1122,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
}
|
||||
|
||||
else -> toast(R.string.invalid_file_format)
|
||||
else -> toast(com.simplemobiletools.commons.R.string.invalid_file_format)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1136,7 +1151,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
try {
|
||||
startActivityForResult(this, PICK_EXPORT_FILE_INTENT)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
toast(R.string.system_service_disabled, Toast.LENGTH_LONG)
|
||||
toast(com.simplemobiletools.commons.R.string.system_service_disabled, Toast.LENGTH_LONG)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
@@ -1159,14 +1174,14 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
ensureBackgroundThread {
|
||||
val events = eventsHelper.getEventsToExport(eventTypes, config.exportEvents, config.exportTasks, config.exportPastEntries)
|
||||
if (events.isEmpty()) {
|
||||
toast(R.string.no_entries_for_exporting)
|
||||
toast(com.simplemobiletools.commons.R.string.no_entries_for_exporting)
|
||||
} else {
|
||||
IcsExporter(this).exportEvents(outputStream, events, true) { result ->
|
||||
toast(
|
||||
when (result) {
|
||||
ExportResult.EXPORT_OK -> R.string.exporting_successful
|
||||
ExportResult.EXPORT_PARTIAL -> R.string.exporting_some_entries_failed
|
||||
else -> R.string.exporting_failed
|
||||
ExportResult.EXPORT_OK -> com.simplemobiletools.commons.R.string.exporting_successful
|
||||
ExportResult.EXPORT_PARTIAL -> com.simplemobiletools.commons.R.string.exporting_some_entries_failed
|
||||
else -> com.simplemobiletools.commons.R.string.exporting_failed
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -1188,16 +1203,15 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
FAQItem(R.string.faq_3_title, R.string.faq_3_text),
|
||||
FAQItem(R.string.faq_6_title, R.string.faq_6_text),
|
||||
FAQItem(R.string.faq_1_title, R.string.faq_1_text),
|
||||
FAQItem(R.string.faq_1_title_commons, R.string.faq_1_text_commons),
|
||||
FAQItem(R.string.faq_4_title_commons, R.string.faq_4_text_commons),
|
||||
FAQItem(com.simplemobiletools.commons.R.string.faq_1_title_commons, com.simplemobiletools.commons.R.string.faq_1_text_commons),
|
||||
FAQItem(com.simplemobiletools.commons.R.string.faq_4_title_commons, com.simplemobiletools.commons.R.string.faq_4_text_commons),
|
||||
FAQItem(R.string.faq_4_title, R.string.faq_4_text)
|
||||
)
|
||||
|
||||
if (!resources.getBoolean(R.bool.hide_google_relations)) {
|
||||
faqItems.add(FAQItem(R.string.faq_2_title_commons, R.string.faq_2_text_commons))
|
||||
faqItems.add(FAQItem(R.string.faq_6_title_commons, R.string.faq_6_text_commons))
|
||||
faqItems.add(FAQItem(R.string.faq_7_title_commons, R.string.faq_7_text_commons))
|
||||
|
||||
if (!resources.getBoolean(com.simplemobiletools.commons.R.bool.hide_google_relations)) {
|
||||
faqItems.add(FAQItem(com.simplemobiletools.commons.R.string.faq_2_title_commons, com.simplemobiletools.commons.R.string.faq_2_text_commons))
|
||||
faqItems.add(FAQItem(com.simplemobiletools.commons.R.string.faq_6_title_commons, com.simplemobiletools.commons.R.string.faq_6_text_commons))
|
||||
faqItems.add(FAQItem(com.simplemobiletools.commons.R.string.faq_7_title_commons, com.simplemobiletools.commons.R.string.faq_7_text_commons))
|
||||
}
|
||||
|
||||
startAboutActivity(R.string.app_name, licenses, BuildConfig.VERSION_NAME, faqItems, true)
|
||||
@@ -1206,23 +1220,23 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
private fun searchQueryChanged(text: String) {
|
||||
mLatestSearchQuery = text
|
||||
|
||||
if (text.isNotEmpty() && search_holder.isGone()) {
|
||||
search_holder.fadeIn()
|
||||
if (text.isNotEmpty() && binding.searchHolder.isGone()) {
|
||||
binding.searchHolder.fadeIn()
|
||||
} else if (text.isEmpty()) {
|
||||
search_holder.fadeOut()
|
||||
search_results_list.adapter = null
|
||||
binding.searchHolder.fadeOut()
|
||||
binding.searchResultsList.adapter = null
|
||||
}
|
||||
|
||||
val placeholderTextId = if (config.displayEventTypes.isEmpty()) {
|
||||
R.string.everything_filtered_out
|
||||
} else {
|
||||
R.string.no_items_found
|
||||
com.simplemobiletools.commons.R.string.no_items_found
|
||||
}
|
||||
|
||||
search_placeholder.setText(placeholderTextId)
|
||||
search_placeholder_2.beVisibleIf(text.length == 1)
|
||||
binding.searchPlaceholder.setText(placeholderTextId)
|
||||
binding.searchPlaceholder2.beVisibleIf(text.length == 1)
|
||||
if (text.length >= 2) {
|
||||
if (search_results_list.adapter == null) {
|
||||
if (binding.searchResultsList.adapter == null) {
|
||||
minFetchedSearchTS = DateTime().minusYears(2).seconds()
|
||||
maxFetchedSearchTS = DateTime().plusYears(2).seconds()
|
||||
}
|
||||
@@ -1252,13 +1266,13 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
}
|
||||
} else if (text.length == 1) {
|
||||
search_placeholder.beVisible()
|
||||
search_results_list.beGone()
|
||||
binding.searchPlaceholder.beVisible()
|
||||
binding.searchResultsList.beGone()
|
||||
}
|
||||
}
|
||||
|
||||
private fun showSearchResultEvents(events: ArrayList<Event>, updateStatus: Int) {
|
||||
val currentSearchQuery = main_menu.getCurrentQuery()
|
||||
val currentSearchQuery = binding.mainMenu.getCurrentQuery()
|
||||
val filtered = try {
|
||||
events.filter {
|
||||
it.title.contains(currentSearchQuery, true) || it.location.contains(currentSearchQuery, true) || it.description.contains(
|
||||
@@ -1272,12 +1286,12 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
|
||||
searchResultEvents = filtered.toMutableList() as ArrayList<Event>
|
||||
runOnUiThread {
|
||||
search_results_list.beVisibleIf(filtered.isNotEmpty())
|
||||
search_placeholder.beVisibleIf(filtered.isEmpty())
|
||||
binding.searchResultsList.beVisibleIf(filtered.isNotEmpty())
|
||||
binding.searchPlaceholder.beVisibleIf(filtered.isEmpty())
|
||||
val listItems = getEventListItems(filtered)
|
||||
val currAdapter = search_results_list.adapter
|
||||
val currAdapter = binding.searchResultsList.adapter
|
||||
if (currAdapter == null) {
|
||||
val eventsAdapter = EventListAdapter(this, listItems, true, this, search_results_list) {
|
||||
val eventsAdapter = EventListAdapter(this, listItems, true, this, binding.searchResultsList) {
|
||||
hideKeyboard()
|
||||
if (it is ListEvent) {
|
||||
Intent(applicationContext, getActivityToOpen(it.isTask)).apply {
|
||||
@@ -1287,9 +1301,9 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
}
|
||||
|
||||
search_results_list.adapter = eventsAdapter
|
||||
binding.searchResultsList.adapter = eventsAdapter
|
||||
|
||||
search_results_list.endlessScrollListener = object : MyRecyclerView.EndlessScrollListener {
|
||||
binding.searchResultsList.endlessScrollListener = object : MyRecyclerView.EndlessScrollListener {
|
||||
override fun updateTop() {
|
||||
fetchPreviousPeriod()
|
||||
}
|
||||
@@ -1303,14 +1317,14 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
if (updateStatus == UPDATE_TOP) {
|
||||
val item = listItems.indexOfFirst { it == bottomItemAtRefresh }
|
||||
if (item != -1) {
|
||||
search_results_list.scrollToPosition(item)
|
||||
binding.searchResultsList.scrollToPosition(item)
|
||||
}
|
||||
} else if (updateStatus == UPDATE_BOTTOM) {
|
||||
search_results_list.smoothScrollBy(0, resources.getDimension(R.dimen.endless_scroll_move_height).toInt())
|
||||
binding.searchResultsList.smoothScrollBy(0, resources.getDimension(R.dimen.endless_scroll_move_height).toInt())
|
||||
} else {
|
||||
val firstNonPastSectionIndex = listItems.indexOfFirst { it is ListSectionDay && !it.isPastSection }
|
||||
if (firstNonPastSectionIndex != -1) {
|
||||
search_results_list.scrollToPosition(firstNonPastSectionIndex)
|
||||
binding.searchResultsList.scrollToPosition(firstNonPastSectionIndex)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1322,8 +1336,8 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
return
|
||||
}
|
||||
|
||||
val lastPosition = (search_results_list.layoutManager as MyLinearLayoutManager).findLastVisibleItemPosition()
|
||||
bottomItemAtRefresh = (search_results_list.adapter as EventListAdapter).listItems[lastPosition]
|
||||
val lastPosition = (binding.searchResultsList.layoutManager as MyLinearLayoutManager).findLastVisibleItemPosition()
|
||||
bottomItemAtRefresh = (binding.searchResultsList.adapter as EventListAdapter).listItems[lastPosition]
|
||||
|
||||
val oldMinFetchedTS = minFetchedSearchTS - 1
|
||||
minFetchedSearchTS -= FETCH_INTERVAL
|
||||
@@ -1363,9 +1377,9 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
}
|
||||
|
||||
private fun checkSwipeRefreshAvailability() {
|
||||
swipe_refresh_layout.isEnabled = config.caldavSync && config.pullToRefresh && config.storedView != WEEKLY_VIEW
|
||||
if (!swipe_refresh_layout.isEnabled) {
|
||||
swipe_refresh_layout.isRefreshing = false
|
||||
binding.swipeRefreshLayout.isEnabled = config.caldavSync && config.pullToRefresh && config.storedView != WEEKLY_VIEW
|
||||
if (!binding.swipeRefreshLayout.isEnabled) {
|
||||
binding.swipeRefreshLayout.isRefreshing = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1375,7 +1389,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
|
||||
|
||||
private fun openDayAt(timestamp: Long) {
|
||||
val dayCode = Formatter.getDayCodeFromTS(timestamp / 1000L)
|
||||
calendar_fab.beVisible()
|
||||
binding.calendarFab.beVisible()
|
||||
config.storedView = DAILY_VIEW
|
||||
updateViewPager(dayCode)
|
||||
}
|
||||
|
@@ -3,34 +3,42 @@ package com.simplemobiletools.calendar.pro.activities
|
||||
import android.os.Bundle
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.adapters.ManageEventTypesAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.ActivityManageEventTypesBinding
|
||||
import com.simplemobiletools.calendar.pro.dialogs.EditEventTypeDialog
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
||||
import com.simplemobiletools.calendar.pro.interfaces.DeleteEventTypesListener
|
||||
import com.simplemobiletools.calendar.pro.models.EventType
|
||||
import com.simplemobiletools.commons.extensions.toast
|
||||
import com.simplemobiletools.commons.extensions.updateTextColors
|
||||
import com.simplemobiletools.commons.extensions.viewBinding
|
||||
import com.simplemobiletools.commons.helpers.NavigationIcon
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import kotlinx.android.synthetic.main.activity_manage_event_types.*
|
||||
|
||||
class ManageEventTypesActivity : SimpleActivity(), DeleteEventTypesListener {
|
||||
|
||||
private val binding by viewBinding(ActivityManageEventTypesBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_manage_event_types)
|
||||
setContentView(binding.root)
|
||||
setupOptionsMenu()
|
||||
|
||||
updateMaterialActivityViews(manage_event_types_coordinator, manage_event_types_list, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(manage_event_types_list, manage_event_types_toolbar)
|
||||
updateMaterialActivityViews(
|
||||
binding.manageEventTypesCoordinator,
|
||||
binding.manageEventTypesList,
|
||||
useTransparentNavigation = true,
|
||||
useTopSearchMenu = false
|
||||
)
|
||||
setupMaterialScrollListener(binding.manageEventTypesList, binding.manageEventTypesToolbar)
|
||||
|
||||
getEventTypes()
|
||||
updateTextColors(manage_event_types_list)
|
||||
updateTextColors(binding.manageEventTypesList)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(manage_event_types_toolbar, NavigationIcon.Arrow)
|
||||
setupToolbar(binding.manageEventTypesToolbar, NavigationIcon.Arrow)
|
||||
}
|
||||
|
||||
private fun showEventTypeDialog(eventType: EventType? = null) {
|
||||
@@ -41,15 +49,15 @@ class ManageEventTypesActivity : SimpleActivity(), DeleteEventTypesListener {
|
||||
|
||||
private fun getEventTypes() {
|
||||
eventsHelper.getEventTypes(this, false) {
|
||||
val adapter = ManageEventTypesAdapter(this, it, this, manage_event_types_list) {
|
||||
val adapter = ManageEventTypesAdapter(this, it, this, binding.manageEventTypesList) {
|
||||
showEventTypeDialog(it as EventType)
|
||||
}
|
||||
manage_event_types_list.adapter = adapter
|
||||
binding.manageEventTypesList.adapter = adapter
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupOptionsMenu() {
|
||||
manage_event_types_toolbar.setOnMenuItemClickListener { menuItem ->
|
||||
binding.manageEventTypesToolbar.setOnMenuItemClickListener { menuItem ->
|
||||
when (menuItem.itemId) {
|
||||
R.id.add_event_type -> showEventTypeDialog()
|
||||
else -> return@setOnMenuItemClickListener false
|
||||
|
@@ -10,22 +10,26 @@ import androidx.appcompat.widget.SearchView
|
||||
import androidx.core.view.MenuItemCompat
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.adapters.SelectTimeZoneAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.ActivitySelectTimeZoneBinding
|
||||
import com.simplemobiletools.calendar.pro.helpers.CURRENT_TIME_ZONE
|
||||
import com.simplemobiletools.calendar.pro.helpers.TIME_ZONE
|
||||
import com.simplemobiletools.calendar.pro.helpers.getAllTimeZones
|
||||
import com.simplemobiletools.calendar.pro.models.MyTimeZone
|
||||
import com.simplemobiletools.commons.extensions.hideKeyboard
|
||||
import com.simplemobiletools.commons.extensions.viewBinding
|
||||
import com.simplemobiletools.commons.helpers.NavigationIcon
|
||||
import kotlinx.android.synthetic.main.activity_select_time_zone.*
|
||||
import java.util.*
|
||||
import java.util.Locale
|
||||
import java.util.TimeZone
|
||||
|
||||
class SelectTimeZoneActivity : SimpleActivity() {
|
||||
private var mSearchMenuItem: MenuItem? = null
|
||||
private val allTimeZones = getAllTimeZones()
|
||||
|
||||
private val binding by viewBinding(ActivitySelectTimeZoneBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_select_time_zone)
|
||||
setContentView(binding.root)
|
||||
setupOptionsMenu()
|
||||
|
||||
SelectTimeZoneAdapter(this, allTimeZones) {
|
||||
@@ -35,23 +39,23 @@ class SelectTimeZoneActivity : SimpleActivity() {
|
||||
setResult(RESULT_OK, data)
|
||||
finish()
|
||||
}.apply {
|
||||
select_time_zone_list.adapter = this
|
||||
binding.selectTimeZoneList.adapter = this
|
||||
}
|
||||
|
||||
val currentTimeZone = intent.getStringExtra(CURRENT_TIME_ZONE) ?: TimeZone.getDefault().id
|
||||
val pos = allTimeZones.indexOfFirst { it.zoneName.equals(currentTimeZone, true) }
|
||||
if (pos != -1) {
|
||||
select_time_zone_list.scrollToPosition(pos)
|
||||
binding.selectTimeZoneList.scrollToPosition(pos)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(select_time_zone_toolbar, NavigationIcon.Arrow, searchMenuItem = mSearchMenuItem)
|
||||
setupToolbar(binding.selectTimeZoneToolbar, NavigationIcon.Arrow, searchMenuItem = mSearchMenuItem)
|
||||
}
|
||||
|
||||
private fun setupOptionsMenu() {
|
||||
setupSearch(select_time_zone_toolbar.menu)
|
||||
setupSearch(binding.selectTimeZoneToolbar.menu)
|
||||
}
|
||||
|
||||
private fun setupSearch(menu: Menu) {
|
||||
@@ -89,8 +93,8 @@ class SelectTimeZoneActivity : SimpleActivity() {
|
||||
|
||||
private fun searchQueryChanged(text: String) {
|
||||
val timeZones = allTimeZones.filter {
|
||||
it.zoneName.toLowerCase(Locale.getDefault()).contains(text.toLowerCase(Locale.getDefault()))
|
||||
it.zoneName.lowercase(Locale.getDefault()).contains(text.lowercase(Locale.getDefault()))
|
||||
}.toMutableList() as ArrayList<MyTimeZone>
|
||||
(select_time_zone_list.adapter as? SelectTimeZoneAdapter)?.updateTimeZones(timeZones)
|
||||
(binding.selectTimeZoneList.adapter as? SelectTimeZoneAdapter)?.updateTimeZones(timeZones)
|
||||
}
|
||||
}
|
||||
|
@@ -11,26 +11,26 @@ import android.widget.Toast
|
||||
import com.google.android.material.timepicker.MaterialTimePicker
|
||||
import com.google.android.material.timepicker.TimeFormat
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.ActivitySettingsBinding
|
||||
import com.simplemobiletools.calendar.pro.dialogs.ManageAutomaticBackupsDialog
|
||||
import com.simplemobiletools.calendar.pro.dialogs.SelectCalendarsDialog
|
||||
import com.simplemobiletools.calendar.pro.dialogs.SelectEventTypeDialog
|
||||
import com.simplemobiletools.calendar.pro.dialogs.SelectEventTypesDialog
|
||||
import com.simplemobiletools.calendar.pro.extensions.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
import com.simplemobiletools.calendar.pro.models.EventType
|
||||
import com.simplemobiletools.commons.dialogs.*
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import com.simplemobiletools.commons.models.AlarmSound
|
||||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import kotlinx.android.synthetic.main.activity_settings.*
|
||||
import org.joda.time.DateTime
|
||||
import org.joda.time.DateTimeConstants
|
||||
import java.io.File
|
||||
import java.io.InputStream
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
import java.util.Calendar
|
||||
import java.util.Locale
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
class SettingsActivity : SimpleActivity() {
|
||||
@@ -39,19 +39,21 @@ class SettingsActivity : SimpleActivity() {
|
||||
|
||||
private var mStoredPrimaryColor = 0
|
||||
|
||||
private val binding by viewBinding(ActivitySettingsBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_settings)
|
||||
setContentView(binding.root)
|
||||
mStoredPrimaryColor = getProperPrimaryColor()
|
||||
|
||||
updateMaterialActivityViews(settings_coordinator, settings_holder, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(settings_nested_scrollview, settings_toolbar)
|
||||
updateMaterialActivityViews(binding.settingsCoordinator, binding.settingsHolder, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsToolbar)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(settings_toolbar, NavigationIcon.Arrow)
|
||||
setupToolbar(binding.settingsToolbar, NavigationIcon.Arrow)
|
||||
setupSettingItems()
|
||||
}
|
||||
|
||||
@@ -99,7 +101,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
setupDimEvents()
|
||||
setupDimCompletedTasks()
|
||||
setupAllowChangingTimeZones()
|
||||
updateTextColors(settings_holder)
|
||||
updateTextColors(binding.settingsHolder)
|
||||
checkPrimaryColor()
|
||||
setupEnableAutomaticBackups()
|
||||
setupManageAutomaticBackups()
|
||||
@@ -107,19 +109,19 @@ class SettingsActivity : SimpleActivity() {
|
||||
setupImportSettings()
|
||||
|
||||
arrayOf(
|
||||
settings_color_customization_section_label,
|
||||
settings_general_settings_label,
|
||||
settings_reminders_label,
|
||||
settings_caldav_label,
|
||||
settings_new_events_label,
|
||||
settings_weekly_view_label,
|
||||
settings_monthly_view_label,
|
||||
settings_event_lists_label,
|
||||
settings_widgets_label,
|
||||
settings_events_label,
|
||||
settings_tasks_label,
|
||||
settings_backups_label,
|
||||
settings_migrating_label
|
||||
binding.settingsColorCustomizationSectionLabel,
|
||||
binding.settingsGeneralSettingsLabel,
|
||||
binding.settingsRemindersLabel,
|
||||
binding.settingsCaldavLabel,
|
||||
binding.settingsNewEventsLabel,
|
||||
binding.settingsWeeklyViewLabel,
|
||||
binding.settingsMonthlyViewLabel,
|
||||
binding.settingsEventListsLabel,
|
||||
binding.settingsWidgetsLabel,
|
||||
binding.settingsEventsLabel,
|
||||
binding.settingsTasksLabel,
|
||||
binding.settingsBackupsLabel,
|
||||
binding.settingsMigratingLabel
|
||||
).forEach {
|
||||
it.setTextColor(getProperPrimaryColor())
|
||||
}
|
||||
@@ -163,71 +165,71 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun setupCustomizeColors() {
|
||||
settings_color_customization_holder.setOnClickListener {
|
||||
binding.settingsColorCustomizationHolder.setOnClickListener {
|
||||
startCustomizationActivity()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupCustomizeNotifications() {
|
||||
settings_customize_notifications_holder.beVisibleIf(isOreoPlus())
|
||||
settings_customize_notifications_holder.setOnClickListener {
|
||||
binding.settingsCustomizeNotificationsHolder.beVisibleIf(isOreoPlus())
|
||||
binding.settingsCustomizeNotificationsHolder.setOnClickListener {
|
||||
launchCustomizeNotificationsIntent()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupUseEnglish() {
|
||||
settings_use_english_holder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())
|
||||
settings_use_english.isChecked = config.useEnglish
|
||||
settings_use_english_holder.setOnClickListener {
|
||||
settings_use_english.toggle()
|
||||
config.useEnglish = settings_use_english.isChecked
|
||||
private fun setupUseEnglish() = binding.apply {
|
||||
settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())
|
||||
settingsUseEnglish.isChecked = config.useEnglish
|
||||
settingsUseEnglishHolder.setOnClickListener {
|
||||
settingsUseEnglish.toggle()
|
||||
config.useEnglish = settingsUseEnglish.isChecked
|
||||
exitProcess(0)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupLanguage() {
|
||||
settings_language.text = Locale.getDefault().displayLanguage
|
||||
settings_language_holder.beVisibleIf(isTiramisuPlus())
|
||||
settings_language_holder.setOnClickListener {
|
||||
private fun setupLanguage() = binding.apply {
|
||||
settingsLanguage.text = Locale.getDefault().displayLanguage
|
||||
settingsLanguageHolder.beVisibleIf(isTiramisuPlus())
|
||||
settingsLanguageHolder.setOnClickListener {
|
||||
launchChangeAppLanguageIntent()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupManageEventTypes() {
|
||||
settings_manage_event_types_holder.setOnClickListener {
|
||||
binding.settingsManageEventTypesHolder.setOnClickListener {
|
||||
startActivity(Intent(this, ManageEventTypesActivity::class.java))
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupManageQuickFilterEventTypes() {
|
||||
settings_manage_quick_filter_event_types_holder.setOnClickListener {
|
||||
private fun setupManageQuickFilterEventTypes() = binding.apply {
|
||||
settingsManageQuickFilterEventTypesHolder.setOnClickListener {
|
||||
showQuickFilterPicker()
|
||||
}
|
||||
|
||||
eventsHelper.getEventTypes(this, false) {
|
||||
settings_manage_quick_filter_event_types_holder.beGoneIf(it.size < 2)
|
||||
eventsHelper.getEventTypes(this@SettingsActivity, false) {
|
||||
settingsManageQuickFilterEventTypesHolder.beGoneIf(it.size < 2)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupHourFormat() {
|
||||
settings_hour_format.isChecked = config.use24HourFormat
|
||||
settings_hour_format_holder.setOnClickListener {
|
||||
settings_hour_format.toggle()
|
||||
config.use24HourFormat = settings_hour_format.isChecked
|
||||
private fun setupHourFormat() = binding.apply {
|
||||
settingsHourFormat.isChecked = config.use24HourFormat
|
||||
settingsHourFormatHolder.setOnClickListener {
|
||||
settingsHourFormat.toggle()
|
||||
config.use24HourFormat = settingsHourFormat.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupAllowCreatingTasks() {
|
||||
settings_allow_creating_tasks.isChecked = config.allowCreatingTasks
|
||||
settings_allow_creating_tasks_holder.setOnClickListener {
|
||||
settings_allow_creating_tasks.toggle()
|
||||
config.allowCreatingTasks = settings_allow_creating_tasks.isChecked
|
||||
private fun setupAllowCreatingTasks() = binding.apply {
|
||||
settingsAllowCreatingTasks.isChecked = config.allowCreatingTasks
|
||||
settingsAllowCreatingTasksHolder.setOnClickListener {
|
||||
settingsAllowCreatingTasks.toggle()
|
||||
config.allowCreatingTasks = settingsAllowCreatingTasks.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupCaldavSync() {
|
||||
settings_caldav_sync.isChecked = config.caldavSync
|
||||
settings_caldav_sync_holder.setOnClickListener {
|
||||
private fun setupCaldavSync() = binding.apply {
|
||||
settingsCaldavSync.isChecked = config.caldavSync
|
||||
settingsCaldavSyncHolder.setOnClickListener {
|
||||
if (config.caldavSync) {
|
||||
toggleCaldavSync(false)
|
||||
} else {
|
||||
@@ -248,30 +250,30 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupPullToRefresh() {
|
||||
settings_caldav_pull_to_refresh_holder.beVisibleIf(config.caldavSync)
|
||||
settings_caldav_pull_to_refresh.isChecked = config.pullToRefresh
|
||||
settings_caldav_pull_to_refresh_holder.setOnClickListener {
|
||||
settings_caldav_pull_to_refresh.toggle()
|
||||
config.pullToRefresh = settings_caldav_pull_to_refresh.isChecked
|
||||
private fun setupPullToRefresh() = binding.apply {
|
||||
settingsCaldavPullToRefreshHolder.beVisibleIf(config.caldavSync)
|
||||
settingsCaldavPullToRefresh.isChecked = config.pullToRefresh
|
||||
settingsCaldavPullToRefreshHolder.setOnClickListener {
|
||||
settingsCaldavPullToRefresh.toggle()
|
||||
config.pullToRefresh = settingsCaldavPullToRefresh.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupManageSyncedCalendars() {
|
||||
settings_manage_synced_calendars_holder.beVisibleIf(config.caldavSync)
|
||||
settings_manage_synced_calendars_holder.setOnClickListener {
|
||||
private fun setupManageSyncedCalendars() = binding.apply {
|
||||
settingsManageSyncedCalendarsHolder.beVisibleIf(config.caldavSync)
|
||||
settingsManageSyncedCalendarsHolder.setOnClickListener {
|
||||
showCalendarPicker()
|
||||
}
|
||||
}
|
||||
|
||||
private fun toggleCaldavSync(enable: Boolean) {
|
||||
private fun toggleCaldavSync(enable: Boolean) = binding.apply {
|
||||
if (enable) {
|
||||
showCalendarPicker()
|
||||
} else {
|
||||
settings_caldav_sync.isChecked = false
|
||||
settingsCaldavSync.isChecked = false
|
||||
config.caldavSync = false
|
||||
settings_manage_synced_calendars_holder.beGone()
|
||||
settings_caldav_pull_to_refresh_holder.beGone()
|
||||
settingsManageSyncedCalendarsHolder.beGone()
|
||||
settingsCaldavPullToRefreshHolder.beGone()
|
||||
|
||||
ensureBackgroundThread {
|
||||
config.getSyncedCalendarIdsAsList().forEach {
|
||||
@@ -283,20 +285,20 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun showCalendarPicker() {
|
||||
private fun showCalendarPicker() = binding.apply {
|
||||
val oldCalendarIds = config.getSyncedCalendarIdsAsList()
|
||||
|
||||
SelectCalendarsDialog(this) {
|
||||
SelectCalendarsDialog(this@SettingsActivity) {
|
||||
val newCalendarIds = config.getSyncedCalendarIdsAsList()
|
||||
if (newCalendarIds.isEmpty() && !config.caldavSync) {
|
||||
return@SelectCalendarsDialog
|
||||
}
|
||||
|
||||
settings_manage_synced_calendars_holder.beVisibleIf(newCalendarIds.isNotEmpty())
|
||||
settings_caldav_pull_to_refresh_holder.beVisibleIf(newCalendarIds.isNotEmpty())
|
||||
settings_caldav_sync.isChecked = newCalendarIds.isNotEmpty()
|
||||
settingsManageSyncedCalendarsHolder.beVisibleIf(newCalendarIds.isNotEmpty())
|
||||
settingsCaldavPullToRefreshHolder.beVisibleIf(newCalendarIds.isNotEmpty())
|
||||
settingsCaldavSync.isChecked = newCalendarIds.isNotEmpty()
|
||||
config.caldavSync = newCalendarIds.isNotEmpty()
|
||||
if (settings_caldav_sync.isChecked) {
|
||||
if (settingsCaldavSync.isChecked) {
|
||||
toast(R.string.syncing)
|
||||
}
|
||||
|
||||
@@ -311,13 +313,13 @@ class SettingsActivity : SimpleActivity() {
|
||||
if (!existingEventTypeNames.contains(calendarTitle.lowercase(Locale.getDefault()))) {
|
||||
val eventType = EventType(null, it.displayName, it.color, it.id, it.displayName, it.accountName)
|
||||
existingEventTypeNames.add(calendarTitle.lowercase(Locale.getDefault()))
|
||||
eventsHelper.insertOrUpdateEventType(this, eventType)
|
||||
eventsHelper.insertOrUpdateEventType(this@SettingsActivity, eventType)
|
||||
}
|
||||
}
|
||||
|
||||
syncCalDAVCalendars {
|
||||
calDAVHelper.refreshCalendars(showToasts = true, scheduleNextSync = true) {
|
||||
if (settings_caldav_sync.isChecked) {
|
||||
if (settingsCaldavSync.isChecked) {
|
||||
toast(R.string.synchronization_completed)
|
||||
}
|
||||
}
|
||||
@@ -344,139 +346,145 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupStartWeekOn() {
|
||||
private fun setupStartWeekOn() = binding.apply {
|
||||
val items = arrayListOf(
|
||||
RadioItem(DateTimeConstants.SUNDAY, getString(R.string.sunday)),
|
||||
RadioItem(DateTimeConstants.MONDAY, getString(R.string.monday)),
|
||||
RadioItem(DateTimeConstants.TUESDAY, getString(R.string.tuesday)),
|
||||
RadioItem(DateTimeConstants.WEDNESDAY, getString(R.string.wednesday)),
|
||||
RadioItem(DateTimeConstants.THURSDAY, getString(R.string.thursday)),
|
||||
RadioItem(DateTimeConstants.FRIDAY, getString(R.string.friday)),
|
||||
RadioItem(DateTimeConstants.SATURDAY, getString(R.string.saturday)),
|
||||
RadioItem(DateTimeConstants.SUNDAY, getString(com.simplemobiletools.commons.R.string.sunday)),
|
||||
RadioItem(DateTimeConstants.MONDAY, getString(com.simplemobiletools.commons.R.string.monday)),
|
||||
RadioItem(DateTimeConstants.TUESDAY, getString(com.simplemobiletools.commons.R.string.tuesday)),
|
||||
RadioItem(DateTimeConstants.WEDNESDAY, getString(com.simplemobiletools.commons.R.string.wednesday)),
|
||||
RadioItem(DateTimeConstants.THURSDAY, getString(com.simplemobiletools.commons.R.string.thursday)),
|
||||
RadioItem(DateTimeConstants.FRIDAY, getString(com.simplemobiletools.commons.R.string.friday)),
|
||||
RadioItem(DateTimeConstants.SATURDAY, getString(com.simplemobiletools.commons.R.string.saturday)),
|
||||
)
|
||||
|
||||
settings_start_week_on.text = getDayOfWeekString(config.firstDayOfWeek)
|
||||
settings_start_week_on_holder.setOnClickListener {
|
||||
RadioGroupDialog(this, items, config.firstDayOfWeek) { any ->
|
||||
settingsStartWeekOn.text = getDayOfWeekString(config.firstDayOfWeek)
|
||||
settingsStartWeekOnHolder.setOnClickListener {
|
||||
RadioGroupDialog(this@SettingsActivity, items, config.firstDayOfWeek) { any ->
|
||||
val firstDayOfWeek = any as Int
|
||||
config.firstDayOfWeek = firstDayOfWeek
|
||||
settings_start_week_on.text = getDayOfWeekString(firstDayOfWeek)
|
||||
settingsStartWeekOn.text = getDayOfWeekString(firstDayOfWeek)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupHighlightWeekends() {
|
||||
settings_highlight_weekends.isChecked = config.highlightWeekends
|
||||
settings_highlight_weekends_color_holder.beVisibleIf(config.highlightWeekends)
|
||||
settings_highlight_weekends_holder.setOnClickListener {
|
||||
settings_highlight_weekends.toggle()
|
||||
config.highlightWeekends = settings_highlight_weekends.isChecked
|
||||
settings_highlight_weekends_color_holder.beVisibleIf(config.highlightWeekends)
|
||||
private fun setupHighlightWeekends() = binding.apply {
|
||||
settingsHighlightWeekends.isChecked = config.highlightWeekends
|
||||
settingsHighlightWeekendsColorHolder.beVisibleIf(config.highlightWeekends)
|
||||
settingsHighlightWeekendsHolder.setOnClickListener {
|
||||
settingsHighlightWeekends.toggle()
|
||||
config.highlightWeekends = settingsHighlightWeekends.isChecked
|
||||
settingsHighlightWeekendsColorHolder.beVisibleIf(config.highlightWeekends)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupHighlightWeekendsColor() {
|
||||
settings_highlight_weekends_color.setFillWithStroke(config.highlightWeekendsColor, getProperBackgroundColor())
|
||||
settings_highlight_weekends_color_holder.setOnClickListener {
|
||||
ColorPickerDialog(this, config.highlightWeekendsColor) { wasPositivePressed, color ->
|
||||
private fun setupHighlightWeekendsColor() = binding.apply {
|
||||
settingsHighlightWeekendsColor.setFillWithStroke(config.highlightWeekendsColor, getProperBackgroundColor())
|
||||
settingsHighlightWeekendsColorHolder.setOnClickListener {
|
||||
ColorPickerDialog(this@SettingsActivity, config.highlightWeekendsColor) { wasPositivePressed, color ->
|
||||
if (wasPositivePressed) {
|
||||
config.highlightWeekendsColor = color
|
||||
settings_highlight_weekends_color.setFillWithStroke(color, getProperBackgroundColor())
|
||||
settingsHighlightWeekendsColor.setFillWithStroke(color, getProperBackgroundColor())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupDeleteAllEvents() {
|
||||
settings_delete_all_events_holder.setOnClickListener {
|
||||
ConfirmationDialog(this, messageId = R.string.delete_all_events_confirmation) {
|
||||
private fun setupDeleteAllEvents() = binding.apply {
|
||||
settingsDeleteAllEventsHolder.setOnClickListener {
|
||||
ConfirmationDialog(this@SettingsActivity, messageId = R.string.delete_all_events_confirmation) {
|
||||
eventsHelper.deleteAllEvents()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupDisplayDescription() {
|
||||
settings_display_description.isChecked = config.displayDescription
|
||||
settings_replace_description_holder.beVisibleIf(config.displayDescription)
|
||||
settings_display_description_holder.setOnClickListener {
|
||||
settings_display_description.toggle()
|
||||
config.displayDescription = settings_display_description.isChecked
|
||||
settings_replace_description_holder.beVisibleIf(config.displayDescription)
|
||||
private fun setupDisplayDescription() = binding.apply {
|
||||
settingsDisplayDescription.isChecked = config.displayDescription
|
||||
settingsReplaceDescriptionHolder.beVisibleIf(config.displayDescription)
|
||||
settingsDisplayDescriptionHolder.setOnClickListener {
|
||||
settingsDisplayDescription.toggle()
|
||||
config.displayDescription = settingsDisplayDescription.isChecked
|
||||
settingsReplaceDescriptionHolder.beVisibleIf(config.displayDescription)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupReplaceDescription() {
|
||||
settings_replace_description.isChecked = config.replaceDescription
|
||||
settings_replace_description_holder.setOnClickListener {
|
||||
settings_replace_description.toggle()
|
||||
config.replaceDescription = settings_replace_description.isChecked
|
||||
private fun setupReplaceDescription() = binding.apply {
|
||||
settingsReplaceDescription.isChecked = config.replaceDescription
|
||||
settingsReplaceDescriptionHolder.setOnClickListener {
|
||||
settingsReplaceDescription.toggle()
|
||||
config.replaceDescription = settingsReplaceDescription.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupWeeklyStart() {
|
||||
settings_start_weekly_at.text = getHoursString(config.startWeeklyAt)
|
||||
settings_start_weekly_at_holder.setOnClickListener {
|
||||
private fun setupWeeklyStart() = binding.apply {
|
||||
settingsStartWeeklyAt.text = getHoursString(config.startWeeklyAt)
|
||||
settingsStartWeeklyAtHolder.setOnClickListener {
|
||||
val items = ArrayList<RadioItem>()
|
||||
(0..16).mapTo(items) { RadioItem(it, getHoursString(it)) }
|
||||
|
||||
RadioGroupDialog(this@SettingsActivity, items, config.startWeeklyAt) {
|
||||
config.startWeeklyAt = it as Int
|
||||
settings_start_weekly_at.text = getHoursString(it)
|
||||
settingsStartWeeklyAt.text = getHoursString(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupMidnightSpanEvents() {
|
||||
settings_midnight_span_event.isChecked = config.showMidnightSpanningEventsAtTop
|
||||
settings_midnight_span_events_holder.setOnClickListener {
|
||||
settings_midnight_span_event.toggle()
|
||||
config.showMidnightSpanningEventsAtTop = settings_midnight_span_event.isChecked
|
||||
private fun setupMidnightSpanEvents() = binding.apply {
|
||||
settingsMidnightSpanEvent.isChecked = config.showMidnightSpanningEventsAtTop
|
||||
settingsMidnightSpanEventsHolder.setOnClickListener {
|
||||
settingsMidnightSpanEvent.toggle()
|
||||
config.showMidnightSpanningEventsAtTop = settingsMidnightSpanEvent.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupAllowCustomizeDayCount() {
|
||||
settings_allow_customize_day_count.isChecked = config.allowCustomizeDayCount
|
||||
settings_allow_customize_day_count_holder.setOnClickListener {
|
||||
settings_allow_customize_day_count.toggle()
|
||||
config.allowCustomizeDayCount = settings_allow_customize_day_count.isChecked
|
||||
private fun setupAllowCustomizeDayCount() = binding.apply {
|
||||
settingsAllowCustomizeDayCount.isChecked = config.allowCustomizeDayCount
|
||||
settingsAllowCustomizeDayCountHolder.setOnClickListener {
|
||||
settingsAllowCustomizeDayCount.toggle()
|
||||
config.allowCustomizeDayCount = settingsAllowCustomizeDayCount.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupStartWeekWithCurrentDay() {
|
||||
settings_start_week_with_current_day.isChecked = config.startWeekWithCurrentDay
|
||||
settings_start_week_with_current_day_holder.setOnClickListener {
|
||||
settings_start_week_with_current_day.toggle()
|
||||
config.startWeekWithCurrentDay = settings_start_week_with_current_day.isChecked
|
||||
private fun setupStartWeekWithCurrentDay() = binding.apply {
|
||||
settingsStartWeekWithCurrentDay.isChecked = config.startWeekWithCurrentDay
|
||||
settingsStartWeekWithCurrentDayHolder.setOnClickListener {
|
||||
settingsStartWeekWithCurrentDay.toggle()
|
||||
config.startWeekWithCurrentDay = settingsStartWeekWithCurrentDay.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupWeekNumbers() {
|
||||
settings_week_numbers.isChecked = config.showWeekNumbers
|
||||
settings_week_numbers_holder.setOnClickListener {
|
||||
settings_week_numbers.toggle()
|
||||
config.showWeekNumbers = settings_week_numbers.isChecked
|
||||
private fun setupWeekNumbers() = binding.apply {
|
||||
settingsWeekNumbers.isChecked = config.showWeekNumbers
|
||||
settingsWeekNumbersHolder.setOnClickListener {
|
||||
settingsWeekNumbers.toggle()
|
||||
config.showWeekNumbers = settingsWeekNumbers.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupShowGrid() {
|
||||
settings_show_grid.isChecked = config.showGrid
|
||||
settings_show_grid_holder.setOnClickListener {
|
||||
settings_show_grid.toggle()
|
||||
config.showGrid = settings_show_grid.isChecked
|
||||
private fun setupShowGrid() = binding.apply {
|
||||
settingsShowGrid.isChecked = config.showGrid
|
||||
settingsShowGridHolder.setOnClickListener {
|
||||
settingsShowGrid.toggle()
|
||||
config.showGrid = settingsShowGrid.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupReminderSound() {
|
||||
settings_reminder_sound_holder.beGoneIf(isOreoPlus())
|
||||
settings_reminder_sound.text = config.reminderSoundTitle
|
||||
private fun setupReminderSound() = binding.apply {
|
||||
settingsReminderSoundHolder.beGoneIf(isOreoPlus())
|
||||
settingsReminderSound.text = config.reminderSoundTitle
|
||||
|
||||
settings_reminder_sound_holder.setOnClickListener {
|
||||
SelectAlarmSoundDialog(this, config.reminderSoundUri, config.reminderAudioStream, GET_RINGTONE_URI, RingtoneManager.TYPE_NOTIFICATION, false,
|
||||
settingsReminderSoundHolder.setOnClickListener {
|
||||
SelectAlarmSoundDialog(this@SettingsActivity,
|
||||
config.reminderSoundUri,
|
||||
config.reminderAudioStream,
|
||||
GET_RINGTONE_URI,
|
||||
RingtoneManager.TYPE_NOTIFICATION,
|
||||
false,
|
||||
onAlarmPicked = {
|
||||
if (it != null) {
|
||||
updateReminderSound(it)
|
||||
}
|
||||
}, onAlarmSoundDeleted = {
|
||||
},
|
||||
onAlarmSoundDeleted = {
|
||||
if (it.uri == config.reminderSoundUri) {
|
||||
val defaultAlarm = getDefaultAlarmSound(RingtoneManager.TYPE_NOTIFICATION)
|
||||
updateReminderSound(defaultAlarm)
|
||||
@@ -488,12 +496,12 @@ class SettingsActivity : SimpleActivity() {
|
||||
private fun updateReminderSound(alarmSound: AlarmSound) {
|
||||
config.reminderSoundTitle = alarmSound.title
|
||||
config.reminderSoundUri = alarmSound.uri
|
||||
settings_reminder_sound.text = alarmSound.title
|
||||
binding.settingsReminderSound.text = alarmSound.title
|
||||
}
|
||||
|
||||
private fun setupReminderAudioStream() {
|
||||
settings_reminder_audio_stream.text = getAudioStreamText()
|
||||
settings_reminder_audio_stream_holder.setOnClickListener {
|
||||
private fun setupReminderAudioStream() = binding.apply {
|
||||
settingsReminderAudioStream.text = getAudioStreamText()
|
||||
settingsReminderAudioStreamHolder.setOnClickListener {
|
||||
val items = arrayListOf(
|
||||
RadioItem(AudioManager.STREAM_ALARM, getString(R.string.alarm_stream)),
|
||||
RadioItem(AudioManager.STREAM_SYSTEM, getString(R.string.system_stream)),
|
||||
@@ -503,7 +511,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
|
||||
RadioGroupDialog(this@SettingsActivity, items, config.reminderAudioStream) {
|
||||
config.reminderAudioStream = it as Int
|
||||
settings_reminder_audio_stream.text = getAudioStreamText()
|
||||
settingsReminderAudioStream.text = getAudioStreamText()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -517,35 +525,35 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
)
|
||||
|
||||
private fun setupVibrate() {
|
||||
settings_vibrate.isChecked = config.vibrateOnReminder
|
||||
settings_vibrate_holder.setOnClickListener {
|
||||
settings_vibrate.toggle()
|
||||
config.vibrateOnReminder = settings_vibrate.isChecked
|
||||
private fun setupVibrate() = binding.apply {
|
||||
settingsVibrate.isChecked = config.vibrateOnReminder
|
||||
settingsVibrateHolder.setOnClickListener {
|
||||
settingsVibrate.toggle()
|
||||
config.vibrateOnReminder = settingsVibrate.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupLoopReminders() {
|
||||
settings_loop_reminders.isChecked = config.loopReminders
|
||||
settings_loop_reminders_holder.setOnClickListener {
|
||||
settings_loop_reminders.toggle()
|
||||
config.loopReminders = settings_loop_reminders.isChecked
|
||||
private fun setupLoopReminders() = binding.apply {
|
||||
settingsLoopReminders.isChecked = config.loopReminders
|
||||
settingsLoopRemindersHolder.setOnClickListener {
|
||||
settingsLoopReminders.toggle()
|
||||
config.loopReminders = settingsLoopReminders.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupUseSameSnooze() {
|
||||
settings_snooze_time_holder.beVisibleIf(config.useSameSnooze)
|
||||
settings_use_same_snooze.isChecked = config.useSameSnooze
|
||||
settings_use_same_snooze_holder.setOnClickListener {
|
||||
settings_use_same_snooze.toggle()
|
||||
config.useSameSnooze = settings_use_same_snooze.isChecked
|
||||
settings_snooze_time_holder.beVisibleIf(config.useSameSnooze)
|
||||
private fun setupUseSameSnooze() = binding.apply {
|
||||
settingsSnoozeTimeHolder.beVisibleIf(config.useSameSnooze)
|
||||
settingsUseSameSnooze.isChecked = config.useSameSnooze
|
||||
settingsUseSameSnoozeHolder.setOnClickListener {
|
||||
settingsUseSameSnooze.toggle()
|
||||
config.useSameSnooze = settingsUseSameSnooze.isChecked
|
||||
settingsSnoozeTimeHolder.beVisibleIf(config.useSameSnooze)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupSnoozeTime() {
|
||||
updateSnoozeTime()
|
||||
settings_snooze_time_holder.setOnClickListener {
|
||||
binding.settingsSnoozeTimeHolder.setOnClickListener {
|
||||
showPickSecondsDialogHelper(config.snoozeTime, true) {
|
||||
config.snoozeTime = it / 60
|
||||
updateSnoozeTime()
|
||||
@@ -554,51 +562,51 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateSnoozeTime() {
|
||||
settings_snooze_time.text = formatMinutesToTimeString(config.snoozeTime)
|
||||
binding.settingsSnoozeTime.text = formatMinutesToTimeString(config.snoozeTime)
|
||||
}
|
||||
|
||||
private fun setupDefaultReminder() {
|
||||
settings_use_last_event_reminders.isChecked = config.usePreviousEventReminders
|
||||
private fun setupDefaultReminder() = binding.apply {
|
||||
settingsUseLastEventReminders.isChecked = config.usePreviousEventReminders
|
||||
toggleDefaultRemindersVisibility(!config.usePreviousEventReminders)
|
||||
settings_use_last_event_reminders_holder.setOnClickListener {
|
||||
settings_use_last_event_reminders.toggle()
|
||||
config.usePreviousEventReminders = settings_use_last_event_reminders.isChecked
|
||||
toggleDefaultRemindersVisibility(!settings_use_last_event_reminders.isChecked)
|
||||
settingsUseLastEventRemindersHolder.setOnClickListener {
|
||||
settingsUseLastEventReminders.toggle()
|
||||
config.usePreviousEventReminders = settingsUseLastEventReminders.isChecked
|
||||
toggleDefaultRemindersVisibility(!settingsUseLastEventReminders.isChecked)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupDefaultReminder1() {
|
||||
settings_default_reminder_1.text = getFormattedMinutes(config.defaultReminder1)
|
||||
settings_default_reminder_1_holder.setOnClickListener {
|
||||
private fun setupDefaultReminder1() = binding.apply {
|
||||
settingsDefaultReminder1.text = getFormattedMinutes(config.defaultReminder1)
|
||||
settingsDefaultReminder1Holder.setOnClickListener {
|
||||
showPickSecondsDialogHelper(config.defaultReminder1) {
|
||||
config.defaultReminder1 = if (it == -1 || it == 0) it else it / 60
|
||||
settings_default_reminder_1.text = getFormattedMinutes(config.defaultReminder1)
|
||||
settingsDefaultReminder1.text = getFormattedMinutes(config.defaultReminder1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupDefaultReminder2() {
|
||||
settings_default_reminder_2.text = getFormattedMinutes(config.defaultReminder2)
|
||||
settings_default_reminder_2_holder.setOnClickListener {
|
||||
private fun setupDefaultReminder2() = binding.apply {
|
||||
settingsDefaultReminder2.text = getFormattedMinutes(config.defaultReminder2)
|
||||
settingsDefaultReminder2Holder.setOnClickListener {
|
||||
showPickSecondsDialogHelper(config.defaultReminder2) {
|
||||
config.defaultReminder2 = if (it == -1 || it == 0) it else it / 60
|
||||
settings_default_reminder_2.text = getFormattedMinutes(config.defaultReminder2)
|
||||
settingsDefaultReminder2.text = getFormattedMinutes(config.defaultReminder2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupDefaultReminder3() {
|
||||
settings_default_reminder_3.text = getFormattedMinutes(config.defaultReminder3)
|
||||
settings_default_reminder_3_holder.setOnClickListener {
|
||||
private fun setupDefaultReminder3() = binding.apply {
|
||||
settingsDefaultReminder3.text = getFormattedMinutes(config.defaultReminder3)
|
||||
settingsDefaultReminder3Holder.setOnClickListener {
|
||||
showPickSecondsDialogHelper(config.defaultReminder3) {
|
||||
config.defaultReminder3 = if (it == -1 || it == 0) it else it / 60
|
||||
settings_default_reminder_3.text = getFormattedMinutes(config.defaultReminder3)
|
||||
settingsDefaultReminder3.text = getFormattedMinutes(config.defaultReminder3)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun toggleDefaultRemindersVisibility(show: Boolean) {
|
||||
arrayOf(settings_default_reminder_1_holder, settings_default_reminder_2_holder, settings_default_reminder_3_holder).forEach {
|
||||
private fun toggleDefaultRemindersVisibility(show: Boolean) = binding.apply {
|
||||
arrayOf(settingsDefaultReminder1Holder, settingsDefaultReminder2Holder, settingsDefaultReminder3Holder).forEach {
|
||||
it.beVisibleIf(show)
|
||||
}
|
||||
}
|
||||
@@ -618,7 +626,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
private fun setupDisplayPastEvents() {
|
||||
var displayPastEvents = config.displayPastEvents
|
||||
updatePastEventsText(displayPastEvents)
|
||||
settings_display_past_events_holder.setOnClickListener {
|
||||
binding.settingsDisplayPastEventsHolder.setOnClickListener {
|
||||
CustomIntervalPickerDialog(this, displayPastEvents * 60) {
|
||||
val result = it / 60
|
||||
displayPastEvents = result
|
||||
@@ -629,37 +637,37 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updatePastEventsText(displayPastEvents: Int) {
|
||||
settings_display_past_events.text = getDisplayPastEventsText(displayPastEvents)
|
||||
binding.settingsDisplayPastEvents.text = getDisplayPastEventsText(displayPastEvents)
|
||||
}
|
||||
|
||||
private fun getDisplayPastEventsText(displayPastEvents: Int): String {
|
||||
return if (displayPastEvents == 0) {
|
||||
getString(R.string.never)
|
||||
getString(com.simplemobiletools.commons.R.string.never)
|
||||
} else {
|
||||
getFormattedMinutes(displayPastEvents, false)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupFontSize() {
|
||||
settings_font_size.text = getFontSizeText()
|
||||
settings_font_size_holder.setOnClickListener {
|
||||
private fun setupFontSize() = binding.apply {
|
||||
settingsFontSize.text = getFontSizeText()
|
||||
settingsFontSizeHolder.setOnClickListener {
|
||||
val items = arrayListOf(
|
||||
RadioItem(FONT_SIZE_SMALL, getString(R.string.small)),
|
||||
RadioItem(FONT_SIZE_MEDIUM, getString(R.string.medium)),
|
||||
RadioItem(FONT_SIZE_LARGE, getString(R.string.large)),
|
||||
RadioItem(FONT_SIZE_EXTRA_LARGE, getString(R.string.extra_large))
|
||||
RadioItem(FONT_SIZE_SMALL, getString(com.simplemobiletools.commons.R.string.small)),
|
||||
RadioItem(FONT_SIZE_MEDIUM, getString(com.simplemobiletools.commons.R.string.medium)),
|
||||
RadioItem(FONT_SIZE_LARGE, getString(com.simplemobiletools.commons.R.string.large)),
|
||||
RadioItem(FONT_SIZE_EXTRA_LARGE, getString(com.simplemobiletools.commons.R.string.extra_large))
|
||||
)
|
||||
|
||||
RadioGroupDialog(this@SettingsActivity, items, config.fontSize) {
|
||||
config.fontSize = it as Int
|
||||
settings_font_size.text = getFontSizeText()
|
||||
settingsFontSize.text = getFontSizeText()
|
||||
updateWidgets()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupCustomizeWidgetColors() {
|
||||
settings_widget_color_customization_holder.setOnClickListener {
|
||||
binding.settingsWidgetColorCustomizationHolder.setOnClickListener {
|
||||
Intent(this, WidgetListConfigureActivity::class.java).apply {
|
||||
putExtra(IS_CUSTOMIZING_COLORS, true)
|
||||
startActivity(this)
|
||||
@@ -667,9 +675,9 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupViewToOpenFromListWidget() {
|
||||
settings_list_widget_view_to_open.text = getDefaultViewText()
|
||||
settings_list_widget_view_to_open_holder.setOnClickListener {
|
||||
private fun setupViewToOpenFromListWidget() = binding.apply {
|
||||
settingsListWidgetViewToOpen.text = getDefaultViewText()
|
||||
settingsListWidgetViewToOpenHolder.setOnClickListener {
|
||||
val items = arrayListOf(
|
||||
RadioItem(DAILY_VIEW, getString(R.string.daily_view)),
|
||||
RadioItem(WEEKLY_VIEW, getString(R.string.weekly_view)),
|
||||
@@ -682,7 +690,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
|
||||
RadioGroupDialog(this@SettingsActivity, items, config.listWidgetViewToOpen) {
|
||||
config.listWidgetViewToOpen = it as Int
|
||||
settings_list_widget_view_to_open.text = getDefaultViewText()
|
||||
settingsListWidgetViewToOpen.text = getDefaultViewText()
|
||||
updateWidgets()
|
||||
}
|
||||
}
|
||||
@@ -700,33 +708,33 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
)
|
||||
|
||||
private fun setupDimEvents() {
|
||||
settings_dim_past_events.isChecked = config.dimPastEvents
|
||||
settings_dim_past_events_holder.setOnClickListener {
|
||||
settings_dim_past_events.toggle()
|
||||
config.dimPastEvents = settings_dim_past_events.isChecked
|
||||
private fun setupDimEvents() = binding.apply {
|
||||
settingsDimPastEvents.isChecked = config.dimPastEvents
|
||||
settingsDimPastEventsHolder.setOnClickListener {
|
||||
settingsDimPastEvents.toggle()
|
||||
config.dimPastEvents = settingsDimPastEvents.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupDimCompletedTasks() {
|
||||
settings_dim_completed_tasks.isChecked = config.dimCompletedTasks
|
||||
settings_dim_completed_tasks_holder.setOnClickListener {
|
||||
settings_dim_completed_tasks.toggle()
|
||||
config.dimCompletedTasks = settings_dim_completed_tasks.isChecked
|
||||
private fun setupDimCompletedTasks() = binding.apply {
|
||||
settingsDimCompletedTasks.isChecked = config.dimCompletedTasks
|
||||
settingsDimCompletedTasksHolder.setOnClickListener {
|
||||
settingsDimCompletedTasks.toggle()
|
||||
config.dimCompletedTasks = settingsDimCompletedTasks.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupAllowChangingTimeZones() {
|
||||
settings_allow_changing_time_zones.isChecked = config.allowChangingTimeZones
|
||||
settings_allow_changing_time_zones_holder.setOnClickListener {
|
||||
settings_allow_changing_time_zones.toggle()
|
||||
config.allowChangingTimeZones = settings_allow_changing_time_zones.isChecked
|
||||
private fun setupAllowChangingTimeZones() = binding.apply {
|
||||
settingsAllowChangingTimeZones.isChecked = config.allowChangingTimeZones
|
||||
settingsAllowChangingTimeZonesHolder.setOnClickListener {
|
||||
settingsAllowChangingTimeZones.toggle()
|
||||
config.allowChangingTimeZones = settingsAllowChangingTimeZones.isChecked
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupDefaultStartTime() {
|
||||
updateDefaultStartTimeText()
|
||||
settings_default_start_time_holder.setOnClickListener {
|
||||
binding.settingsDefaultStartTimeHolder.setOnClickListener {
|
||||
val currentDefaultTime = when (config.defaultStartTime) {
|
||||
DEFAULT_START_TIME_NEXT_FULL_HOUR -> DEFAULT_START_TIME_NEXT_FULL_HOUR
|
||||
DEFAULT_START_TIME_CURRENT_TIME -> DEFAULT_START_TIME_CURRENT_TIME
|
||||
@@ -786,21 +794,21 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateDefaultStartTimeText() {
|
||||
when (config.defaultStartTime) {
|
||||
DEFAULT_START_TIME_CURRENT_TIME -> settings_default_start_time.text = getString(R.string.current_time)
|
||||
DEFAULT_START_TIME_NEXT_FULL_HOUR -> settings_default_start_time.text = getString(R.string.next_full_hour)
|
||||
binding.settingsDefaultStartTime.text = when (config.defaultStartTime) {
|
||||
DEFAULT_START_TIME_CURRENT_TIME -> getString(R.string.current_time)
|
||||
DEFAULT_START_TIME_NEXT_FULL_HOUR -> getString(R.string.next_full_hour)
|
||||
else -> {
|
||||
val hours = config.defaultStartTime / 60
|
||||
val minutes = config.defaultStartTime % 60
|
||||
val dateTime = DateTime.now().withHourOfDay(hours).withMinuteOfHour(minutes)
|
||||
settings_default_start_time.text = Formatter.getTime(this, dateTime)
|
||||
Formatter.getTime(this, dateTime)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupDefaultDuration() {
|
||||
updateDefaultDurationText()
|
||||
settings_default_duration_holder.setOnClickListener {
|
||||
binding.settingsDefaultDurationHolder.setOnClickListener {
|
||||
CustomIntervalPickerDialog(this, config.defaultDuration * 60) {
|
||||
val result = it / 60
|
||||
config.defaultDuration = result
|
||||
@@ -811,18 +819,18 @@ class SettingsActivity : SimpleActivity() {
|
||||
|
||||
private fun updateDefaultDurationText() {
|
||||
val duration = config.defaultDuration
|
||||
settings_default_duration.text = if (duration == 0) {
|
||||
"0 ${getString(R.string.minutes_raw)}"
|
||||
binding.settingsDefaultDuration.text = if (duration == 0) {
|
||||
"0 ${getString(com.simplemobiletools.commons.R.string.minutes_raw)}"
|
||||
} else {
|
||||
getFormattedMinutes(duration, false)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupDefaultEventType() {
|
||||
private fun setupDefaultEventType() = binding.apply {
|
||||
updateDefaultEventTypeText()
|
||||
settings_default_event_type.text = getString(R.string.last_used_one)
|
||||
settings_default_event_type_holder.setOnClickListener {
|
||||
SelectEventTypeDialog(this, config.defaultEventTypeId, true, false, true, true, false) {
|
||||
settingsDefaultEventType.text = getString(R.string.last_used_one)
|
||||
settingsDefaultEventTypeHolder.setOnClickListener {
|
||||
SelectEventTypeDialog(this@SettingsActivity, config.defaultEventTypeId, true, false, true, true, false) {
|
||||
config.defaultEventTypeId = it.id!!
|
||||
updateDefaultEventTypeText()
|
||||
}
|
||||
@@ -832,7 +840,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
private fun updateDefaultEventTypeText() {
|
||||
if (config.defaultEventTypeId == -1L) {
|
||||
runOnUiThread {
|
||||
settings_default_event_type.text = getString(R.string.last_used_one)
|
||||
binding.settingsDefaultEventType.text = getString(R.string.last_used_one)
|
||||
}
|
||||
} else {
|
||||
ensureBackgroundThread {
|
||||
@@ -840,7 +848,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
if (eventType != null) {
|
||||
config.lastUsedCaldavCalendarId = eventType.caldavCalendarId
|
||||
runOnUiThread {
|
||||
settings_default_event_type.text = eventType.title
|
||||
binding.settingsDefaultEventType.text = eventType.title
|
||||
}
|
||||
} else {
|
||||
config.defaultEventTypeId = -1
|
||||
@@ -850,16 +858,16 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupEnableAutomaticBackups() {
|
||||
settings_backups_label.beVisibleIf(isRPlus())
|
||||
settings_backups_divider.beVisibleIf(isRPlus())
|
||||
settings_enable_automatic_backups_holder.beVisibleIf(isRPlus())
|
||||
settings_enable_automatic_backups.isChecked = config.autoBackup
|
||||
settings_enable_automatic_backups_holder.setOnClickListener {
|
||||
private fun setupEnableAutomaticBackups() = binding.apply {
|
||||
settingsBackupsLabel.beVisibleIf(isRPlus())
|
||||
settingsBackupsDivider.beVisibleIf(isRPlus())
|
||||
settingsEnableAutomaticBackupsHolder.beVisibleIf(isRPlus())
|
||||
settingsEnableAutomaticBackups.isChecked = config.autoBackup
|
||||
settingsEnableAutomaticBackupsHolder.setOnClickListener {
|
||||
val wasBackupDisabled = !config.autoBackup
|
||||
if (wasBackupDisabled) {
|
||||
ManageAutomaticBackupsDialog(
|
||||
activity = this,
|
||||
activity = this@SettingsActivity,
|
||||
onSuccess = {
|
||||
enableOrDisableAutomaticBackups(true)
|
||||
scheduleNextAutomaticBackup()
|
||||
@@ -872,11 +880,11 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupManageAutomaticBackups() {
|
||||
settings_manage_automatic_backups_holder.beVisibleIf(isRPlus() && config.autoBackup)
|
||||
settings_manage_automatic_backups_holder.setOnClickListener {
|
||||
private fun setupManageAutomaticBackups() = binding.apply {
|
||||
settingsManageAutomaticBackupsHolder.beVisibleIf(isRPlus() && config.autoBackup)
|
||||
settingsManageAutomaticBackupsHolder.setOnClickListener {
|
||||
ManageAutomaticBackupsDialog(
|
||||
activity = this,
|
||||
activity = this@SettingsActivity,
|
||||
onSuccess = {
|
||||
scheduleNextAutomaticBackup()
|
||||
}
|
||||
@@ -884,14 +892,14 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun enableOrDisableAutomaticBackups(enable: Boolean) {
|
||||
private fun enableOrDisableAutomaticBackups(enable: Boolean) = binding.apply {
|
||||
config.autoBackup = enable
|
||||
settings_enable_automatic_backups.isChecked = enable
|
||||
settings_manage_automatic_backups_holder.beVisibleIf(enable)
|
||||
settingsEnableAutomaticBackups.isChecked = enable
|
||||
settingsManageAutomaticBackupsHolder.beVisibleIf(enable)
|
||||
}
|
||||
|
||||
private fun setupExportSettings() {
|
||||
settings_export_holder.setOnClickListener {
|
||||
binding.settingsExportHolder.setOnClickListener {
|
||||
val configItems = LinkedHashMap<String, Any>().apply {
|
||||
put(IS_USING_SHARED_THEME, config.isUsingSharedTheme)
|
||||
put(TEXT_COLOR, config.textColor)
|
||||
@@ -944,7 +952,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun setupImportSettings() {
|
||||
settings_import_holder.setOnClickListener {
|
||||
binding.settingsImportHolder.setOnClickListener {
|
||||
if (isQPlus()) {
|
||||
Intent(Intent.ACTION_GET_CONTENT).apply {
|
||||
addCategory(Intent.CATEGORY_OPENABLE)
|
||||
@@ -953,7 +961,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
try {
|
||||
startActivityForResult(this, PICK_IMPORT_SOURCE_INTENT)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
toast(R.string.system_service_disabled, Toast.LENGTH_LONG)
|
||||
toast(com.simplemobiletools.commons.R.string.system_service_disabled, Toast.LENGTH_LONG)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
@@ -974,7 +982,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
|
||||
private fun parseFile(inputStream: InputStream?) {
|
||||
if (inputStream == null) {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
toast(com.simplemobiletools.commons.R.string.unknown_error_occurred)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1008,6 +1016,7 @@ class SettingsActivity : SimpleActivity() {
|
||||
checkAppIconColor()
|
||||
}
|
||||
}
|
||||
|
||||
USE_ENGLISH -> config.useEnglish = value.toBoolean()
|
||||
WAS_USE_ENGLISH_TOGGLED -> config.wasUseEnglishToggled = value.toBoolean()
|
||||
WIDGET_BG_COLOR -> config.widgetBgColor = value.toInt()
|
||||
@@ -1051,7 +1060,12 @@ class SettingsActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
runOnUiThread {
|
||||
val msg = if (configValues.size > 0) R.string.settings_imported_successfully else R.string.no_entries_for_importing
|
||||
val msg = if (configValues.size > 0) {
|
||||
com.simplemobiletools.commons.R.string.settings_imported_successfully
|
||||
} else {
|
||||
com.simplemobiletools.commons.R.string.no_entries_for_importing
|
||||
}
|
||||
|
||||
toast(msg)
|
||||
|
||||
setupSettingItems()
|
||||
|
@@ -80,12 +80,17 @@ open class SimpleActivity : BaseSimpleActivity() {
|
||||
if (NotificationManagerCompat.from(this).areNotificationsEnabled()) {
|
||||
callback()
|
||||
} else {
|
||||
ConfirmationDialog(this, messageId = R.string.notifications_disabled, positive = R.string.ok, negative = 0) {
|
||||
ConfirmationDialog(
|
||||
activity = this,
|
||||
messageId = com.simplemobiletools.commons.R.string.notifications_disabled,
|
||||
positive = com.simplemobiletools.commons.R.string.ok,
|
||||
negative = 0
|
||||
) {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
PermissionRequiredDialog(this, R.string.allow_notifications_reminders, { openNotificationSettings() })
|
||||
PermissionRequiredDialog(this, com.simplemobiletools.commons.R.string.allow_notifications_reminders, { openNotificationSettings() })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -10,6 +10,7 @@ import androidx.core.content.ContextCompat
|
||||
import com.google.android.material.timepicker.MaterialTimePicker
|
||||
import com.google.android.material.timepicker.TimeFormat
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.ActivityTaskBinding
|
||||
import com.simplemobiletools.calendar.pro.dialogs.*
|
||||
import com.simplemobiletools.calendar.pro.extensions.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.*
|
||||
@@ -23,7 +24,6 @@ import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import kotlinx.android.synthetic.main.activity_task.*
|
||||
import org.joda.time.DateTime
|
||||
import kotlin.math.pow
|
||||
|
||||
@@ -48,10 +48,12 @@ class TaskActivity : SimpleActivity() {
|
||||
private var mIsNewTask = true
|
||||
private var mEventColor = 0
|
||||
|
||||
private val binding by viewBinding(ActivityTaskBinding::inflate)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
isMaterialActivity = true
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_task)
|
||||
setContentView(binding.root)
|
||||
setupOptionsMenu()
|
||||
refreshMenuItems()
|
||||
|
||||
@@ -59,8 +61,8 @@ class TaskActivity : SimpleActivity() {
|
||||
return
|
||||
}
|
||||
|
||||
updateMaterialActivityViews(task_coordinator, task_holder, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(task_nested_scrollview, task_toolbar)
|
||||
updateMaterialActivityViews(binding.taskCoordinator, binding.taskHolder, useTransparentNavigation = true, useTopSearchMenu = false)
|
||||
setupMaterialScrollListener(binding.taskNestedScrollview, binding.taskToolbar)
|
||||
|
||||
val intent = intent ?: return
|
||||
updateColors()
|
||||
@@ -85,12 +87,12 @@ class TaskActivity : SimpleActivity() {
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setupToolbar(task_toolbar, NavigationIcon.Arrow)
|
||||
setupToolbar(binding.taskToolbar, NavigationIcon.Arrow)
|
||||
}
|
||||
|
||||
private fun refreshMenuItems() {
|
||||
if (::mTask.isInitialized) {
|
||||
task_toolbar.menu.apply {
|
||||
binding.taskToolbar.menu.apply {
|
||||
findItem(R.id.delete).isVisible = mTask.id != null
|
||||
findItem(R.id.share).isVisible = mTask.id != null
|
||||
findItem(R.id.duplicate).isVisible = mTask.id != null
|
||||
@@ -99,7 +101,7 @@ class TaskActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun setupOptionsMenu() {
|
||||
task_toolbar.setOnMenuItemClickListener { menuItem ->
|
||||
binding.taskToolbar.setOnMenuItemClickListener { menuItem ->
|
||||
when (menuItem.itemId) {
|
||||
R.id.save -> saveCurrentTask()
|
||||
R.id.delete -> deleteTask()
|
||||
@@ -125,8 +127,8 @@ class TaskActivity : SimpleActivity() {
|
||||
|
||||
val reminders = getReminders()
|
||||
val originalReminders = mTask.getReminders()
|
||||
if (task_title.text.toString() != mTask.title ||
|
||||
task_description.text.toString() != mTask.description ||
|
||||
if (binding.taskTitle.text.toString() != mTask.title ||
|
||||
binding.taskDescription.text.toString() != mTask.description ||
|
||||
reminders != originalReminders ||
|
||||
mRepeatInterval != mTask.repeatInterval ||
|
||||
mRepeatRule != mTask.repeatRule ||
|
||||
@@ -143,7 +145,13 @@ class TaskActivity : SimpleActivity() {
|
||||
override fun onBackPressed() {
|
||||
if (System.currentTimeMillis() - mLastSavePromptTS > SAVE_DISCARD_PROMPT_INTERVAL && isTaskChanged()) {
|
||||
mLastSavePromptTS = System.currentTimeMillis()
|
||||
ConfirmationAdvancedDialog(this, "", R.string.save_before_closing, R.string.save, R.string.discard) {
|
||||
ConfirmationAdvancedDialog(
|
||||
activity = this,
|
||||
message = "",
|
||||
messageId = com.simplemobiletools.commons.R.string.save_before_closing,
|
||||
positive = com.simplemobiletools.commons.R.string.save,
|
||||
negative = com.simplemobiletools.commons.R.string.discard
|
||||
) {
|
||||
if (it) {
|
||||
saveCurrentTask()
|
||||
} else {
|
||||
@@ -232,7 +240,7 @@ class TaskActivity : SimpleActivity() {
|
||||
|
||||
if (intent.getBooleanExtra(IS_DUPLICATE_INTENT, false)) {
|
||||
mTask.id = null
|
||||
task_toolbar.title = getString(R.string.new_task)
|
||||
binding.taskToolbar.title = getString(R.string.new_task)
|
||||
}
|
||||
} else {
|
||||
mTask = Event(null)
|
||||
@@ -247,34 +255,37 @@ class TaskActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
task_all_day.setOnCheckedChangeListener { _, isChecked -> toggleAllDay(isChecked) }
|
||||
task_all_day_holder.setOnClickListener {
|
||||
task_all_day.toggle()
|
||||
}
|
||||
binding.apply {
|
||||
taskAllDay.setOnCheckedChangeListener { _, isChecked -> toggleAllDay(isChecked) }
|
||||
taskAllDayHolder.setOnClickListener {
|
||||
taskAllDay.toggle()
|
||||
}
|
||||
|
||||
task_date.setOnClickListener { setupDate() }
|
||||
task_time.setOnClickListener { setupTime() }
|
||||
task_type_holder.setOnClickListener { showEventTypeDialog() }
|
||||
task_repetition.setOnClickListener { showRepeatIntervalDialog() }
|
||||
task_repetition_rule_holder.setOnClickListener { showRepetitionRuleDialog() }
|
||||
task_repetition_limit_holder.setOnClickListener { showRepetitionTypePicker() }
|
||||
taskDate.setOnClickListener { setupDate() }
|
||||
taskTime.setOnClickListener { setupTime() }
|
||||
taskTypeHolder.setOnClickListener { showEventTypeDialog() }
|
||||
taskRepetition.setOnClickListener { showRepeatIntervalDialog() }
|
||||
taskRepetitionRuleHolder.setOnClickListener { showRepetitionRuleDialog() }
|
||||
taskRepetitionLimitHolder.setOnClickListener { showRepetitionTypePicker() }
|
||||
|
||||
task_reminder_1.setOnClickListener {
|
||||
handleNotificationAvailability {
|
||||
if (config.wasAlarmWarningShown) {
|
||||
showReminder1Dialog()
|
||||
} else {
|
||||
ReminderWarningDialog(this) {
|
||||
config.wasAlarmWarningShown = true
|
||||
taskReminder1.setOnClickListener {
|
||||
handleNotificationAvailability {
|
||||
if (config.wasAlarmWarningShown) {
|
||||
showReminder1Dialog()
|
||||
} else {
|
||||
ReminderWarningDialog(this@TaskActivity) {
|
||||
config.wasAlarmWarningShown = true
|
||||
showReminder1Dialog()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
taskReminder2.setOnClickListener { showReminder2Dialog() }
|
||||
taskReminder3.setOnClickListener { showReminder3Dialog() }
|
||||
taskColorHolder.setOnClickListener { showTaskColorDialog() }
|
||||
}
|
||||
|
||||
task_reminder_2.setOnClickListener { showReminder2Dialog() }
|
||||
task_reminder_3.setOnClickListener { showReminder3Dialog() }
|
||||
task_color_holder.setOnClickListener { showTaskColorDialog() }
|
||||
refreshMenuItems()
|
||||
setupMarkCompleteButton()
|
||||
|
||||
@@ -290,7 +301,7 @@ class TaskActivity : SimpleActivity() {
|
||||
mOriginalStartTS = realStart
|
||||
mTaskDateTime = Formatter.getDateTimeFromTS(realStart)
|
||||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
|
||||
task_toolbar.title = getString(R.string.edit_task)
|
||||
binding.taskToolbar.title = getString(R.string.edit_task)
|
||||
|
||||
mEventTypeId = mTask.eventType
|
||||
mReminder1Minutes = mTask.reminder1Minutes
|
||||
@@ -304,9 +315,9 @@ class TaskActivity : SimpleActivity() {
|
||||
mRepeatRule = mTask.repeatRule
|
||||
mEventColor = mTask.color
|
||||
|
||||
task_title.setText(mTask.title)
|
||||
task_description.setText(mTask.description)
|
||||
task_all_day.isChecked = mTask.getIsAllDay()
|
||||
binding.taskTitle.setText(mTask.title)
|
||||
binding.taskDescription.setText(mTask.description)
|
||||
binding.taskAllDay.isChecked = mTask.getIsAllDay()
|
||||
toggleAllDay(mTask.getIsAllDay())
|
||||
checkRepeatTexts(mRepeatInterval)
|
||||
}
|
||||
@@ -317,8 +328,8 @@ class TaskActivity : SimpleActivity() {
|
||||
mTaskDateTime = dateTime
|
||||
|
||||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
|
||||
task_title.requestFocus()
|
||||
task_toolbar.title = getString(R.string.new_task)
|
||||
binding.taskTitle.requestFocus()
|
||||
binding.taskToolbar.title = getString(R.string.new_task)
|
||||
|
||||
mTask.apply {
|
||||
this.startTS = mTaskDateTime.seconds()
|
||||
@@ -349,11 +360,11 @@ class TaskActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun saveTask() {
|
||||
val newTitle = task_title.value
|
||||
val newTitle = binding.taskTitle.value
|
||||
if (newTitle.isEmpty()) {
|
||||
toast(R.string.title_empty)
|
||||
runOnUiThread {
|
||||
task_title.requestFocus()
|
||||
binding.taskTitle.requestFocus()
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -366,7 +377,7 @@ class TaskActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
val reminders = getReminders()
|
||||
if (!task_all_day.isChecked) {
|
||||
if (!binding.taskAllDay.isChecked) {
|
||||
if ((reminders.getOrNull(2)?.minutes ?: 0) < -1) {
|
||||
reminders.removeAt(2)
|
||||
}
|
||||
@@ -397,7 +408,7 @@ class TaskActivity : SimpleActivity() {
|
||||
startTS = mTaskDateTime.withSecondOfMinute(0).withMillisOfSecond(0).seconds()
|
||||
endTS = startTS
|
||||
title = newTitle
|
||||
description = task_description.value
|
||||
description = binding.taskDescription.value
|
||||
|
||||
// migrate completed task to the new completed tasks db
|
||||
if (!wasRepeatable && mTask.isTaskCompleted()) {
|
||||
@@ -407,7 +418,7 @@ class TaskActivity : SimpleActivity() {
|
||||
}
|
||||
}
|
||||
importId = newImportId
|
||||
flags = mTask.flags.addBitIf(task_all_day.isChecked, FLAG_ALL_DAY)
|
||||
flags = mTask.flags.addBitIf(binding.taskAllDay.isChecked, FLAG_ALL_DAY)
|
||||
lastUpdated = System.currentTimeMillis()
|
||||
eventType = mEventTypeId
|
||||
type = TYPE_TASK
|
||||
@@ -432,7 +443,7 @@ class TaskActivity : SimpleActivity() {
|
||||
storeTask(wasRepeatable)
|
||||
}
|
||||
} else {
|
||||
PermissionRequiredDialog(this, R.string.allow_notifications_reminders, { openNotificationSettings() })
|
||||
PermissionRequiredDialog(this, com.simplemobiletools.commons.R.string.allow_notifications_reminders, { openNotificationSettings() })
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -479,11 +490,13 @@ class TaskActivity : SimpleActivity() {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
EDIT_FUTURE_OCCURRENCES -> {
|
||||
eventsHelper.editFutureOccurrences(mTask, mTaskOccurrenceTS, true) {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
EDIT_ALL_OCCURRENCES -> {
|
||||
eventsHelper.editAllOccurrences(mTask, mOriginalStartTS, showToasts = true) {
|
||||
finish()
|
||||
@@ -613,21 +626,21 @@ class TaskActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateDateText() {
|
||||
task_date.text = Formatter.getDate(this, mTaskDateTime)
|
||||
binding.taskDate.text = Formatter.getDate(this, mTaskDateTime)
|
||||
}
|
||||
|
||||
private fun updateTimeText() {
|
||||
task_time.text = Formatter.getTime(this, mTaskDateTime)
|
||||
binding.taskTime.text = Formatter.getTime(this, mTaskDateTime)
|
||||
}
|
||||
|
||||
private fun toggleAllDay(isChecked: Boolean) {
|
||||
hideKeyboard()
|
||||
task_time.beGoneIf(isChecked)
|
||||
binding.taskTime.beGoneIf(isChecked)
|
||||
}
|
||||
|
||||
private fun setupMarkCompleteButton() {
|
||||
toggle_mark_complete.setOnClickListener { toggleCompletion() }
|
||||
toggle_mark_complete.beVisibleIf(mTask.id != null)
|
||||
binding.toggleMarkComplete.setOnClickListener { toggleCompletion() }
|
||||
binding.toggleMarkComplete.beVisibleIf(mTask.id != null)
|
||||
updateTaskCompletedButton()
|
||||
ensureBackgroundThread {
|
||||
// the stored value might be incorrect so update it (e.g. user completed the task via notification action before editing)
|
||||
@@ -640,16 +653,16 @@ class TaskActivity : SimpleActivity() {
|
||||
|
||||
private fun updateTaskCompletedButton() {
|
||||
if (mTaskCompleted) {
|
||||
toggle_mark_complete.background = ContextCompat.getDrawable(this, R.drawable.button_background_stroke)
|
||||
toggle_mark_complete.setText(R.string.mark_incomplete)
|
||||
toggle_mark_complete.setTextColor(getProperTextColor())
|
||||
binding.toggleMarkComplete.background = ContextCompat.getDrawable(this, com.simplemobiletools.commons.R.drawable.button_background_stroke)
|
||||
binding.toggleMarkComplete.setText(R.string.mark_incomplete)
|
||||
binding.toggleMarkComplete.setTextColor(getProperTextColor())
|
||||
} else {
|
||||
val markCompleteBgColor = if (isWhiteTheme()) {
|
||||
Color.WHITE
|
||||
} else {
|
||||
getProperPrimaryColor()
|
||||
}
|
||||
toggle_mark_complete.setTextColor(markCompleteBgColor.getContrastColor())
|
||||
binding.toggleMarkComplete.setTextColor(markCompleteBgColor.getContrastColor())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -669,12 +682,12 @@ class TaskActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateReminder1Text() {
|
||||
task_reminder_1.text = getFormattedMinutes(mReminder1Minutes)
|
||||
binding.taskReminder1.text = getFormattedMinutes(mReminder1Minutes)
|
||||
}
|
||||
|
||||
private fun updateReminder2Text() {
|
||||
task_reminder_2.apply {
|
||||
beGoneIf(task_reminder_2.isGone() && mReminder1Minutes == REMINDER_OFF)
|
||||
binding.taskReminder2.apply {
|
||||
beGoneIf(isGone() && mReminder1Minutes == REMINDER_OFF)
|
||||
if (mReminder2Minutes == REMINDER_OFF) {
|
||||
text = resources.getString(R.string.add_another_reminder)
|
||||
alpha = 0.4f
|
||||
@@ -686,8 +699,8 @@ class TaskActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateReminder3Text() {
|
||||
task_reminder_3.apply {
|
||||
beGoneIf(task_reminder_3.isGone() && (mReminder2Minutes == REMINDER_OFF || mReminder1Minutes == REMINDER_OFF))
|
||||
binding.taskReminder3.apply {
|
||||
beGoneIf(isGone() && (mReminder2Minutes == REMINDER_OFF || mReminder1Minutes == REMINDER_OFF))
|
||||
if (mReminder3Minutes == REMINDER_OFF) {
|
||||
text = resources.getString(R.string.add_another_reminder)
|
||||
alpha = 0.4f
|
||||
@@ -750,13 +763,13 @@ class TaskActivity : SimpleActivity() {
|
||||
val eventType = eventTypesDB.getEventTypeWithId(mEventTypeId)
|
||||
if (eventType != null) {
|
||||
runOnUiThread {
|
||||
task_type.text = eventType.title
|
||||
binding.taskType.text = eventType.title
|
||||
updateTaskColorInfo(eventType.color)
|
||||
}
|
||||
}
|
||||
task_color_image.beVisibleIf(eventType != null)
|
||||
task_color_holder.beVisibleIf(eventType != null)
|
||||
task_color_divider.beVisibleIf(eventType != null)
|
||||
binding.taskColorImage.beVisibleIf(eventType != null)
|
||||
binding.taskColorHolder.beVisibleIf(eventType != null)
|
||||
binding.taskColorDivider.beVisibleIf(eventType != null)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -789,16 +802,19 @@ class TaskActivity : SimpleActivity() {
|
||||
} else {
|
||||
mEventColor
|
||||
}
|
||||
task_color.setFillWithStroke(taskColor, getProperBackgroundColor())
|
||||
|
||||
binding.taskColor.setFillWithStroke(taskColor, getProperBackgroundColor())
|
||||
}
|
||||
|
||||
private fun updateColors() {
|
||||
updateTextColors(task_nested_scrollview)
|
||||
val textColor = getProperTextColor()
|
||||
arrayOf(
|
||||
task_time_image, task_reminder_image, task_type_image, task_repetition_image, task_color_image
|
||||
).forEach {
|
||||
it.applyColorFilter(textColor)
|
||||
binding.apply {
|
||||
updateTextColors(taskNestedScrollview)
|
||||
val textColor = getProperTextColor()
|
||||
arrayOf(
|
||||
taskTimeImage, taskReminderImage, taskTypeImage, taskRepetitionImage, taskColorImage
|
||||
).forEach {
|
||||
it.applyColorFilter(textColor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -821,10 +837,10 @@ class TaskActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun checkRepeatTexts(limit: Int) {
|
||||
task_repetition_limit_holder.beGoneIf(limit == 0)
|
||||
binding.taskRepetitionLimitHolder.beGoneIf(limit == 0)
|
||||
checkRepetitionLimitText()
|
||||
|
||||
task_repetition_rule_holder.beVisibleIf(mRepeatInterval.isXWeeklyRepetition() || mRepeatInterval.isXMonthlyRepetition() || mRepeatInterval.isXYearlyRepetition())
|
||||
binding.taskRepetitionRuleHolder.beVisibleIf(mRepeatInterval.isXWeeklyRepetition() || mRepeatInterval.isXMonthlyRepetition() || mRepeatInterval.isXYearlyRepetition())
|
||||
checkRepetitionRuleText()
|
||||
}
|
||||
|
||||
@@ -841,18 +857,20 @@ class TaskActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun checkRepetitionLimitText() {
|
||||
task_repetition_limit.text = when {
|
||||
binding.taskRepetitionLimit.text = when {
|
||||
mRepeatLimit == 0L -> {
|
||||
task_repetition_limit_label.text = getString(R.string.repeat)
|
||||
binding.taskRepetitionLimitLabel.text = getString(R.string.repeat)
|
||||
resources.getString(R.string.forever)
|
||||
}
|
||||
|
||||
mRepeatLimit > 0 -> {
|
||||
task_repetition_limit_label.text = getString(R.string.repeat_till)
|
||||
binding.taskRepetitionLimitLabel.text = getString(R.string.repeat_till)
|
||||
val repeatLimitDateTime = Formatter.getDateTimeFromTS(mRepeatLimit)
|
||||
Formatter.getFullDate(this, repeatLimitDateTime)
|
||||
}
|
||||
|
||||
else -> {
|
||||
task_repetition_limit_label.text = getString(R.string.repeat)
|
||||
binding.taskRepetitionLimitLabel.text = getString(R.string.repeat)
|
||||
"${-mRepeatLimit} ${getString(R.string.times)}"
|
||||
}
|
||||
}
|
||||
@@ -864,12 +882,14 @@ class TaskActivity : SimpleActivity() {
|
||||
mRepeatInterval.isXWeeklyRepetition() -> RepeatRuleWeeklyDialog(this, mRepeatRule) {
|
||||
setRepeatRule(it)
|
||||
}
|
||||
|
||||
mRepeatInterval.isXMonthlyRepetition() -> {
|
||||
val items = getAvailableMonthlyRepetitionRules()
|
||||
RadioGroupDialog(this, items, mRepeatRule) {
|
||||
setRepeatRule(it as Int)
|
||||
}
|
||||
}
|
||||
|
||||
mRepeatInterval.isXYearlyRepetition() -> {
|
||||
val items = getAvailableYearlyRepetitionRules()
|
||||
RadioGroupDialog(this, items, mRepeatRule) {
|
||||
@@ -969,7 +989,7 @@ class TaskActivity : SimpleActivity() {
|
||||
|
||||
private fun getRepeatXthDayInMonthString(includeBase: Boolean, repeatRule: Int): String {
|
||||
val weekDayString = getRepeatXthDayString(includeBase, repeatRule)
|
||||
val monthString = resources.getStringArray(R.array.in_months)[mTaskDateTime.monthOfYear - 1]
|
||||
val monthString = resources.getStringArray(com.simplemobiletools.commons.R.array.in_months)[mTaskDateTime.monthOfYear - 1]
|
||||
return "$weekDayString $monthString"
|
||||
}
|
||||
|
||||
@@ -984,21 +1004,27 @@ class TaskActivity : SimpleActivity() {
|
||||
private fun checkRepetitionRuleText() {
|
||||
when {
|
||||
mRepeatInterval.isXWeeklyRepetition() -> {
|
||||
task_repetition_rule.text = if (mRepeatRule == EVERY_DAY_BIT) getString(R.string.every_day) else getShortDaysFromBitmask(mRepeatRule)
|
||||
binding.taskRepetitionRule.text = if (mRepeatRule == EVERY_DAY_BIT) {
|
||||
getString(com.simplemobiletools.commons.R.string.every_day)
|
||||
} else {
|
||||
getShortDaysFromBitmask(mRepeatRule)
|
||||
}
|
||||
}
|
||||
|
||||
mRepeatInterval.isXMonthlyRepetition() -> {
|
||||
val repeatString = if (mRepeatRule == REPEAT_ORDER_WEEKDAY_USE_LAST || mRepeatRule == REPEAT_ORDER_WEEKDAY)
|
||||
R.string.repeat else R.string.repeat_on
|
||||
|
||||
task_repetition_rule_label.text = getString(repeatString)
|
||||
task_repetition_rule.text = getMonthlyRepetitionRuleText()
|
||||
binding.taskRepetitionRuleLabel.text = getString(repeatString)
|
||||
binding.taskRepetitionRule.text = getMonthlyRepetitionRuleText()
|
||||
}
|
||||
|
||||
mRepeatInterval.isXYearlyRepetition() -> {
|
||||
val repeatString = if (mRepeatRule == REPEAT_ORDER_WEEKDAY_USE_LAST || mRepeatRule == REPEAT_ORDER_WEEKDAY)
|
||||
R.string.repeat else R.string.repeat_on
|
||||
|
||||
task_repetition_rule_label.text = getString(repeatString)
|
||||
task_repetition_rule.text = getYearlyRepetitionRuleText()
|
||||
binding.taskRepetitionRuleLabel.text = getString(repeatString)
|
||||
binding.taskRepetitionRule.text = getYearlyRepetitionRuleText()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1015,11 +1041,11 @@ class TaskActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateRepetitionText() {
|
||||
task_repetition.text = getRepetitionText(mRepeatInterval)
|
||||
binding.taskRepetition.text = getRepetitionText(mRepeatInterval)
|
||||
}
|
||||
|
||||
private fun updateActionBarTitle() {
|
||||
task_toolbar.title = if (mIsNewTask) {
|
||||
binding.taskToolbar.title = if (mIsNewTask) {
|
||||
getString(R.string.new_task)
|
||||
} else {
|
||||
getString(R.string.edit_task)
|
||||
|
@@ -6,14 +6,13 @@ import android.content.Intent
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.WidgetConfigDateBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
import com.simplemobiletools.calendar.pro.helpers.MyWidgetDateProvider
|
||||
import com.simplemobiletools.commons.dialogs.ColorPickerDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.IS_CUSTOMIZING_COLORS
|
||||
import kotlinx.android.synthetic.main.widget_config_date.*
|
||||
|
||||
class WidgetDateConfigureActivity : SimpleActivity() {
|
||||
private var mBgAlpha = 0f
|
||||
@@ -22,11 +21,13 @@ class WidgetDateConfigureActivity : SimpleActivity() {
|
||||
private var mBgColor = 0
|
||||
private var mTextColor = 0
|
||||
|
||||
private val binding by viewBinding(WidgetConfigDateBinding::inflate)
|
||||
|
||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||
useDynamicTheme = false
|
||||
super.onCreate(savedInstanceState)
|
||||
setResult(Activity.RESULT_CANCELED)
|
||||
setContentView(R.layout.widget_config_date)
|
||||
setContentView(binding.root)
|
||||
initVariables()
|
||||
|
||||
val isCustomizingColors = intent.extras?.getBoolean(IS_CUSTOMIZING_COLORS) ?: false
|
||||
@@ -37,12 +38,14 @@ class WidgetDateConfigureActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
val primaryColor = getProperPrimaryColor()
|
||||
config_save.setOnClickListener { saveConfig() }
|
||||
config_bg_color.setOnClickListener { pickBackgroundColor() }
|
||||
config_text_color.setOnClickListener { pickTextColor() }
|
||||
config_bg_seekbar.setColors(mTextColor, primaryColor, primaryColor)
|
||||
widget_date_label.text = Formatter.getTodayDayNumber()
|
||||
widget_month_label.text = Formatter.getCurrentMonthShort()
|
||||
binding.apply {
|
||||
configSave.setOnClickListener { saveConfig() }
|
||||
configBgColor.setOnClickListener { pickBackgroundColor() }
|
||||
configTextColor.setOnClickListener { pickTextColor() }
|
||||
configBgSeekbar.setColors(mTextColor, primaryColor, primaryColor)
|
||||
widgetDateLabel.text = Formatter.getTodayDayNumber()
|
||||
widgetMonthLabel.text = Formatter.getCurrentMonthShort()
|
||||
}
|
||||
}
|
||||
|
||||
private fun initVariables() {
|
||||
@@ -50,7 +53,7 @@ class WidgetDateConfigureActivity : SimpleActivity() {
|
||||
mBgAlpha = Color.alpha(mBgColor) / 255f
|
||||
|
||||
mBgColorWithoutTransparency = Color.rgb(Color.red(mBgColor), Color.green(mBgColor), Color.blue(mBgColor))
|
||||
config_bg_seekbar.apply {
|
||||
binding.configBgSeekbar.apply {
|
||||
progress = (mBgAlpha * 100).toInt()
|
||||
|
||||
onSeekBarChangeListener { progress ->
|
||||
@@ -61,8 +64,8 @@ class WidgetDateConfigureActivity : SimpleActivity() {
|
||||
updateBackgroundColor()
|
||||
|
||||
mTextColor = config.widgetTextColor
|
||||
if (mTextColor == resources.getColor(R.color.default_widget_text_color) && config.isUsingSystemTheme) {
|
||||
mTextColor = resources.getColor(R.color.you_primary_color, theme)
|
||||
if (mTextColor == resources.getColor(com.simplemobiletools.commons.R.color.default_widget_text_color) && config.isUsingSystemTheme) {
|
||||
mTextColor = resources.getColor(com.simplemobiletools.commons.R.color.you_primary_color, theme)
|
||||
}
|
||||
|
||||
updateTextColor()
|
||||
@@ -112,16 +115,20 @@ class WidgetDateConfigureActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateTextColor() {
|
||||
config_text_color.setFillWithStroke(mTextColor, mTextColor)
|
||||
widget_date_label.setTextColor(mTextColor)
|
||||
widget_month_label.setTextColor(mTextColor)
|
||||
config_save.setTextColor(getProperPrimaryColor().getContrastColor())
|
||||
binding.apply {
|
||||
configTextColor.setFillWithStroke(mTextColor, mTextColor)
|
||||
widgetDateLabel.setTextColor(mTextColor)
|
||||
widgetMonthLabel.setTextColor(mTextColor)
|
||||
configSave.setTextColor(getProperPrimaryColor().getContrastColor())
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateBackgroundColor() {
|
||||
mBgColor = mBgColorWithoutTransparency.adjustAlpha(mBgAlpha)
|
||||
config_date_time_wrapper.background.applyColorFilter(mBgColor)
|
||||
config_bg_color.setFillWithStroke(mBgColor, mBgColor)
|
||||
config_save.backgroundTintList = ColorStateList.valueOf(getProperPrimaryColor())
|
||||
binding.apply {
|
||||
configDateTimeWrapper.background.applyColorFilter(mBgColor)
|
||||
configBgColor.setFillWithStroke(mBgColor, mBgColor)
|
||||
configSave.backgroundTintList = ColorStateList.valueOf(getProperPrimaryColor())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -9,6 +9,7 @@ import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.adapters.EventListAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.WidgetConfigListBinding
|
||||
import com.simplemobiletools.calendar.pro.dialogs.CustomPeriodPickerDialog
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.seconds
|
||||
@@ -26,9 +27,8 @@ import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import kotlinx.android.synthetic.main.widget_config_list.*
|
||||
import org.joda.time.DateTime
|
||||
import java.util.*
|
||||
import java.util.TreeSet
|
||||
|
||||
class WidgetListConfigureActivity : SimpleActivity() {
|
||||
private var mBgAlpha = 0f
|
||||
@@ -38,11 +38,13 @@ class WidgetListConfigureActivity : SimpleActivity() {
|
||||
private var mTextColor = 0
|
||||
private var mSelectedPeriodOption = 0
|
||||
|
||||
private val binding by viewBinding(WidgetConfigListBinding::inflate)
|
||||
|
||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||
useDynamicTheme = false
|
||||
super.onCreate(savedInstanceState)
|
||||
setResult(Activity.RESULT_CANCELED)
|
||||
setContentView(R.layout.widget_config_list)
|
||||
setContentView(binding.root)
|
||||
initVariables()
|
||||
|
||||
val isCustomizingColors = intent.extras?.getBoolean(IS_CUSTOMIZING_COLORS) ?: false
|
||||
@@ -52,23 +54,25 @@ class WidgetListConfigureActivity : SimpleActivity() {
|
||||
finish()
|
||||
}
|
||||
|
||||
EventListAdapter(this, getListItems(), false, null, config_events_list) {}.apply {
|
||||
updateTextColor(mTextColor)
|
||||
config_events_list.adapter = this
|
||||
binding.apply {
|
||||
EventListAdapter(this@WidgetListConfigureActivity, getListItems(), false, null, configEventsList) {}.apply {
|
||||
updateTextColor(mTextColor)
|
||||
configEventsList.adapter = this
|
||||
}
|
||||
|
||||
periodPickerHolder.background = ColorDrawable(getProperBackgroundColor())
|
||||
periodPickerValue.setOnClickListener { showPeriodSelector() }
|
||||
|
||||
configSave.setOnClickListener { saveConfig() }
|
||||
configBgColor.setOnClickListener { pickBackgroundColor() }
|
||||
configTextColor.setOnClickListener { pickTextColor() }
|
||||
|
||||
periodPickerHolder.beGoneIf(isCustomizingColors)
|
||||
|
||||
val primaryColor = getProperPrimaryColor()
|
||||
configBgSeekbar.setColors(mTextColor, primaryColor, primaryColor)
|
||||
}
|
||||
|
||||
period_picker_holder.background = ColorDrawable(getProperBackgroundColor())
|
||||
period_picker_value.setOnClickListener { showPeriodSelector() }
|
||||
|
||||
config_save.setOnClickListener { saveConfig() }
|
||||
config_bg_color.setOnClickListener { pickBackgroundColor() }
|
||||
config_text_color.setOnClickListener { pickTextColor() }
|
||||
|
||||
period_picker_holder.beGoneIf(isCustomizingColors)
|
||||
|
||||
val primaryColor = getProperPrimaryColor()
|
||||
config_bg_seekbar.setColors(mTextColor, primaryColor, primaryColor)
|
||||
|
||||
updateSelectedPeriod(config.lastUsedEventSpan)
|
||||
}
|
||||
|
||||
@@ -77,7 +81,7 @@ class WidgetListConfigureActivity : SimpleActivity() {
|
||||
mBgAlpha = Color.alpha(mBgColor) / 255f
|
||||
|
||||
mBgColorWithoutTransparency = Color.rgb(Color.red(mBgColor), Color.green(mBgColor), Color.blue(mBgColor))
|
||||
config_bg_seekbar.apply {
|
||||
binding.configBgSeekbar.apply {
|
||||
progress = (mBgAlpha * 100).toInt()
|
||||
|
||||
onSeekBarChangeListener { progress ->
|
||||
@@ -88,8 +92,8 @@ class WidgetListConfigureActivity : SimpleActivity() {
|
||||
updateBackgroundColor()
|
||||
|
||||
mTextColor = config.widgetTextColor
|
||||
if (mTextColor == resources.getColor(R.color.default_widget_text_color) && config.isUsingSystemTheme) {
|
||||
mTextColor = resources.getColor(R.color.you_primary_color, theme)
|
||||
if (mTextColor == resources.getColor(com.simplemobiletools.commons.R.color.default_widget_text_color) && config.isUsingSystemTheme) {
|
||||
mTextColor = resources.getColor(com.simplemobiletools.commons.R.color.you_primary_color, theme)
|
||||
}
|
||||
|
||||
updateTextColor()
|
||||
@@ -155,10 +159,11 @@ class WidgetListConfigureActivity : SimpleActivity() {
|
||||
when (selectedPeriod) {
|
||||
0 -> {
|
||||
mSelectedPeriodOption = YEAR_SECONDS
|
||||
period_picker_value.setText(R.string.within_the_next_one_year)
|
||||
binding.periodPickerValue.setText(R.string.within_the_next_one_year)
|
||||
}
|
||||
EVENT_PERIOD_TODAY -> period_picker_value.setText(R.string.today_only)
|
||||
else -> period_picker_value.text = getFormattedSeconds(mSelectedPeriodOption)
|
||||
|
||||
EVENT_PERIOD_TODAY -> binding.periodPickerValue.setText(R.string.today_only)
|
||||
else -> binding.periodPickerValue.text = getFormattedSeconds(mSelectedPeriodOption)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,16 +211,16 @@ class WidgetListConfigureActivity : SimpleActivity() {
|
||||
}
|
||||
|
||||
private fun updateTextColor() {
|
||||
(config_events_list.adapter as? EventListAdapter)?.updateTextColor(mTextColor)
|
||||
config_text_color.setFillWithStroke(mTextColor, mTextColor)
|
||||
config_save.setTextColor(getProperPrimaryColor().getContrastColor())
|
||||
(binding.configEventsList.adapter as? EventListAdapter)?.updateTextColor(mTextColor)
|
||||
binding.configTextColor.setFillWithStroke(mTextColor, mTextColor)
|
||||
binding.configSave.setTextColor(getProperPrimaryColor().getContrastColor())
|
||||
}
|
||||
|
||||
private fun updateBackgroundColor() {
|
||||
mBgColor = mBgColorWithoutTransparency.adjustAlpha(mBgAlpha)
|
||||
config_events_list.background.applyColorFilter(mBgColor)
|
||||
config_bg_color.setFillWithStroke(mBgColor, mBgColor)
|
||||
config_save.backgroundTintList = ColorStateList.valueOf(getProperPrimaryColor())
|
||||
binding.configEventsList.background.applyColorFilter(mBgColor)
|
||||
binding.configBgColor.setFillWithStroke(mBgColor, mBgColor)
|
||||
binding.configSave.backgroundTintList = ColorStateList.valueOf(getProperPrimaryColor())
|
||||
}
|
||||
|
||||
private fun getListItems(): ArrayList<ListItem> {
|
||||
|
@@ -1,5 +1,6 @@
|
||||
package com.simplemobiletools.calendar.pro.activities
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.appwidget.AppWidgetManager
|
||||
import android.content.Context
|
||||
@@ -8,12 +9,11 @@ import android.content.res.ColorStateList
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.RelativeLayout
|
||||
import android.widget.TextView
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.DayMonthlyNumberViewBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.TopNavigationBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.WidgetConfigMonthlyBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.addDayEvents
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.isWeekendIndex
|
||||
@@ -25,18 +25,10 @@ import com.simplemobiletools.commons.dialogs.ColorPickerDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.IS_CUSTOMIZING_COLORS
|
||||
import com.simplemobiletools.commons.helpers.LOWER_ALPHA
|
||||
import kotlinx.android.synthetic.main.day_monthly_number_view.view.day_monthly_number_background
|
||||
import kotlinx.android.synthetic.main.day_monthly_number_view.view.day_monthly_number_id
|
||||
import kotlinx.android.synthetic.main.first_row.week_num
|
||||
import kotlinx.android.synthetic.main.top_navigation.top_left_arrow
|
||||
import kotlinx.android.synthetic.main.top_navigation.top_right_arrow
|
||||
import kotlinx.android.synthetic.main.top_navigation.top_value
|
||||
import kotlinx.android.synthetic.main.widget_config_monthly.*
|
||||
import org.joda.time.DateTime
|
||||
|
||||
class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
|
||||
private var mDays: List<DayMonthly>? = null
|
||||
private var dayLabelHeight = 0
|
||||
|
||||
private var mBgAlpha = 0f
|
||||
private var mWidgetId = 0
|
||||
@@ -44,11 +36,14 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
|
||||
private var mBgColor = 0
|
||||
private var mTextColor = 0
|
||||
|
||||
private val binding by viewBinding(WidgetConfigMonthlyBinding::inflate)
|
||||
private val topNavigationBinding by lazy { TopNavigationBinding.bind(binding.root) }
|
||||
|
||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||
useDynamicTheme = false
|
||||
super.onCreate(savedInstanceState)
|
||||
setResult(Activity.RESULT_CANCELED)
|
||||
setContentView(R.layout.widget_config_monthly)
|
||||
setContentView(binding.root)
|
||||
initVariables()
|
||||
|
||||
val isCustomizingColors = intent.extras?.getBoolean(IS_CUSTOMIZING_COLORS) ?: false
|
||||
@@ -59,10 +54,12 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
|
||||
}
|
||||
|
||||
val primaryColor = getProperPrimaryColor()
|
||||
config_save.setOnClickListener { saveConfig() }
|
||||
config_bg_color.setOnClickListener { pickBackgroundColor() }
|
||||
config_text_color.setOnClickListener { pickTextColor() }
|
||||
config_bg_seekbar.setColors(mTextColor, primaryColor, primaryColor)
|
||||
binding.apply {
|
||||
configSave.setOnClickListener { saveConfig() }
|
||||
configBgColor.setOnClickListener { pickBackgroundColor() }
|
||||
configTextColor.setOnClickListener { pickTextColor() }
|
||||
configBgSeekbar.setColors(mTextColor, primaryColor, primaryColor)
|
||||
}
|
||||
}
|
||||
|
||||
private fun initVariables() {
|
||||
@@ -70,7 +67,7 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
|
||||
mBgAlpha = Color.alpha(mBgColor) / 255f
|
||||
|
||||
mBgColorWithoutTransparency = Color.rgb(Color.red(mBgColor), Color.green(mBgColor), Color.blue(mBgColor))
|
||||
config_bg_seekbar.apply {
|
||||
binding.configBgSeekbar.apply {
|
||||
progress = (mBgAlpha * 100).toInt()
|
||||
|
||||
onSeekBarChangeListener { progress ->
|
||||
@@ -81,8 +78,8 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
|
||||
updateBackgroundColor()
|
||||
|
||||
mTextColor = config.widgetTextColor
|
||||
if (mTextColor == resources.getColor(R.color.default_widget_text_color) && config.isUsingSystemTheme) {
|
||||
mTextColor = resources.getColor(R.color.you_primary_color, theme)
|
||||
if (mTextColor == resources.getColor(com.simplemobiletools.commons.R.color.default_widget_text_color) && config.isUsingSystemTheme) {
|
||||
mTextColor = resources.getColor(com.simplemobiletools.commons.R.color.you_primary_color, theme)
|
||||
}
|
||||
|
||||
updateTextColor()
|
||||
@@ -135,75 +132,82 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
|
||||
}
|
||||
|
||||
private fun updateTextColor() {
|
||||
top_left_arrow.applyColorFilter(mTextColor)
|
||||
top_right_arrow.applyColorFilter(mTextColor)
|
||||
top_value.setTextColor(mTextColor)
|
||||
config_text_color.setFillWithStroke(mTextColor, mTextColor)
|
||||
topNavigationBinding.topLeftArrow.applyColorFilter(mTextColor)
|
||||
topNavigationBinding.topRightArrow.applyColorFilter(mTextColor)
|
||||
topNavigationBinding.topValue.setTextColor(mTextColor)
|
||||
binding.configTextColor.setFillWithStroke(mTextColor, mTextColor)
|
||||
binding.configSave.setTextColor(getProperPrimaryColor().getContrastColor())
|
||||
updateLabels()
|
||||
config_save.setTextColor(getProperPrimaryColor().getContrastColor())
|
||||
}
|
||||
|
||||
private fun updateBackgroundColor() {
|
||||
mBgColor = mBgColorWithoutTransparency.adjustAlpha(mBgAlpha)
|
||||
config_calendar.background.applyColorFilter(mBgColor)
|
||||
config_bg_color.setFillWithStroke(mBgColor, mBgColor)
|
||||
config_save.backgroundTintList = ColorStateList.valueOf(getProperPrimaryColor())
|
||||
binding.configCalendar.root.background.applyColorFilter(mBgColor)
|
||||
binding.configBgColor.setFillWithStroke(mBgColor, mBgColor)
|
||||
binding.configSave.backgroundTintList = ColorStateList.valueOf(getProperPrimaryColor())
|
||||
}
|
||||
|
||||
private fun updateDays() {
|
||||
val len = mDays!!.size
|
||||
val daysLength = mDays!!.size
|
||||
binding.configCalendar.apply {
|
||||
if (config.showWeekNumbers) {
|
||||
firstRow.weekNum.setTextColor(mTextColor)
|
||||
firstRow.weekNum.beVisible()
|
||||
|
||||
if (config.showWeekNumbers) {
|
||||
week_num.setTextColor(mTextColor)
|
||||
week_num.beVisible()
|
||||
|
||||
for (i in 0..5) {
|
||||
findViewById<TextView>(resources.getIdentifier("week_num_$i", "id", packageName)).apply {
|
||||
text = "${mDays!![i * 7 + 3].weekOfYear}:"
|
||||
setTextColor(mTextColor)
|
||||
beVisible()
|
||||
arrayOf(weekNum0, weekNum1, weekNum2, weekNum3, weekNum4, weekNum5).forEachIndexed { index, textView ->
|
||||
textView.apply {
|
||||
@SuppressLint("SetTextI18n")
|
||||
text = "${mDays!![index * 7 + 3].weekOfYear}:"
|
||||
setTextColor(mTextColor)
|
||||
beVisible()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val dividerMargin = resources.displayMetrics.density.toInt()
|
||||
for (i in 0 until len) {
|
||||
findViewById<LinearLayout>(resources.getIdentifier("day_$i", "id", packageName)).apply {
|
||||
val dividerMargin = resources.displayMetrics.density.toInt()
|
||||
val dayViews = arrayOf(
|
||||
day0, day1, day2, day3, day4, day5, day6, day7, day8, day9, day10, day11, day12, day13,
|
||||
day14, day15, day16, day17, day18, day19, day20, day21, day22, day23, day24, day25, day26, day27,
|
||||
day28, day29, day30, day31, day32, day33, day34, day35, day36, day37, day38, day39, day40, day41
|
||||
)
|
||||
|
||||
for (i in 0 until daysLength) {
|
||||
val day = mDays!![i]
|
||||
removeAllViews()
|
||||
|
||||
val dayTextColor = if (config.highlightWeekends && day.isWeekend) {
|
||||
config.highlightWeekendsColor
|
||||
} else {
|
||||
mTextColor
|
||||
}
|
||||
|
||||
addDayNumber(dayTextColor, day, this, dayLabelHeight) { dayLabelHeight = it }
|
||||
context.addDayEvents(day, this, resources, dividerMargin)
|
||||
dayViews[i].apply {
|
||||
removeAllViews()
|
||||
addDayNumber(dayTextColor, day, this)
|
||||
context.addDayEvents(day, this, resources, dividerMargin)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun addDayNumber(rawTextColor: Int, day: DayMonthly, linearLayout: LinearLayout, dayLabelHeight: Int, callback: (Int) -> Unit) {
|
||||
private fun addDayNumber(rawTextColor: Int, day: DayMonthly, linearLayout: LinearLayout) {
|
||||
var textColor = rawTextColor
|
||||
if (!day.isThisMonth) {
|
||||
textColor = textColor.adjustAlpha(LOWER_ALPHA)
|
||||
}
|
||||
|
||||
(View.inflate(this, R.layout.day_monthly_number_view, null) as RelativeLayout).apply {
|
||||
layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
linearLayout.addView(this)
|
||||
DayMonthlyNumberViewBinding.inflate(layoutInflater).apply {
|
||||
root.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
linearLayout.addView(root)
|
||||
|
||||
day_monthly_number_background.beVisibleIf(day.isToday)
|
||||
day_monthly_number_id.apply {
|
||||
dayMonthlyNumberBackground.beVisibleIf(day.isToday)
|
||||
dayMonthlyNumberId.apply {
|
||||
setTextColor(textColor)
|
||||
text = day.value.toString()
|
||||
gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
|
||||
}
|
||||
|
||||
if (day.isToday) {
|
||||
day_monthly_number_background.setColorFilter(getProperPrimaryColor())
|
||||
day_monthly_number_id.setTextColor(getProperPrimaryColor().getContrastColor())
|
||||
dayMonthlyNumberBackground.setColorFilter(getProperPrimaryColor())
|
||||
dayMonthlyNumberId.setTextColor(getProperPrimaryColor().getContrastColor())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -211,22 +215,22 @@ class WidgetMonthlyConfigureActivity : SimpleActivity(), MonthlyCalendar {
|
||||
override fun updateMonthlyCalendar(context: Context, month: String, days: ArrayList<DayMonthly>, checkedEvents: Boolean, currTargetDate: DateTime) {
|
||||
runOnUiThread {
|
||||
mDays = days
|
||||
top_value.text = month
|
||||
topNavigationBinding.topValue.text = month
|
||||
updateDays()
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateLabels() {
|
||||
val weekendsTextColor = config.highlightWeekendsColor
|
||||
for (i in 0..6) {
|
||||
findViewById<TextView>(resources.getIdentifier("label_$i", "id", packageName)).apply {
|
||||
val textColor = if (config.highlightWeekends && context.isWeekendIndex(i)) {
|
||||
binding.configCalendar.firstRow.apply {
|
||||
arrayOf(label0, label1, label2, label3, label4, label5, label6).forEachIndexed { index, textView ->
|
||||
val textColor = if (config.highlightWeekends && isWeekendIndex(index)) {
|
||||
weekendsTextColor
|
||||
} else {
|
||||
mTextColor
|
||||
}
|
||||
|
||||
setTextColor(textColor)
|
||||
textView.setTextColor(textColor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,42 +1,46 @@
|
||||
package com.simplemobiletools.calendar.pro.adapters
|
||||
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ArrayAdapter
|
||||
import android.widget.Filter
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.ItemAutocompleteTitleSubtitleBinding
|
||||
import com.simplemobiletools.calendar.pro.models.Attendee
|
||||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||
import com.simplemobiletools.commons.extensions.normalizeString
|
||||
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
|
||||
import kotlinx.android.synthetic.main.item_autocomplete_email_name.view.*
|
||||
|
||||
class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: ArrayList<Attendee>) : ArrayAdapter<Attendee>(activity, 0, contacts) {
|
||||
class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val attendees: ArrayList<Attendee>) : ArrayAdapter<Attendee>(activity, 0, attendees) {
|
||||
var resultList = ArrayList<Attendee>()
|
||||
|
||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||
val contact = resultList[position]
|
||||
val attendee = resultList[position]
|
||||
val attendeeHasName = attendee.name.isNotEmpty()
|
||||
var listItem = convertView
|
||||
if (listItem == null || listItem.tag != contact.name.isNotEmpty()) {
|
||||
val layout = if (contact.name.isNotEmpty()) R.layout.item_autocomplete_email_name else R.layout.item_autocomplete_email
|
||||
listItem = LayoutInflater.from(activity).inflate(layout, parent, false)
|
||||
if (listItem == null || listItem.tag != attendeeHasName) {
|
||||
listItem = ItemAutocompleteTitleSubtitleBinding.inflate(activity.layoutInflater, parent, false).root
|
||||
}
|
||||
|
||||
val nameToUse = when {
|
||||
contact.name.isNotEmpty() -> contact.name
|
||||
contact.email.isNotEmpty() -> contact.email
|
||||
attendee.name.isNotEmpty() -> attendee.name
|
||||
attendee.email.isNotEmpty() -> attendee.email
|
||||
else -> "A"
|
||||
}
|
||||
|
||||
val placeholder = BitmapDrawable(activity.resources, SimpleContactsHelper(context).getContactLetterIcon(nameToUse))
|
||||
listItem!!.apply {
|
||||
tag = contact.name.isNotEmpty()
|
||||
item_autocomplete_name?.text = contact.name
|
||||
item_autocomplete_email?.text = contact.email
|
||||
listItem.tag = attendeeHasName
|
||||
ItemAutocompleteTitleSubtitleBinding.bind(listItem).apply {
|
||||
itemAutocompleteTitle.text = if (attendeeHasName) {
|
||||
attendee.name
|
||||
} else {
|
||||
attendee.email
|
||||
}
|
||||
|
||||
contact.updateImage(context, item_autocomplete_image, placeholder)
|
||||
itemAutocompleteSubtitle.text = attendee.email
|
||||
itemAutocompleteSubtitle.beVisibleIf(attendeeHasName)
|
||||
attendee.updateImage(context, itemAutocompleteImage, placeholder)
|
||||
}
|
||||
|
||||
return listItem
|
||||
@@ -44,31 +48,35 @@ class AutoCompleteTextViewAdapter(val activity: SimpleActivity, val contacts: Ar
|
||||
|
||||
override fun getFilter() = object : Filter() {
|
||||
override fun performFiltering(constraint: CharSequence?): FilterResults {
|
||||
val filterResults = Filter.FilterResults()
|
||||
val filterResults = FilterResults()
|
||||
if (constraint != null) {
|
||||
resultList.clear()
|
||||
val results = mutableListOf<Attendee>()
|
||||
val searchString = constraint.toString().normalizeString()
|
||||
contacts.forEach {
|
||||
attendees.forEach {
|
||||
if (it.email.contains(searchString, true) || it.name.contains(searchString, true)) {
|
||||
resultList.add(it)
|
||||
results.add(it)
|
||||
}
|
||||
}
|
||||
|
||||
resultList.sortWith(compareBy<Attendee>
|
||||
results.sortWith(compareBy<Attendee>
|
||||
{ it.name.startsWith(searchString, true) }.thenBy
|
||||
{ it.email.startsWith(searchString, true) }.thenBy
|
||||
{ it.name.contains(searchString, true) }.thenBy
|
||||
{ it.email.contains(searchString, true) })
|
||||
resultList.reverse()
|
||||
results.reverse()
|
||||
|
||||
filterResults.values = resultList
|
||||
filterResults.count = resultList.size
|
||||
filterResults.values = results
|
||||
filterResults.count = results.size
|
||||
}
|
||||
|
||||
return filterResults
|
||||
}
|
||||
|
||||
override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
|
||||
if (results?.count ?: -1 > 0) {
|
||||
resultList.clear()
|
||||
if (results != null && results.count > 0) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
resultList.addAll(results.values as List<Attendee>)
|
||||
notifyDataSetChanged()
|
||||
} else {
|
||||
notifyDataSetInvalidated()
|
||||
|
@@ -3,20 +3,18 @@ package com.simplemobiletools.calendar.pro.adapters
|
||||
import android.app.Activity
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.Color
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.CheckableColorButtonBinding
|
||||
import com.simplemobiletools.commons.extensions.applyColorFilter
|
||||
import kotlinx.android.synthetic.main.checkable_color_button.view.*
|
||||
|
||||
class CheckableColorAdapter(private val activity: Activity, private val colors: IntArray, var currentColor: Int, val callback: (color: Int) -> Unit) :
|
||||
RecyclerView.Adapter<CheckableColorAdapter.CheckableColorViewHolder>() {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CheckableColorViewHolder {
|
||||
val itemView = LayoutInflater.from(activity).inflate(R.layout.checkable_color_button, parent, false)
|
||||
return CheckableColorViewHolder(itemView)
|
||||
return CheckableColorViewHolder(
|
||||
binding = CheckableColorButtonBinding.inflate(activity.layoutInflater, parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CheckableColorViewHolder, position: Int) {
|
||||
@@ -31,17 +29,17 @@ class CheckableColorAdapter(private val activity: Activity, private val colors:
|
||||
callback(color)
|
||||
}
|
||||
|
||||
inner class CheckableColorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
inner class CheckableColorViewHolder(val binding: CheckableColorButtonBinding) : RecyclerView.ViewHolder(binding.root) {
|
||||
|
||||
fun bindView(color: Int, checked: Boolean) {
|
||||
itemView.checkable_color_button.apply {
|
||||
binding.checkableColorButton.apply {
|
||||
backgroundTintList = ColorStateList.valueOf(color)
|
||||
setOnClickListener {
|
||||
updateSelection(color)
|
||||
}
|
||||
|
||||
if (checked) {
|
||||
setImageResource(R.drawable.ic_check_vector)
|
||||
setImageResource(com.simplemobiletools.commons.R.drawable.ic_check_vector)
|
||||
applyColorFilter(Color.WHITE)
|
||||
} else {
|
||||
setImageDrawable(null)
|
||||
|
@@ -6,6 +6,7 @@ import android.view.ViewGroup
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.EventListItemBinding
|
||||
import com.simplemobiletools.calendar.pro.dialogs.DeleteEventDialog
|
||||
import com.simplemobiletools.calendar.pro.extensions.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
@@ -18,7 +19,6 @@ import com.simplemobiletools.commons.extensions.getProperTextColor
|
||||
import com.simplemobiletools.commons.helpers.MEDIUM_ALPHA
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||
import kotlinx.android.synthetic.main.event_list_item.view.*
|
||||
|
||||
class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, recyclerView: MyRecyclerView, var dayCode: String, itemClick: (Any) -> Unit) :
|
||||
MyRecyclerViewAdapter(activity, recyclerView, itemClick) {
|
||||
@@ -29,7 +29,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
||||
private val dimPastEvents = activity.config.dimPastEvents
|
||||
private val dimCompletedTasks = activity.config.dimCompletedTasks
|
||||
private var isPrintVersion = false
|
||||
private val mediumMargin = activity.resources.getDimension(R.dimen.medium_margin).toInt()
|
||||
private val mediumMargin = activity.resources.getDimension(com.simplemobiletools.commons.R.dimen.medium_margin).toInt()
|
||||
|
||||
init {
|
||||
setupDragListener(true)
|
||||
@@ -58,11 +58,15 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
||||
|
||||
override fun onActionModeDestroyed() {}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.event_list_item, parent)
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||
return createViewHolder(
|
||||
view = EventListItemBinding.inflate(activity.layoutInflater, parent, false).root
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
val event = events[position]
|
||||
holder.bindView(event, true, true) { itemView, layoutPosition ->
|
||||
holder.bindView(event, allowSingleClick = true, allowLongClick = true) { itemView, _ ->
|
||||
setupView(itemView, event)
|
||||
}
|
||||
bindViewHolder(holder)
|
||||
@@ -73,7 +77,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
||||
fun togglePrintMode() {
|
||||
isPrintVersion = !isPrintVersion
|
||||
textColor = if (isPrintVersion) {
|
||||
resources.getColor(R.color.theme_light_text_color)
|
||||
resources.getColor(com.simplemobiletools.commons.R.color.theme_light_text_color)
|
||||
} else {
|
||||
activity.getProperTextColor()
|
||||
}
|
||||
@@ -82,12 +86,12 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
||||
}
|
||||
|
||||
private fun setupView(view: View, event: Event) {
|
||||
view.apply {
|
||||
event_item_holder.isSelected = selectedKeys.contains(event.id?.toInt())
|
||||
event_item_holder.background.applyColorFilter(textColor)
|
||||
event_item_title.text = event.title
|
||||
event_item_title.checkViewStrikeThrough(event.isTaskCompleted())
|
||||
event_item_time.text = if (event.getIsAllDay()) allDayString else Formatter.getTimeFromTS(context, event.startTS)
|
||||
EventListItemBinding.bind(view).apply {
|
||||
eventItemHolder.isSelected = selectedKeys.contains(event.id?.toInt())
|
||||
eventItemHolder.background.applyColorFilter(textColor)
|
||||
eventItemTitle.text = event.title
|
||||
eventItemTitle.checkViewStrikeThrough(event.isTaskCompleted())
|
||||
eventItemTime.text = if (event.getIsAllDay()) allDayString else Formatter.getTimeFromTS(activity, event.startTS)
|
||||
if (event.startTS != event.endTS) {
|
||||
val startDayCode = Formatter.getDayCodeFromTS(event.startTS)
|
||||
val endDayCode = Formatter.getDayCodeFromTS(event.endTS)
|
||||
@@ -95,19 +99,18 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
||||
val endDate = Formatter.getDayTitle(activity, endDayCode, false)
|
||||
val startDayString = if (startDayCode != dayCode) " ($startDate)" else ""
|
||||
if (!event.getIsAllDay()) {
|
||||
val endTimeString = Formatter.getTimeFromTS(context, event.endTS)
|
||||
val endTimeString = Formatter.getTimeFromTS(activity, event.endTS)
|
||||
val endDayString = if (endDayCode != dayCode) " ($endDate)" else ""
|
||||
event_item_time.text = "${event_item_time.text}$startDayString - $endTimeString$endDayString"
|
||||
}
|
||||
else {
|
||||
eventItemTime.text = "${eventItemTime.text}$startDayString - $endTimeString$endDayString"
|
||||
} else {
|
||||
val endDayString = if (endDayCode != dayCode) " - ($endDate)" else ""
|
||||
event_item_time.text = "${event_item_time.text}$startDayString$endDayString"
|
||||
eventItemTime.text = "${eventItemTime.text}$startDayString$endDayString"
|
||||
}
|
||||
}
|
||||
|
||||
event_item_description.text = if (replaceDescriptionWithLocation) event.location else event.description.replace("\n", " ")
|
||||
event_item_description.beVisibleIf(displayDescription && event_item_description.text.isNotEmpty())
|
||||
event_item_color_bar.background.applyColorFilter(event.color)
|
||||
eventItemDescription.text = if (replaceDescriptionWithLocation) event.location else event.description.replace("\n", " ")
|
||||
eventItemDescription.beVisibleIf(displayDescription && eventItemDescription.text.isNotEmpty())
|
||||
eventItemColorBar.background.applyColorFilter(event.color)
|
||||
|
||||
var newTextColor = textColor
|
||||
|
||||
@@ -121,11 +124,11 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
||||
newTextColor = newTextColor.adjustAlpha(MEDIUM_ALPHA)
|
||||
}
|
||||
|
||||
event_item_time.setTextColor(newTextColor)
|
||||
event_item_title.setTextColor(newTextColor)
|
||||
event_item_description?.setTextColor(newTextColor)
|
||||
event_item_task_image.applyColorFilter(newTextColor)
|
||||
event_item_task_image.beVisibleIf(event.isTask())
|
||||
eventItemTime.setTextColor(newTextColor)
|
||||
eventItemTitle.setTextColor(newTextColor)
|
||||
eventItemDescription.setTextColor(newTextColor)
|
||||
eventItemTaskImage.applyColorFilter(newTextColor)
|
||||
eventItemTaskImage.beVisibleIf(event.isTask())
|
||||
|
||||
val startMargin = if (event.isTask()) {
|
||||
0
|
||||
@@ -133,7 +136,7 @@ class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, r
|
||||
mediumMargin
|
||||
}
|
||||
|
||||
(event_item_title.layoutParams as ConstraintLayout.LayoutParams).marginStart = startMargin
|
||||
(eventItemTitle.layoutParams as ConstraintLayout.LayoutParams).marginStart = startMargin
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -6,6 +6,9 @@ import android.view.ViewGroup
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.EventListItemBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.EventListSectionDayBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.EventListSectionMonthBinding
|
||||
import com.simplemobiletools.calendar.pro.dialogs.DeleteEventDialog
|
||||
import com.simplemobiletools.calendar.pro.extensions.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.*
|
||||
@@ -22,8 +25,6 @@ import com.simplemobiletools.commons.helpers.MEDIUM_ALPHA
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener
|
||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||
import kotlinx.android.synthetic.main.event_list_item.view.*
|
||||
import kotlinx.android.synthetic.main.event_list_section_day.view.*
|
||||
|
||||
class EventListAdapter(
|
||||
activity: SimpleActivity, var listItems: ArrayList<ListItem>, val allowLongClick: Boolean, val listener: RefreshRecyclerViewListener?,
|
||||
@@ -39,7 +40,7 @@ class EventListAdapter(
|
||||
private var use24HourFormat = activity.config.use24HourFormat
|
||||
private var currentItemsHash = listItems.hashCode()
|
||||
private var isPrintVersion = false
|
||||
private val mediumMargin = activity.resources.getDimension(R.dimen.medium_margin).toInt()
|
||||
private val mediumMargin = activity.resources.getDimension(com.simplemobiletools.commons.R.dimen.medium_margin).toInt()
|
||||
|
||||
init {
|
||||
setupDragListener(true)
|
||||
@@ -75,17 +76,19 @@ class EventListAdapter(
|
||||
override fun onActionModeDestroyed() {}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyRecyclerViewAdapter.ViewHolder {
|
||||
val layoutId = when (viewType) {
|
||||
ITEM_SECTION_DAY -> R.layout.event_list_section_day
|
||||
ITEM_SECTION_MONTH -> R.layout.event_list_section_month
|
||||
else -> R.layout.event_list_item
|
||||
val layoutInflater = activity.layoutInflater
|
||||
val binding = when (viewType) {
|
||||
ITEM_SECTION_DAY -> EventListSectionDayBinding.inflate(layoutInflater, parent, false)
|
||||
ITEM_SECTION_MONTH -> EventListSectionMonthBinding.inflate(layoutInflater, parent, false)
|
||||
else -> EventListItemBinding.inflate(layoutInflater, parent, false)
|
||||
}
|
||||
return createViewHolder(layoutId, parent)
|
||||
|
||||
return createViewHolder(binding.root)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
|
||||
val listItem = listItems[position]
|
||||
holder.bindView(listItem, true, allowLongClick && listItem is ListEvent) { itemView, layoutPosition ->
|
||||
holder.bindView(listItem, allowSingleClick = true, allowLongClick = allowLongClick && listItem is ListEvent) { itemView, _ ->
|
||||
when (listItem) {
|
||||
is ListSectionDay -> setupListSectionDay(itemView, listItem)
|
||||
is ListEvent -> setupListEvent(itemView, listItem)
|
||||
@@ -121,7 +124,7 @@ class EventListAdapter(
|
||||
fun togglePrintMode() {
|
||||
isPrintVersion = !isPrintVersion
|
||||
textColor = if (isPrintVersion) {
|
||||
resources.getColor(R.color.theme_light_text_color)
|
||||
resources.getColor(com.simplemobiletools.commons.R.color.theme_light_text_color)
|
||||
} else {
|
||||
activity.getProperTextColor()
|
||||
}
|
||||
@@ -129,27 +132,27 @@ class EventListAdapter(
|
||||
}
|
||||
|
||||
private fun setupListEvent(view: View, listEvent: ListEvent) {
|
||||
view.apply {
|
||||
event_item_holder.isSelected = selectedKeys.contains(listEvent.hashCode())
|
||||
event_item_holder.background.applyColorFilter(textColor)
|
||||
event_item_title.text = listEvent.title
|
||||
event_item_title.checkViewStrikeThrough(listEvent.isTaskCompleted)
|
||||
event_item_time.text = if (listEvent.isAllDay) allDayString else Formatter.getTimeFromTS(context, listEvent.startTS)
|
||||
EventListItemBinding.bind(view).apply {
|
||||
eventItemHolder.isSelected = selectedKeys.contains(listEvent.hashCode())
|
||||
eventItemHolder.background.applyColorFilter(textColor)
|
||||
eventItemTitle.text = listEvent.title
|
||||
eventItemTitle.checkViewStrikeThrough(listEvent.isTaskCompleted)
|
||||
eventItemTime.text = if (listEvent.isAllDay) allDayString else Formatter.getTimeFromTS(activity, listEvent.startTS)
|
||||
if (listEvent.startTS != listEvent.endTS) {
|
||||
if (!listEvent.isAllDay) {
|
||||
event_item_time.text = "${event_item_time.text} - ${Formatter.getTimeFromTS(context, listEvent.endTS)}"
|
||||
eventItemTime.text = "${eventItemTime.text} - ${Formatter.getTimeFromTS(activity, listEvent.endTS)}"
|
||||
}
|
||||
|
||||
val startCode = Formatter.getDayCodeFromTS(listEvent.startTS)
|
||||
val endCode = Formatter.getDayCodeFromTS(listEvent.endTS)
|
||||
if (startCode != endCode) {
|
||||
event_item_time.text = "${event_item_time.text} (${Formatter.getDateDayTitle(endCode)})"
|
||||
eventItemTime.text = "${eventItemTime.text} (${Formatter.getDateDayTitle(endCode)})"
|
||||
}
|
||||
}
|
||||
|
||||
event_item_description.text = if (replaceDescription) listEvent.location else listEvent.description.replace("\n", " ")
|
||||
event_item_description.beVisibleIf(displayDescription && event_item_description.text.isNotEmpty())
|
||||
event_item_color_bar.background.applyColorFilter(listEvent.color)
|
||||
eventItemDescription.text = if (replaceDescription) listEvent.location else listEvent.description.replace("\n", " ")
|
||||
eventItemDescription.beVisibleIf(displayDescription && eventItemDescription.text.isNotEmpty())
|
||||
eventItemColorBar.background.applyColorFilter(listEvent.color)
|
||||
|
||||
var newTextColor = textColor
|
||||
if (listEvent.isAllDay || listEvent.startTS <= now && listEvent.endTS <= now) {
|
||||
@@ -169,23 +172,24 @@ class EventListAdapter(
|
||||
newTextColor = properPrimaryColor
|
||||
}
|
||||
|
||||
event_item_time.setTextColor(newTextColor)
|
||||
event_item_title.setTextColor(newTextColor)
|
||||
event_item_description.setTextColor(newTextColor)
|
||||
event_item_task_image.applyColorFilter(newTextColor)
|
||||
event_item_task_image.beVisibleIf(listEvent.isTask)
|
||||
eventItemTime.setTextColor(newTextColor)
|
||||
eventItemTitle.setTextColor(newTextColor)
|
||||
eventItemDescription.setTextColor(newTextColor)
|
||||
eventItemTaskImage.applyColorFilter(newTextColor)
|
||||
eventItemTaskImage.beVisibleIf(listEvent.isTask)
|
||||
|
||||
val startMargin = if (listEvent.isTask) {
|
||||
0
|
||||
} else {
|
||||
mediumMargin
|
||||
}
|
||||
(event_item_title.layoutParams as ConstraintLayout.LayoutParams).marginStart = startMargin
|
||||
|
||||
(eventItemTitle.layoutParams as ConstraintLayout.LayoutParams).marginStart = startMargin
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupListSectionDay(view: View, listSectionDay: ListSectionDay) {
|
||||
view.event_section_title.apply {
|
||||
EventListSectionDayBinding.bind(view).eventSectionTitle.apply {
|
||||
text = listSectionDay.title
|
||||
val dayColor = if (listSectionDay.isToday) properPrimaryColor else textColor
|
||||
setTextColor(dayColor)
|
||||
@@ -193,7 +197,7 @@ class EventListAdapter(
|
||||
}
|
||||
|
||||
private fun setupListSectionMonth(view: View, listSectionMonth: ListSectionMonth) {
|
||||
view.event_section_title.apply {
|
||||
EventListSectionMonthBinding.bind(view).eventSectionTitle.apply {
|
||||
text = listSectionMonth.title
|
||||
setTextColor(properPrimaryColor)
|
||||
}
|
||||
@@ -214,7 +218,7 @@ class EventListAdapter(
|
||||
listItems.removeAll(eventsToDelete)
|
||||
|
||||
ensureBackgroundThread {
|
||||
val nonRepeatingEventIDs = eventsToDelete.filter { !it.isRepeatable }.mapNotNull { it.id }.toMutableList()
|
||||
val nonRepeatingEventIDs = eventsToDelete.filter { !it.isRepeatable }.map { it.id }.toMutableList()
|
||||
activity.eventsHelper.deleteEvents(nonRepeatingEventIDs, true)
|
||||
|
||||
val repeatingEventIDs = eventsToDelete.filter { it.isRepeatable }.map { it.id }
|
||||
|
@@ -6,8 +6,6 @@ import android.graphics.Paint
|
||||
import android.widget.RemoteViews
|
||||
import android.widget.RemoteViewsService
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.R.id.event_item_holder
|
||||
import com.simplemobiletools.calendar.pro.R.id.event_section_title
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
||||
import com.simplemobiletools.calendar.pro.extensions.getWidgetFontSize
|
||||
@@ -32,8 +30,8 @@ class EventListWidgetAdapter(val context: Context, val intent: Intent) : RemoteV
|
||||
private var dimPastEvents = context.config.dimPastEvents
|
||||
private var dimCompletedTasks = context.config.dimCompletedTasks
|
||||
private var mediumFontSize = context.getWidgetFontSize()
|
||||
private var smallMargin = context.resources.getDimension(R.dimen.small_margin).toInt()
|
||||
private var normalMargin = context.resources.getDimension(R.dimen.normal_margin).toInt()
|
||||
private var smallMargin = context.resources.getDimension(com.simplemobiletools.commons.R.dimen.small_margin).toInt()
|
||||
private var normalMargin = context.resources.getDimension(com.simplemobiletools.commons.R.dimen.normal_margin).toInt()
|
||||
|
||||
init {
|
||||
initConfigValues()
|
||||
@@ -131,7 +129,7 @@ class EventListWidgetAdapter(val context: Context, val intent: Intent) : RemoteV
|
||||
Intent().apply {
|
||||
putExtra(EVENT_ID, item.id)
|
||||
putExtra(EVENT_OCCURRENCE_TS, item.startTS)
|
||||
setOnClickFillInIntent(event_item_holder, this)
|
||||
setOnClickFillInIntent(R.id.event_item_holder, this)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -143,14 +141,14 @@ class EventListWidgetAdapter(val context: Context, val intent: Intent) : RemoteV
|
||||
}
|
||||
|
||||
remoteView.apply {
|
||||
setTextColor(event_section_title, curTextColor)
|
||||
setTextSize(event_section_title, mediumFontSize - 3f)
|
||||
setText(event_section_title, item.title)
|
||||
setTextColor(R.id.event_section_title, curTextColor)
|
||||
setTextSize(R.id.event_section_title, mediumFontSize - 3f)
|
||||
setText(R.id.event_section_title, item.title)
|
||||
|
||||
Intent().apply {
|
||||
putExtra(DAY_CODE, item.code)
|
||||
putExtra(VIEW_TO_OPEN, context.config.listWidgetViewToOpen)
|
||||
setOnClickFillInIntent(event_section_title, this)
|
||||
setOnClickFillInIntent(R.id.event_section_title, this)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -158,9 +156,9 @@ class EventListWidgetAdapter(val context: Context, val intent: Intent) : RemoteV
|
||||
private fun setupListSectionMonth(remoteView: RemoteViews, item: ListSectionMonth) {
|
||||
val curTextColor = textColor
|
||||
remoteView.apply {
|
||||
setTextColor(event_section_title, curTextColor)
|
||||
setTextSize(event_section_title, mediumFontSize)
|
||||
setText(event_section_title, item.title)
|
||||
setTextColor(R.id.event_section_title, curTextColor)
|
||||
setTextSize(R.id.event_section_title, mediumFontSize)
|
||||
setText(R.id.event_section_title, item.title)
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,23 +1,21 @@
|
||||
package com.simplemobiletools.calendar.pro.adapters
|
||||
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.FilterEventTypeViewBinding
|
||||
import com.simplemobiletools.calendar.pro.models.EventType
|
||||
import com.simplemobiletools.commons.extensions.getProperBackgroundColor
|
||||
import com.simplemobiletools.commons.extensions.getProperPrimaryColor
|
||||
import com.simplemobiletools.commons.extensions.getProperTextColor
|
||||
import com.simplemobiletools.commons.extensions.setFillWithStroke
|
||||
import kotlinx.android.synthetic.main.filter_event_type_view.view.*
|
||||
|
||||
class FilterEventTypeAdapter(val activity: SimpleActivity, val eventTypes: List<EventType>, val displayEventTypes: Set<String>) :
|
||||
RecyclerView.Adapter<FilterEventTypeAdapter.ViewHolder>() {
|
||||
RecyclerView.Adapter<FilterEventTypeAdapter.EventTypeViewHolder>() {
|
||||
private val selectedKeys = HashSet<Long>()
|
||||
|
||||
init {
|
||||
eventTypes.forEachIndexed { index, eventType ->
|
||||
eventTypes.forEach { eventType ->
|
||||
if (displayEventTypes.contains(eventType.id.toString())) {
|
||||
selectedKeys.add(eventType.id!!)
|
||||
}
|
||||
@@ -36,30 +34,28 @@ class FilterEventTypeAdapter(val activity: SimpleActivity, val eventTypes: List<
|
||||
|
||||
fun getSelectedItemsList() = selectedKeys.asSequence().map { it }.toMutableList() as ArrayList<Long>
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||
val view = activity.layoutInflater.inflate(R.layout.filter_event_type_view, parent, false)
|
||||
return ViewHolder(view)
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EventTypeViewHolder {
|
||||
return EventTypeViewHolder(
|
||||
binding = FilterEventTypeViewBinding.inflate(activity.layoutInflater, parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
val eventType = eventTypes[position]
|
||||
holder.bindView(eventType)
|
||||
}
|
||||
override fun onBindViewHolder(holder: EventTypeViewHolder, position: Int) = holder.bindView(eventType = eventTypes[position])
|
||||
|
||||
override fun getItemCount() = eventTypes.size
|
||||
|
||||
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
||||
fun bindView(eventType: EventType): View {
|
||||
inner class EventTypeViewHolder(val binding: FilterEventTypeViewBinding) : RecyclerView.ViewHolder(binding.root) {
|
||||
fun bindView(eventType: EventType) {
|
||||
val isSelected = selectedKeys.contains(eventType.id)
|
||||
itemView.apply {
|
||||
filter_event_type_checkbox.isChecked = isSelected
|
||||
filter_event_type_checkbox.setColors(activity.getProperTextColor(), activity.getProperPrimaryColor(), activity.getProperBackgroundColor())
|
||||
filter_event_type_checkbox.text = eventType.getDisplayTitle()
|
||||
filter_event_type_color.setFillWithStroke(eventType.color, activity.getProperBackgroundColor())
|
||||
filter_event_type_holder.setOnClickListener { viewClicked(!isSelected, eventType) }
|
||||
binding.apply {
|
||||
filterEventTypeCheckbox.isChecked = isSelected
|
||||
filterEventTypeCheckbox.setColors(activity.getProperTextColor(), activity.getProperPrimaryColor(), activity.getProperBackgroundColor())
|
||||
filterEventTypeCheckbox.text = eventType.getDisplayTitle()
|
||||
filterEventTypeColor.setFillWithStroke(eventType.color, activity.getProperBackgroundColor())
|
||||
filterEventTypeHolder.setOnClickListener {
|
||||
viewClicked(!isSelected, eventType)
|
||||
}
|
||||
}
|
||||
|
||||
return itemView
|
||||
}
|
||||
|
||||
private fun viewClicked(select: Boolean, eventType: EventType) {
|
||||
|
@@ -4,6 +4,7 @@ import android.view.*
|
||||
import android.widget.PopupMenu
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.ItemEventTypeBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
||||
import com.simplemobiletools.calendar.pro.helpers.REGULAR_EVENT_TYPE_ID
|
||||
import com.simplemobiletools.calendar.pro.interfaces.DeleteEventTypesListener
|
||||
@@ -14,12 +15,14 @@ import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||
import kotlinx.android.synthetic.main.item_event_type.view.*
|
||||
|
||||
class ManageEventTypesAdapter(
|
||||
activity: SimpleActivity, val eventTypes: ArrayList<EventType>, val listener: DeleteEventTypesListener?, recyclerView: MyRecyclerView,
|
||||
itemClick: (Any) -> Unit
|
||||
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) {
|
||||
private val MOVE_EVENTS = 0
|
||||
private val DELETE_EVENTS = 1
|
||||
|
||||
init {
|
||||
setupDragListener(true)
|
||||
}
|
||||
@@ -55,11 +58,15 @@ class ManageEventTypesAdapter(
|
||||
|
||||
override fun onActionModeDestroyed() {}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_event_type, parent)
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||
return createViewHolder(
|
||||
view = ItemEventTypeBinding.inflate(activity.layoutInflater, parent, false).root
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
val eventType = eventTypes[position]
|
||||
holder.bindView(eventType, true, true) { itemView, layoutPosition ->
|
||||
holder.bindView(eventType, allowSingleClick = true, allowLongClick = true) { itemView, _ ->
|
||||
setupView(itemView, eventType)
|
||||
}
|
||||
bindViewHolder(holder)
|
||||
@@ -72,19 +79,19 @@ class ManageEventTypesAdapter(
|
||||
private fun getSelectedItems() = eventTypes.filter { selectedKeys.contains(it.id?.toInt()) } as ArrayList<EventType>
|
||||
|
||||
private fun setupView(view: View, eventType: EventType) {
|
||||
view.apply {
|
||||
event_item_frame.isSelected = selectedKeys.contains(eventType.id?.toInt())
|
||||
event_type_title.text = eventType.getDisplayTitle()
|
||||
event_type_color.setFillWithStroke(eventType.color, activity.getProperBackgroundColor())
|
||||
event_type_title.setTextColor(textColor)
|
||||
ItemEventTypeBinding.bind(view).apply {
|
||||
eventItemFrame.isSelected = selectedKeys.contains(eventType.id?.toInt())
|
||||
eventTypeTitle.text = eventType.getDisplayTitle()
|
||||
eventTypeColor.setFillWithStroke(eventType.color, activity.getProperBackgroundColor())
|
||||
eventTypeTitle.setTextColor(textColor)
|
||||
|
||||
overflow_menu_icon.drawable.apply {
|
||||
overflowMenuIcon.drawable.apply {
|
||||
mutate()
|
||||
setTint(activity.getProperTextColor())
|
||||
}
|
||||
|
||||
overflow_menu_icon.setOnClickListener {
|
||||
showPopupMenu(overflow_menu_anchor, eventType)
|
||||
overflowMenuIcon.setOnClickListener {
|
||||
showPopupMenu(overflowMenuAnchor, eventType)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -104,6 +111,7 @@ class ManageEventTypesAdapter(
|
||||
itemClick(eventType)
|
||||
}
|
||||
}
|
||||
|
||||
R.id.cab_delete -> {
|
||||
executeItemMenuOperation(eventTypeId) {
|
||||
askConfirmDelete()
|
||||
@@ -133,8 +141,6 @@ class ManageEventTypesAdapter(
|
||||
activity.eventsHelper.doEventTypesContainEvents(eventTypes) {
|
||||
activity.runOnUiThread {
|
||||
if (it) {
|
||||
val MOVE_EVENTS = 0
|
||||
val DELETE_EVENTS = 1
|
||||
val res = activity.resources
|
||||
val items = ArrayList<RadioItem>().apply {
|
||||
add(RadioItem(MOVE_EVENTS, res.getString(R.string.move_events_into_default)))
|
||||
|
@@ -1,24 +1,23 @@
|
||||
package com.simplemobiletools.calendar.pro.adapters
|
||||
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.QuickFilterEventTypeViewBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.models.EventType
|
||||
import com.simplemobiletools.commons.extensions.adjustAlpha
|
||||
import com.simplemobiletools.commons.extensions.getProperTextColor
|
||||
import com.simplemobiletools.commons.helpers.LOWER_ALPHA
|
||||
import kotlinx.android.synthetic.main.quick_filter_event_type_view.view.*
|
||||
|
||||
class QuickFilterEventTypeAdapter(
|
||||
val activity: SimpleActivity,
|
||||
private val allEventTypes: List<EventType>,
|
||||
private val quickFilterEventTypeIds: Set<String>,
|
||||
val callback: () -> Unit
|
||||
) :
|
||||
RecyclerView.Adapter<QuickFilterEventTypeAdapter.ViewHolder>() {
|
||||
) : RecyclerView.Adapter<QuickFilterEventTypeAdapter.QuickFilterViewHolder>() {
|
||||
private val activeKeys = HashSet<Long>()
|
||||
private val quickFilterEventTypes = ArrayList<EventType>()
|
||||
private val displayEventTypes = activity.config.displayEventTypes
|
||||
@@ -52,36 +51,42 @@ class QuickFilterEventTypeAdapter(
|
||||
notifyItemChanged(pos)
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): QuickFilterViewHolder {
|
||||
val parentWidth = parent.measuredWidth
|
||||
val nrOfItems = quickFilterEventTypes.size
|
||||
val view = activity.layoutInflater.inflate(R.layout.quick_filter_event_type_view, parent, false)
|
||||
if (nrOfItems * minItemWidth > parentWidth) view.layoutParams.width = minItemWidth
|
||||
else view.layoutParams.width = parentWidth / nrOfItems
|
||||
return ViewHolder(view)
|
||||
val numberOfItems = quickFilterEventTypes.size
|
||||
val binding = QuickFilterEventTypeViewBinding.inflate(activity.layoutInflater, parent, false)
|
||||
binding.root.updateLayoutParams<RecyclerView.LayoutParams> {
|
||||
width = if (numberOfItems * minItemWidth > parentWidth) {
|
||||
minItemWidth
|
||||
} else {
|
||||
parentWidth / numberOfItems
|
||||
}
|
||||
}
|
||||
|
||||
return QuickFilterViewHolder(binding)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
override fun onBindViewHolder(holder: QuickFilterViewHolder, position: Int) {
|
||||
val eventType = quickFilterEventTypes[position]
|
||||
holder.bindView(eventType)
|
||||
}
|
||||
|
||||
override fun getItemCount() = quickFilterEventTypes.size
|
||||
|
||||
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
||||
fun bindView(eventType: EventType): View {
|
||||
inner class QuickFilterViewHolder(val binding: QuickFilterEventTypeViewBinding) : RecyclerView.ViewHolder(binding.root) {
|
||||
fun bindView(eventType: EventType) {
|
||||
val isSelected = activeKeys.contains(eventType.id)
|
||||
itemView.apply {
|
||||
quick_filter_event_type.text = eventType.title
|
||||
binding.apply {
|
||||
quickFilterEventType.text = eventType.title
|
||||
val textColor = if (isSelected) textColorActive else textColorInactive
|
||||
quick_filter_event_type.setTextColor(textColor)
|
||||
quickFilterEventType.setTextColor(textColor)
|
||||
|
||||
val indicatorHeightRes = if (isSelected) R.dimen.quick_filter_active_line_size else R.dimen.quick_filter_inactive_line_size
|
||||
quick_filter_event_type_color.layoutParams.height = resources.getDimensionPixelSize(indicatorHeightRes)
|
||||
quick_filter_event_type_color.setBackgroundColor(eventType.color)
|
||||
quickFilterEventTypeColor.layoutParams.height = root.resources.getDimensionPixelSize(indicatorHeightRes)
|
||||
quickFilterEventTypeColor.setBackgroundColor(eventType.color)
|
||||
|
||||
// avoid too quick clicks, could cause glitches
|
||||
quick_filter_event_type.setOnClickListener {
|
||||
quickFilterEventType.setOnClickListener {
|
||||
if (System.currentTimeMillis() - lastClickTS > 300) {
|
||||
lastClickTS = System.currentTimeMillis()
|
||||
viewClicked(!isSelected, eventType)
|
||||
@@ -89,8 +94,6 @@ class QuickFilterEventTypeAdapter(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return itemView
|
||||
}
|
||||
|
||||
private fun viewClicked(select: Boolean, eventType: EventType) {
|
||||
|
@@ -1,24 +1,23 @@
|
||||
package com.simplemobiletools.calendar.pro.adapters
|
||||
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.ItemSelectTimeZoneBinding
|
||||
import com.simplemobiletools.calendar.pro.models.MyTimeZone
|
||||
import com.simplemobiletools.commons.extensions.getProperTextColor
|
||||
import kotlinx.android.synthetic.main.item_select_time_zone.view.*
|
||||
|
||||
class SelectTimeZoneAdapter(val activity: SimpleActivity, var timeZones: ArrayList<MyTimeZone>, val itemClick: (Any) -> Unit) :
|
||||
RecyclerView.Adapter<SelectTimeZoneAdapter.ViewHolder>() {
|
||||
RecyclerView.Adapter<SelectTimeZoneAdapter.TimeZoneViewHolder>() {
|
||||
val textColor = activity.getProperTextColor()
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||
val view = activity.layoutInflater.inflate(R.layout.item_select_time_zone, parent, false)
|
||||
return ViewHolder(view)
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TimeZoneViewHolder {
|
||||
return TimeZoneViewHolder(
|
||||
binding = ItemSelectTimeZoneBinding.inflate(activity.layoutInflater, parent, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
override fun onBindViewHolder(holder: TimeZoneViewHolder, position: Int) {
|
||||
val timeZone = timeZones[position]
|
||||
holder.bindView(timeZone)
|
||||
}
|
||||
@@ -30,21 +29,19 @@ class SelectTimeZoneAdapter(val activity: SimpleActivity, var timeZones: ArrayLi
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
||||
fun bindView(timeZone: MyTimeZone): View {
|
||||
itemView.apply {
|
||||
item_time_zone_title.text = timeZone.zoneName
|
||||
item_time_zone_shift.text = timeZone.title
|
||||
inner class TimeZoneViewHolder(val binding: ItemSelectTimeZoneBinding) : RecyclerView.ViewHolder(binding.root) {
|
||||
fun bindView(timeZone: MyTimeZone) {
|
||||
binding.apply {
|
||||
itemTimeZoneTitle.text = timeZone.zoneName
|
||||
itemTimeZoneShift.text = timeZone.title
|
||||
|
||||
item_time_zone_title.setTextColor(textColor)
|
||||
item_time_zone_shift.setTextColor(textColor)
|
||||
itemTimeZoneTitle.setTextColor(textColor)
|
||||
itemTimeZoneShift.setTextColor(textColor)
|
||||
|
||||
item_select_time_zone_holder.setOnClickListener {
|
||||
itemSelectTimeZoneHolder.setOnClickListener {
|
||||
itemClick(timeZone)
|
||||
}
|
||||
}
|
||||
|
||||
return itemView
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,38 +1,37 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogCustomEventRepeatIntervalBinding
|
||||
import com.simplemobiletools.calendar.pro.helpers.DAY
|
||||
import com.simplemobiletools.calendar.pro.helpers.MONTH
|
||||
import com.simplemobiletools.calendar.pro.helpers.WEEK
|
||||
import com.simplemobiletools.calendar.pro.helpers.YEAR
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import kotlinx.android.synthetic.main.dialog_custom_event_repeat_interval.view.*
|
||||
|
||||
class CustomEventRepeatIntervalDialog(val activity: Activity, val callback: (seconds: Int) -> Unit) {
|
||||
private var dialog: AlertDialog? = null
|
||||
private var view = activity.layoutInflater.inflate(R.layout.dialog_custom_event_repeat_interval, null) as ViewGroup
|
||||
private val binding by activity.viewBinding(DialogCustomEventRepeatIntervalBinding::inflate)
|
||||
|
||||
init {
|
||||
view.dialog_radio_view.check(R.id.dialog_radio_days)
|
||||
binding.dialogRadioView.check(R.id.dialog_radio_days)
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmRepeatInterval() }
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> confirmRepeatInterval() }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this) { alertDialog ->
|
||||
activity.setupDialogStuff(binding.root, this) { alertDialog ->
|
||||
dialog = alertDialog
|
||||
alertDialog.showKeyboard(view.dialog_custom_repeat_interval_value)
|
||||
alertDialog.showKeyboard(binding.dialogCustomRepeatIntervalValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun confirmRepeatInterval() {
|
||||
val value = view.dialog_custom_repeat_interval_value.value
|
||||
val multiplier = getMultiplier(view.dialog_radio_view.checkedRadioButtonId)
|
||||
val days = Integer.valueOf(if (value.isEmpty()) "0" else value)
|
||||
val value = binding.dialogCustomRepeatIntervalValue.value
|
||||
val multiplier = getMultiplier(binding.dialogRadioView.checkedRadioButtonId)
|
||||
val days = Integer.valueOf(value.ifEmpty { "0" })
|
||||
callback(days * multiplier)
|
||||
activity.hideKeyboard()
|
||||
dialog?.dismiss()
|
||||
|
@@ -1,29 +1,28 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogCustomPeriodPickerBinding
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.DAY_SECONDS
|
||||
import com.simplemobiletools.commons.helpers.MONTH_SECONDS
|
||||
import com.simplemobiletools.commons.helpers.WEEK_SECONDS
|
||||
import kotlinx.android.synthetic.main.dialog_custom_period_picker.view.*
|
||||
|
||||
class CustomPeriodPickerDialog(val activity: Activity, val callback: (value: Int) -> Unit) {
|
||||
private var dialog: AlertDialog? = null
|
||||
private var view = (activity.layoutInflater.inflate(R.layout.dialog_custom_period_picker, null) as ViewGroup)
|
||||
private val binding by activity.viewBinding(DialogCustomPeriodPickerBinding::inflate)
|
||||
|
||||
init {
|
||||
view.dialog_custom_period_value.setText("")
|
||||
view.dialog_radio_view.check(R.id.dialog_radio_days)
|
||||
binding.dialogCustomPeriodValue.setText("")
|
||||
binding.dialogRadioView.check(R.id.dialog_radio_days)
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmReminder() }
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> confirmReminder() }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this) { alertDialog ->
|
||||
activity.setupDialogStuff(binding.root, this) { alertDialog ->
|
||||
dialog = alertDialog
|
||||
alertDialog.showKeyboard(view.dialog_custom_period_value)
|
||||
alertDialog.showKeyboard(binding.dialogCustomPeriodValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -35,14 +34,9 @@ class CustomPeriodPickerDialog(val activity: Activity, val callback: (value: Int
|
||||
}
|
||||
|
||||
private fun confirmReminder() {
|
||||
val value = view.dialog_custom_period_value.value
|
||||
val type = view.dialog_radio_view.checkedRadioButtonId
|
||||
val periodValue = if (value.isEmpty()) {
|
||||
"0"
|
||||
} else {
|
||||
value
|
||||
}
|
||||
|
||||
val value = binding.dialogCustomPeriodValue.value
|
||||
val type = binding.dialogRadioView.checkedRadioButtonId
|
||||
val periodValue = value.ifEmpty { "0" }
|
||||
val period = calculatePeriod(Integer.valueOf(periodValue), type)
|
||||
callback(period)
|
||||
activity.hideKeyboard()
|
||||
|
@@ -1,18 +1,19 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.DatetimePatternInfoLayoutBinding
|
||||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.extensions.viewBinding
|
||||
|
||||
class DateTimePatternInfoDialog(activity: BaseSimpleActivity) {
|
||||
val binding by activity.viewBinding(DatetimePatternInfoLayoutBinding::inflate)
|
||||
|
||||
init {
|
||||
val view = activity.layoutInflater.inflate(R.layout.datetime_pattern_info_layout, null)
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok) { _, _ -> { } }
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> { } }
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this)
|
||||
activity.setupDialogStuff(binding.root, this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,16 +1,16 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogDeleteEventBinding
|
||||
import com.simplemobiletools.calendar.pro.helpers.DELETE_ALL_OCCURRENCES
|
||||
import com.simplemobiletools.calendar.pro.helpers.DELETE_FUTURE_OCCURRENCES
|
||||
import com.simplemobiletools.calendar.pro.helpers.DELETE_SELECTED_OCCURRENCE
|
||||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import kotlinx.android.synthetic.main.dialog_delete_event.view.*
|
||||
import com.simplemobiletools.commons.extensions.viewBinding
|
||||
|
||||
class DeleteEventDialog(
|
||||
val activity: Activity,
|
||||
@@ -20,38 +20,39 @@ class DeleteEventDialog(
|
||||
val callback: (deleteRule: Int) -> Unit
|
||||
) {
|
||||
private var dialog: AlertDialog? = null
|
||||
private val binding by activity.viewBinding(DialogDeleteEventBinding::inflate)
|
||||
|
||||
init {
|
||||
val view = activity.layoutInflater.inflate(R.layout.dialog_delete_event, null).apply {
|
||||
delete_event_repeat_description.beVisibleIf(hasRepeatableEvent)
|
||||
delete_event_radio_view.beVisibleIf(hasRepeatableEvent)
|
||||
binding.apply {
|
||||
deleteEventRepeatDescription.beVisibleIf(hasRepeatableEvent)
|
||||
deleteEventRadioView.beVisibleIf(hasRepeatableEvent)
|
||||
if (!hasRepeatableEvent) {
|
||||
delete_event_radio_view.check(R.id.delete_event_all)
|
||||
deleteEventRadioView.check(R.id.delete_event_all)
|
||||
}
|
||||
|
||||
if (eventIds.size > 1) {
|
||||
delete_event_repeat_description.setText(R.string.selection_contains_repetition)
|
||||
deleteEventRepeatDescription.setText(R.string.selection_contains_repetition)
|
||||
}
|
||||
|
||||
if (isTask) {
|
||||
delete_event_repeat_description.setText(R.string.task_is_repeatable)
|
||||
deleteEventRepeatDescription.setText(R.string.task_is_repeatable)
|
||||
} else {
|
||||
delete_event_repeat_description.setText(R.string.event_is_repeatable)
|
||||
deleteEventRepeatDescription.setText(R.string.event_is_repeatable)
|
||||
}
|
||||
}
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.yes) { dialog, which -> dialogConfirmed(view as ViewGroup) }
|
||||
.setNegativeButton(R.string.no, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.yes) { _, _ -> dialogConfirmed(binding) }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.no, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this) { alertDialog ->
|
||||
activity.setupDialogStuff(binding.root, this) { alertDialog ->
|
||||
dialog = alertDialog
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun dialogConfirmed(view: ViewGroup) {
|
||||
val deleteRule = when (view.delete_event_radio_view.checkedRadioButtonId) {
|
||||
private fun dialogConfirmed(binding: DialogDeleteEventBinding) {
|
||||
val deleteRule = when (binding.deleteEventRadioView.checkedRadioButtonId) {
|
||||
R.id.delete_event_all -> DELETE_ALL_OCCURRENCES
|
||||
R.id.delete_event_future -> DELETE_FUTURE_OCCURRENCES
|
||||
else -> DELETE_SELECTED_OCCURRENCE
|
||||
|
@@ -4,6 +4,7 @@ import android.app.Activity
|
||||
import android.widget.ImageView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogEventTypeBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.calDAVHelper
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
||||
import com.simplemobiletools.calendar.pro.helpers.OTHER_EVENT
|
||||
@@ -11,25 +12,25 @@ import com.simplemobiletools.calendar.pro.models.EventType
|
||||
import com.simplemobiletools.commons.dialogs.ColorPickerDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import kotlinx.android.synthetic.main.dialog_event_type.view.*
|
||||
|
||||
class EditEventTypeDialog(val activity: Activity, var eventType: EventType? = null, val callback: (eventType: EventType) -> Unit) {
|
||||
private var isNewEvent = eventType == null
|
||||
private val binding by activity.viewBinding(DialogEventTypeBinding::inflate)
|
||||
|
||||
init {
|
||||
if (eventType == null) {
|
||||
eventType = EventType(null, "", activity.getProperPrimaryColor())
|
||||
}
|
||||
|
||||
val view = activity.layoutInflater.inflate(R.layout.dialog_event_type, null).apply {
|
||||
setupColor(type_color)
|
||||
type_title.setText(eventType!!.title)
|
||||
type_color.setOnClickListener {
|
||||
binding.apply {
|
||||
setupColor(typeColor)
|
||||
typeTitle.setText(eventType!!.title)
|
||||
typeColor.setOnClickListener {
|
||||
if (eventType?.caldavCalendarId == 0) {
|
||||
ColorPickerDialog(activity, eventType!!.color) { wasPositivePressed, color ->
|
||||
if (wasPositivePressed) {
|
||||
eventType!!.color = color
|
||||
setupColor(type_color)
|
||||
setupColor(typeColor)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -37,21 +38,21 @@ class EditEventTypeDialog(val activity: Activity, var eventType: EventType? = nu
|
||||
val colors = activity.calDAVHelper.getAvailableCalDAVCalendarColors(eventType!!).keys.toIntArray()
|
||||
SelectEventTypeColorDialog(activity, colors = colors, currentColor = currentColor) {
|
||||
eventType!!.color = it
|
||||
setupColor(type_color)
|
||||
setupColor(typeColor)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok, null)
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this, if (isNewEvent) R.string.add_new_type else R.string.edit_type) { alertDialog ->
|
||||
alertDialog.showKeyboard(view.type_title)
|
||||
activity.setupDialogStuff(binding.root, this, if (isNewEvent) R.string.add_new_type else R.string.edit_type) { alertDialog ->
|
||||
alertDialog.showKeyboard(binding.typeTitle)
|
||||
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
|
||||
ensureBackgroundThread {
|
||||
eventTypeConfirmed(view.type_title.value, alertDialog)
|
||||
eventTypeConfirmed(binding.typeTitle.value, alertDialog)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,36 +1,37 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogEditRepeatingEventBinding
|
||||
import com.simplemobiletools.calendar.pro.helpers.EDIT_ALL_OCCURRENCES
|
||||
import com.simplemobiletools.calendar.pro.helpers.EDIT_FUTURE_OCCURRENCES
|
||||
import com.simplemobiletools.calendar.pro.helpers.EDIT_SELECTED_OCCURRENCE
|
||||
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.hideKeyboard
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import kotlinx.android.synthetic.main.dialog_edit_repeating_event.view.*
|
||||
import com.simplemobiletools.commons.extensions.viewBinding
|
||||
|
||||
class EditRepeatingEventDialog(val activity: SimpleActivity, val isTask: Boolean = false, val callback: (allOccurrences: Int?) -> Unit) {
|
||||
private var dialog: AlertDialog? = null
|
||||
private val binding by activity.viewBinding(DialogEditRepeatingEventBinding::inflate)
|
||||
|
||||
init {
|
||||
val view = (activity.layoutInflater.inflate(R.layout.dialog_edit_repeating_event, null) as ViewGroup).apply {
|
||||
edit_repeating_event_one_only.setOnClickListener { sendResult(EDIT_SELECTED_OCCURRENCE) }
|
||||
edit_repeating_event_this_and_future_occurences.setOnClickListener { sendResult(EDIT_FUTURE_OCCURRENCES) }
|
||||
edit_repeating_event_all_occurrences.setOnClickListener { sendResult(EDIT_ALL_OCCURRENCES) }
|
||||
binding.apply {
|
||||
editRepeatingEventOneOnly.setOnClickListener { sendResult(EDIT_SELECTED_OCCURRENCE) }
|
||||
editRepeatingEventThisAndFutureOccurences.setOnClickListener { sendResult(EDIT_FUTURE_OCCURRENCES) }
|
||||
editRepeatingEventAllOccurrences.setOnClickListener { sendResult(EDIT_ALL_OCCURRENCES) }
|
||||
|
||||
if (isTask) {
|
||||
edit_repeating_event_title.setText(R.string.task_is_repeatable)
|
||||
editRepeatingEventTitle.setText(R.string.task_is_repeatable)
|
||||
} else {
|
||||
edit_repeating_event_title.setText(R.string.event_is_repeatable)
|
||||
editRepeatingEventTitle.setText(R.string.event_is_repeatable)
|
||||
}
|
||||
}
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this) { alertDialog ->
|
||||
activity.setupDialogStuff(binding.root, this) { alertDialog ->
|
||||
dialog = alertDialog
|
||||
alertDialog.hideKeyboard()
|
||||
alertDialog.setOnDismissListener { sendResult(null) }
|
||||
|
@@ -1,16 +1,15 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.adapters.FilterEventTypeAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogExportEventsBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
||||
import com.simplemobiletools.commons.dialogs.FilePickerDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import kotlinx.android.synthetic.main.dialog_export_events.view.*
|
||||
import java.io.File
|
||||
|
||||
class ExportEventsDialog(
|
||||
@@ -19,33 +18,34 @@ class ExportEventsDialog(
|
||||
) {
|
||||
private var realPath = path.ifEmpty { activity.internalStoragePath }
|
||||
private val config = activity.config
|
||||
private val binding by activity.viewBinding(DialogExportEventsBinding::inflate)
|
||||
|
||||
init {
|
||||
val view = (activity.layoutInflater.inflate(R.layout.dialog_export_events, null) as ViewGroup).apply {
|
||||
export_events_folder.setText(activity.humanizePath(realPath))
|
||||
export_events_filename.setText("${activity.getString(R.string.events)}_${activity.getCurrentFormattedDateTime()}")
|
||||
binding.apply {
|
||||
exportEventsFolder.setText(activity.humanizePath(realPath))
|
||||
exportEventsFilename.setText("${activity.getString(R.string.events)}_${activity.getCurrentFormattedDateTime()}")
|
||||
|
||||
export_events_checkbox.isChecked = config.exportEvents
|
||||
export_events_checkbox_holder.setOnClickListener {
|
||||
export_events_checkbox.toggle()
|
||||
exportEventsCheckbox.isChecked = config.exportEvents
|
||||
exportEventsCheckboxHolder.setOnClickListener {
|
||||
exportEventsCheckbox.toggle()
|
||||
}
|
||||
export_tasks_checkbox.isChecked = config.exportTasks
|
||||
export_tasks_checkbox_holder.setOnClickListener {
|
||||
export_tasks_checkbox.toggle()
|
||||
exportTasksCheckbox.isChecked = config.exportTasks
|
||||
exportTasksCheckboxHolder.setOnClickListener {
|
||||
exportTasksCheckbox.toggle()
|
||||
}
|
||||
export_past_events_checkbox.isChecked = config.exportPastEntries
|
||||
export_past_events_checkbox_holder.setOnClickListener {
|
||||
export_past_events_checkbox.toggle()
|
||||
exportPastEventsCheckbox.isChecked = config.exportPastEntries
|
||||
exportPastEventsCheckboxHolder.setOnClickListener {
|
||||
exportPastEventsCheckbox.toggle()
|
||||
}
|
||||
|
||||
if (hidePath) {
|
||||
export_events_folder_hint.beGone()
|
||||
export_events_folder.beGone()
|
||||
exportEventsFolderHint.beGone()
|
||||
exportEventsFolder.beGone()
|
||||
} else {
|
||||
export_events_folder.setOnClickListener {
|
||||
activity.hideKeyboard(export_events_filename)
|
||||
exportEventsFolder.setOnClickListener {
|
||||
activity.hideKeyboard(exportEventsFilename)
|
||||
FilePickerDialog(activity, realPath, false, showFAB = true) {
|
||||
export_events_folder.setText(activity.humanizePath(it))
|
||||
exportEventsFolder.setText(activity.humanizePath(it))
|
||||
realPath = it
|
||||
}
|
||||
}
|
||||
@@ -55,33 +55,33 @@ class ExportEventsDialog(
|
||||
val eventTypes = HashSet<String>()
|
||||
it.mapTo(eventTypes) { it.id.toString() }
|
||||
|
||||
export_events_types_list.adapter = FilterEventTypeAdapter(activity, it, eventTypes)
|
||||
exportEventsTypesList.adapter = FilterEventTypeAdapter(activity, it, eventTypes)
|
||||
if (it.size > 1) {
|
||||
export_events_pick_types.beVisible()
|
||||
exportEventsPickTypes.beVisible()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok, null)
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this, R.string.export_events) { alertDialog ->
|
||||
activity.setupDialogStuff(binding.root, this, R.string.export_events) { alertDialog ->
|
||||
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
|
||||
val filename = view.export_events_filename.value
|
||||
val filename = binding.exportEventsFilename.value
|
||||
when {
|
||||
filename.isEmpty() -> activity.toast(R.string.empty_name)
|
||||
filename.isEmpty() -> activity.toast(com.simplemobiletools.commons.R.string.empty_name)
|
||||
filename.isAValidFilename() -> {
|
||||
val file = File(realPath, "$filename.ics")
|
||||
if (!hidePath && file.exists()) {
|
||||
activity.toast(R.string.name_taken)
|
||||
activity.toast(com.simplemobiletools.commons.R.string.name_taken)
|
||||
return@setOnClickListener
|
||||
}
|
||||
|
||||
val exportEventsChecked = view.export_events_checkbox.isChecked
|
||||
val exportTasksChecked = view.export_tasks_checkbox.isChecked
|
||||
val exportEventsChecked = binding.exportEventsCheckbox.isChecked
|
||||
val exportTasksChecked = binding.exportTasksCheckbox.isChecked
|
||||
if (!exportEventsChecked && !exportTasksChecked) {
|
||||
activity.toast(R.string.no_entries_for_exporting)
|
||||
activity.toast(com.simplemobiletools.commons.R.string.no_entries_for_exporting)
|
||||
return@setOnClickListener
|
||||
}
|
||||
|
||||
@@ -90,15 +90,16 @@ class ExportEventsDialog(
|
||||
lastExportPath = file.absolutePath.getParentPath()
|
||||
exportEvents = exportEventsChecked
|
||||
exportTasks = exportTasksChecked
|
||||
exportPastEntries = view.export_past_events_checkbox.isChecked
|
||||
exportPastEntries = binding.exportPastEventsCheckbox.isChecked
|
||||
}
|
||||
|
||||
val eventTypes = (view.export_events_types_list.adapter as FilterEventTypeAdapter).getSelectedItemsList()
|
||||
val eventTypes = (binding.exportEventsTypesList.adapter as FilterEventTypeAdapter).getSelectedItemsList()
|
||||
callback(file, eventTypes)
|
||||
alertDialog.dismiss()
|
||||
}
|
||||
}
|
||||
else -> activity.toast(R.string.invalid_name)
|
||||
|
||||
else -> activity.toast(com.simplemobiletools.commons.R.string.invalid_name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,9 +1,9 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogImportEventsBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventTypesDB
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
||||
@@ -15,12 +15,12 @@ import com.simplemobiletools.calendar.pro.helpers.IcsImporter.ImportResult.IMPOR
|
||||
import com.simplemobiletools.calendar.pro.helpers.REGULAR_EVENT_TYPE_ID
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import kotlinx.android.synthetic.main.dialog_import_events.view.*
|
||||
|
||||
class ImportEventsDialog(val activity: SimpleActivity, val path: String, val callback: (refreshView: Boolean) -> Unit) {
|
||||
private var currEventTypeId = REGULAR_EVENT_TYPE_ID
|
||||
private var currEventTypeCalDAVCalendarId = 0
|
||||
private val config = activity.config
|
||||
private val binding by activity.viewBinding(DialogImportEventsBinding::inflate)
|
||||
|
||||
init {
|
||||
ensureBackgroundThread {
|
||||
@@ -48,10 +48,18 @@ class ImportEventsDialog(val activity: SimpleActivity, val path: String, val cal
|
||||
}
|
||||
|
||||
private fun initDialog() {
|
||||
val view = (activity.layoutInflater.inflate(R.layout.dialog_import_events, null) as ViewGroup).apply {
|
||||
binding.apply {
|
||||
updateEventType(this)
|
||||
import_event_type_title.setOnClickListener {
|
||||
SelectEventTypeDialog(activity, currEventTypeId, true, true, false, true, false) {
|
||||
importEventTypeTitle.setOnClickListener {
|
||||
SelectEventTypeDialog(
|
||||
activity = activity,
|
||||
currEventType = currEventTypeId,
|
||||
showCalDAVCalendars = true,
|
||||
showNewEventTypeOption = true,
|
||||
addLastUsedOneAsFirstOption = false,
|
||||
showOnlyWritable = true,
|
||||
showManageEventTypes = false
|
||||
) {
|
||||
currEventTypeId = it.id!!
|
||||
currEventTypeCalDAVCalendarId = it.caldavCalendarId
|
||||
|
||||
@@ -62,21 +70,21 @@ class ImportEventsDialog(val activity: SimpleActivity, val path: String, val cal
|
||||
}
|
||||
}
|
||||
|
||||
import_events_checkbox_holder.setOnClickListener {
|
||||
import_events_checkbox.toggle()
|
||||
importEventsCheckboxHolder.setOnClickListener {
|
||||
importEventsCheckbox.toggle()
|
||||
}
|
||||
}
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok, null)
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this, R.string.import_events) { alertDialog ->
|
||||
activity.setupDialogStuff(binding.root, this, R.string.import_events) { alertDialog ->
|
||||
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
|
||||
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(null)
|
||||
activity.toast(R.string.importing)
|
||||
activity.toast(com.simplemobiletools.commons.R.string.importing)
|
||||
ensureBackgroundThread {
|
||||
val overrideFileEventTypes = view.import_events_checkbox.isChecked
|
||||
val overrideFileEventTypes = binding.importEventsCheckbox.isChecked
|
||||
val result = IcsImporter(activity).importEvents(path, currEventTypeId, currEventTypeCalDAVCalendarId, overrideFileEventTypes)
|
||||
handleParseResult(result)
|
||||
alertDialog.dismiss()
|
||||
@@ -86,12 +94,12 @@ class ImportEventsDialog(val activity: SimpleActivity, val path: String, val cal
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateEventType(view: ViewGroup) {
|
||||
private fun updateEventType(binding: DialogImportEventsBinding) {
|
||||
ensureBackgroundThread {
|
||||
val eventType = activity.eventTypesDB.getEventTypeWithId(currEventTypeId)
|
||||
activity.runOnUiThread {
|
||||
view.import_event_type_title.setText(eventType!!.getDisplayTitle())
|
||||
view.import_event_type_color.setFillWithStroke(eventType.color, activity.getProperBackgroundColor())
|
||||
binding.importEventTypeTitle.setText(eventType!!.getDisplayTitle())
|
||||
binding.importEventTypeColor.setFillWithStroke(eventType.color, activity.getProperBackgroundColor())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -99,10 +107,10 @@ class ImportEventsDialog(val activity: SimpleActivity, val path: String, val cal
|
||||
private fun handleParseResult(result: IcsImporter.ImportResult) {
|
||||
activity.toast(
|
||||
when (result) {
|
||||
IMPORT_NOTHING_NEW -> R.string.no_new_items
|
||||
IMPORT_OK -> R.string.importing_successful
|
||||
IMPORT_PARTIAL -> R.string.importing_some_entries_failed
|
||||
else -> R.string.no_items_found
|
||||
IMPORT_NOTHING_NEW -> com.simplemobiletools.commons.R.string.no_new_items
|
||||
IMPORT_OK -> com.simplemobiletools.commons.R.string.importing_successful
|
||||
IMPORT_PARTIAL -> com.simplemobiletools.commons.R.string.importing_some_entries_failed
|
||||
else -> com.simplemobiletools.commons.R.string.no_items_found
|
||||
}
|
||||
)
|
||||
callback(result != IMPORT_FAIL)
|
||||
|
@@ -1,84 +1,83 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogManageAutomaticBackupsBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.commons.dialogs.FilePickerDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import kotlinx.android.synthetic.main.dialog_manage_automatic_backups.view.*
|
||||
import java.io.File
|
||||
|
||||
class ManageAutomaticBackupsDialog(private val activity: SimpleActivity, onSuccess: () -> Unit) {
|
||||
private val view = (activity.layoutInflater.inflate(R.layout.dialog_manage_automatic_backups, null) as ViewGroup)
|
||||
private val binding by activity.viewBinding(DialogManageAutomaticBackupsBinding::inflate)
|
||||
private val config = activity.config
|
||||
private var backupFolder = config.autoBackupFolder
|
||||
private var selectedEventTypes = config.autoBackupEventTypes.ifEmpty { config.displayEventTypes }
|
||||
|
||||
init {
|
||||
view.apply {
|
||||
backup_events_folder.setText(activity.humanizePath(backupFolder))
|
||||
binding.apply {
|
||||
backupEventsFolder.setText(activity.humanizePath(backupFolder))
|
||||
val filename = config.autoBackupFilename.ifEmpty {
|
||||
"${activity.getString(R.string.events)}_%Y%M%D_%h%m%s"
|
||||
}
|
||||
|
||||
backup_events_filename.setText(filename)
|
||||
backup_events_filename_hint.setEndIconOnClickListener {
|
||||
backupEventsFilename.setText(filename)
|
||||
backupEventsFilenameHint.setEndIconOnClickListener {
|
||||
DateTimePatternInfoDialog(activity)
|
||||
}
|
||||
|
||||
backup_events_filename_hint.setEndIconOnLongClickListener {
|
||||
backupEventsFilenameHint.setEndIconOnLongClickListener {
|
||||
DateTimePatternInfoDialog(activity)
|
||||
true
|
||||
}
|
||||
|
||||
backup_events_checkbox.isChecked = config.autoBackupEvents
|
||||
backup_events_checkbox_holder.setOnClickListener {
|
||||
backup_events_checkbox.toggle()
|
||||
backupEventsCheckbox.isChecked = config.autoBackupEvents
|
||||
backupEventsCheckboxHolder.setOnClickListener {
|
||||
backupEventsCheckbox.toggle()
|
||||
}
|
||||
|
||||
backup_tasks_checkbox.isChecked = config.autoBackupTasks
|
||||
backup_tasks_checkbox_holder.setOnClickListener {
|
||||
backup_tasks_checkbox.toggle()
|
||||
backupTasksCheckbox.isChecked = config.autoBackupTasks
|
||||
backupTasksCheckboxHolder.setOnClickListener {
|
||||
backupTasksCheckbox.toggle()
|
||||
}
|
||||
|
||||
backup_past_events_checkbox.isChecked = config.autoBackupPastEntries
|
||||
backup_past_events_checkbox_holder.setOnClickListener {
|
||||
backup_past_events_checkbox.toggle()
|
||||
backupPastEventsCheckbox.isChecked = config.autoBackupPastEntries
|
||||
backupPastEventsCheckboxHolder.setOnClickListener {
|
||||
backupPastEventsCheckbox.toggle()
|
||||
}
|
||||
|
||||
backup_events_folder.setOnClickListener {
|
||||
backupEventsFolder.setOnClickListener {
|
||||
selectBackupFolder()
|
||||
}
|
||||
|
||||
manage_event_types_holder.setOnClickListener {
|
||||
manageEventTypesHolder.setOnClickListener {
|
||||
SelectEventTypesDialog(activity, selectedEventTypes) {
|
||||
selectedEventTypes = it
|
||||
}
|
||||
}
|
||||
}
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok, null)
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this, R.string.manage_automatic_backups) { dialog ->
|
||||
activity.setupDialogStuff(binding.root, this, com.simplemobiletools.commons.R.string.manage_automatic_backups) { dialog ->
|
||||
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
|
||||
val filename = view.backup_events_filename.value
|
||||
val filename = binding.backupEventsFilename.value
|
||||
when {
|
||||
filename.isEmpty() -> activity.toast(R.string.empty_name)
|
||||
filename.isEmpty() -> activity.toast(com.simplemobiletools.commons.R.string.empty_name)
|
||||
filename.isAValidFilename() -> {
|
||||
val file = File(backupFolder, "$filename.ics")
|
||||
if (file.exists() && !file.canWrite()) {
|
||||
activity.toast(R.string.name_taken)
|
||||
activity.toast(com.simplemobiletools.commons.R.string.name_taken)
|
||||
return@setOnClickListener
|
||||
}
|
||||
|
||||
val backupEventsChecked = view.backup_events_checkbox.isChecked
|
||||
val backupTasksChecked = view.backup_tasks_checkbox.isChecked
|
||||
val backupEventsChecked = binding.backupEventsCheckbox.isChecked
|
||||
val backupTasksChecked = binding.backupTasksCheckbox.isChecked
|
||||
if (!backupEventsChecked && !backupTasksChecked || selectedEventTypes.isEmpty()) {
|
||||
activity.toast(R.string.no_entries_for_exporting)
|
||||
activity.toast(com.simplemobiletools.commons.R.string.no_entries_for_exporting)
|
||||
return@setOnClickListener
|
||||
}
|
||||
|
||||
@@ -88,7 +87,7 @@ class ManageAutomaticBackupsDialog(private val activity: SimpleActivity, onSucce
|
||||
autoBackupFilename = filename
|
||||
autoBackupEvents = backupEventsChecked
|
||||
autoBackupTasks = backupTasksChecked
|
||||
autoBackupPastEntries = view.backup_past_events_checkbox.isChecked
|
||||
autoBackupPastEntries = binding.backupPastEventsCheckbox.isChecked
|
||||
if (autoBackupEventTypes != selectedEventTypes) {
|
||||
autoBackupEventTypes = selectedEventTypes
|
||||
}
|
||||
@@ -101,7 +100,8 @@ class ManageAutomaticBackupsDialog(private val activity: SimpleActivity, onSucce
|
||||
dialog.dismiss()
|
||||
}
|
||||
}
|
||||
else -> activity.toast(R.string.invalid_name)
|
||||
|
||||
else -> activity.toast(com.simplemobiletools.commons.R.string.invalid_name)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -109,8 +109,8 @@ class ManageAutomaticBackupsDialog(private val activity: SimpleActivity, onSucce
|
||||
}
|
||||
|
||||
private fun selectBackupFolder() {
|
||||
activity.hideKeyboard(view.backup_events_filename)
|
||||
FilePickerDialog(activity, backupFolder, false, showFAB = true) { path ->
|
||||
activity.hideKeyboard(binding.backupEventsFilename)
|
||||
FilePickerDialog(activity, backupFolder, pickFile = false, showFAB = true) { path ->
|
||||
activity.handleSAFDialog(path) { grantedSAF ->
|
||||
if (!grantedSAF) {
|
||||
return@handleSAFDialog
|
||||
@@ -122,7 +122,7 @@ class ManageAutomaticBackupsDialog(private val activity: SimpleActivity, onSucce
|
||||
}
|
||||
|
||||
backupFolder = path
|
||||
view.backup_events_folder.setText(activity.humanizePath(path))
|
||||
binding.backupEventsFolder.setText(activity.humanizePath(path))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -5,23 +5,19 @@ import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.provider.Settings
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.hideKeyboard
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.extensions.showErrorToast
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogReminderWarningBinding
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
|
||||
class ReminderWarningDialog(val activity: Activity, val callback: () -> Unit) {
|
||||
private var dialog: AlertDialog? = null
|
||||
private val binding by activity.viewBinding(DialogReminderWarningBinding::inflate)
|
||||
|
||||
init {
|
||||
val view = activity.layoutInflater.inflate(R.layout.dialog_reminder_warning, null)
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() }
|
||||
.setNeutralButton(R.string.settings, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> dialogConfirmed() }
|
||||
.setNeutralButton(com.simplemobiletools.commons.R.string.settings, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this, R.string.disclaimer, cancelOnTouchOutside = false) { alertDialog ->
|
||||
activity.setupDialogStuff(binding.root, this, com.simplemobiletools.commons.R.string.disclaimer, cancelOnTouchOutside = false) { alertDialog ->
|
||||
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener {
|
||||
redirectToSettings()
|
||||
}
|
||||
|
@@ -2,33 +2,32 @@ package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.app.DatePickerDialog
|
||||
import android.view.View
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogRepeatLimitTypePickerBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.seconds
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
import com.simplemobiletools.calendar.pro.helpers.getJavaDayOfWeekFromJoda
|
||||
import com.simplemobiletools.calendar.pro.helpers.getNowSeconds
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import kotlinx.android.synthetic.main.dialog_repeat_limit_type_picker.view.*
|
||||
import org.joda.time.DateTime
|
||||
|
||||
class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Long, val startTS: Long, val callback: (repeatLimit: Long) -> Unit) {
|
||||
private var dialog: AlertDialog? = null
|
||||
private var view: View
|
||||
private val binding by activity.viewBinding(DialogRepeatLimitTypePickerBinding::inflate)
|
||||
|
||||
init {
|
||||
view = activity.layoutInflater.inflate(R.layout.dialog_repeat_limit_type_picker, null).apply {
|
||||
repeat_type_date.setOnClickListener { showRepetitionLimitDialog() }
|
||||
repeat_type_count.setOnClickListener { dialog_radio_view.check(R.id.repeat_type_x_times) }
|
||||
repeat_type_forever.setOnClickListener {
|
||||
binding.apply {
|
||||
repeatTypeDate.setOnClickListener { showRepetitionLimitDialog() }
|
||||
repeatTypeCount.setOnClickListener { dialogRadioView.check(R.id.repeat_type_x_times) }
|
||||
repeatTypeForever.setOnClickListener {
|
||||
callback(0)
|
||||
dialog?.dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
view.dialog_radio_view.check(getCheckedItem())
|
||||
binding.dialogRadioView.check(getCheckedItem())
|
||||
|
||||
if (repeatLimit in 1..startTS) {
|
||||
repeatLimit = startTS
|
||||
@@ -37,15 +36,15 @@ class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Long,
|
||||
updateRepeatLimitText()
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmRepetition() }
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> confirmRepetition() }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this) { alertDialog ->
|
||||
activity.setupDialogStuff(binding.root, this) { alertDialog ->
|
||||
dialog = alertDialog
|
||||
activity.currentFocus?.clearFocus()
|
||||
|
||||
view.repeat_type_count.onTextChangeListener {
|
||||
view.dialog_radio_view.check(R.id.repeat_type_x_times)
|
||||
binding.repeatTypeCount.onTextChangeListener {
|
||||
binding.dialogRadioView.check(R.id.repeat_type_x_times)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -54,9 +53,10 @@ class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Long,
|
||||
private fun getCheckedItem() = when {
|
||||
repeatLimit > 0 -> R.id.repeat_type_till_date
|
||||
repeatLimit < 0 -> {
|
||||
view.repeat_type_count.setText((-repeatLimit).toString())
|
||||
binding.repeatTypeCount.setText((-repeatLimit).toString())
|
||||
R.id.repeat_type_x_times
|
||||
}
|
||||
|
||||
else -> R.id.repeat_type_forever
|
||||
}
|
||||
|
||||
@@ -66,15 +66,15 @@ class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Long,
|
||||
}
|
||||
|
||||
val repeatLimitDateTime = Formatter.getDateTimeFromTS(repeatLimit)
|
||||
view.repeat_type_date.setText(Formatter.getFullDate(activity, repeatLimitDateTime))
|
||||
binding.repeatTypeDate.setText(Formatter.getFullDate(activity, repeatLimitDateTime))
|
||||
}
|
||||
|
||||
private fun confirmRepetition() {
|
||||
when (view.dialog_radio_view.checkedRadioButtonId) {
|
||||
when (binding.dialogRadioView.checkedRadioButtonId) {
|
||||
R.id.repeat_type_till_date -> callback(repeatLimit)
|
||||
R.id.repeat_type_forever -> callback(0)
|
||||
else -> {
|
||||
var count = view.repeat_type_count.value
|
||||
var count = binding.repeatTypeCount.value
|
||||
count = if (count.isEmpty()) {
|
||||
"0"
|
||||
} else {
|
||||
@@ -97,7 +97,7 @@ class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Long,
|
||||
datePicker.show()
|
||||
}
|
||||
|
||||
private val repetitionLimitDateSetListener = DatePickerDialog.OnDateSetListener { v, year, monthOfYear, dayOfMonth ->
|
||||
private val repetitionLimitDateSetListener = DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
|
||||
val repeatLimitDateTime = DateTime().withDate(year, monthOfYear + 1, dayOfMonth).withTime(23, 59, 59, 0)
|
||||
repeatLimit = if (repeatLimitDateTime.seconds() < startTS) {
|
||||
0
|
||||
@@ -106,6 +106,6 @@ class RepeatLimitTypePickerDialog(val activity: Activity, var repeatLimit: Long,
|
||||
}
|
||||
|
||||
updateRepeatLimitText()
|
||||
view.dialog_radio_view.check(R.id.repeat_type_till_date)
|
||||
binding.dialogRadioView.check(R.id.repeat_type_till_date)
|
||||
}
|
||||
}
|
||||
|
@@ -1,22 +1,23 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogVerticalLinearLayoutBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.MyCheckboxBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.withFirstDayOfWeekToFront
|
||||
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.extensions.viewBinding
|
||||
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
||||
import kotlinx.android.synthetic.main.dialog_vertical_linear_layout.view.dialog_vertical_linear_layout
|
||||
|
||||
class RepeatRuleWeeklyDialog(val activity: Activity, val curRepeatRule: Int, val callback: (repeatRule: Int) -> Unit) {
|
||||
private val view = activity.layoutInflater.inflate(R.layout.dialog_vertical_linear_layout, null)
|
||||
private val binding by activity.viewBinding(DialogVerticalLinearLayoutBinding::inflate)
|
||||
|
||||
init {
|
||||
val days = activity.resources.getStringArray(R.array.week_days)
|
||||
val days = activity.resources.getStringArray(com.simplemobiletools.commons.R.array.week_days)
|
||||
var checkboxes = ArrayList<MyAppCompatCheckbox>(7)
|
||||
for (i in 0..6) {
|
||||
val pow = Math.pow(2.0, i.toDouble()).toInt()
|
||||
(activity.layoutInflater.inflate(R.layout.my_checkbox, null) as MyAppCompatCheckbox).apply {
|
||||
MyCheckboxBinding.inflate(activity.layoutInflater).root.apply {
|
||||
isChecked = curRepeatRule and pow != 0
|
||||
text = days[i]
|
||||
id = pow
|
||||
@@ -26,22 +27,22 @@ class RepeatRuleWeeklyDialog(val activity: Activity, val curRepeatRule: Int, val
|
||||
|
||||
checkboxes = activity.withFirstDayOfWeekToFront(checkboxes)
|
||||
checkboxes.forEach {
|
||||
view.dialog_vertical_linear_layout.addView(it)
|
||||
binding.dialogVerticalLinearLayout.addView(it)
|
||||
}
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok) { dialog, which -> callback(getRepeatRuleSum()) }
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> callback(getRepeatRuleSum()) }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this)
|
||||
activity.setupDialogStuff(binding.root, this)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getRepeatRuleSum(): Int {
|
||||
var sum = 0
|
||||
val cnt = view.dialog_vertical_linear_layout.childCount
|
||||
val cnt = binding.dialogVerticalLinearLayout.childCount
|
||||
for (i in 0 until cnt) {
|
||||
val child = view.dialog_vertical_linear_layout.getChildAt(i)
|
||||
val child = binding.dialogVerticalLinearLayout.getChildAt(i)
|
||||
if (child is MyAppCompatCheckbox) {
|
||||
if (child.isChecked)
|
||||
sum += child.id
|
||||
|
@@ -1,30 +1,30 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import android.text.TextUtils
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RelativeLayout
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.CalendarItemAccountBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.CalendarItemCalendarBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogSelectCalendarsBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.calDAVHelper
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.extensions.viewBinding
|
||||
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
||||
import kotlinx.android.synthetic.main.calendar_item_account.view.*
|
||||
import kotlinx.android.synthetic.main.calendar_item_calendar.view.*
|
||||
import kotlinx.android.synthetic.main.dialog_select_calendars.view.*
|
||||
|
||||
class SelectCalendarsDialog(val activity: SimpleActivity, val callback: () -> Unit) {
|
||||
private var prevAccount = ""
|
||||
private var view = (activity.layoutInflater.inflate(R.layout.dialog_select_calendars, null) as ViewGroup)
|
||||
private val binding by activity.viewBinding(DialogSelectCalendarsBinding::inflate)
|
||||
|
||||
init {
|
||||
val ids = activity.config.getSyncedCalendarIdsAsList()
|
||||
val calendars = activity.calDAVHelper.getCalDAVCalendars("", true)
|
||||
view.apply {
|
||||
dialog_select_calendars_placeholder.beVisibleIf(calendars.isEmpty())
|
||||
dialog_select_calendars_holder.beVisibleIf(calendars.isNotEmpty())
|
||||
binding.apply {
|
||||
dialogSelectCalendarsPlaceholder.beVisibleIf(calendars.isEmpty())
|
||||
dialogSelectCalendarsHolder.beVisibleIf(calendars.isNotEmpty())
|
||||
}
|
||||
|
||||
val sorted = calendars.sortedWith(compareBy({ it.accountName }, { it.displayName }))
|
||||
@@ -38,38 +38,37 @@ class SelectCalendarsDialog(val activity: SimpleActivity, val callback: () -> Un
|
||||
}
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmSelection() }
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> confirmSelection() }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this, R.string.select_caldav_calendars)
|
||||
activity.setupDialogStuff(binding.root, this, R.string.select_caldav_calendars)
|
||||
}
|
||||
}
|
||||
|
||||
private fun addCalendarItem(isEvent: Boolean, text: String, tag: Int = 0, shouldCheck: Boolean = false) {
|
||||
val layout = if (isEvent) R.layout.calendar_item_calendar else R.layout.calendar_item_account
|
||||
val calendarItem = activity.layoutInflater.inflate(layout, view.dialog_select_calendars_holder, false)
|
||||
|
||||
if (isEvent) {
|
||||
calendarItem.calendar_item_calendar_switch.apply {
|
||||
this.tag = tag
|
||||
this.text = text
|
||||
isChecked = shouldCheck
|
||||
calendarItem.setOnClickListener {
|
||||
toggle()
|
||||
val itemBinding = if (isEvent) {
|
||||
CalendarItemCalendarBinding.inflate(activity.layoutInflater, binding.dialogSelectCalendarsHolder, false).apply {
|
||||
calendarItemCalendarSwitch.tag = tag
|
||||
calendarItemCalendarSwitch.text = text
|
||||
calendarItemCalendarSwitch.isChecked = shouldCheck
|
||||
root.setOnClickListener {
|
||||
calendarItemCalendarSwitch.toggle()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
calendarItem.calendar_item_account.text = text
|
||||
CalendarItemAccountBinding.inflate(activity.layoutInflater, binding.dialogSelectCalendarsHolder, false).apply {
|
||||
calendarItemAccount.text = text
|
||||
}
|
||||
}
|
||||
|
||||
view.dialog_select_calendars_holder.addView(calendarItem)
|
||||
binding.dialogSelectCalendarsHolder.addView(itemBinding.root)
|
||||
}
|
||||
|
||||
private fun confirmSelection() {
|
||||
val calendarIds = ArrayList<Int>()
|
||||
val childCnt = view.dialog_select_calendars_holder.childCount
|
||||
val childCnt = binding.dialogSelectCalendarsHolder.childCount
|
||||
for (i in 0..childCnt) {
|
||||
val child = view.dialog_select_calendars_holder.getChildAt(i)
|
||||
val child = binding.dialogSelectCalendarsHolder.getChildAt(i)
|
||||
if (child is RelativeLayout) {
|
||||
val check = child.getChildAt(0)
|
||||
if (check is MyAppCompatCheckbox && check.isChecked) {
|
||||
|
@@ -3,26 +3,25 @@ package com.simplemobiletools.calendar.pro.dialogs
|
||||
import android.app.Activity
|
||||
import android.graphics.Color
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RadioButton
|
||||
import android.widget.RadioGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogSelectRadioGroupBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.RadioButtonWithColorBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
||||
import com.simplemobiletools.calendar.pro.helpers.STORED_LOCALLY_ONLY
|
||||
import com.simplemobiletools.calendar.pro.models.CalDAVCalendar
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import kotlinx.android.synthetic.main.dialog_select_radio_group.view.*
|
||||
import kotlinx.android.synthetic.main.radio_button_with_color.view.*
|
||||
|
||||
class SelectEventCalendarDialog(val activity: Activity, val calendars: List<CalDAVCalendar>, val currCalendarId: Int, val callback: (id: Int) -> Unit) {
|
||||
private var dialog: AlertDialog? = null
|
||||
private val radioGroup: RadioGroup
|
||||
private var wasInit = false
|
||||
private val binding by activity.viewBinding(DialogSelectRadioGroupBinding::inflate)
|
||||
|
||||
init {
|
||||
val view = activity.layoutInflater.inflate(R.layout.dialog_select_radio_group, null) as ViewGroup
|
||||
radioGroup = view.dialog_radio_group
|
||||
radioGroup = binding.dialogRadioGroup
|
||||
|
||||
ensureBackgroundThread {
|
||||
calendars.forEach {
|
||||
@@ -38,32 +37,32 @@ class SelectEventCalendarDialog(val activity: Activity, val calendars: List<CalD
|
||||
}
|
||||
addRadioButton(activity.getString(R.string.store_locally_only), STORED_LOCALLY_ONLY, Color.TRANSPARENT)
|
||||
wasInit = true
|
||||
activity.updateTextColors(view.dialog_radio_holder)
|
||||
activity.updateTextColors(binding.dialogRadioHolder)
|
||||
}
|
||||
}
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this) { alertDialog ->
|
||||
activity.setupDialogStuff(binding.root, this) { alertDialog ->
|
||||
dialog = alertDialog
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun addRadioButton(title: String, typeId: Int, color: Int) {
|
||||
val view = activity.layoutInflater.inflate(R.layout.radio_button_with_color, null)
|
||||
(view.dialog_radio_button as RadioButton).apply {
|
||||
val radioBinding = RadioButtonWithColorBinding.inflate(activity.layoutInflater)
|
||||
radioBinding.dialogRadioButton.apply {
|
||||
text = title
|
||||
isChecked = typeId == currCalendarId
|
||||
id = typeId
|
||||
}
|
||||
|
||||
if (typeId != STORED_LOCALLY_ONLY) {
|
||||
view.dialog_radio_color.setFillWithStroke(color, activity.getProperBackgroundColor())
|
||||
radioBinding.dialogRadioColor.setFillWithStroke(color, activity.getProperBackgroundColor())
|
||||
}
|
||||
|
||||
view.setOnClickListener { viewClicked(typeId) }
|
||||
radioGroup.addView(view, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
|
||||
radioBinding.root.setOnClickListener { viewClicked(typeId) }
|
||||
radioGroup.addView(radioBinding.root, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
|
||||
}
|
||||
|
||||
private fun viewClicked(typeId: Int) {
|
||||
|
@@ -1,28 +1,28 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.adapters.CheckableColorAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogSelectColorBinding
|
||||
import com.simplemobiletools.calendar.pro.views.AutoGridLayoutManager
|
||||
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import kotlinx.android.synthetic.main.dialog_select_color.view.*
|
||||
import com.simplemobiletools.commons.extensions.viewBinding
|
||||
|
||||
class SelectEventColorDialog(val activity: Activity, val colors: IntArray, var currentColor: Int, val callback: (color: Int) -> Unit) {
|
||||
private var dialog: AlertDialog? = null
|
||||
private val binding by activity.viewBinding(DialogSelectColorBinding::inflate)
|
||||
|
||||
init {
|
||||
val view = activity.layoutInflater.inflate(R.layout.dialog_select_color, null) as ViewGroup
|
||||
val colorAdapter = CheckableColorAdapter(activity, colors, currentColor) { color ->
|
||||
callback(color)
|
||||
dialog?.dismiss()
|
||||
}
|
||||
|
||||
view.color_grid.apply {
|
||||
binding.colorGrid.apply {
|
||||
val width = activity.resources.getDimensionPixelSize(R.dimen.smaller_icon_size)
|
||||
val spacing = activity.resources.getDimensionPixelSize(R.dimen.small_margin) * 2
|
||||
val spacing = activity.resources.getDimensionPixelSize(com.simplemobiletools.commons.R.dimen.small_margin) * 2
|
||||
layoutManager = AutoGridLayoutManager(context = activity, itemWidth = width + spacing)
|
||||
adapter = colorAdapter
|
||||
}
|
||||
@@ -34,7 +34,7 @@ class SelectEventColorDialog(val activity: Activity, val colors: IntArray, var c
|
||||
dialog?.dismiss()
|
||||
}
|
||||
|
||||
activity.setupDialogStuff(view, this, R.string.event_color) {
|
||||
activity.setupDialogStuff(binding.root, this, R.string.event_color) {
|
||||
dialog = it
|
||||
}
|
||||
}
|
||||
|
@@ -1,37 +1,37 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import android.app.Activity
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.adapters.CheckableColorAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogSelectColorBinding
|
||||
import com.simplemobiletools.calendar.pro.views.AutoGridLayoutManager
|
||||
import com.simplemobiletools.commons.dialogs.ColorPickerDialog
|
||||
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import kotlinx.android.synthetic.main.dialog_select_color.view.*
|
||||
import com.simplemobiletools.commons.extensions.viewBinding
|
||||
|
||||
class SelectEventTypeColorDialog(val activity: Activity, val colors: IntArray, var currentColor: Int, val callback: (color: Int) -> Unit) {
|
||||
private var dialog: AlertDialog? = null
|
||||
private val binding by activity.viewBinding(DialogSelectColorBinding::inflate)
|
||||
|
||||
init {
|
||||
val view = activity.layoutInflater.inflate(R.layout.dialog_select_color, null) as ViewGroup
|
||||
val colorAdapter = CheckableColorAdapter(activity, colors, currentColor) { color ->
|
||||
callback(color)
|
||||
dialog?.dismiss()
|
||||
}
|
||||
|
||||
view.color_grid.apply {
|
||||
binding.colorGrid.apply {
|
||||
val width = activity.resources.getDimensionPixelSize(R.dimen.smaller_icon_size)
|
||||
val spacing = activity.resources.getDimensionPixelSize(R.dimen.small_margin) * 2
|
||||
val spacing = activity.resources.getDimensionPixelSize(com.simplemobiletools.commons.R.dimen.small_margin) * 2
|
||||
layoutManager = AutoGridLayoutManager(context = activity, itemWidth = width + spacing)
|
||||
adapter = colorAdapter
|
||||
}
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this, R.string.color) {
|
||||
activity.setupDialogStuff(binding.root, this, R.string.color) {
|
||||
dialog = it
|
||||
}
|
||||
|
||||
|
@@ -8,12 +8,11 @@ import android.widget.RadioGroup
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.ManageEventTypesActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogSelectEventTypeBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.RadioButtonWithColorBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
||||
import com.simplemobiletools.calendar.pro.models.EventType
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.views.MyCompatRadioButton
|
||||
import kotlinx.android.synthetic.main.dialog_select_event_type.view.*
|
||||
import kotlinx.android.synthetic.main.radio_button_with_color.view.*
|
||||
|
||||
class SelectEventTypeDialog(
|
||||
val activity: Activity, val currEventType: Long, val showCalDAVCalendars: Boolean, val showNewEventTypeOption: Boolean,
|
||||
@@ -27,10 +26,11 @@ class SelectEventTypeDialog(
|
||||
private var wasInit = false
|
||||
private var eventTypes = ArrayList<EventType>()
|
||||
|
||||
private val binding by activity.viewBinding(DialogSelectEventTypeBinding::inflate)
|
||||
|
||||
init {
|
||||
val view = activity.layoutInflater.inflate(R.layout.dialog_select_event_type, null) as ViewGroup
|
||||
radioGroup = view.dialog_radio_group
|
||||
view.dialog_manage_event_types.apply {
|
||||
radioGroup = binding.dialogRadioGroup
|
||||
binding.dialogManageEventTypes.apply {
|
||||
beVisibleIf(showManageEventTypes)
|
||||
setOnClickListener {
|
||||
activity.startActivity(Intent(activity, ManageEventTypesActivity::class.java))
|
||||
@@ -38,16 +38,16 @@ class SelectEventTypeDialog(
|
||||
}
|
||||
}
|
||||
|
||||
view.dialog_radio_divider.beVisibleIf(showManageEventTypes)
|
||||
binding.dialogRadioDivider.beVisibleIf(showManageEventTypes)
|
||||
|
||||
activity.eventsHelper.getEventTypes(activity, showOnlyWritable) {
|
||||
eventTypes = it
|
||||
activity.eventsHelper.getEventTypes(activity, showOnlyWritable) { eventTypes ->
|
||||
this.eventTypes = eventTypes
|
||||
activity.runOnUiThread {
|
||||
if (addLastUsedOneAsFirstOption) {
|
||||
val lastUsedEventType = EventType(LAST_USED_EVENT_TYPE_ID, activity.getString(R.string.last_used_one), Color.TRANSPARENT, 0)
|
||||
addRadioButton(lastUsedEventType)
|
||||
}
|
||||
eventTypes.filter { showCalDAVCalendars || it.caldavCalendarId == 0 }.forEach {
|
||||
this.eventTypes.filter { showCalDAVCalendars || it.caldavCalendarId == 0 }.forEach {
|
||||
addRadioButton(it)
|
||||
}
|
||||
if (showNewEventTypeOption) {
|
||||
@@ -55,32 +55,32 @@ class SelectEventTypeDialog(
|
||||
addRadioButton(newEventType)
|
||||
}
|
||||
wasInit = true
|
||||
activity.updateTextColors(view.dialog_radio_holder)
|
||||
activity.updateTextColors(binding.dialogRadioHolder)
|
||||
}
|
||||
}
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this) { alertDialog ->
|
||||
activity.setupDialogStuff(binding.root, this) { alertDialog ->
|
||||
dialog = alertDialog
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun addRadioButton(eventType: EventType) {
|
||||
val view = activity.layoutInflater.inflate(R.layout.radio_button_with_color, null)
|
||||
(view.dialog_radio_button as MyCompatRadioButton).apply {
|
||||
val radioBinding = RadioButtonWithColorBinding.inflate(activity.layoutInflater)
|
||||
(radioBinding.dialogRadioButton).apply {
|
||||
text = eventType.getDisplayTitle()
|
||||
isChecked = eventType.id == currEventType
|
||||
id = eventType.id!!.toInt()
|
||||
}
|
||||
|
||||
if (eventType.color != Color.TRANSPARENT) {
|
||||
view.dialog_radio_color.setFillWithStroke(eventType.color, activity.getProperBackgroundColor())
|
||||
radioBinding.dialogRadioColor.setFillWithStroke(eventType.color, activity.getProperBackgroundColor())
|
||||
}
|
||||
|
||||
view.setOnClickListener { viewClicked(eventType) }
|
||||
radioGroup.addView(view, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
|
||||
radioBinding.root.setOnClickListener { viewClicked(eventType) }
|
||||
radioGroup.addView(radioBinding.root, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT))
|
||||
}
|
||||
|
||||
private fun viewClicked(eventType: EventType) {
|
||||
|
@@ -1,27 +1,27 @@
|
||||
package com.simplemobiletools.calendar.pro.dialogs
|
||||
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.adapters.FilterEventTypeAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogFilterEventTypesBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
||||
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import kotlinx.android.synthetic.main.dialog_filter_event_types.view.*
|
||||
import com.simplemobiletools.commons.extensions.viewBinding
|
||||
|
||||
class SelectEventTypesDialog(val activity: SimpleActivity, selectedEventTypes: Set<String>, val callback: (HashSet<String>) -> Unit) {
|
||||
private var dialog: AlertDialog? = null
|
||||
private val view = activity.layoutInflater.inflate(R.layout.dialog_filter_event_types, null)
|
||||
private val binding by activity.viewBinding(DialogFilterEventTypesBinding::inflate)
|
||||
|
||||
init {
|
||||
activity.eventsHelper.getEventTypes(activity, false) {
|
||||
view.filter_event_types_list.adapter = FilterEventTypeAdapter(activity, it, selectedEventTypes)
|
||||
binding.filterEventTypesList.adapter = FilterEventTypeAdapter(activity, it, selectedEventTypes)
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok) { _, _ -> confirmEventTypes() }
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> confirmEventTypes() }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this) { alertDialog ->
|
||||
activity.setupDialogStuff(binding.root, this) { alertDialog ->
|
||||
dialog = alertDialog
|
||||
}
|
||||
}
|
||||
@@ -29,7 +29,7 @@ class SelectEventTypesDialog(val activity: SimpleActivity, selectedEventTypes: S
|
||||
}
|
||||
|
||||
private fun confirmEventTypes() {
|
||||
val adapter = view.filter_event_types_list.adapter as FilterEventTypeAdapter
|
||||
val adapter = binding.filterEventTypesList.adapter as FilterEventTypeAdapter
|
||||
val selectedItems = adapter.getSelectedItemsList()
|
||||
.map { it.toString() }
|
||||
.toHashSet()
|
||||
|
@@ -3,6 +3,7 @@ package com.simplemobiletools.calendar.pro.dialogs
|
||||
import android.view.View
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.DialogSetRemindersBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.helpers.ANNIVERSARY_EVENT
|
||||
import com.simplemobiletools.calendar.pro.helpers.BIRTHDAY_EVENT
|
||||
@@ -10,7 +11,6 @@ import com.simplemobiletools.calendar.pro.helpers.OTHER_EVENT
|
||||
import com.simplemobiletools.calendar.pro.helpers.REMINDER_OFF
|
||||
import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import kotlinx.android.synthetic.main.dialog_set_reminders.view.*
|
||||
|
||||
class SetRemindersDialog(val activity: SimpleActivity, val eventType: Int, val callback: (reminders: ArrayList<Int>) -> Unit) {
|
||||
private var mReminder1Minutes = REMINDER_OFF
|
||||
@@ -18,47 +18,53 @@ class SetRemindersDialog(val activity: SimpleActivity, val eventType: Int, val c
|
||||
private var mReminder3Minutes = REMINDER_OFF
|
||||
private var isAutomatic = false
|
||||
|
||||
init {
|
||||
val view = activity.layoutInflater.inflate(R.layout.dialog_set_reminders, null).apply {
|
||||
set_reminders_image.applyColorFilter(context.getProperTextColor())
|
||||
set_reminders_1.text = activity.getFormattedMinutes(mReminder1Minutes)
|
||||
set_reminders_2.text = activity.getFormattedMinutes(mReminder1Minutes)
|
||||
set_reminders_3.text = activity.getFormattedMinutes(mReminder1Minutes)
|
||||
private val binding by activity.viewBinding(DialogSetRemindersBinding::inflate)
|
||||
|
||||
set_reminders_1.setOnClickListener {
|
||||
init {
|
||||
binding.apply {
|
||||
setRemindersImage.applyColorFilter(activity.getProperTextColor())
|
||||
setReminders1.text = activity.getFormattedMinutes(mReminder1Minutes)
|
||||
setReminders2.text = activity.getFormattedMinutes(mReminder1Minutes)
|
||||
setReminders3.text = activity.getFormattedMinutes(mReminder1Minutes)
|
||||
|
||||
setReminders1.setOnClickListener {
|
||||
activity.handleNotificationPermission { granted ->
|
||||
if (granted) {
|
||||
activity.showPickSecondsDialogHelper(mReminder1Minutes, showDuringDayOption = true) {
|
||||
mReminder1Minutes = if (it == -1 || it == 0) it else it / 60
|
||||
set_reminders_1.text = activity.getFormattedMinutes(mReminder1Minutes)
|
||||
setReminders1.text = activity.getFormattedMinutes(mReminder1Minutes)
|
||||
if (mReminder1Minutes != REMINDER_OFF) {
|
||||
set_reminders_2.beVisible()
|
||||
setReminders2.beVisible()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
PermissionRequiredDialog(activity, R.string.allow_notifications_reminders, { activity.openNotificationSettings() })
|
||||
PermissionRequiredDialog(
|
||||
activity = activity,
|
||||
textId = com.simplemobiletools.commons.R.string.allow_notifications_reminders,
|
||||
positiveActionCallback = { activity.openNotificationSettings() }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set_reminders_2.setOnClickListener {
|
||||
setReminders2.setOnClickListener {
|
||||
activity.showPickSecondsDialogHelper(mReminder2Minutes, showDuringDayOption = true) {
|
||||
mReminder2Minutes = if (it == -1 || it == 0) it else it / 60
|
||||
set_reminders_2.text = activity.getFormattedMinutes(mReminder2Minutes)
|
||||
setReminders2.text = activity.getFormattedMinutes(mReminder2Minutes)
|
||||
if (mReminder2Minutes != REMINDER_OFF) {
|
||||
set_reminders_3.beVisible()
|
||||
setReminders3.beVisible()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set_reminders_3.setOnClickListener {
|
||||
setReminders3.setOnClickListener {
|
||||
activity.showPickSecondsDialogHelper(mReminder3Minutes, showDuringDayOption = true) {
|
||||
mReminder3Minutes = if (it == -1 || it == 0) it else it / 60
|
||||
set_reminders_3.text = activity.getFormattedMinutes(mReminder3Minutes)
|
||||
setReminders3.text = activity.getFormattedMinutes(mReminder3Minutes)
|
||||
}
|
||||
}
|
||||
|
||||
add_event_automatically_checkbox.apply {
|
||||
addEventAutomaticallyCheckbox.apply {
|
||||
visibility = if (eventType == OTHER_EVENT) View.GONE else View.VISIBLE
|
||||
text = when (eventType) {
|
||||
BIRTHDAY_EVENT -> activity.getString(R.string.add_birthdays_automatically)
|
||||
@@ -76,10 +82,10 @@ class SetRemindersDialog(val activity: SimpleActivity, val eventType: Int, val c
|
||||
}
|
||||
|
||||
activity.getAlertDialogBuilder()
|
||||
.setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() }
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> dialogConfirmed() }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.apply {
|
||||
activity.setupDialogStuff(view, this, R.string.event_reminders)
|
||||
activity.setupDialogStuff(binding.root, this, R.string.event_reminders)
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -2,7 +2,6 @@ package com.simplemobiletools.calendar.pro.extensions
|
||||
|
||||
import android.app.Activity
|
||||
import com.simplemobiletools.calendar.pro.BuildConfig
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.dialogs.CustomEventRepeatIntervalDialog
|
||||
import com.simplemobiletools.calendar.pro.helpers.*
|
||||
import com.simplemobiletools.calendar.pro.models.Event
|
||||
@@ -12,19 +11,19 @@ import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
import java.util.TreeSet
|
||||
|
||||
fun BaseSimpleActivity.shareEvents(ids: List<Long>) {
|
||||
ensureBackgroundThread {
|
||||
val file = getTempFile()
|
||||
if (file == null) {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
toast(com.simplemobiletools.commons.R.string.unknown_error_occurred)
|
||||
return@ensureBackgroundThread
|
||||
}
|
||||
|
||||
val events = eventsDB.getEventsOrTasksWithIds(ids) as ArrayList<Event>
|
||||
if (events.isEmpty()) {
|
||||
toast(R.string.no_items_found)
|
||||
toast(com.simplemobiletools.commons.R.string.no_items_found)
|
||||
}
|
||||
|
||||
getFileOutputStream(file.toFileDirItem(this), true) {
|
||||
@@ -41,7 +40,7 @@ fun BaseSimpleActivity.getTempFile(): File? {
|
||||
val folder = File(cacheDir, "events")
|
||||
if (!folder.exists()) {
|
||||
if (!folder.mkdir()) {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
toast(com.simplemobiletools.commons.R.string.unknown_error_occurred)
|
||||
return null
|
||||
}
|
||||
}
|
||||
@@ -72,7 +71,7 @@ fun Activity.showEventRepeatIntervalDialog(curSeconds: Int, callback: (minutes:
|
||||
selectedIndex = index
|
||||
}
|
||||
|
||||
items.add(RadioItem(-1, getString(R.string.custom)))
|
||||
items.add(RadioItem(-1, getString(com.simplemobiletools.commons.R.string.custom)))
|
||||
|
||||
RadioGroupDialog(this, items, selectedIndex) {
|
||||
if (it == -1) {
|
||||
|
@@ -17,11 +17,9 @@ import android.media.MediaScannerConnection
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.provider.CalendarContract
|
||||
import android.view.View
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.core.app.AlarmManagerCompat
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.print.PrintHelper
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
@@ -30,6 +28,7 @@ import com.simplemobiletools.calendar.pro.activities.EventTypePickerActivity
|
||||
import com.simplemobiletools.calendar.pro.activities.SnoozeReminderActivity
|
||||
import com.simplemobiletools.calendar.pro.activities.TaskActivity
|
||||
import com.simplemobiletools.calendar.pro.databases.EventsDatabase
|
||||
import com.simplemobiletools.calendar.pro.databinding.DayMonthlyEventViewBinding
|
||||
import com.simplemobiletools.calendar.pro.helpers.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
import com.simplemobiletools.calendar.pro.interfaces.EventTypesDao
|
||||
@@ -44,7 +43,6 @@ import com.simplemobiletools.calendar.pro.services.MarkCompletedService
|
||||
import com.simplemobiletools.calendar.pro.services.SnoozeService
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import kotlinx.android.synthetic.main.day_monthly_event_view.view.*
|
||||
import org.joda.time.DateTime
|
||||
import org.joda.time.DateTimeConstants
|
||||
import org.joda.time.LocalDate
|
||||
@@ -112,7 +110,7 @@ fun Context.scheduleNextEventReminder(event: Event, showToasts: Boolean) {
|
||||
val validReminders = event.getReminders().filter { it.type == REMINDER_NOTIFICATION }
|
||||
if (validReminders.isEmpty()) {
|
||||
if (showToasts) {
|
||||
toast(R.string.saving)
|
||||
toast(com.simplemobiletools.commons.R.string.saving)
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -132,33 +130,29 @@ fun Context.scheduleNextEventReminder(event: Event, showToasts: Boolean) {
|
||||
}
|
||||
|
||||
if (showToasts) {
|
||||
toast(R.string.saving)
|
||||
toast(com.simplemobiletools.commons.R.string.saving)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun Context.scheduleEventIn(notifTS: Long, event: Event, showToasts: Boolean) {
|
||||
if (notifTS < System.currentTimeMillis()) {
|
||||
fun Context.scheduleEventIn(notifyAtMillis: Long, event: Event, showToasts: Boolean) {
|
||||
val now = System.currentTimeMillis()
|
||||
if (notifyAtMillis < now) {
|
||||
if (showToasts) {
|
||||
toast(R.string.saving)
|
||||
toast(com.simplemobiletools.commons.R.string.saving)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
val newNotifTS = notifTS + 1000
|
||||
val newNotifyAtMillis = notifyAtMillis + 1000
|
||||
if (showToasts) {
|
||||
val secondsTillNotification = (newNotifTS - System.currentTimeMillis()) / 1000
|
||||
val msg = String.format(getString(R.string.time_remaining), formatSecondsToTimeString(secondsTillNotification.toInt()))
|
||||
val secondsTillNotification = (newNotifyAtMillis - now) / 1000
|
||||
val msg = String.format(getString(com.simplemobiletools.commons.R.string.time_remaining), formatSecondsToTimeString(secondsTillNotification.toInt()))
|
||||
toast(msg)
|
||||
}
|
||||
|
||||
val pendingIntent = getNotificationIntent(event)
|
||||
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
||||
try {
|
||||
AlarmManagerCompat.setExactAndAllowWhileIdle(alarmManager, AlarmManager.RTC_WAKEUP, newNotifTS, pendingIntent)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
setExactAlarm(newNotifyAtMillis, pendingIntent)
|
||||
}
|
||||
|
||||
// hide the actual notification from the top bar
|
||||
@@ -187,19 +181,11 @@ fun Context.scheduleNextAutomaticBackup() {
|
||||
if (config.autoBackup) {
|
||||
val backupAtMillis = getNextAutoBackupTime().millis
|
||||
val pendingIntent = getAutomaticBackupIntent()
|
||||
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
||||
try {
|
||||
AlarmManagerCompat.setExactAndAllowWhileIdle(alarmManager, AlarmManager.RTC_WAKEUP, backupAtMillis, pendingIntent)
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
setExactAlarm(backupAtMillis, pendingIntent)
|
||||
}
|
||||
}
|
||||
|
||||
fun Context.cancelScheduledAutomaticBackup() {
|
||||
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
||||
alarmManager.cancel(getAutomaticBackupIntent())
|
||||
}
|
||||
fun Context.cancelScheduledAutomaticBackup() = getAlarmManager().cancel(getAutomaticBackupIntent())
|
||||
|
||||
fun Context.checkAndBackupEventsOnBoot() {
|
||||
if (config.autoBackup) {
|
||||
@@ -224,7 +210,7 @@ fun Context.backupEventsAndTasks() {
|
||||
exportPastEntries = config.autoBackupPastEntries
|
||||
)
|
||||
if (events.isEmpty()) {
|
||||
toast(R.string.no_entries_for_exporting)
|
||||
toast(com.simplemobiletools.commons.R.string.no_entries_for_exporting)
|
||||
config.lastAutoBackupTime = getNowSeconds()
|
||||
scheduleNextAutomaticBackup()
|
||||
return@ensureBackgroundThread
|
||||
@@ -275,8 +261,8 @@ fun Context.backupEventsAndTasks() {
|
||||
|
||||
IcsExporter(this).exportEvents(outputStream, events, showExportingToast = false) { result ->
|
||||
when (result) {
|
||||
IcsExporter.ExportResult.EXPORT_PARTIAL -> toast(R.string.exporting_some_entries_failed)
|
||||
IcsExporter.ExportResult.EXPORT_FAIL -> toast(R.string.exporting_failed)
|
||||
IcsExporter.ExportResult.EXPORT_PARTIAL -> toast(com.simplemobiletools.commons.R.string.exporting_some_entries_failed)
|
||||
IcsExporter.ExportResult.EXPORT_FAIL -> toast(com.simplemobiletools.commons.R.string.exporting_failed)
|
||||
else -> {}
|
||||
}
|
||||
MediaScannerConnection.scanFile(
|
||||
@@ -299,10 +285,10 @@ fun Context.getRepetitionText(seconds: Int) = when (seconds) {
|
||||
YEAR -> getString(R.string.yearly)
|
||||
else -> {
|
||||
when {
|
||||
seconds % YEAR == 0 -> resources.getQuantityString(R.plurals.years, seconds / YEAR, seconds / YEAR)
|
||||
seconds % MONTH == 0 -> resources.getQuantityString(R.plurals.months, seconds / MONTH, seconds / MONTH)
|
||||
seconds % WEEK == 0 -> resources.getQuantityString(R.plurals.weeks, seconds / WEEK, seconds / WEEK)
|
||||
else -> resources.getQuantityString(R.plurals.days, seconds / DAY, seconds / DAY)
|
||||
seconds % YEAR == 0 -> resources.getQuantityString(com.simplemobiletools.commons.R.plurals.years, seconds / YEAR, seconds / YEAR)
|
||||
seconds % MONTH == 0 -> resources.getQuantityString(com.simplemobiletools.commons.R.plurals.months, seconds / MONTH, seconds / MONTH)
|
||||
seconds % WEEK == 0 -> resources.getQuantityString(com.simplemobiletools.commons.R.plurals.weeks, seconds / WEEK, seconds / WEEK)
|
||||
else -> resources.getQuantityString(com.simplemobiletools.commons.R.plurals.days, seconds / DAY, seconds / DAY)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -342,7 +328,7 @@ fun Context.notifyEvent(originalEvent: Event) {
|
||||
|
||||
val displayedStartDate = when (startDate) {
|
||||
LocalDate.now() -> ""
|
||||
LocalDate.now().plusDays(1) -> getString(R.string.tomorrow)
|
||||
LocalDate.now().plusDays(1) -> getString(com.simplemobiletools.commons.R.string.tomorrow)
|
||||
else -> "${Formatter.getDateFromCode(this, Formatter.getDayCodeFromTS(event.startTS))},"
|
||||
}
|
||||
|
||||
@@ -431,7 +417,11 @@ fun Context.getNotification(pendingIntent: PendingIntent, event: Event, content:
|
||||
if (event.isTask() && !event.isTaskCompleted()) {
|
||||
addAction(R.drawable.ic_task_vector, getString(R.string.mark_completed), getMarkCompletedPendingIntent(this@getNotification, event))
|
||||
}
|
||||
addAction(R.drawable.ic_snooze_vector, getString(R.string.snooze), getSnoozePendingIntent(this@getNotification, event))
|
||||
addAction(
|
||||
com.simplemobiletools.commons.R.drawable.ic_snooze_vector,
|
||||
getString(com.simplemobiletools.commons.R.string.snooze),
|
||||
getSnoozePendingIntent(this@getNotification, event)
|
||||
)
|
||||
}
|
||||
|
||||
if (config.vibrateOnReminder) {
|
||||
@@ -565,13 +555,13 @@ fun Context.scheduleCalDAVSync(activate: Boolean) {
|
||||
syncIntent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
|
||||
)
|
||||
val alarm = getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
||||
alarm.cancel(pendingIntent)
|
||||
val alarmManager = getAlarmManager()
|
||||
alarmManager.cancel(pendingIntent)
|
||||
|
||||
if (activate) {
|
||||
val syncCheckInterval = 2 * AlarmManager.INTERVAL_HOUR
|
||||
try {
|
||||
alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + syncCheckInterval, syncCheckInterval, pendingIntent)
|
||||
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + syncCheckInterval, syncCheckInterval, pendingIntent)
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
}
|
||||
@@ -603,21 +593,21 @@ fun Context.addDayEvents(day: DayMonthly, linearLayout: LinearLayout, res: Resou
|
||||
textColor = textColor.adjustAlpha(0.25f)
|
||||
}
|
||||
|
||||
(View.inflate(applicationContext, R.layout.day_monthly_event_view, null) as ConstraintLayout).apply {
|
||||
background = backgroundDrawable
|
||||
layoutParams = eventLayoutParams
|
||||
linearLayout.addView(this)
|
||||
DayMonthlyEventViewBinding.inflate(LayoutInflater.from(this)).apply {
|
||||
root.background = backgroundDrawable
|
||||
root.layoutParams = eventLayoutParams
|
||||
linearLayout.addView(root)
|
||||
|
||||
day_monthly_event_id.apply {
|
||||
dayMonthlyEventId.apply {
|
||||
setTextColor(textColor)
|
||||
text = it.title.replace(" ", "\u00A0") // allow word break by char
|
||||
checkViewStrikeThrough(it.isTaskCompleted())
|
||||
contentDescription = it.title
|
||||
}
|
||||
|
||||
day_monthly_task_image.beVisibleIf(it.isTask())
|
||||
dayMonthlyTaskImage.beVisibleIf(it.isTask())
|
||||
if (it.isTask()) {
|
||||
day_monthly_task_image.applyColorFilter(textColor)
|
||||
dayMonthlyTaskImage.applyColorFilter(textColor)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -717,7 +707,7 @@ fun Context.refreshCalDAVCalendars(ids: String, showToasts: Boolean) {
|
||||
Bundle().apply {
|
||||
putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true)
|
||||
if (showToasts) {
|
||||
// Assume this is a manual synchronisation when we showToasts to the user (swipe_refresh, MainMenu->refresh_caldav_calendars, ...)
|
||||
// Assume this is a manual synchronisation when we showToasts to the user (swipe refresh, MainMenu-> refresh caldav calendars, ...)
|
||||
putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true)
|
||||
}
|
||||
accounts.forEach {
|
||||
@@ -786,13 +776,13 @@ fun Context.getFirstDayOfWeekDt(date: DateTime): DateTime {
|
||||
|
||||
fun Context.getDayOfWeekString(dayOfWeek: Int): String {
|
||||
val dayOfWeekResId = when (dayOfWeek) {
|
||||
DateTimeConstants.MONDAY -> R.string.monday
|
||||
DateTimeConstants.TUESDAY -> R.string.tuesday
|
||||
DateTimeConstants.WEDNESDAY -> R.string.wednesday
|
||||
DateTimeConstants.THURSDAY -> R.string.thursday
|
||||
DateTimeConstants.FRIDAY -> R.string.friday
|
||||
DateTimeConstants.SATURDAY -> R.string.saturday
|
||||
DateTimeConstants.SUNDAY -> R.string.sunday
|
||||
DateTimeConstants.MONDAY -> com.simplemobiletools.commons.R.string.monday
|
||||
DateTimeConstants.TUESDAY -> com.simplemobiletools.commons.R.string.tuesday
|
||||
DateTimeConstants.WEDNESDAY -> com.simplemobiletools.commons.R.string.wednesday
|
||||
DateTimeConstants.THURSDAY -> com.simplemobiletools.commons.R.string.thursday
|
||||
DateTimeConstants.FRIDAY -> com.simplemobiletools.commons.R.string.friday
|
||||
DateTimeConstants.SATURDAY -> com.simplemobiletools.commons.R.string.saturday
|
||||
DateTimeConstants.SUNDAY -> com.simplemobiletools.commons.R.string.sunday
|
||||
else -> throw IllegalArgumentException("Invalid day: $dayOfWeek")
|
||||
}
|
||||
|
||||
@@ -802,7 +792,7 @@ fun Context.getDayOfWeekString(dayOfWeek: Int): String {
|
||||
// format day bits to strings like "Mon, Tue, Wed"
|
||||
fun Context.getShortDaysFromBitmask(bitMask: Int): String {
|
||||
val dayBits = withFirstDayOfWeekToFront(listOf(MONDAY_BIT, TUESDAY_BIT, WEDNESDAY_BIT, THURSDAY_BIT, FRIDAY_BIT, SATURDAY_BIT, SUNDAY_BIT))
|
||||
val weekDays = withFirstDayOfWeekToFront(resources.getStringArray(R.array.week_days_short).toList())
|
||||
val weekDays = withFirstDayOfWeekToFront(resources.getStringArray(com.simplemobiletools.commons.R.array.week_days_short).toList())
|
||||
|
||||
var days = ""
|
||||
dayBits.forEachIndexed { index, bit ->
|
||||
@@ -914,3 +904,18 @@ fun Context.addImportIdsToTasks(callback: () -> Unit) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun Context.getAlarmManager() = getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
||||
|
||||
fun Context.setExactAlarm(triggerAtMillis: Long, operation: PendingIntent, type: Int = AlarmManager.RTC_WAKEUP) {
|
||||
val alarmManager = getAlarmManager()
|
||||
try {
|
||||
if (isSPlus() && alarmManager.canScheduleExactAlarms() || !isSPlus()) {
|
||||
alarmManager.setExactAndAllowWhileIdle(type, triggerAtMillis, operation)
|
||||
} else {
|
||||
alarmManager.setAndAllowWhileIdle(type, triggerAtMillis, operation)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
showErrorToast(e)
|
||||
}
|
||||
}
|
||||
|
@@ -6,12 +6,12 @@ import android.os.Handler
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.adapters.DayEventsAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.FragmentDayBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.TopNavigationBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
||||
import com.simplemobiletools.calendar.pro.extensions.getViewBitmap
|
||||
@@ -20,8 +20,6 @@ import com.simplemobiletools.calendar.pro.helpers.*
|
||||
import com.simplemobiletools.calendar.pro.interfaces.NavigationListener
|
||||
import com.simplemobiletools.calendar.pro.models.Event
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import kotlinx.android.synthetic.main.fragment_day.view.*
|
||||
import kotlinx.android.synthetic.main.top_navigation.view.*
|
||||
|
||||
class DayFragment : Fragment() {
|
||||
var mListener: NavigationListener? = null
|
||||
@@ -29,15 +27,15 @@ class DayFragment : Fragment() {
|
||||
private var mDayCode = ""
|
||||
private var lastHash = 0
|
||||
|
||||
private lateinit var mHolder: RelativeLayout
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
val view = inflater.inflate(R.layout.fragment_day, container, false)
|
||||
mHolder = view.day_holder
|
||||
private lateinit var binding: FragmentDayBinding
|
||||
private lateinit var topNavigationBinding: TopNavigationBinding
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
binding = FragmentDayBinding.inflate(inflater, container, false)
|
||||
topNavigationBinding = TopNavigationBinding.bind(binding.root)
|
||||
mDayCode = requireArguments().getString(DAY_CODE)!!
|
||||
setupButtons()
|
||||
return view
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
@@ -48,32 +46,32 @@ class DayFragment : Fragment() {
|
||||
private fun setupButtons() {
|
||||
mTextColor = requireContext().getProperTextColor()
|
||||
|
||||
mHolder.top_left_arrow.apply {
|
||||
topNavigationBinding.topLeftArrow.apply {
|
||||
applyColorFilter(mTextColor)
|
||||
background = null
|
||||
setOnClickListener {
|
||||
mListener?.goLeft()
|
||||
}
|
||||
|
||||
val pointerLeft = requireContext().getDrawable(R.drawable.ic_chevron_left_vector)
|
||||
val pointerLeft = requireContext().getDrawable(com.simplemobiletools.commons.R.drawable.ic_chevron_left_vector)
|
||||
pointerLeft?.isAutoMirrored = true
|
||||
setImageDrawable(pointerLeft)
|
||||
}
|
||||
|
||||
mHolder.top_right_arrow.apply {
|
||||
topNavigationBinding.topRightArrow.apply {
|
||||
applyColorFilter(mTextColor)
|
||||
background = null
|
||||
setOnClickListener {
|
||||
mListener?.goRight()
|
||||
}
|
||||
|
||||
val pointerRight = requireContext().getDrawable(R.drawable.ic_chevron_right_vector)
|
||||
val pointerRight = requireContext().getDrawable(com.simplemobiletools.commons.R.drawable.ic_chevron_right_vector)
|
||||
pointerRight?.isAutoMirrored = true
|
||||
setImageDrawable(pointerRight)
|
||||
}
|
||||
|
||||
val day = Formatter.getDayTitle(requireContext(), mDayCode)
|
||||
mHolder.top_value.apply {
|
||||
topNavigationBinding.topValue.apply {
|
||||
text = day
|
||||
contentDescription = text
|
||||
setOnClickListener {
|
||||
@@ -112,14 +110,14 @@ class DayFragment : Fragment() {
|
||||
if (activity == null)
|
||||
return
|
||||
|
||||
DayEventsAdapter(activity as SimpleActivity, events, mHolder.day_events, mDayCode) {
|
||||
DayEventsAdapter(activity as SimpleActivity, events, binding.dayEvents, mDayCode) {
|
||||
editEvent(it as Event)
|
||||
}.apply {
|
||||
mHolder.day_events.adapter = this
|
||||
binding.dayEvents.adapter = this
|
||||
}
|
||||
|
||||
if (requireContext().areSystemAnimationsEnabled) {
|
||||
mHolder.day_events.scheduleLayoutAnimation()
|
||||
binding.dayEvents.scheduleLayoutAnimation()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,20 +131,20 @@ class DayFragment : Fragment() {
|
||||
}
|
||||
|
||||
fun printCurrentView() {
|
||||
mHolder.apply {
|
||||
top_left_arrow.beGone()
|
||||
top_right_arrow.beGone()
|
||||
top_value.setTextColor(resources.getColor(R.color.theme_light_text_color))
|
||||
(day_events.adapter as? DayEventsAdapter)?.togglePrintMode()
|
||||
topNavigationBinding.apply {
|
||||
topLeftArrow.beGone()
|
||||
topRightArrow.beGone()
|
||||
topValue.setTextColor(resources.getColor(com.simplemobiletools.commons.R.color.theme_light_text_color))
|
||||
(binding.dayEvents.adapter as? DayEventsAdapter)?.togglePrintMode()
|
||||
|
||||
Handler().postDelayed({
|
||||
requireContext().printBitmap(day_holder.getViewBitmap())
|
||||
requireContext().printBitmap(binding.dayHolder.getViewBitmap())
|
||||
|
||||
Handler().postDelayed({
|
||||
top_left_arrow.beVisible()
|
||||
top_right_arrow.beVisible()
|
||||
top_value.setTextColor(requireContext().getProperTextColor())
|
||||
(day_events.adapter as? DayEventsAdapter)?.togglePrintMode()
|
||||
topLeftArrow.beVisible()
|
||||
topRightArrow.beVisible()
|
||||
topValue.setTextColor(requireContext().getProperTextColor())
|
||||
(binding.dayEvents.adapter as? DayEventsAdapter)?.togglePrintMode()
|
||||
}, 1000)
|
||||
}, 1000)
|
||||
}
|
||||
|
@@ -7,9 +7,9 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.DatePicker
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.pro.adapters.MyDayPagerAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.FragmentDaysHolderBinding
|
||||
import com.simplemobiletools.calendar.pro.helpers.DAILY_VIEW
|
||||
import com.simplemobiletools.calendar.pro.helpers.DAY_CODE
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
@@ -18,13 +18,12 @@ import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.getProperBackgroundColor
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.views.MyViewPager
|
||||
import kotlinx.android.synthetic.main.fragment_days_holder.view.*
|
||||
import org.joda.time.DateTime
|
||||
|
||||
class DayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
private val PREFILLED_DAYS = 251
|
||||
|
||||
private var viewPager: MyViewPager? = null
|
||||
private lateinit var viewPager: MyViewPager
|
||||
private var defaultDailyPage = 0
|
||||
private var todayDayCode = ""
|
||||
private var currentDayCode = ""
|
||||
@@ -38,13 +37,13 @@ class DayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
todayDayCode = Formatter.getTodayCode()
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
val view = inflater.inflate(R.layout.fragment_days_holder, container, false)
|
||||
view.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
viewPager = view.fragment_days_viewpager
|
||||
viewPager!!.id = (System.currentTimeMillis() % 100000).toInt()
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
val binding = FragmentDaysHolderBinding.inflate(inflater, container, false)
|
||||
binding.root.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
viewPager = binding.fragmentDaysViewpager
|
||||
viewPager.id = (System.currentTimeMillis() % 100000).toInt()
|
||||
setupFragment()
|
||||
return view
|
||||
return binding.root
|
||||
}
|
||||
|
||||
private fun setupFragment() {
|
||||
@@ -52,8 +51,7 @@ class DayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
val dailyAdapter = MyDayPagerAdapter(requireActivity().supportFragmentManager, codes, this)
|
||||
defaultDailyPage = codes.size / 2
|
||||
|
||||
|
||||
viewPager!!.apply {
|
||||
viewPager.apply {
|
||||
adapter = dailyAdapter
|
||||
addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
|
||||
override fun onPageScrollStateChanged(state: Int) {
|
||||
@@ -85,11 +83,11 @@ class DayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
}
|
||||
|
||||
override fun goLeft() {
|
||||
viewPager!!.currentItem = viewPager!!.currentItem - 1
|
||||
viewPager.currentItem = viewPager.currentItem - 1
|
||||
}
|
||||
|
||||
override fun goRight() {
|
||||
viewPager!!.currentItem = viewPager!!.currentItem + 1
|
||||
viewPager.currentItem = viewPager.currentItem + 1
|
||||
}
|
||||
|
||||
override fun goToDateTime(dateTime: DateTime) {
|
||||
@@ -107,17 +105,15 @@ class DayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
return
|
||||
}
|
||||
|
||||
val view = layoutInflater.inflate(getDatePickerDialogStyle(), null)
|
||||
val datePicker = view.findViewById<DatePicker>(R.id.date_picker)
|
||||
|
||||
val datePicker = getDatePickerView()
|
||||
val dateTime = getCurrentDate()!!
|
||||
datePicker.init(dateTime.year, dateTime.monthOfYear - 1, dateTime.dayOfMonth, null)
|
||||
|
||||
activity?.getAlertDialogBuilder()!!
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.ok) { dialog, which -> dateSelected(dateTime, datePicker) }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> dateSelected(dateTime, datePicker) }
|
||||
.apply {
|
||||
activity?.setupDialogStuff(view, this)
|
||||
activity?.setupDialogStuff(datePicker, this)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,7 +126,7 @@ class DayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
}
|
||||
|
||||
override fun refreshEvents() {
|
||||
(viewPager?.adapter as? MyDayPagerAdapter)?.updateCalendars(viewPager?.currentItem ?: 0)
|
||||
(viewPager.adapter as? MyDayPagerAdapter)?.updateCalendars(viewPager.currentItem)
|
||||
}
|
||||
|
||||
override fun shouldGoToTodayBeVisible() = currentDayCode != todayDayCode
|
||||
@@ -138,7 +134,7 @@ class DayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
override fun getNewEventDayCode() = currentDayCode
|
||||
|
||||
override fun printView() {
|
||||
(viewPager?.adapter as? MyDayPagerAdapter)?.printCurrentView(viewPager?.currentItem ?: 0)
|
||||
(viewPager.adapter as? MyDayPagerAdapter)?.printCurrentView(viewPager.currentItem)
|
||||
}
|
||||
|
||||
override fun getCurrentDate(): DateTime? {
|
||||
|
@@ -12,6 +12,7 @@ import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.adapters.EventListAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.FragmentEventListBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.*
|
||||
import com.simplemobiletools.calendar.pro.models.Event
|
||||
@@ -22,7 +23,6 @@ import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener
|
||||
import com.simplemobiletools.commons.views.MyLinearLayoutManager
|
||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||
import kotlinx.android.synthetic.main.fragment_event_list.view.*
|
||||
import org.joda.time.DateTime
|
||||
|
||||
class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
@@ -35,15 +35,15 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
|
||||
private var use24HourFormat = false
|
||||
|
||||
lateinit var mView: View
|
||||
private lateinit var binding: FragmentEventListBinding
|
||||
|
||||
override val viewType = EVENTS_LIST_VIEW
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
mView = inflater.inflate(R.layout.fragment_event_list, container, false)
|
||||
mView.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
mView.calendar_events_list_holder?.id = (System.currentTimeMillis() % 100000).toInt()
|
||||
mView.calendar_empty_list_placeholder_2.apply {
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
binding = FragmentEventListBinding.inflate(inflater, container, false)
|
||||
binding.root.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
binding.calendarEventsListHolder.id = (System.currentTimeMillis() % 100000).toInt()
|
||||
binding.calendarEmptyListPlaceholder2.apply {
|
||||
setTextColor(context.getProperPrimaryColor())
|
||||
underlineText()
|
||||
setOnClickListener {
|
||||
@@ -53,7 +53,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
}
|
||||
|
||||
use24HourFormat = requireContext().config.use24HourFormat
|
||||
return mView
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
@@ -62,7 +62,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
val use24Hour = requireContext().config.use24HourFormat
|
||||
if (use24Hour != use24HourFormat) {
|
||||
use24HourFormat = use24Hour
|
||||
(mView.calendar_events_list.adapter as? EventListAdapter)?.toggle24HourFormat(use24HourFormat)
|
||||
(binding.calendarEventsList.adapter as? EventListAdapter)?.toggle24HourFormat(use24HourFormat)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,21 +107,21 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
return@runOnUiThread
|
||||
}
|
||||
|
||||
val currAdapter = mView.calendar_events_list.adapter
|
||||
val currAdapter = binding.calendarEventsList.adapter
|
||||
if (currAdapter == null || forceRecreation) {
|
||||
EventListAdapter(activity as SimpleActivity, listItems, true, this, mView.calendar_events_list) {
|
||||
EventListAdapter(activity as SimpleActivity, listItems, true, this, binding.calendarEventsList) {
|
||||
if (it is ListEvent) {
|
||||
context?.editEvent(it)
|
||||
}
|
||||
}.apply {
|
||||
mView.calendar_events_list.adapter = this
|
||||
binding.calendarEventsList.adapter = this
|
||||
}
|
||||
|
||||
if (requireContext().areSystemAnimationsEnabled) {
|
||||
mView.calendar_events_list.scheduleLayoutAnimation()
|
||||
binding.calendarEventsList.scheduleLayoutAnimation()
|
||||
}
|
||||
|
||||
mView.calendar_events_list.endlessScrollListener = object : MyRecyclerView.EndlessScrollListener {
|
||||
binding.calendarEventsList.endlessScrollListener = object : MyRecyclerView.EndlessScrollListener {
|
||||
override fun updateTop() {
|
||||
fetchPreviousPeriod()
|
||||
}
|
||||
@@ -131,7 +131,7 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
}
|
||||
}
|
||||
|
||||
mView.calendar_events_list.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||
binding.calendarEventsList.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
|
||||
super.onScrollStateChanged(recyclerView, newState)
|
||||
if (!hasBeenScrolled) {
|
||||
@@ -146,10 +146,10 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
if (updateStatus == UPDATE_TOP) {
|
||||
val item = listItems.indexOfFirst { it == bottomItemAtRefresh }
|
||||
if (item != -1) {
|
||||
mView.calendar_events_list.scrollToPosition(item)
|
||||
binding.calendarEventsList.scrollToPosition(item)
|
||||
}
|
||||
} else if (updateStatus == UPDATE_BOTTOM) {
|
||||
mView.calendar_events_list.smoothScrollBy(0, requireContext().resources.getDimension(R.dimen.endless_scroll_move_height).toInt())
|
||||
binding.calendarEventsList.smoothScrollBy(0, requireContext().resources.getDimension(R.dimen.endless_scroll_move_height).toInt())
|
||||
}
|
||||
}
|
||||
checkPlaceholderVisibility()
|
||||
@@ -157,11 +157,11 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
}
|
||||
|
||||
private fun checkPlaceholderVisibility() {
|
||||
mView.calendar_empty_list_placeholder.beVisibleIf(mEvents.isEmpty())
|
||||
mView.calendar_empty_list_placeholder_2.beVisibleIf(mEvents.isEmpty())
|
||||
mView.calendar_events_list.beGoneIf(mEvents.isEmpty())
|
||||
binding.calendarEmptyListPlaceholder.beVisibleIf(mEvents.isEmpty())
|
||||
binding.calendarEmptyListPlaceholder2.beVisibleIf(mEvents.isEmpty())
|
||||
binding.calendarEventsList.beGoneIf(mEvents.isEmpty())
|
||||
if (activity != null) {
|
||||
mView.calendar_empty_list_placeholder.setTextColor(requireActivity().getProperTextColor())
|
||||
binding.calendarEmptyListPlaceholder.setTextColor(requireActivity().getProperTextColor())
|
||||
if (mEvents.isEmpty()) {
|
||||
val placeholderTextId = if (requireActivity().config.displayEventTypes.isEmpty()) {
|
||||
R.string.everything_filtered_out
|
||||
@@ -169,14 +169,14 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
R.string.no_upcoming_events
|
||||
}
|
||||
|
||||
mView.calendar_empty_list_placeholder.setText(placeholderTextId)
|
||||
binding.calendarEmptyListPlaceholder.setText(placeholderTextId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchPreviousPeriod() {
|
||||
val lastPosition = (mView.calendar_events_list.layoutManager as MyLinearLayoutManager).findLastVisibleItemPosition()
|
||||
bottomItemAtRefresh = (mView.calendar_events_list.adapter as EventListAdapter).listItems[lastPosition]
|
||||
val lastPosition = (binding.calendarEventsList.layoutManager as MyLinearLayoutManager).findLastVisibleItemPosition()
|
||||
bottomItemAtRefresh = (binding.calendarEventsList.adapter as EventListAdapter).listItems[lastPosition]
|
||||
|
||||
val oldMinFetchedTS = minFetchedTS - 1
|
||||
minFetchedTS -= FETCH_INTERVAL
|
||||
@@ -213,8 +213,8 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
val listItems = requireContext().getEventListItems(mEvents)
|
||||
val firstNonPastSectionIndex = listItems.indexOfFirst { it is ListSectionDay && !it.isPastSection }
|
||||
if (firstNonPastSectionIndex != -1) {
|
||||
(mView.calendar_events_list.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(firstNonPastSectionIndex, 0)
|
||||
mView.calendar_events_list.onGlobalLayout {
|
||||
(binding.calendarEventsList.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(firstNonPastSectionIndex, 0)
|
||||
binding.calendarEventsList.onGlobalLayout {
|
||||
hasBeenScrolled = false
|
||||
(activity as? MainActivity)?.refreshItems()
|
||||
(activity as? MainActivity)?.refreshMenuItems()
|
||||
@@ -233,18 +233,18 @@ class EventListFragment : MyFragmentHolder(), RefreshRecyclerViewListener {
|
||||
override fun getNewEventDayCode() = Formatter.getTodayCode()
|
||||
|
||||
override fun printView() {
|
||||
mView.apply {
|
||||
if (calendar_events_list.isGone()) {
|
||||
context.toast(R.string.no_items_found)
|
||||
binding.apply {
|
||||
if (calendarEventsList.isGone()) {
|
||||
context?.toast(com.simplemobiletools.commons.R.string.no_items_found)
|
||||
return@apply
|
||||
}
|
||||
|
||||
(calendar_events_list.adapter as? EventListAdapter)?.togglePrintMode()
|
||||
(calendarEventsList.adapter as? EventListAdapter)?.togglePrintMode()
|
||||
Handler().postDelayed({
|
||||
requireContext().printBitmap(calendar_events_list.getViewBitmap())
|
||||
requireContext().printBitmap(calendarEventsList.getViewBitmap())
|
||||
|
||||
Handler().postDelayed({
|
||||
(calendar_events_list.adapter as? EventListAdapter)?.togglePrintMode()
|
||||
(calendarEventsList.adapter as? EventListAdapter)?.togglePrintMode()
|
||||
}, 1000)
|
||||
}, 1000)
|
||||
}
|
||||
|
@@ -6,12 +6,11 @@ import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.adapters.EventListAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.FragmentMonthDayBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.Config
|
||||
import com.simplemobiletools.calendar.pro.helpers.DAY_CODE
|
||||
@@ -27,8 +26,6 @@ import com.simplemobiletools.commons.extensions.areSystemAnimationsEnabled
|
||||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
||||
import com.simplemobiletools.commons.extensions.getProperTextColor
|
||||
import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener
|
||||
import kotlinx.android.synthetic.main.fragment_month_day.month_day_events_list
|
||||
import kotlinx.android.synthetic.main.fragment_month_day.view.*
|
||||
import org.joda.time.DateTime
|
||||
|
||||
class MonthDayFragment : Fragment(), MonthlyCalendar, RefreshRecyclerViewListener {
|
||||
@@ -42,19 +39,18 @@ class MonthDayFragment : Fragment(), MonthlyCalendar, RefreshRecyclerViewListene
|
||||
|
||||
var listener: NavigationListener? = null
|
||||
|
||||
lateinit var mRes: Resources
|
||||
lateinit var mHolder: ConstraintLayout
|
||||
lateinit var mConfig: Config
|
||||
private lateinit var mRes: Resources
|
||||
private lateinit var binding: FragmentMonthDayBinding
|
||||
private lateinit var mConfig: Config
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
val view = inflater.inflate(R.layout.fragment_month_day, container, false)
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
binding = FragmentMonthDayBinding.inflate(inflater, container, false)
|
||||
mRes = resources
|
||||
mPackageName = requireActivity().packageName
|
||||
mHolder = view.month_day_calendar_holder
|
||||
mDayCode = requireArguments().getString(DAY_CODE)!!
|
||||
|
||||
val shownMonthDateTime = Formatter.getDateTimeFromCode(mDayCode)
|
||||
mHolder.month_day_selected_day_label.apply {
|
||||
binding.monthDaySelectedDayLabel.apply {
|
||||
text = getMonthLabel(shownMonthDateTime)
|
||||
setOnClickListener {
|
||||
(activity as MainActivity).showGoToDateDialog()
|
||||
@@ -65,7 +61,7 @@ class MonthDayFragment : Fragment(), MonthlyCalendar, RefreshRecyclerViewListene
|
||||
storeStateVariables()
|
||||
setupButtons()
|
||||
mCalendar = MonthlyCalendarImpl(this, requireContext())
|
||||
return view
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
@@ -107,7 +103,7 @@ class MonthDayFragment : Fragment(), MonthlyCalendar, RefreshRecyclerViewListene
|
||||
mLastHash = newHash
|
||||
|
||||
activity?.runOnUiThread {
|
||||
mHolder.month_day_view_wrapper.updateDays(days, false) {
|
||||
binding.monthDayViewWrapper.updateDays(days, false) {
|
||||
mSelectedDayCode = it.code
|
||||
updateVisibleEvents()
|
||||
}
|
||||
@@ -136,26 +132,26 @@ class MonthDayFragment : Fragment(), MonthlyCalendar, RefreshRecyclerViewListene
|
||||
|
||||
val listItems = requireActivity().getEventListItems(filtered, mSelectedDayCode.isEmpty(), false)
|
||||
if (mSelectedDayCode.isNotEmpty()) {
|
||||
mHolder.month_day_selected_day_label.text = Formatter.getDateFromCode(requireActivity(), mSelectedDayCode, false)
|
||||
binding.monthDaySelectedDayLabel.text = Formatter.getDateFromCode(requireActivity(), mSelectedDayCode, false)
|
||||
}
|
||||
|
||||
activity?.runOnUiThread {
|
||||
if (activity != null) {
|
||||
mHolder.month_day_events_list.beVisibleIf(listItems.isNotEmpty())
|
||||
mHolder.month_day_no_events_placeholder.beVisibleIf(listItems.isEmpty())
|
||||
binding.monthDayEventsList.beVisibleIf(listItems.isNotEmpty())
|
||||
binding.monthDayNoEventsPlaceholder.beVisibleIf(listItems.isEmpty())
|
||||
|
||||
val currAdapter = mHolder.month_day_events_list.adapter
|
||||
val currAdapter = binding.monthDayEventsList.adapter
|
||||
if (currAdapter == null) {
|
||||
EventListAdapter(activity as SimpleActivity, listItems, true, this, month_day_events_list) {
|
||||
EventListAdapter(activity as SimpleActivity, listItems, true, this, binding.monthDayEventsList) {
|
||||
if (it is ListEvent) {
|
||||
activity?.editEvent(it)
|
||||
}
|
||||
}.apply {
|
||||
month_day_events_list.adapter = this
|
||||
binding.monthDayEventsList.adapter = this
|
||||
}
|
||||
|
||||
if (requireContext().areSystemAnimationsEnabled) {
|
||||
month_day_events_list.scheduleLayoutAnimation()
|
||||
binding.monthDayEventsList.scheduleLayoutAnimation()
|
||||
}
|
||||
} else {
|
||||
(currAdapter as EventListAdapter).updateListItems(listItems)
|
||||
@@ -166,15 +162,15 @@ class MonthDayFragment : Fragment(), MonthlyCalendar, RefreshRecyclerViewListene
|
||||
|
||||
private fun setupButtons() {
|
||||
val textColor = requireContext().getProperTextColor()
|
||||
mHolder.apply {
|
||||
month_day_selected_day_label.setTextColor(textColor)
|
||||
month_day_no_events_placeholder.setTextColor(textColor)
|
||||
binding.apply {
|
||||
monthDaySelectedDayLabel.setTextColor(textColor)
|
||||
monthDayNoEventsPlaceholder.setTextColor(textColor)
|
||||
}
|
||||
}
|
||||
|
||||
fun printCurrentView() {}
|
||||
|
||||
fun getNewEventDayCode() = if (mSelectedDayCode.isEmpty()) null else mSelectedDayCode
|
||||
fun getNewEventDayCode() = mSelectedDayCode.ifEmpty { null }
|
||||
|
||||
private fun getMonthLabel(shownMonthDateTime: DateTime): String {
|
||||
var month = Formatter.getMonthName(requireActivity(), shownMonthDateTime.monthOfYear)
|
||||
|
@@ -8,9 +8,9 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.DatePicker
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.pro.adapters.MyMonthDayPagerAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.FragmentMonthsDaysHolderBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.getMonthCode
|
||||
import com.simplemobiletools.calendar.pro.helpers.DAY_CODE
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
@@ -21,13 +21,12 @@ import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.getProperBackgroundColor
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.views.MyViewPager
|
||||
import kotlinx.android.synthetic.main.fragment_months_days_holder.view.*
|
||||
import org.joda.time.DateTime
|
||||
|
||||
class MonthDayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
private val PREFILLED_MONTHS = 251
|
||||
|
||||
private var viewPager: MyViewPager? = null
|
||||
private lateinit var viewPager: MyViewPager
|
||||
private var defaultMonthlyPage = 0
|
||||
private var todayDayCode = ""
|
||||
private var currentDayCode = ""
|
||||
@@ -41,13 +40,13 @@ class MonthDayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
todayDayCode = Formatter.getTodayCode()
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
val view = inflater.inflate(R.layout.fragment_months_days_holder, container, false)
|
||||
view.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
viewPager = view.fragment_months_days_viewpager
|
||||
viewPager!!.id = (System.currentTimeMillis() % 100000).toInt()
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
val binding = FragmentMonthsDaysHolderBinding.inflate(inflater, container, false)
|
||||
binding.root.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
viewPager = binding.fragmentMonthsDaysViewpager
|
||||
viewPager.id = (System.currentTimeMillis() % 100000).toInt()
|
||||
setupFragment()
|
||||
return view
|
||||
return binding.root
|
||||
}
|
||||
|
||||
private fun setupFragment() {
|
||||
@@ -55,14 +54,12 @@ class MonthDayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
val monthlyDailyAdapter = MyMonthDayPagerAdapter(requireActivity().supportFragmentManager, codes, this)
|
||||
defaultMonthlyPage = codes.size / 2
|
||||
|
||||
viewPager!!.apply {
|
||||
viewPager.apply {
|
||||
adapter = monthlyDailyAdapter
|
||||
addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
|
||||
override fun onPageScrollStateChanged(state: Int) {
|
||||
}
|
||||
override fun onPageScrollStateChanged(state: Int) {}
|
||||
|
||||
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
|
||||
}
|
||||
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
|
||||
|
||||
override fun onPageSelected(position: Int) {
|
||||
currentDayCode = codes[position]
|
||||
@@ -88,11 +85,11 @@ class MonthDayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
}
|
||||
|
||||
override fun goLeft() {
|
||||
viewPager!!.currentItem = viewPager!!.currentItem - 1
|
||||
viewPager.currentItem = viewPager.currentItem - 1
|
||||
}
|
||||
|
||||
override fun goRight() {
|
||||
viewPager!!.currentItem = viewPager!!.currentItem + 1
|
||||
viewPager.currentItem = viewPager.currentItem + 1
|
||||
}
|
||||
|
||||
override fun goToDateTime(dateTime: DateTime) {
|
||||
@@ -110,18 +107,17 @@ class MonthDayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
return
|
||||
}
|
||||
|
||||
val view = layoutInflater.inflate(getDatePickerDialogStyle(), null)
|
||||
val datePicker = view.findViewById<DatePicker>(R.id.date_picker)
|
||||
val datePicker = getDatePickerView()
|
||||
datePicker.findViewById<View>(Resources.getSystem().getIdentifier("day", "id", "android")).beGone()
|
||||
|
||||
val dateTime = getCurrentDate()!!
|
||||
datePicker.init(dateTime.year, dateTime.monthOfYear - 1, 1, null)
|
||||
|
||||
activity?.getAlertDialogBuilder()!!
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.ok) { dialog, which -> datePicked(dateTime, datePicker) }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> datePicked(dateTime, datePicker) }
|
||||
.apply {
|
||||
activity?.setupDialogStuff(view, this)
|
||||
activity?.setupDialogStuff(datePicker, this)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,12 +129,12 @@ class MonthDayFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
}
|
||||
|
||||
override fun refreshEvents() {
|
||||
(viewPager?.adapter as? MyMonthDayPagerAdapter)?.updateCalendars(viewPager?.currentItem ?: 0)
|
||||
(viewPager.adapter as? MyMonthDayPagerAdapter)?.updateCalendars(viewPager.currentItem)
|
||||
}
|
||||
|
||||
override fun shouldGoToTodayBeVisible() = currentDayCode.getMonthCode() != todayDayCode.getMonthCode()
|
||||
|
||||
override fun getNewEventDayCode() = (viewPager?.adapter as? MyMonthDayPagerAdapter)?.getNewEventDayCode(viewPager?.currentItem ?: 0)
|
||||
override fun getNewEventDayCode() = (viewPager.adapter as? MyMonthDayPagerAdapter)?.getNewEventDayCode(viewPager.currentItem)
|
||||
?: if (shouldGoToTodayBeVisible()) {
|
||||
currentDayCode
|
||||
} else {
|
||||
|
@@ -6,10 +6,10 @@ import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.FragmentMonthBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.TopNavigationBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.getViewBitmap
|
||||
import com.simplemobiletools.calendar.pro.extensions.printBitmap
|
||||
@@ -24,11 +24,6 @@ import com.simplemobiletools.commons.extensions.applyColorFilter
|
||||
import com.simplemobiletools.commons.extensions.beGone
|
||||
import com.simplemobiletools.commons.extensions.beVisible
|
||||
import com.simplemobiletools.commons.extensions.getProperTextColor
|
||||
import kotlinx.android.synthetic.main.fragment_month.view.month_calendar_holder
|
||||
import kotlinx.android.synthetic.main.fragment_month.view.month_view_wrapper
|
||||
import kotlinx.android.synthetic.main.top_navigation.view.top_left_arrow
|
||||
import kotlinx.android.synthetic.main.top_navigation.view.top_right_arrow
|
||||
import kotlinx.android.synthetic.main.top_navigation.view.top_value
|
||||
import org.joda.time.DateTime
|
||||
|
||||
class MonthFragment : Fragment(), MonthlyCalendar {
|
||||
@@ -41,15 +36,16 @@ class MonthFragment : Fragment(), MonthlyCalendar {
|
||||
|
||||
var listener: NavigationListener? = null
|
||||
|
||||
lateinit var mRes: Resources
|
||||
lateinit var mHolder: RelativeLayout
|
||||
lateinit var mConfig: Config
|
||||
private lateinit var mRes: Resources
|
||||
private lateinit var mConfig: Config
|
||||
private lateinit var binding: FragmentMonthBinding
|
||||
private lateinit var topNavigationBinding: TopNavigationBinding
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
val view = inflater.inflate(R.layout.fragment_month, container, false)
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
binding = FragmentMonthBinding.inflate(inflater, container, false)
|
||||
topNavigationBinding = TopNavigationBinding.bind(binding.root)
|
||||
mRes = resources
|
||||
mPackageName = requireActivity().packageName
|
||||
mHolder = view.month_calendar_holder
|
||||
mDayCode = requireArguments().getString(DAY_CODE)!!
|
||||
mConfig = requireContext().config
|
||||
storeStateVariables()
|
||||
@@ -57,7 +53,7 @@ class MonthFragment : Fragment(), MonthlyCalendar {
|
||||
setupButtons()
|
||||
mCalendar = MonthlyCalendarImpl(this, requireContext())
|
||||
|
||||
return view
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
@@ -99,7 +95,7 @@ class MonthFragment : Fragment(), MonthlyCalendar {
|
||||
mLastHash = newHash
|
||||
|
||||
activity?.runOnUiThread {
|
||||
mHolder.top_value.apply {
|
||||
topNavigationBinding.topValue.apply {
|
||||
text = month
|
||||
contentDescription = text
|
||||
|
||||
@@ -114,31 +110,31 @@ class MonthFragment : Fragment(), MonthlyCalendar {
|
||||
private fun setupButtons() {
|
||||
mTextColor = requireContext().getProperTextColor()
|
||||
|
||||
mHolder.top_left_arrow.apply {
|
||||
topNavigationBinding.topLeftArrow.apply {
|
||||
applyColorFilter(mTextColor)
|
||||
background = null
|
||||
setOnClickListener {
|
||||
listener?.goLeft()
|
||||
}
|
||||
|
||||
val pointerLeft = requireContext().getDrawable(R.drawable.ic_chevron_left_vector)
|
||||
val pointerLeft = requireContext().getDrawable(com.simplemobiletools.commons.R.drawable.ic_chevron_left_vector)
|
||||
pointerLeft?.isAutoMirrored = true
|
||||
setImageDrawable(pointerLeft)
|
||||
}
|
||||
|
||||
mHolder.top_right_arrow.apply {
|
||||
topNavigationBinding.topRightArrow.apply {
|
||||
applyColorFilter(mTextColor)
|
||||
background = null
|
||||
setOnClickListener {
|
||||
listener?.goRight()
|
||||
}
|
||||
|
||||
val pointerRight = requireContext().getDrawable(R.drawable.ic_chevron_right_vector)
|
||||
val pointerRight = requireContext().getDrawable(com.simplemobiletools.commons.R.drawable.ic_chevron_right_vector)
|
||||
pointerRight?.isAutoMirrored = true
|
||||
setImageDrawable(pointerRight)
|
||||
}
|
||||
|
||||
mHolder.top_value.apply {
|
||||
topNavigationBinding.topValue.apply {
|
||||
setTextColor(requireContext().getProperTextColor())
|
||||
setOnClickListener {
|
||||
(activity as MainActivity).showGoToDateDialog()
|
||||
@@ -147,24 +143,24 @@ class MonthFragment : Fragment(), MonthlyCalendar {
|
||||
}
|
||||
|
||||
private fun updateDays(days: ArrayList<DayMonthly>) {
|
||||
mHolder.month_view_wrapper.updateDays(days, true) {
|
||||
binding.monthViewWrapper.updateDays(days, true) {
|
||||
(activity as MainActivity).openDayFromMonthly(Formatter.getDateTimeFromCode(it.code))
|
||||
}
|
||||
}
|
||||
|
||||
fun printCurrentView() {
|
||||
mHolder.apply {
|
||||
top_left_arrow.beGone()
|
||||
top_right_arrow.beGone()
|
||||
top_value.setTextColor(resources.getColor(R.color.theme_light_text_color))
|
||||
month_view_wrapper.togglePrintMode()
|
||||
topNavigationBinding.apply {
|
||||
topLeftArrow.beGone()
|
||||
topRightArrow.beGone()
|
||||
topValue.setTextColor(resources.getColor(com.simplemobiletools.commons.R.color.theme_light_text_color))
|
||||
binding.monthViewWrapper.togglePrintMode()
|
||||
|
||||
requireContext().printBitmap(month_calendar_holder.getViewBitmap())
|
||||
requireContext().printBitmap(binding.monthCalendarHolder.getViewBitmap())
|
||||
|
||||
top_left_arrow.beVisible()
|
||||
top_right_arrow.beVisible()
|
||||
top_value.setTextColor(requireContext().getProperTextColor())
|
||||
month_view_wrapper.togglePrintMode()
|
||||
topLeftArrow.beVisible()
|
||||
topRightArrow.beVisible()
|
||||
topValue.setTextColor(requireContext().getProperTextColor())
|
||||
binding.monthViewWrapper.togglePrintMode()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -8,9 +8,9 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.DatePicker
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.pro.adapters.MyMonthPagerAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.FragmentMonthsHolderBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.getMonthCode
|
||||
import com.simplemobiletools.calendar.pro.helpers.DAY_CODE
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
@@ -21,13 +21,12 @@ import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.getProperBackgroundColor
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.views.MyViewPager
|
||||
import kotlinx.android.synthetic.main.fragment_months_holder.view.*
|
||||
import org.joda.time.DateTime
|
||||
|
||||
class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
private val PREFILLED_MONTHS = 251
|
||||
|
||||
private var viewPager: MyViewPager? = null
|
||||
private lateinit var viewPager: MyViewPager
|
||||
private var defaultMonthlyPage = 0
|
||||
private var todayDayCode = ""
|
||||
private var currentDayCode = ""
|
||||
@@ -41,13 +40,13 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
todayDayCode = Formatter.getTodayCode()
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
val view = inflater.inflate(R.layout.fragment_months_holder, container, false)
|
||||
view.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
viewPager = view.fragment_months_viewpager
|
||||
viewPager!!.id = (System.currentTimeMillis() % 100000).toInt()
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
val binding = FragmentMonthsHolderBinding.inflate(inflater, container, false)
|
||||
binding.root.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
viewPager = binding.fragmentMonthsViewpager
|
||||
viewPager.id = (System.currentTimeMillis() % 100000).toInt()
|
||||
setupFragment()
|
||||
return view
|
||||
return binding.root
|
||||
}
|
||||
|
||||
private fun setupFragment() {
|
||||
@@ -55,7 +54,7 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
val monthlyAdapter = MyMonthPagerAdapter(requireActivity().supportFragmentManager, codes, this)
|
||||
defaultMonthlyPage = codes.size / 2
|
||||
|
||||
viewPager!!.apply {
|
||||
viewPager.apply {
|
||||
adapter = monthlyAdapter
|
||||
addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
|
||||
override fun onPageScrollStateChanged(state: Int) {
|
||||
@@ -88,11 +87,11 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
}
|
||||
|
||||
override fun goLeft() {
|
||||
viewPager!!.currentItem = viewPager!!.currentItem - 1
|
||||
viewPager.currentItem = viewPager.currentItem - 1
|
||||
}
|
||||
|
||||
override fun goRight() {
|
||||
viewPager!!.currentItem = viewPager!!.currentItem + 1
|
||||
viewPager.currentItem = viewPager.currentItem + 1
|
||||
}
|
||||
|
||||
override fun goToDateTime(dateTime: DateTime) {
|
||||
@@ -110,18 +109,17 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
return
|
||||
}
|
||||
|
||||
val view = layoutInflater.inflate(getDatePickerDialogStyle(), null)
|
||||
val datePicker = view.findViewById<DatePicker>(R.id.date_picker)
|
||||
val datePicker = getDatePickerView()
|
||||
datePicker.findViewById<View>(Resources.getSystem().getIdentifier("day", "id", "android")).beGone()
|
||||
|
||||
val dateTime = getCurrentDate()!!
|
||||
datePicker.init(dateTime.year, dateTime.monthOfYear - 1, 1, null)
|
||||
|
||||
activity?.getAlertDialogBuilder()!!
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.ok) { dialog, which -> datePicked(dateTime, datePicker) }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> datePicked(dateTime, datePicker) }
|
||||
.apply {
|
||||
activity?.setupDialogStuff(view, this)
|
||||
activity?.setupDialogStuff(datePicker, this)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,7 +131,7 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
}
|
||||
|
||||
override fun refreshEvents() {
|
||||
(viewPager?.adapter as? MyMonthPagerAdapter)?.updateCalendars(viewPager?.currentItem ?: 0)
|
||||
(viewPager.adapter as? MyMonthPagerAdapter)?.updateCalendars(viewPager.currentItem)
|
||||
}
|
||||
|
||||
override fun shouldGoToTodayBeVisible() = currentDayCode.getMonthCode() != todayDayCode.getMonthCode()
|
||||
@@ -141,7 +139,7 @@ class MonthFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
override fun getNewEventDayCode() = if (shouldGoToTodayBeVisible()) currentDayCode else todayDayCode
|
||||
|
||||
override fun printView() {
|
||||
(viewPager?.adapter as? MyMonthPagerAdapter)?.printCurrentView(viewPager?.currentItem ?: 0)
|
||||
(viewPager.adapter as? MyMonthPagerAdapter)?.printCurrentView(viewPager.currentItem)
|
||||
}
|
||||
|
||||
override fun getCurrentDate(): DateTime? {
|
||||
|
@@ -1,8 +1,10 @@
|
||||
package com.simplemobiletools.calendar.pro.fragments
|
||||
|
||||
import android.graphics.Color
|
||||
import android.widget.DatePicker
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.DatePickerDarkBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.DatePickerLightBinding
|
||||
import com.simplemobiletools.commons.extensions.getContrastColor
|
||||
import com.simplemobiletools.commons.extensions.getProperBackgroundColor
|
||||
import org.joda.time.DateTime
|
||||
@@ -24,11 +26,11 @@ abstract class MyFragmentHolder : Fragment() {
|
||||
|
||||
abstract fun getCurrentDate(): DateTime?
|
||||
|
||||
fun getDatePickerDialogStyle(): Int {
|
||||
fun getDatePickerView(): DatePicker {
|
||||
return if (requireActivity().getProperBackgroundColor().getContrastColor() == Color.WHITE) {
|
||||
R.layout.date_picker_dark
|
||||
DatePickerDarkBinding.inflate(layoutInflater).datePicker
|
||||
} else {
|
||||
R.layout.date_picker_light
|
||||
DatePickerLightBinding.inflate(layoutInflater).datePicker
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -13,11 +13,11 @@ import android.view.*
|
||||
import android.widget.ImageView
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.collection.LongSparseArray
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.*
|
||||
import com.simplemobiletools.calendar.pro.dialogs.EditRepeatingEventDialog
|
||||
import com.simplemobiletools.calendar.pro.extensions.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.*
|
||||
@@ -31,10 +31,6 @@ import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.*
|
||||
import com.simplemobiletools.commons.models.RadioItem
|
||||
import com.simplemobiletools.commons.views.MyTextView
|
||||
import kotlinx.android.synthetic.main.fragment_week.*
|
||||
import kotlinx.android.synthetic.main.fragment_week.view.*
|
||||
import kotlinx.android.synthetic.main.week_event_marker.view.*
|
||||
import org.joda.time.DateTime
|
||||
import org.joda.time.Days
|
||||
import java.util.*
|
||||
@@ -83,8 +79,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
private var eventTimeRanges = LinkedHashMap<String, LinkedHashMap<Long, EventWeeklyView>>()
|
||||
private var currentlyDraggedView: View? = null
|
||||
|
||||
private lateinit var inflater: LayoutInflater
|
||||
private lateinit var mView: View
|
||||
private lateinit var binding: FragmentWeekBinding
|
||||
private lateinit var scrollView: MyScrollView
|
||||
private lateinit var res: Resources
|
||||
private lateinit var config: Config
|
||||
@@ -104,17 +99,15 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
this.inflater = inflater
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
val fullHeight = requireContext().getWeeklyViewItemHeight().toInt() * 24
|
||||
mView = inflater.inflate(R.layout.fragment_week, container, false).apply {
|
||||
scrollView = week_events_scrollview
|
||||
week_horizontal_grid_holder.layoutParams.height = fullHeight
|
||||
week_events_columns_holder.layoutParams.height = fullHeight
|
||||
binding = FragmentWeekBinding.inflate(inflater, container, false).apply {
|
||||
scrollView = weekEventsScrollview
|
||||
weekHorizontalGridHolder.layoutParams.height = fullHeight
|
||||
weekEventsColumnsHolder.layoutParams.height = fullHeight
|
||||
|
||||
val scaleDetector = getViewScaleDetector()
|
||||
scrollView.setOnTouchListener { view, motionEvent ->
|
||||
scrollView.setOnTouchListener { _, motionEvent ->
|
||||
scaleDetector.onTouchEvent(motionEvent)
|
||||
if (motionEvent.action == MotionEvent.ACTION_UP && wasScaled) {
|
||||
scrollView.isScrollable = true
|
||||
@@ -135,7 +128,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
|
||||
scrollView.onGlobalLayout {
|
||||
if (fullHeight < scrollView.height) {
|
||||
scrollView.layoutParams.height = fullHeight - res.getDimension(R.dimen.one_dp).toInt()
|
||||
scrollView.layoutParams.height = fullHeight - res.getDimension(com.simplemobiletools.commons.R.dimen.one_dp).toInt()
|
||||
}
|
||||
|
||||
val initialScrollY = (rowHeight * config.startWeeklyAt).toInt()
|
||||
@@ -143,7 +136,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
|
||||
wasFragmentInit = true
|
||||
return mView
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
@@ -157,7 +150,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
setupDayLabels()
|
||||
updateCalendar()
|
||||
|
||||
if (rowHeight != 0f && mView.width != 0) {
|
||||
if (rowHeight != 0f && binding.root.width != 0) {
|
||||
addCurrentTimeIndicator()
|
||||
}
|
||||
}
|
||||
@@ -176,11 +169,11 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
super.setMenuVisibility(menuVisible)
|
||||
isFragmentVisible = menuVisible
|
||||
if (isFragmentVisible && wasFragmentInit) {
|
||||
listener?.updateHoursTopMargin(mView.week_top_holder.height)
|
||||
listener?.updateHoursTopMargin(binding.weekTopHolder.height)
|
||||
checkScrollLimits(scrollView.scrollY)
|
||||
|
||||
// fix some glitches like at swiping from a fully scaled out fragment with all-day events to an empty one
|
||||
val fullFragmentHeight = (listener?.getFullFragmentHeight() ?: 0) - mView.week_top_holder.height
|
||||
val fullFragmentHeight = (listener?.getFullFragmentHeight() ?: 0) - binding.weekTopHolder.height
|
||||
if (scrollView.height < fullFragmentHeight) {
|
||||
config.weeklyViewItemHeightMultiplier = fullFragmentHeight / 24 / defaultRowHeight
|
||||
updateViewScale()
|
||||
@@ -197,11 +190,11 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
|
||||
private fun addDayColumns() {
|
||||
mView.week_events_columns_holder.removeAllViews()
|
||||
binding.weekEventsColumnsHolder.removeAllViews()
|
||||
(0 until config.weeklyViewDays).forEach {
|
||||
val column = inflater.inflate(R.layout.weekly_view_day_column, mView.week_events_columns_holder, false) as RelativeLayout
|
||||
val column = WeeklyViewDayColumnBinding.inflate(layoutInflater, binding.weekEventsColumnsHolder, false).root
|
||||
column.tag = Formatter.getDayCodeFromTS(weekTimestamp + it * DAY_SECONDS)
|
||||
mView.week_events_columns_holder.addView(column)
|
||||
binding.weekEventsColumnsHolder.addView(column)
|
||||
dayColumns.add(column)
|
||||
}
|
||||
}
|
||||
@@ -213,20 +206,20 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
val dayWidth = screenWidth / config.weeklyViewDays
|
||||
val useLongerDayLabels = dayWidth > res.getDimension(R.dimen.weekly_view_min_day_label)
|
||||
|
||||
mView.week_letters_holder.removeAllViews()
|
||||
binding.weekLettersHolder.removeAllViews()
|
||||
for (i in 0 until config.weeklyViewDays) {
|
||||
val dayCode = Formatter.getDayCodeFromDateTime(curDay)
|
||||
val labelIDs = if (useLongerDayLabels) {
|
||||
R.array.week_days_short
|
||||
com.simplemobiletools.commons.R.array.week_days_short
|
||||
} else {
|
||||
R.array.week_day_letters
|
||||
com.simplemobiletools.commons.R.array.week_day_letters
|
||||
}
|
||||
|
||||
val dayLetters = res.getStringArray(labelIDs).toMutableList() as ArrayList<String>
|
||||
val dayLetter = dayLetters[curDay.dayOfWeek - 1]
|
||||
|
||||
val textColor = if (isPrintVersion) {
|
||||
resources.getColor(R.color.theme_light_text_color)
|
||||
resources.getColor(com.simplemobiletools.commons.R.color.theme_light_text_color)
|
||||
} else if (todayCode == dayCode) {
|
||||
primaryColor
|
||||
} else if (highlightWeekends && isWeekend(curDay.dayOfWeek)) {
|
||||
@@ -235,14 +228,14 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
requireContext().getProperTextColor()
|
||||
}
|
||||
|
||||
val label = inflater.inflate(R.layout.weekly_view_day_letter, mView.week_letters_holder, false) as MyTextView
|
||||
val label = WeeklyViewDayLetterBinding.inflate(layoutInflater, binding.weekLettersHolder, false).root
|
||||
label.text = "$dayLetter\n${curDay.dayOfMonth}"
|
||||
label.setTextColor(textColor)
|
||||
if (todayCode == dayCode) {
|
||||
todayColumnIndex = i
|
||||
}
|
||||
|
||||
mView.week_letters_holder.addView(label)
|
||||
binding.weekLettersHolder.addView(label)
|
||||
curDay = curDay.plusDays(1)
|
||||
}
|
||||
}
|
||||
@@ -259,25 +252,26 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
layout.removeAllViews()
|
||||
val gestureDetector = getViewGestureDetector(layout, index)
|
||||
|
||||
layout.setOnTouchListener { view, motionEvent ->
|
||||
layout.setOnTouchListener { _, motionEvent ->
|
||||
gestureDetector.onTouchEvent(motionEvent)
|
||||
true
|
||||
}
|
||||
|
||||
layout.setOnDragListener { view, dragEvent ->
|
||||
layout.setOnDragListener { _, dragEvent ->
|
||||
when (dragEvent.action) {
|
||||
DragEvent.ACTION_DRAG_STARTED -> dragEvent.clipDescription.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)
|
||||
DragEvent.ACTION_DRAG_ENTERED,
|
||||
DragEvent.ACTION_DRAG_EXITED,
|
||||
DragEvent.ACTION_DRAG_LOCATION,
|
||||
DragEvent.ACTION_DRAG_ENDED -> true
|
||||
|
||||
DragEvent.ACTION_DROP -> {
|
||||
try {
|
||||
val (eventId, originalStartTS, originalEndTS) = dragEvent.clipData.getItemAt(0).text.toString().split(";").map { it.toLong() }
|
||||
val startHour = (dragEvent.y / rowHeight).toInt()
|
||||
ensureBackgroundThread {
|
||||
val event = context?.eventsDB?.getEventOrTaskWithId(eventId)
|
||||
event?.let { event ->
|
||||
event?.let {
|
||||
val currentStartTime = Formatter.getDateTimeFromTS(event.startTS)
|
||||
val startTime = Formatter.getDateTimeFromTS(weekTimestamp + index * DAY_SECONDS)
|
||||
.withTime(
|
||||
@@ -302,17 +296,20 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
null -> {
|
||||
revertDraggedEvent()
|
||||
}
|
||||
|
||||
EDIT_SELECTED_OCCURRENCE -> {
|
||||
context?.eventsHelper?.editSelectedOccurrence(newEvent, false) {
|
||||
updateCalendar()
|
||||
}
|
||||
}
|
||||
|
||||
EDIT_FUTURE_OCCURRENCES -> {
|
||||
context?.eventsHelper?.editFutureOccurrences(newEvent, originalStartTS, false) {
|
||||
// we need to refresh all fragments because they can contain future occurrences
|
||||
(activity as MainActivity).refreshItems()
|
||||
}
|
||||
}
|
||||
|
||||
EDIT_ALL_OCCURRENCES -> {
|
||||
context?.eventsHelper?.editAllOccurrences(newEvent, originalStartTS, originalEndTS, false) {
|
||||
(activity as MainActivity).refreshItems()
|
||||
@@ -337,6 +334,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
@@ -357,7 +355,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
selectedGrid?.beGone()
|
||||
|
||||
val hour = (event.y / rowHeight).toInt()
|
||||
selectedGrid = (inflater.inflate(R.layout.week_grid_item, null, false) as ImageView).apply {
|
||||
selectedGrid = WeekGridItemBinding.inflate(layoutInflater).root.apply {
|
||||
view.addView(this)
|
||||
background = ColorDrawable(primaryColor)
|
||||
layoutParams.width = view.width
|
||||
@@ -469,11 +467,11 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
private fun updateViewScale() {
|
||||
rowHeight = context?.getWeeklyViewItemHeight() ?: return
|
||||
|
||||
val oneDp = res.getDimension(R.dimen.one_dp).toInt()
|
||||
val oneDp = res.getDimension(com.simplemobiletools.commons.R.dimen.one_dp).toInt()
|
||||
val fullHeight = max(rowHeight.toInt() * 24, scrollView.height + oneDp)
|
||||
scrollView.layoutParams.height = fullHeight - oneDp
|
||||
mView.week_horizontal_grid_holder.layoutParams.height = fullHeight
|
||||
mView.week_events_columns_holder.layoutParams.height = fullHeight
|
||||
binding.weekHorizontalGridHolder.layoutParams.height = fullHeight
|
||||
binding.weekEventsColumnsHolder.layoutParams.height = fullHeight
|
||||
addEvents(currEvents)
|
||||
}
|
||||
|
||||
@@ -483,7 +481,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
allDayRows.clear()
|
||||
eventTimeRanges.clear()
|
||||
allDayRows.add(HashSet())
|
||||
week_all_day_holder?.removeAllViews()
|
||||
binding.weekAllDayHolder.removeAllViews()
|
||||
addNewLine()
|
||||
allDayEventToRow.clear()
|
||||
|
||||
@@ -538,7 +536,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
for ((eventId, eventWeeklyView) in eventDayList) {
|
||||
if (eventWeeklyView.slot == 0) {
|
||||
eventWeeklyView.slot = 1
|
||||
eventWeeklyView.slot_max = 1
|
||||
eventWeeklyView.slotMax = 1
|
||||
}
|
||||
|
||||
eventsCollisionChecked.add(eventId)
|
||||
@@ -554,8 +552,8 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
|
||||
if (areTouching && doHaveCommonMinutes) {
|
||||
if (eventWeeklyViewToCheck.slot == 0) {
|
||||
val nextSlot = eventWeeklyView.slot_max + 1
|
||||
val slotRange = Array(eventWeeklyView.slot_max) { it + 1 }
|
||||
val nextSlot = eventWeeklyView.slotMax + 1
|
||||
val slotRange = Array(eventWeeklyView.slotMax) { it + 1 }
|
||||
val collisionEventWeeklyViews = eventDayList.filter { eventWeeklyView.collisions.contains(it.key) }
|
||||
for ((_, collisionEventWeeklyView) in collisionEventWeeklyViews) {
|
||||
if (collisionEventWeeklyView.range.intersects(eventWeeklyViewToCheck.range)) {
|
||||
@@ -566,13 +564,13 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
val slot = slotRange.minOrNull()
|
||||
eventWeeklyViewToCheck.slot = slot!!
|
||||
if (slot == nextSlot) {
|
||||
eventWeeklyViewToCheck.slot_max = nextSlot
|
||||
eventWeeklyView.slot_max = nextSlot
|
||||
eventWeeklyViewToCheck.slotMax = nextSlot
|
||||
eventWeeklyView.slotMax = nextSlot
|
||||
for ((_, collisionEventWeeklyView) in collisionEventWeeklyViews) {
|
||||
collisionEventWeeklyView.slot_max++
|
||||
collisionEventWeeklyView.slotMax++
|
||||
}
|
||||
} else {
|
||||
eventWeeklyViewToCheck.slot_max = eventWeeklyView.slot_max
|
||||
eventWeeklyViewToCheck.slotMax = eventWeeklyView.slotMax
|
||||
}
|
||||
}
|
||||
eventWeeklyView.collisions.add(toCheckId)
|
||||
@@ -606,7 +604,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
|
||||
val dayColumn = dayColumns[dayOfWeek]
|
||||
(inflater.inflate(R.layout.week_event_marker, null, false) as ConstraintLayout).apply {
|
||||
WeekEventMarkerBinding.inflate(layoutInflater).apply {
|
||||
var backgroundColor = if (event.color == 0) {
|
||||
eventTypeColors.get(event.eventType, primaryColor)
|
||||
} else {
|
||||
@@ -626,19 +624,19 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
textColor = textColor.adjustAlpha(HIGHER_ALPHA)
|
||||
}
|
||||
|
||||
background = ColorDrawable(backgroundColor)
|
||||
dayColumn.addView(this)
|
||||
y = currentEventWeeklyView!!.range.lower * minuteHeight
|
||||
root.background = ColorDrawable(backgroundColor)
|
||||
dayColumn.addView(root)
|
||||
root.y = currentEventWeeklyView!!.range.lower * minuteHeight
|
||||
|
||||
// compensate grid offset
|
||||
y -= (currentEventWeeklyView.range.lower / 60) / 2
|
||||
root.y -= (currentEventWeeklyView.range.lower / 60) / 2
|
||||
|
||||
week_event_task_image.beVisibleIf(event.isTask())
|
||||
weekEventTaskImage.beVisibleIf(event.isTask())
|
||||
if (event.isTask()) {
|
||||
week_event_task_image.applyColorFilter(textColor)
|
||||
weekEventTaskImage.applyColorFilter(textColor)
|
||||
}
|
||||
|
||||
week_event_label.apply {
|
||||
weekEventLabel.apply {
|
||||
setTextColor(textColor)
|
||||
maxLines = if (event.isTask() || event.startTS == event.endTS) {
|
||||
1
|
||||
@@ -657,16 +655,16 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
}
|
||||
|
||||
(layoutParams as RelativeLayout.LayoutParams).apply {
|
||||
width = (dayColumn.width - 1) / currentEventWeeklyView.slot_max
|
||||
x = (width * (currentEventWeeklyView.slot - 1)).toFloat()
|
||||
(root.layoutParams as RelativeLayout.LayoutParams).apply {
|
||||
width = (dayColumn.width - 1) / currentEventWeeklyView.slotMax
|
||||
root.x = (width * (currentEventWeeklyView.slot - 1)).toFloat()
|
||||
if (currentEventWeeklyView.slot > 1) {
|
||||
x += density
|
||||
root.x += density
|
||||
width -= density
|
||||
}
|
||||
}
|
||||
|
||||
setOnClickListener {
|
||||
root.setOnClickListener {
|
||||
Intent(context, getActivityToOpen(event.isTask())).apply {
|
||||
putExtra(EVENT_ID, event.id!!)
|
||||
putExtra(EVENT_OCCURRENCE_TS, event.startTS)
|
||||
@@ -675,7 +673,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
}
|
||||
|
||||
setOnLongClickListener { view ->
|
||||
root.setOnLongClickListener { view ->
|
||||
currentlyDraggedView = view
|
||||
val shadowBuilder = View.DragShadowBuilder(view)
|
||||
val clipData = ClipData.newPlainText(WEEKLY_EVENT_ID_LABEL, "${event.id};${event.startTS};${event.endTS}")
|
||||
@@ -687,7 +685,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
true
|
||||
}
|
||||
|
||||
setOnDragListener(DragListener())
|
||||
root.setOnDragListener(DragListener())
|
||||
}
|
||||
|
||||
currentDateTime = currentDateTime.plusDays(1)
|
||||
@@ -701,8 +699,8 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
|
||||
private fun addNewLine() {
|
||||
val allDaysLine = inflater.inflate(R.layout.all_day_events_holder_line, null, false) as RelativeLayout
|
||||
week_all_day_holder?.addView(allDaysLine)
|
||||
val allDaysLine = AllDayEventsHolderLineBinding.inflate(layoutInflater).root
|
||||
binding.weekAllDayHolder.addView(allDaysLine)
|
||||
allDayHolders.add(allDaysLine)
|
||||
}
|
||||
|
||||
@@ -716,7 +714,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
|
||||
if (currentTimeView != null) {
|
||||
mView.week_events_holder.removeView(currentTimeView)
|
||||
binding.weekEventsHolder.removeView(currentTimeView)
|
||||
}
|
||||
|
||||
if (isPrintVersion) {
|
||||
@@ -724,21 +722,21 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
|
||||
val weeklyViewDays = config.weeklyViewDays
|
||||
currentTimeView = (inflater.inflate(R.layout.week_now_marker, null, false) as ImageView).apply {
|
||||
currentTimeView = WeekNowMarkerBinding.inflate(layoutInflater).root.apply {
|
||||
applyColorFilter(primaryColor)
|
||||
mView.week_events_holder.addView(this, 0)
|
||||
val extraWidth = res.getDimension(R.dimen.activity_margin).toInt()
|
||||
binding.weekEventsHolder.addView(this, 0)
|
||||
val extraWidth = res.getDimension(com.simplemobiletools.commons.R.dimen.activity_margin).toInt()
|
||||
val markerHeight = res.getDimension(R.dimen.weekly_view_now_height).toInt()
|
||||
val minuteHeight = rowHeight / 60
|
||||
(layoutParams as RelativeLayout.LayoutParams).apply {
|
||||
width = (mView.width / weeklyViewDays) + extraWidth
|
||||
width = (binding.root.width / weeklyViewDays) + extraWidth
|
||||
height = markerHeight
|
||||
}
|
||||
|
||||
x = if (weeklyViewDays == 1) {
|
||||
0f
|
||||
} else {
|
||||
(mView.width / weeklyViewDays * todayColumnIndex).toFloat() - extraWidth / 2f
|
||||
(binding.root.width / weeklyViewDays * todayColumnIndex).toFloat() - extraWidth / 2f
|
||||
}
|
||||
|
||||
y = minutes * minuteHeight - markerHeight / 2
|
||||
@@ -747,9 +745,9 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
|
||||
private fun checkTopHolderHeight() {
|
||||
mView.week_top_holder.onGlobalLayout {
|
||||
binding.weekTopHolder.onGlobalLayout {
|
||||
if (isFragmentVisible && activity != null && !mWasDestroyed) {
|
||||
listener?.updateHoursTopMargin(mView.week_top_holder.height)
|
||||
listener?.updateHoursTopMargin(binding.weekTopHolder.height)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -762,7 +760,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
private fun addAllDayEvent(event: Event) {
|
||||
(inflater.inflate(R.layout.week_all_day_event_marker, null, false) as ConstraintLayout).apply {
|
||||
WeekAllDayEventMarkerBinding.inflate(layoutInflater).apply {
|
||||
var backgroundColor = if (event.color == 0) {
|
||||
eventTypeColors.get(event.eventType, primaryColor)
|
||||
} else {
|
||||
@@ -781,9 +779,9 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
textColor = textColor.adjustAlpha(HIGHER_ALPHA)
|
||||
}
|
||||
|
||||
background = ColorDrawable(backgroundColor)
|
||||
root.background = ColorDrawable(backgroundColor)
|
||||
|
||||
week_event_label.apply {
|
||||
weekEventLabel.apply {
|
||||
setTextColor(textColor)
|
||||
maxLines = if (event.isTask()) 1 else 2
|
||||
text = event.title
|
||||
@@ -791,9 +789,9 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
contentDescription = text
|
||||
}
|
||||
|
||||
week_event_task_image.beVisibleIf(event.isTask())
|
||||
weekEventTaskImage.beVisibleIf(event.isTask())
|
||||
if (event.isTask()) {
|
||||
week_event_task_image.applyColorFilter(textColor)
|
||||
weekEventTaskImage.applyColorFilter(textColor)
|
||||
}
|
||||
|
||||
val startDateTime = Formatter.getDateTimeFromTS(event.startTS)
|
||||
@@ -870,9 +868,9 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
return
|
||||
}
|
||||
|
||||
allDayHolders[drawAtLine].addView(this)
|
||||
val dayWidth = mView.width / config.weeklyViewDays
|
||||
(layoutParams as RelativeLayout.LayoutParams).apply {
|
||||
allDayHolders[drawAtLine].addView(root)
|
||||
val dayWidth = binding.root.width / config.weeklyViewDays
|
||||
(root.layoutParams as RelativeLayout.LayoutParams).apply {
|
||||
leftMargin = dayOfWeek * dayWidth
|
||||
bottomMargin = 1
|
||||
width = (dayWidth) * (daysCnt + 1)
|
||||
@@ -880,7 +878,7 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
|
||||
calculateExtraHeight()
|
||||
|
||||
setOnClickListener {
|
||||
root.setOnClickListener {
|
||||
Intent(context, getActivityToOpen(event.isTask())).apply {
|
||||
putExtra(EVENT_ID, event.id)
|
||||
putExtra(EVENT_OCCURRENCE_TS, event.startTS)
|
||||
@@ -892,10 +890,10 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
}
|
||||
|
||||
private fun calculateExtraHeight() {
|
||||
mView.week_top_holder.onGlobalLayout {
|
||||
binding.weekTopHolder.onGlobalLayout {
|
||||
if (activity != null && !mWasDestroyed) {
|
||||
if (isFragmentVisible) {
|
||||
listener?.updateHoursTopMargin(mView.week_top_holder.height)
|
||||
listener?.updateHoursTopMargin(binding.weekTopHolder.height)
|
||||
}
|
||||
|
||||
if (!wasExtraHeightAdded) {
|
||||
@@ -938,12 +936,14 @@ class WeekFragment : Fragment(), WeeklyCalendar {
|
||||
view.beVisible()
|
||||
true
|
||||
}
|
||||
|
||||
DragEvent.ACTION_DRAG_ENDED -> {
|
||||
if (!dragEvent.result) {
|
||||
view.beVisible()
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
@@ -11,9 +11,10 @@ import android.widget.DatePicker
|
||||
import android.widget.RelativeLayout
|
||||
import android.widget.TextView
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.pro.adapters.MyWeekPagerAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.FragmentWeekHolderBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.WeeklyViewHourTextviewBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.*
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
import com.simplemobiletools.calendar.pro.helpers.WEEKLY_VIEW
|
||||
@@ -23,15 +24,14 @@ import com.simplemobiletools.calendar.pro.views.MyScrollView
|
||||
import com.simplemobiletools.commons.extensions.*
|
||||
import com.simplemobiletools.commons.helpers.WEEK_SECONDS
|
||||
import com.simplemobiletools.commons.views.MyViewPager
|
||||
import kotlinx.android.synthetic.main.fragment_week_holder.view.*
|
||||
import org.joda.time.DateTime
|
||||
|
||||
class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
private val PREFILLED_WEEKS = 151
|
||||
private val MAX_SEEKBAR_VALUE = 14
|
||||
|
||||
private var viewPager: MyViewPager? = null
|
||||
private var weekHolder: ViewGroup? = null
|
||||
private lateinit var binding: FragmentWeekHolderBinding
|
||||
private lateinit var viewPager: MyViewPager
|
||||
private var defaultWeeklyPage = 0
|
||||
private var thisWeekTS = 0L
|
||||
private var currentWeekTS = 0L
|
||||
@@ -47,27 +47,27 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
thisWeekTS = DateTime.parse(requireContext().getFirstDayOfWeek(DateTime())).seconds()
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
val textColor = requireContext().getProperTextColor()
|
||||
weekHolder = inflater.inflate(R.layout.fragment_week_holder, container, false) as ViewGroup
|
||||
weekHolder!!.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
weekHolder!!.week_view_month_label.setTextColor(textColor)
|
||||
weekHolder!!.week_view_week_number.setTextColor(textColor)
|
||||
binding = FragmentWeekHolderBinding.inflate(inflater, container, false)
|
||||
binding.root.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
binding.weekViewMonthLabel.setTextColor(textColor)
|
||||
binding.weekViewWeekNumber.setTextColor(textColor)
|
||||
|
||||
val itemHeight = requireContext().getWeeklyViewItemHeight().toInt()
|
||||
weekHolder!!.week_view_hours_holder.setPadding(0, 0, 0, itemHeight)
|
||||
binding.weekViewHoursHolder.setPadding(0, 0, 0, itemHeight)
|
||||
|
||||
viewPager = weekHolder!!.week_view_view_pager
|
||||
viewPager!!.id = (System.currentTimeMillis() % 100000).toInt()
|
||||
viewPager = binding.weekViewViewPager
|
||||
viewPager.id = (System.currentTimeMillis() % 100000).toInt()
|
||||
setupFragment()
|
||||
return weekHolder
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
context?.config?.allowCustomizeDayCount?.let { allow ->
|
||||
weekHolder!!.week_view_days_count.beVisibleIf(allow)
|
||||
weekHolder!!.week_view_seekbar.beVisibleIf(allow)
|
||||
binding.weekViewDaysCount.beVisibleIf(allow)
|
||||
binding.weekViewSeekbar.beVisibleIf(allow)
|
||||
}
|
||||
setupSeekbar()
|
||||
}
|
||||
@@ -76,9 +76,9 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
addHours()
|
||||
setupWeeklyViewPager()
|
||||
|
||||
weekHolder!!.week_view_hours_scrollview.setOnTouchListener { view, motionEvent -> true }
|
||||
binding.weekViewHoursScrollview.setOnTouchListener { _, _ -> true }
|
||||
|
||||
weekHolder!!.week_view_seekbar.apply {
|
||||
binding.weekViewSeekbar.apply {
|
||||
progress = context?.config?.weeklyViewDays ?: 7
|
||||
max = MAX_SEEKBAR_VALUE
|
||||
|
||||
@@ -100,7 +100,7 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
|
||||
defaultWeeklyPage = weekTSs.size / 2
|
||||
|
||||
viewPager!!.apply {
|
||||
viewPager.apply {
|
||||
adapter = weeklyAdapter
|
||||
addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
|
||||
override fun onPageScrollStateChanged(state: Int) {}
|
||||
@@ -121,25 +121,25 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
currentItem = defaultWeeklyPage
|
||||
}
|
||||
|
||||
weekHolder!!.week_view_hours_scrollview.setOnScrollviewListener(object : MyScrollView.ScrollViewListener {
|
||||
binding.weekViewHoursScrollview.setOnScrollviewListener(object : MyScrollView.ScrollViewListener {
|
||||
override fun onScrollChanged(scrollView: MyScrollView, x: Int, y: Int, oldx: Int, oldy: Int) {
|
||||
weekScrollY = y
|
||||
weeklyAdapter.updateScrollY(viewPager!!.currentItem, y)
|
||||
weeklyAdapter.updateScrollY(viewPager.currentItem, y)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun addHours(textColor: Int = requireContext().getProperTextColor()) {
|
||||
val itemHeight = requireContext().getWeeklyViewItemHeight().toInt()
|
||||
weekHolder!!.week_view_hours_holder.removeAllViews()
|
||||
binding.weekViewHoursHolder.removeAllViews()
|
||||
val hourDateTime = DateTime().withDate(2000, 1, 1).withTime(0, 0, 0, 0)
|
||||
for (i in 1..23) {
|
||||
val formattedHours = Formatter.getTime(requireContext(), hourDateTime.withHourOfDay(i))
|
||||
(layoutInflater.inflate(R.layout.weekly_view_hour_textview, null, false) as TextView).apply {
|
||||
WeeklyViewHourTextviewBinding.inflate(layoutInflater).root.apply {
|
||||
text = formattedHours
|
||||
setTextColor(textColor)
|
||||
height = itemHeight
|
||||
weekHolder!!.week_view_hours_holder.addView(this)
|
||||
binding.weekViewHoursHolder.addView(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -159,9 +159,9 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
private fun setupWeeklyActionbarTitle(timestamp: Long) {
|
||||
val startDateTime = Formatter.getDateTimeFromTS(timestamp)
|
||||
val month = Formatter.getShortMonthName(requireContext(), startDateTime.monthOfYear)
|
||||
weekHolder!!.week_view_month_label.text = month
|
||||
binding.weekViewMonthLabel.text = month
|
||||
val weekNumber = startDateTime.plusDays(3).weekOfWeekyear
|
||||
weekHolder!!.week_view_week_number.text = "${getString(R.string.week_number_short)} $weekNumber"
|
||||
binding.weekViewWeekNumber.text = "${getString(com.simplemobiletools.commons.R.string.week_number_short)} $weekNumber"
|
||||
}
|
||||
|
||||
override fun goToToday() {
|
||||
@@ -174,17 +174,15 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
return
|
||||
}
|
||||
|
||||
val view = layoutInflater.inflate(getDatePickerDialogStyle(), null)
|
||||
val datePicker = view.findViewById<DatePicker>(R.id.date_picker)
|
||||
|
||||
val datePicker = getDatePickerView()
|
||||
val dateTime = getCurrentDate()!!
|
||||
datePicker.init(dateTime.year, dateTime.monthOfYear - 1, dateTime.dayOfMonth, null)
|
||||
|
||||
activity?.getAlertDialogBuilder()!!
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.ok) { dialog, which -> dateSelected(dateTime, datePicker) }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> dateSelected(dateTime, datePicker) }
|
||||
.apply {
|
||||
activity?.setupDialogStuff(view, this)
|
||||
activity?.setupDialogStuff(datePicker, this)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,14 +201,15 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
}
|
||||
|
||||
// avoid seekbar width changing if the days count changes to 1, 10 etc
|
||||
weekHolder!!.week_view_days_count.onGlobalLayout {
|
||||
if (weekHolder!!.week_view_seekbar.width != 0) {
|
||||
weekHolder!!.week_view_seekbar.layoutParams.width = weekHolder!!.week_view_seekbar.width
|
||||
binding.weekViewDaysCount.onGlobalLayout {
|
||||
if (binding.weekViewSeekbar.width != 0) {
|
||||
binding.weekViewSeekbar.layoutParams.width = binding.weekViewSeekbar.width
|
||||
}
|
||||
(weekHolder!!.week_view_seekbar.layoutParams as RelativeLayout.LayoutParams).removeRule(RelativeLayout.START_OF)
|
||||
(binding.weekViewSeekbar.layoutParams as RelativeLayout.LayoutParams).removeRule(RelativeLayout.START_OF)
|
||||
}
|
||||
|
||||
updateDaysCount(context?.config?.weeklyViewDays ?: 7)
|
||||
binding.weekViewDaysCount.setTextColor(requireContext().getProperTextColor())
|
||||
}
|
||||
|
||||
private fun updateWeeklyViewDays(days: Int) {
|
||||
@@ -220,11 +219,11 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
}
|
||||
|
||||
private fun updateDaysCount(cnt: Int) {
|
||||
weekHolder!!.week_view_days_count.text = requireContext().resources.getQuantityString(R.plurals.days, cnt, cnt)
|
||||
binding.weekViewDaysCount.text = requireContext().resources.getQuantityString(com.simplemobiletools.commons.R.plurals.days, cnt, cnt)
|
||||
}
|
||||
|
||||
override fun refreshEvents() {
|
||||
(viewPager?.adapter as? MyWeekPagerAdapter)?.updateCalendars(viewPager!!.currentItem)
|
||||
(viewPager.adapter as? MyWeekPagerAdapter)?.updateCalendars(viewPager.currentItem)
|
||||
}
|
||||
|
||||
override fun shouldGoToTodayBeVisible() = currentWeekTS != thisWeekTS
|
||||
@@ -239,16 +238,16 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
}
|
||||
|
||||
override fun scrollTo(y: Int) {
|
||||
weekHolder!!.week_view_hours_scrollview.scrollY = y
|
||||
binding.weekViewHoursScrollview.scrollY = y
|
||||
weekScrollY = y
|
||||
}
|
||||
|
||||
override fun updateHoursTopMargin(margin: Int) {
|
||||
weekHolder?.apply {
|
||||
week_view_hours_divider?.layoutParams?.height = margin
|
||||
week_view_hours_scrollview?.requestLayout()
|
||||
week_view_hours_scrollview?.onGlobalLayout {
|
||||
week_view_hours_scrollview.scrollY = weekScrollY
|
||||
binding.apply {
|
||||
weekViewHoursDivider.layoutParams?.height = margin
|
||||
weekViewHoursScrollview.requestLayout()
|
||||
weekViewHoursScrollview.onGlobalLayout {
|
||||
weekViewHoursScrollview.scrollY = weekScrollY
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -256,43 +255,43 @@ class WeekFragmentsHolder : MyFragmentHolder(), WeekFragmentListener {
|
||||
override fun getCurrScrollY() = weekScrollY
|
||||
|
||||
override fun updateRowHeight(rowHeight: Int) {
|
||||
val childCnt = weekHolder!!.week_view_hours_holder.childCount
|
||||
val childCnt = binding.weekViewHoursHolder.childCount
|
||||
for (i in 0..childCnt) {
|
||||
val textView = weekHolder!!.week_view_hours_holder.getChildAt(i) as? TextView ?: continue
|
||||
val textView = binding.weekViewHoursHolder.getChildAt(i) as? TextView ?: continue
|
||||
textView.layoutParams.height = rowHeight
|
||||
}
|
||||
|
||||
weekHolder!!.week_view_hours_holder.setPadding(0, 0, 0, rowHeight)
|
||||
(viewPager!!.adapter as? MyWeekPagerAdapter)?.updateNotVisibleScaleLevel(viewPager!!.currentItem)
|
||||
binding.weekViewHoursHolder.setPadding(0, 0, 0, rowHeight)
|
||||
(viewPager.adapter as? MyWeekPagerAdapter)?.updateNotVisibleScaleLevel(viewPager.currentItem)
|
||||
}
|
||||
|
||||
override fun getFullFragmentHeight() =
|
||||
weekHolder!!.week_view_holder.height - weekHolder!!.week_view_seekbar.height - weekHolder!!.week_view_days_count_divider.height
|
||||
binding.weekViewHolder.height - binding.weekViewSeekbar.height - binding.weekViewDaysCountDivider.height
|
||||
|
||||
override fun printView() {
|
||||
val lightTextColor = resources.getColor(R.color.theme_light_text_color)
|
||||
weekHolder!!.apply {
|
||||
week_view_days_count_divider.beGone()
|
||||
week_view_seekbar.beGone()
|
||||
week_view_days_count.beGone()
|
||||
val lightTextColor = resources.getColor(com.simplemobiletools.commons.R.color.theme_light_text_color)
|
||||
binding.apply {
|
||||
weekViewDaysCountDivider.beGone()
|
||||
weekViewSeekbar.beGone()
|
||||
weekViewDaysCount.beGone()
|
||||
addHours(lightTextColor)
|
||||
week_view_week_number.setTextColor(lightTextColor)
|
||||
week_view_month_label.setTextColor(lightTextColor)
|
||||
background = ColorDrawable(Color.WHITE)
|
||||
(viewPager?.adapter as? MyWeekPagerAdapter)?.togglePrintMode(viewPager?.currentItem ?: 0)
|
||||
weekViewWeekNumber.setTextColor(lightTextColor)
|
||||
weekViewMonthLabel.setTextColor(lightTextColor)
|
||||
root.background = ColorDrawable(Color.WHITE)
|
||||
(viewPager.adapter as? MyWeekPagerAdapter)?.togglePrintMode(viewPager.currentItem)
|
||||
|
||||
Handler().postDelayed({
|
||||
requireContext().printBitmap(weekHolder!!.week_view_holder.getViewBitmap())
|
||||
requireContext().printBitmap(binding.weekViewHolder.getViewBitmap())
|
||||
|
||||
Handler().postDelayed({
|
||||
week_view_days_count_divider.beVisible()
|
||||
week_view_seekbar.beVisible()
|
||||
week_view_days_count.beVisible()
|
||||
week_view_week_number.setTextColor(requireContext().getProperTextColor())
|
||||
week_view_month_label.setTextColor(requireContext().getProperTextColor())
|
||||
weekViewDaysCountDivider.beVisible()
|
||||
weekViewSeekbar.beVisible()
|
||||
weekViewDaysCount.beVisible()
|
||||
weekViewWeekNumber.setTextColor(requireContext().getProperTextColor())
|
||||
weekViewMonthLabel.setTextColor(requireContext().getProperTextColor())
|
||||
addHours()
|
||||
background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
(viewPager?.adapter as? MyWeekPagerAdapter)?.togglePrintMode(viewPager?.currentItem ?: 0)
|
||||
root.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
(viewPager.adapter as? MyWeekPagerAdapter)?.togglePrintMode(viewPager.currentItem)
|
||||
}, 1000)
|
||||
}, 1000)
|
||||
}
|
||||
|
@@ -5,10 +5,11 @@ import android.util.SparseArray
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.pro.databinding.FragmentYearBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.SmallMonthViewHolderBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.TopNavigationBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.getProperDayIndexInWeek
|
||||
import com.simplemobiletools.calendar.pro.extensions.getViewBitmap
|
||||
@@ -18,16 +19,10 @@ import com.simplemobiletools.calendar.pro.helpers.YearlyCalendarImpl
|
||||
import com.simplemobiletools.calendar.pro.interfaces.NavigationListener
|
||||
import com.simplemobiletools.calendar.pro.interfaces.YearlyCalendar
|
||||
import com.simplemobiletools.calendar.pro.models.DayYearly
|
||||
import com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
import com.simplemobiletools.commons.extensions.applyColorFilter
|
||||
import com.simplemobiletools.commons.extensions.getProperPrimaryColor
|
||||
import com.simplemobiletools.commons.extensions.getProperTextColor
|
||||
import com.simplemobiletools.commons.extensions.updateTextColors
|
||||
import kotlinx.android.synthetic.main.fragment_year.view.calendar_wrapper
|
||||
import kotlinx.android.synthetic.main.fragment_year.view.month_2
|
||||
import kotlinx.android.synthetic.main.top_navigation.view.top_left_arrow
|
||||
import kotlinx.android.synthetic.main.top_navigation.view.top_right_arrow
|
||||
import kotlinx.android.synthetic.main.top_navigation.view.top_value
|
||||
import org.joda.time.DateTime
|
||||
|
||||
class YearFragment : Fragment(), YearlyCalendar {
|
||||
@@ -39,17 +34,44 @@ class YearFragment : Fragment(), YearlyCalendar {
|
||||
|
||||
var listener: NavigationListener? = null
|
||||
|
||||
lateinit var mView: View
|
||||
private lateinit var binding: FragmentYearBinding
|
||||
private lateinit var topNavigationBinding: TopNavigationBinding
|
||||
private lateinit var monthHolders: List<SmallMonthViewHolderBinding>
|
||||
|
||||
private val monthResIds = arrayOf(
|
||||
com.simplemobiletools.commons.R.string.january,
|
||||
com.simplemobiletools.commons.R.string.february,
|
||||
com.simplemobiletools.commons.R.string.march,
|
||||
com.simplemobiletools.commons.R.string.april,
|
||||
com.simplemobiletools.commons.R.string.may,
|
||||
com.simplemobiletools.commons.R.string.june,
|
||||
com.simplemobiletools.commons.R.string.july,
|
||||
com.simplemobiletools.commons.R.string.august,
|
||||
com.simplemobiletools.commons.R.string.september,
|
||||
com.simplemobiletools.commons.R.string.october,
|
||||
com.simplemobiletools.commons.R.string.november,
|
||||
com.simplemobiletools.commons.R.string.december
|
||||
)
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
binding = FragmentYearBinding.inflate(inflater, container, false)
|
||||
topNavigationBinding = TopNavigationBinding.bind(binding.root)
|
||||
monthHolders = arrayListOf(
|
||||
binding.month1Holder, binding.month2Holder, binding.month3Holder, binding.month4Holder, binding.month5Holder, binding.month6Holder,
|
||||
binding.month7Holder, binding.month8Holder, binding.month9Holder, binding.month10Holder, binding.month11Holder, binding.month12Holder
|
||||
).apply {
|
||||
forEachIndexed { index, it ->
|
||||
it.monthLabel.text = getString(monthResIds[index])
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
mView = inflater.inflate(R.layout.fragment_year, container, false)
|
||||
mYear = requireArguments().getInt(YEAR_LABEL)
|
||||
requireContext().updateTextColors(mView.calendar_wrapper)
|
||||
requireContext().updateTextColors(binding.calendarWrapper)
|
||||
setupMonths()
|
||||
setupButtons()
|
||||
|
||||
mCalendar = YearlyCalendarImpl(this, requireContext(), mYear)
|
||||
return mView
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
@@ -72,61 +94,57 @@ class YearFragment : Fragment(), YearlyCalendar {
|
||||
}
|
||||
|
||||
private fun setupMonths() {
|
||||
val dateTime = DateTime().withDate(mYear, 2, 1).withHourOfDay(12)
|
||||
val days = dateTime.dayOfMonth().maximumValue
|
||||
mView.month_2.setDays(days)
|
||||
|
||||
val now = DateTime()
|
||||
|
||||
for (i in 1..12) {
|
||||
val monthView = mView.findViewById<SmallMonthView>(resources.getIdentifier("month_$i", "id", requireContext().packageName))
|
||||
val dayOfWeek = requireContext().getProperDayIndexInWeek(dateTime.withMonthOfYear(i))
|
||||
val monthLabel = mView.findViewById<TextView>(resources.getIdentifier("month_${i}_label", "id", requireContext().packageName))
|
||||
val dateTime = DateTime().withYear(mYear).withHourOfDay(12)
|
||||
monthHolders.forEachIndexed { index, monthHolder ->
|
||||
val monthOfYear = index + 1
|
||||
val monthView = monthHolder.smallMonthView
|
||||
val curTextColor = when {
|
||||
isPrintVersion -> resources.getColor(R.color.theme_light_text_color)
|
||||
isPrintVersion -> resources.getColor(com.simplemobiletools.commons.R.color.theme_light_text_color)
|
||||
else -> requireContext().getProperTextColor()
|
||||
}
|
||||
|
||||
monthLabel.setTextColor(curTextColor)
|
||||
|
||||
monthView.firstDay = dayOfWeek
|
||||
monthHolder.monthLabel.setTextColor(curTextColor)
|
||||
monthView.firstDay = requireContext().getProperDayIndexInWeek(dateTime.withMonthOfYear(monthOfYear))
|
||||
val numberOfDays = dateTime.withMonthOfYear(monthOfYear).dayOfMonth().maximumValue
|
||||
monthView.setDays(numberOfDays)
|
||||
monthView.setOnClickListener {
|
||||
(activity as MainActivity).openMonthFromYearly(DateTime().withDate(mYear, i, 1))
|
||||
(activity as MainActivity).openMonthFromYearly(DateTime().withDate(mYear, monthOfYear, 1))
|
||||
}
|
||||
}
|
||||
|
||||
if (!isPrintVersion) {
|
||||
val now = DateTime()
|
||||
markCurrentMonth(now)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupButtons() {
|
||||
val textColor = requireContext().getProperTextColor()
|
||||
mView.top_left_arrow.apply {
|
||||
topNavigationBinding.topLeftArrow.apply {
|
||||
applyColorFilter(textColor)
|
||||
background = null
|
||||
setOnClickListener {
|
||||
listener?.goLeft()
|
||||
}
|
||||
|
||||
val pointerLeft = requireContext().getDrawable(R.drawable.ic_chevron_left_vector)
|
||||
val pointerLeft = requireContext().getDrawable(com.simplemobiletools.commons.R.drawable.ic_chevron_left_vector)
|
||||
pointerLeft?.isAutoMirrored = true
|
||||
setImageDrawable(pointerLeft)
|
||||
}
|
||||
|
||||
mView.top_right_arrow.apply {
|
||||
topNavigationBinding.topRightArrow.apply {
|
||||
applyColorFilter(textColor)
|
||||
background = null
|
||||
setOnClickListener {
|
||||
listener?.goRight()
|
||||
}
|
||||
|
||||
val pointerRight = requireContext().getDrawable(R.drawable.ic_chevron_right_vector)
|
||||
val pointerRight = requireContext().getDrawable(com.simplemobiletools.commons.R.drawable.ic_chevron_right_vector)
|
||||
pointerRight?.isAutoMirrored = true
|
||||
setImageDrawable(pointerRight)
|
||||
}
|
||||
|
||||
mView.top_value.apply {
|
||||
topNavigationBinding.topValue.apply {
|
||||
setTextColor(requireContext().getProperTextColor())
|
||||
setOnClickListener {
|
||||
(activity as MainActivity).showGoToDateDialog()
|
||||
@@ -136,11 +154,10 @@ class YearFragment : Fragment(), YearlyCalendar {
|
||||
|
||||
private fun markCurrentMonth(now: DateTime) {
|
||||
if (now.year == mYear) {
|
||||
val monthLabel = mView.findViewById<TextView>(resources.getIdentifier("month_${now.monthOfYear}_label", "id", requireContext().packageName))
|
||||
monthLabel.setTextColor(requireContext().getProperPrimaryColor())
|
||||
|
||||
val monthView = mView.findViewById<SmallMonthView>(resources.getIdentifier("month_${now.monthOfYear}", "id", requireContext().packageName))
|
||||
monthView.todaysId = now.dayOfMonth
|
||||
val monthOfYear = now.monthOfYear
|
||||
val monthHolder = monthHolders[monthOfYear - 1]
|
||||
monthHolder.monthLabel.setTextColor(requireContext().getProperPrimaryColor())
|
||||
monthHolder.smallMonthView.todaysId = now.dayOfMonth
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,13 +171,14 @@ class YearFragment : Fragment(), YearlyCalendar {
|
||||
}
|
||||
|
||||
lastHash = hashCode
|
||||
for (i in 1..12) {
|
||||
val monthView = mView.findViewById<SmallMonthView>(resources.getIdentifier("month_$i", "id", requireContext().packageName))
|
||||
monthView.setEvents(events.get(i))
|
||||
monthHolders.forEachIndexed { index, monthHolder ->
|
||||
val monthView = monthHolder.smallMonthView
|
||||
val monthOfYear = index + 1
|
||||
monthView.setEvents(events.get(monthOfYear))
|
||||
}
|
||||
|
||||
mView.top_value.post {
|
||||
mView.top_value.text = mYear.toString()
|
||||
topNavigationBinding.topValue.post {
|
||||
topNavigationBinding.topValue.text = mYear.toString()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,7 +187,7 @@ class YearFragment : Fragment(), YearlyCalendar {
|
||||
setupMonths()
|
||||
toggleSmallMonthPrintModes()
|
||||
|
||||
requireContext().printBitmap(mView.calendar_wrapper.getViewBitmap())
|
||||
requireContext().printBitmap(binding.calendarWrapper.getViewBitmap())
|
||||
|
||||
isPrintVersion = false
|
||||
setupMonths()
|
||||
@@ -177,9 +195,8 @@ class YearFragment : Fragment(), YearlyCalendar {
|
||||
}
|
||||
|
||||
private fun toggleSmallMonthPrintModes() {
|
||||
for (i in 1..12) {
|
||||
val monthView = mView.findViewById<SmallMonthView>(resources.getIdentifier("month_$i", "id", requireContext().packageName))
|
||||
monthView.togglePrintMode()
|
||||
monthHolders.forEach {
|
||||
it.smallMonthView.togglePrintMode()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -8,9 +8,9 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.DatePicker
|
||||
import androidx.viewpager.widget.ViewPager
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.MainActivity
|
||||
import com.simplemobiletools.calendar.pro.adapters.MyYearPagerAdapter
|
||||
import com.simplemobiletools.calendar.pro.databinding.FragmentYearsHolderBinding
|
||||
import com.simplemobiletools.calendar.pro.helpers.Formatter
|
||||
import com.simplemobiletools.calendar.pro.helpers.YEARLY_VIEW
|
||||
import com.simplemobiletools.calendar.pro.helpers.YEAR_TO_OPEN
|
||||
@@ -20,13 +20,12 @@ import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||
import com.simplemobiletools.commons.extensions.getProperBackgroundColor
|
||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.views.MyViewPager
|
||||
import kotlinx.android.synthetic.main.fragment_years_holder.view.*
|
||||
import org.joda.time.DateTime
|
||||
|
||||
class YearFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
private val PREFILLED_YEARS = 61
|
||||
|
||||
private var viewPager: MyViewPager? = null
|
||||
private lateinit var viewPager: MyViewPager
|
||||
private var defaultYearlyPage = 0
|
||||
private var todayYear = 0
|
||||
private var currentYear = 0
|
||||
@@ -41,13 +40,13 @@ class YearFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
todayYear = DateTime().toString(Formatter.YEAR_PATTERN).toInt()
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
val view = inflater.inflate(R.layout.fragment_years_holder, container, false)
|
||||
view.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
viewPager = view.fragment_years_viewpager
|
||||
viewPager!!.id = (System.currentTimeMillis() % 100000).toInt()
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
val binding = FragmentYearsHolderBinding.inflate(inflater, container, false)
|
||||
binding.root.background = ColorDrawable(requireContext().getProperBackgroundColor())
|
||||
viewPager = binding.fragmentYearsViewpager
|
||||
viewPager.id = (System.currentTimeMillis() % 100000).toInt()
|
||||
setupFragment()
|
||||
return view
|
||||
return binding.root
|
||||
}
|
||||
|
||||
private fun setupFragment() {
|
||||
@@ -55,7 +54,7 @@ class YearFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
val yearlyAdapter = MyYearPagerAdapter(requireActivity().supportFragmentManager, years, this)
|
||||
defaultYearlyPage = years.size / 2
|
||||
|
||||
viewPager?.apply {
|
||||
viewPager.apply {
|
||||
adapter = yearlyAdapter
|
||||
addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
|
||||
override fun onPageScrollStateChanged(state: Int) {}
|
||||
@@ -82,11 +81,11 @@ class YearFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
}
|
||||
|
||||
override fun goLeft() {
|
||||
viewPager!!.currentItem = viewPager!!.currentItem - 1
|
||||
viewPager.currentItem = viewPager.currentItem - 1
|
||||
}
|
||||
|
||||
override fun goRight() {
|
||||
viewPager!!.currentItem = viewPager!!.currentItem + 1
|
||||
viewPager.currentItem = viewPager.currentItem + 1
|
||||
}
|
||||
|
||||
override fun goToDateTime(dateTime: DateTime) {}
|
||||
@@ -101,8 +100,7 @@ class YearFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
return
|
||||
}
|
||||
|
||||
val view = layoutInflater.inflate(getDatePickerDialogStyle(), null)
|
||||
val datePicker = view.findViewById<DatePicker>(R.id.date_picker)
|
||||
val datePicker = getDatePickerView()
|
||||
datePicker.findViewById<View>(Resources.getSystem().getIdentifier("day", "id", "android")).beGone()
|
||||
datePicker.findViewById<View>(Resources.getSystem().getIdentifier("month", "id", "android")).beGone()
|
||||
|
||||
@@ -110,10 +108,10 @@ class YearFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
datePicker.init(dateTime.year, dateTime.monthOfYear - 1, 1, null)
|
||||
|
||||
activity?.getAlertDialogBuilder()!!
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.ok) { dialog, which -> datePicked(datePicker) }
|
||||
.setNegativeButton(com.simplemobiletools.commons.R.string.cancel, null)
|
||||
.setPositiveButton(com.simplemobiletools.commons.R.string.ok) { _, _ -> datePicked(datePicker) }
|
||||
.apply {
|
||||
activity?.setupDialogStuff(view, this)
|
||||
activity?.setupDialogStuff(datePicker, this)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,7 +124,7 @@ class YearFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
}
|
||||
|
||||
override fun refreshEvents() {
|
||||
(viewPager?.adapter as? MyYearPagerAdapter)?.updateCalendars(viewPager?.currentItem ?: 0)
|
||||
(viewPager.adapter as? MyYearPagerAdapter)?.updateCalendars(viewPager.currentItem)
|
||||
}
|
||||
|
||||
override fun shouldGoToTodayBeVisible() = currentYear != todayYear
|
||||
@@ -134,7 +132,7 @@ class YearFragmentsHolder : MyFragmentHolder(), NavigationListener {
|
||||
override fun getNewEventDayCode() = Formatter.getTodayCode()
|
||||
|
||||
override fun printView() {
|
||||
(viewPager?.adapter as? MyYearPagerAdapter)?.printCurrentView(viewPager?.currentItem ?: 0)
|
||||
(viewPager.adapter as? MyYearPagerAdapter)?.printCurrentView(viewPager.currentItem)
|
||||
}
|
||||
|
||||
override fun getCurrentDate() = null
|
||||
|
@@ -298,11 +298,11 @@ class CalDAVHelper(val context: Context) {
|
||||
val offset = DateTimeZone.getDefault().getOffset(System.currentTimeMillis())
|
||||
val dt = formatter.parseDateTime(it).plusMillis(offset)
|
||||
val dayCode = Formatter.getDayCodeFromDateTime(dt)
|
||||
event.repetitionExceptions.add(dayCode)
|
||||
event.addRepetitionException(dayCode)
|
||||
} else {
|
||||
val potentialTS = it.substring(0, 8)
|
||||
if (potentialTS.areDigitsOnly()) {
|
||||
event.repetitionExceptions.add(potentialTS)
|
||||
event.addRepetitionException(potentialTS)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -387,7 +387,7 @@ class CalDAVHelper(val context: Context) {
|
||||
try {
|
||||
context.contentResolver.insert(Reminders.CONTENT_URI, contentValues)
|
||||
} catch (e: Exception) {
|
||||
context.toast(R.string.unknown_error_occurred)
|
||||
context.toast(com.simplemobiletools.commons.R.string.unknown_error_occurred)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -407,7 +407,7 @@ class CalDAVHelper(val context: Context) {
|
||||
try {
|
||||
context.contentResolver.insert(Attendees.CONTENT_URI, contentValues)
|
||||
} catch (e: Exception) {
|
||||
context.toast(R.string.unknown_error_occurred)
|
||||
context.toast(com.simplemobiletools.commons.R.string.unknown_error_occurred)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@ class Converters {
|
||||
private val stringType = object : TypeToken<List<String>>() {}.type
|
||||
|
||||
@TypeConverter
|
||||
fun jsonToStringList(value: String): ArrayList<String> {
|
||||
fun jsonToStringList(value: String): List<String> {
|
||||
val newValue = if (value.isNotEmpty() && !value.startsWith("[")) {
|
||||
"[$value]"
|
||||
} else {
|
||||
@@ -19,10 +19,10 @@ class Converters {
|
||||
return try {
|
||||
gson.fromJson(newValue, stringType)
|
||||
} catch (e: Exception) {
|
||||
ArrayList()
|
||||
emptyList()
|
||||
}
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
fun stringListToJson(list: ArrayList<String>) = gson.toJson(list)
|
||||
fun stringListToJson(list: List<String>) = gson.toJson(list)
|
||||
}
|
||||
|
@@ -1,7 +1,6 @@
|
||||
package com.simplemobiletools.calendar.pro.helpers
|
||||
|
||||
import android.content.Context
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.seconds
|
||||
import org.joda.time.DateTime
|
||||
@@ -108,9 +107,9 @@ object Formatter {
|
||||
fun getUTCDateTimeFromTS(ts: Long) = DateTime(ts * 1000L, DateTimeZone.UTC)
|
||||
|
||||
// use manually translated month names, as DateFormat and Joda have issues with a lot of languages
|
||||
fun getMonthName(context: Context, id: Int) = context.resources.getStringArray(R.array.months)[id - 1]
|
||||
fun getMonthName(context: Context, id: Int) = context.resources.getStringArray(com.simplemobiletools.commons.R.array.months)[id - 1]
|
||||
|
||||
fun getShortMonthName(context: Context, id: Int) = context.resources.getStringArray(R.array.months_short)[id - 1]
|
||||
fun getShortMonthName(context: Context, id: Int) = context.resources.getStringArray(com.simplemobiletools.commons.R.array.months_short)[id - 1]
|
||||
|
||||
fun getHourPattern(context: Context) = if (context.config.use24HourFormat) PATTERN_HOURS_24 else PATTERN_HOURS_12
|
||||
|
||||
|
@@ -43,7 +43,7 @@ class IcsExporter(private val context: Context) {
|
||||
ensureBackgroundThread {
|
||||
calendars = context.calDAVHelper.getCalDAVCalendars("", false)
|
||||
if (showExportingToast) {
|
||||
context.toast(R.string.exporting)
|
||||
context.toast(com.simplemobiletools.commons.R.string.exporting)
|
||||
}
|
||||
|
||||
object : BufferedWriter(OutputStreamWriter(outputStream, Charsets.UTF_8)) {
|
||||
|
@@ -1,7 +1,6 @@
|
||||
package com.simplemobiletools.calendar.pro.helpers
|
||||
|
||||
import android.provider.CalendarContract.Events
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventsDB
|
||||
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
|
||||
@@ -117,7 +116,7 @@ class IcsImporter(val activity: SimpleActivity) {
|
||||
} else if (line.startsWith(DESCRIPTION) && !isNotificationDescription) {
|
||||
val match = DESCRIPTION_REGEX.matchEntire(line)
|
||||
if (match != null) {
|
||||
curDescription = match.groups[1]!!.value.replace("\\n", "\n").replace("\\,", ",") ?: ""
|
||||
curDescription = match.groups[1]!!.value.replace("\\n", "\n").replace("\\,", ",")
|
||||
}
|
||||
if (curDescription.trim().isEmpty()) {
|
||||
curDescription = ""
|
||||
@@ -330,6 +329,7 @@ class IcsImporter(val activity: SimpleActivity) {
|
||||
IMPORT_FAIL
|
||||
}
|
||||
}
|
||||
|
||||
eventsFailed > 0 -> IMPORT_PARTIAL
|
||||
else -> IMPORT_OK
|
||||
}
|
||||
@@ -348,6 +348,7 @@ class IcsImporter(val activity: SimpleActivity) {
|
||||
|
||||
Parser().parseDateTimeValue(value)
|
||||
}
|
||||
|
||||
fullString.startsWith(":") -> Parser().parseDateTimeValue(fullString.substring(1).trim())
|
||||
else -> Parser().parseDateTimeValue(fullString)
|
||||
}
|
||||
@@ -375,7 +376,12 @@ class IcsImporter(val activity: SimpleActivity) {
|
||||
|
||||
val eventId = eventsHelper.getEventTypeIdWithTitle(eventTypeTitle)
|
||||
curEventTypeId = if (eventId == -1L) {
|
||||
val newTypeColor = if (curCategoryColor == -2) activity.resources.getColor(R.color.color_primary) else curCategoryColor
|
||||
val newTypeColor = if (curCategoryColor == -2) {
|
||||
activity.resources.getColor(com.simplemobiletools.commons.R.color.color_primary)
|
||||
} else {
|
||||
curCategoryColor
|
||||
}
|
||||
|
||||
val eventType = EventType(null, eventTypeTitle, newTypeColor)
|
||||
eventsHelper.insertOrUpdateEventTypeSync(eventType)
|
||||
} else {
|
||||
|
@@ -49,7 +49,12 @@ class MyWidgetListProvider : AppWidgetProvider() {
|
||||
setTextSize(R.id.widget_event_list_today, fontSize)
|
||||
}
|
||||
|
||||
views.setImageViewBitmap(R.id.widget_event_new_event, context.resources.getColoredBitmap(R.drawable.ic_plus_vector, textColor))
|
||||
views.setImageViewBitmap(
|
||||
R.id.widget_event_new_event, context.resources.getColoredBitmap(
|
||||
resourceId = com.simplemobiletools.commons.R.drawable.ic_plus_vector,
|
||||
newColor = textColor
|
||||
)
|
||||
)
|
||||
setupIntent(context, views, NEW_EVENT, R.id.widget_event_new_event)
|
||||
setupIntent(context, views, LAUNCH_CAL, R.id.widget_event_list_today)
|
||||
|
||||
|
@@ -199,16 +199,16 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() {
|
||||
views.setTextColor(R.id.top_value, textColor)
|
||||
views.setTextSize(R.id.top_value, largerFontSize)
|
||||
|
||||
var bmp = resources.getColoredBitmap(R.drawable.ic_chevron_left_vector, textColor)
|
||||
var bmp = resources.getColoredBitmap(com.simplemobiletools.commons.R.drawable.ic_chevron_left_vector, textColor)
|
||||
views.setImageViewBitmap(R.id.top_left_arrow, bmp)
|
||||
|
||||
bmp = resources.getColoredBitmap(R.drawable.ic_chevron_right_vector, textColor)
|
||||
bmp = resources.getColoredBitmap(com.simplemobiletools.commons.R.drawable.ic_chevron_right_vector, textColor)
|
||||
views.setImageViewBitmap(R.id.top_right_arrow, bmp)
|
||||
|
||||
bmp = resources.getColoredBitmap(R.drawable.ic_today_vector, textColor)
|
||||
views.setImageViewBitmap(R.id.top_go_to_today, bmp)
|
||||
|
||||
bmp = resources.getColoredBitmap(R.drawable.ic_plus_vector, textColor)
|
||||
bmp = resources.getColoredBitmap(com.simplemobiletools.commons.R.drawable.ic_plus_vector, textColor)
|
||||
views.setImageViewBitmap(R.id.top_new_event, bmp)
|
||||
|
||||
val shouldGoToTodayBeVisible = currTargetDate.withTime(0, 0, 0, 0) != DateTime.now().withDayOfMonth(1).withTime(0, 0, 0, 0)
|
||||
@@ -238,7 +238,7 @@ class MyWidgetMonthlyProvider : AppWidgetProvider() {
|
||||
val firstDayOfWeek = config.firstDayOfWeek
|
||||
val smallerFontSize = context.getWidgetFontSize()
|
||||
val packageName = context.packageName
|
||||
val letters = context.resources.getStringArray(R.array.week_day_letters)
|
||||
val letters = context.resources.getStringArray(com.simplemobiletools.commons.R.array.week_day_letters)
|
||||
|
||||
for (i in 0..6) {
|
||||
val id = resources.getIdentifier("label_$i", "id", packageName)
|
||||
|
@@ -10,7 +10,7 @@ import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
|
||||
data class Attendee(val contactId: Int, var name: String, val email: String, var status: Int, var photoUri: String, var isMe: Boolean, var relationship: Int) {
|
||||
fun getPublicName() = if (name.isNotEmpty()) name else email
|
||||
fun getPublicName() = name.ifEmpty { email }
|
||||
|
||||
fun updateImage(context: Context, imageView: ImageView, placeholder: Drawable) {
|
||||
if (photoUri.isEmpty()) {
|
||||
|
@@ -29,7 +29,7 @@ data class Event(
|
||||
@ColumnInfo(name = "repeat_interval") var repeatInterval: Int = 0,
|
||||
@ColumnInfo(name = "repeat_rule") var repeatRule: Int = 0,
|
||||
@ColumnInfo(name = "repeat_limit") var repeatLimit: Long = 0L,
|
||||
@ColumnInfo(name = "repetition_exceptions") var repetitionExceptions: ArrayList<String> = ArrayList(),
|
||||
@ColumnInfo(name = "repetition_exceptions") var repetitionExceptions: List<String> = emptyList(),
|
||||
@ColumnInfo(name = "attendees") var attendees: String = "",
|
||||
@ColumnInfo(name = "import_id") var importId: String = "",
|
||||
@ColumnInfo(name = "time_zone") var timeZone: String = "",
|
||||
@@ -58,16 +58,19 @@ data class Event(
|
||||
REPEAT_ORDER_WEEKDAY_USE_LAST -> addXthDayInterval(oldStart, original, true)
|
||||
else -> addYearsWithSameDay(oldStart)
|
||||
}
|
||||
|
||||
repeatInterval % MONTH == 0 -> when (repeatRule) {
|
||||
REPEAT_SAME_DAY -> addMonthsWithSameDay(oldStart, original)
|
||||
REPEAT_ORDER_WEEKDAY -> addXthDayInterval(oldStart, original, false)
|
||||
REPEAT_ORDER_WEEKDAY_USE_LAST -> addXthDayInterval(oldStart, original, true)
|
||||
else -> oldStart.plusMonths(repeatInterval / MONTH).dayOfMonth().withMaximumValue()
|
||||
}
|
||||
|
||||
repeatInterval % WEEK == 0 -> {
|
||||
// step through weekly repetition by days too, as events can trigger multiple times a week
|
||||
oldStart.plusDays(1)
|
||||
}
|
||||
|
||||
else -> oldStart.plusSeconds(repeatInterval)
|
||||
}
|
||||
}
|
||||
@@ -186,9 +189,9 @@ data class Event(
|
||||
isPastEvent = endTSToCheck < getNowSeconds()
|
||||
}
|
||||
|
||||
fun addRepetitionException(daycode: String) {
|
||||
var newRepetitionExceptions = repetitionExceptions
|
||||
newRepetitionExceptions.add(daycode)
|
||||
fun addRepetitionException(dayCode: String) {
|
||||
var newRepetitionExceptions = repetitionExceptions.toMutableList()
|
||||
newRepetitionExceptions.add(dayCode)
|
||||
newRepetitionExceptions = newRepetitionExceptions.distinct().toMutableList() as ArrayList<String>
|
||||
repetitionExceptions = newRepetitionExceptions
|
||||
}
|
||||
|
@@ -2,4 +2,4 @@ package com.simplemobiletools.calendar.pro.models
|
||||
|
||||
import android.util.Range
|
||||
|
||||
data class EventWeeklyView(val range: Range<Int>, var slot: Int = 0, var slot_max: Int = 0, var collisions: ArrayList<Long> = ArrayList())
|
||||
data class EventWeeklyView(val range: Range<Int>, var slot: Int = 0, var slotMax: Int = 0, var collisions: ArrayList<Long> = ArrayList())
|
||||
|
@@ -70,7 +70,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
||||
highlightWeekends = config.highlightWeekends
|
||||
|
||||
smallPadding = resources.displayMetrics.density.toInt()
|
||||
val normalTextSize = resources.getDimensionPixelSize(R.dimen.normal_text_size)
|
||||
val normalTextSize = resources.getDimensionPixelSize(com.simplemobiletools.commons.R.dimen.normal_text_size)
|
||||
weekDaysLetterHeight = normalTextSize * 2
|
||||
|
||||
textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
||||
@@ -89,7 +89,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
||||
color = primaryColor
|
||||
}
|
||||
|
||||
val smallerTextSize = resources.getDimensionPixelSize(R.dimen.smaller_text_size)
|
||||
val smallerTextSize = resources.getDimensionPixelSize(com.simplemobiletools.commons.R.dimen.smaller_text_size)
|
||||
eventTitleHeight = smallerTextSize
|
||||
eventTitlePaint = TextPaint(Paint.ANTI_ALIAS_FLAG).apply {
|
||||
color = textColor
|
||||
@@ -391,7 +391,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
||||
}
|
||||
|
||||
private fun initWeekDayLetters() {
|
||||
dayLetters = context.withFirstDayOfWeekToFront(context.resources.getStringArray(R.array.week_day_letters).toList())
|
||||
dayLetters = context.withFirstDayOfWeekToFront(context.resources.getStringArray(com.simplemobiletools.commons.R.array.week_day_letters).toList())
|
||||
}
|
||||
|
||||
private fun setupCurrentDayOfWeekIndex() {
|
||||
@@ -430,7 +430,7 @@ class MonthView(context: Context, attrs: AttributeSet, defStyle: Int) : View(con
|
||||
fun togglePrintMode() {
|
||||
isPrintVersion = !isPrintVersion
|
||||
textColor = if (isPrintVersion) {
|
||||
resources.getColor(R.color.theme_light_text_color)
|
||||
resources.getColor(com.simplemobiletools.commons.R.color.theme_light_text_color)
|
||||
} else {
|
||||
context.getProperTextColor()
|
||||
}
|
||||
|
@@ -4,13 +4,13 @@ import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.widget.FrameLayout
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.databinding.MonthViewBackgroundBinding
|
||||
import com.simplemobiletools.calendar.pro.databinding.MonthViewBinding
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.helpers.COLUMN_COUNT
|
||||
import com.simplemobiletools.calendar.pro.helpers.ROW_COUNT
|
||||
import com.simplemobiletools.calendar.pro.models.DayMonthly
|
||||
import com.simplemobiletools.commons.extensions.onGlobalLayout
|
||||
import kotlinx.android.synthetic.main.month_view.view.month_view
|
||||
|
||||
// used in the Monthly view fragment, 1 view per screen
|
||||
class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : FrameLayout(context, attrs, defStyle) {
|
||||
@@ -22,24 +22,24 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
|
||||
private var isMonthDayView = true
|
||||
private var days = ArrayList<DayMonthly>()
|
||||
private var inflater: LayoutInflater
|
||||
private var monthView: MonthView
|
||||
private var binding: MonthViewBinding
|
||||
private var dayClickCallback: ((day: DayMonthly) -> Unit)? = null
|
||||
|
||||
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0)
|
||||
|
||||
init {
|
||||
val normalTextSize = resources.getDimensionPixelSize(R.dimen.normal_text_size).toFloat()
|
||||
val normalTextSize = resources.getDimensionPixelSize(com.simplemobiletools.commons.R.dimen.normal_text_size).toFloat()
|
||||
weekDaysLetterHeight = 2 * normalTextSize.toInt()
|
||||
|
||||
inflater = LayoutInflater.from(context)
|
||||
monthView = inflater.inflate(R.layout.month_view, this).month_view
|
||||
binding = MonthViewBinding.inflate(inflater, this, true)
|
||||
setupHorizontalOffset()
|
||||
|
||||
onGlobalLayout {
|
||||
if (!wereViewsAdded && days.isNotEmpty()) {
|
||||
measureSizes()
|
||||
addClickableBackgrounds()
|
||||
monthView.updateDays(days, isMonthDayView)
|
||||
binding.monthView.updateDays(days, isMonthDayView)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -94,11 +94,15 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
|
||||
}
|
||||
|
||||
isMonthDayView = !addEvents
|
||||
monthView.updateDays(days, isMonthDayView)
|
||||
binding.monthView.updateDays(days, isMonthDayView)
|
||||
}
|
||||
|
||||
private fun setupHorizontalOffset() {
|
||||
horizontalOffset = if (context.config.showWeekNumbers) resources.getDimensionPixelSize(R.dimen.smaller_text_size) * 2 else 0
|
||||
horizontalOffset = if (context.config.showWeekNumbers) {
|
||||
resources.getDimensionPixelSize(com.simplemobiletools.commons.R.dimen.smaller_text_size) * 2
|
||||
} else {
|
||||
0
|
||||
}
|
||||
}
|
||||
|
||||
private fun measureSizes() {
|
||||
@@ -108,7 +112,7 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
|
||||
|
||||
private fun addClickableBackgrounds() {
|
||||
removeAllViews()
|
||||
monthView = inflater.inflate(R.layout.month_view, this).month_view
|
||||
binding = MonthViewBinding.inflate(inflater, this, true)
|
||||
wereViewsAdded = true
|
||||
var curId = 0
|
||||
for (y in 0 until ROW_COUNT) {
|
||||
@@ -126,7 +130,7 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
|
||||
val xPos = viewX * dayWidth + horizontalOffset
|
||||
val yPos = viewY * dayHeight + weekDaysLetterHeight
|
||||
|
||||
inflater.inflate(R.layout.month_view_background, this, false).apply {
|
||||
MonthViewBackgroundBinding.inflate(inflater, this, false).root.apply {
|
||||
if (isMonthDayView) {
|
||||
background = null
|
||||
}
|
||||
@@ -139,14 +143,15 @@ class MonthViewWrapper(context: Context, attrs: AttributeSet, defStyle: Int) : F
|
||||
dayClickCallback?.invoke(day)
|
||||
|
||||
if (isMonthDayView) {
|
||||
monthView.updateCurrentlySelectedDay(viewX, viewY)
|
||||
binding.monthView.updateCurrentlySelectedDay(viewX, viewY)
|
||||
}
|
||||
}
|
||||
|
||||
addView(this)
|
||||
}
|
||||
}
|
||||
|
||||
fun togglePrintMode() {
|
||||
monthView.togglePrintMode()
|
||||
binding.monthView.togglePrintMode()
|
||||
}
|
||||
}
|
||||
|
@@ -117,7 +117,7 @@ class SmallMonthView(context: Context, attrs: AttributeSet, defStyle: Int) : Vie
|
||||
fun togglePrintMode() {
|
||||
isPrintVersion = !isPrintVersion
|
||||
textColor = if (isPrintVersion) {
|
||||
resources.getColor(R.color.theme_light_text_color)
|
||||
resources.getColor(com.simplemobiletools.commons.R.color.theme_light_text_color)
|
||||
} else {
|
||||
context.getProperTextColor().adjustAlpha(MEDIUM_ALPHA)
|
||||
}
|
||||
|
@@ -5,19 +5,18 @@ import android.graphics.Canvas
|
||||
import android.graphics.Paint
|
||||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import com.simplemobiletools.calendar.pro.R
|
||||
import com.simplemobiletools.calendar.pro.extensions.config
|
||||
import com.simplemobiletools.calendar.pro.extensions.getWeeklyViewItemHeight
|
||||
|
||||
class WeeklyViewGrid(context: Context, attrs: AttributeSet, defStyle: Int) : View(context, attrs, defStyle) {
|
||||
private val ROWS_CNT = 24
|
||||
private var paint = Paint(Paint.ANTI_ALIAS_FLAG)
|
||||
var daysCount = context.config.weeklyViewDays
|
||||
private var daysCount = context.config.weeklyViewDays
|
||||
|
||||
constructor(context: Context, attrs: AttributeSet) : this(context, attrs, 0)
|
||||
|
||||
init {
|
||||
paint.color = context.resources.getColor(R.color.divider_grey)
|
||||
paint.color = context.resources.getColor(com.simplemobiletools.commons.R.color.divider_grey)
|
||||
}
|
||||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
|
@@ -1,334 +1,139 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/calendar_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<include layout="@layout/top_navigation" />
|
||||
|
||||
<TableLayout
|
||||
<GridLayout
|
||||
android:id="@+id/calendar_wrapper"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/top_left_arrow"
|
||||
android:padding="@dimen/yearly_padding_side">
|
||||
android:columnCount="4"
|
||||
android:padding="@dimen/yearly_padding_side"
|
||||
android:rowCount="3">
|
||||
|
||||
<TableRow android:layout_weight="1">
|
||||
<include
|
||||
android:id="@+id/month_1_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_1_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
<include
|
||||
android:id="@+id/month_2_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_1_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/january"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
<include
|
||||
android:id="@+id/month_3_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/month_1_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding" />
|
||||
<include
|
||||
android:id="@+id/month_4_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
</RelativeLayout>
|
||||
<include
|
||||
android:id="@+id/month_5_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_2_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half"
|
||||
android:layout_weight="1">
|
||||
<include
|
||||
android:id="@+id/month_6_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_2_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/february"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
<include
|
||||
android:id="@+id/month_7_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/month_2_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding" />
|
||||
<include
|
||||
android:id="@+id/month_8_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
</RelativeLayout>
|
||||
<include
|
||||
android:id="@+id/month_9_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginTop="0dp"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_3_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
<include
|
||||
android:id="@+id/month_10_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_3_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/march"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
<include
|
||||
android:id="@+id/month_11_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/month_3_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_4_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_4_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/april"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_4"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_4_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding"
|
||||
app:days="30" />
|
||||
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
|
||||
<TableRow android:layout_weight="1">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_5_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_5_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/may"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_5"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_5_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_6_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_6_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/june"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_6"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_6_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding"
|
||||
app:days="30" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_7_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_7_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/july"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_7"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_7_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_8_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_8_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/august"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_8"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_8_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding" />
|
||||
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
|
||||
<TableRow android:layout_weight="1">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_9_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_9_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/september"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_9"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_9_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding"
|
||||
app:days="30" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_10_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_10_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/october"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_10"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_10_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_11_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_11_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/november"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_11"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_11_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding"
|
||||
app:days="30" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_12_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_12_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/december"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_12"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_12_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding" />
|
||||
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
</TableLayout>
|
||||
<include
|
||||
android:id="@+id/month_12_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
</GridLayout>
|
||||
</RelativeLayout>
|
||||
|
24
app/src/main/res/layout-land/small_month_view_holder.xml
Normal file
24
app/src/main/res/layout-land/small_month_view_holder.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/january"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/small_month_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/month_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding" />
|
||||
|
||||
</RelativeLayout>
|
@@ -1,327 +1,130 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/calendar_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<include layout="@layout/top_navigation" />
|
||||
|
||||
<TableLayout
|
||||
<GridLayout
|
||||
android:id="@+id/calendar_wrapper"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/top_left_arrow"
|
||||
android:padding="@dimen/yearly_padding_side">
|
||||
android:columnCount="3"
|
||||
android:padding="@dimen/yearly_padding_side"
|
||||
android:rowCount="4">
|
||||
|
||||
<TableRow android:layout_weight="1">
|
||||
<include
|
||||
android:id="@+id/month_1_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_1_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
<include
|
||||
android:id="@+id/month_2_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_1_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/january"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
<include
|
||||
android:id="@+id/month_3_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/month_1_label"
|
||||
android:layout_centerInParent="true" />
|
||||
<include
|
||||
android:id="@+id/month_4_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full" />
|
||||
|
||||
</RelativeLayout>
|
||||
<include
|
||||
android:id="@+id/month_5_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_2_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half"
|
||||
android:layout_weight="1">
|
||||
<include
|
||||
android:id="@+id/month_6_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_2_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/february"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
<include
|
||||
android:id="@+id/month_7_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/month_2_label" />
|
||||
<include
|
||||
android:id="@+id/month_8_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
</RelativeLayout>
|
||||
<include
|
||||
android:id="@+id/month_9_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_3_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
<include
|
||||
android:id="@+id/month_10_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_3_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/march"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
<include
|
||||
android:id="@+id/month_11_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/month_3_label" />
|
||||
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
|
||||
<TableRow android:layout_weight="1">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_4_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_4_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/april"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_4"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_4_label"
|
||||
app:days="30" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_5_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_5_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/may"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_5"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_5_label" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_6_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_6_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/june"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_6"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_6_label"
|
||||
app:days="30" />
|
||||
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
|
||||
<TableRow android:layout_weight="1">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_7_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_7_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/july"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_7"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_7_label" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_8_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_8_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/august"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_8"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_8_label" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_9_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_9_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/september"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_9"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_9_label"
|
||||
app:days="30" />
|
||||
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
|
||||
<TableRow android:layout_weight="1">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_10_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_10_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/october"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_10"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_10_label" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_11_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_half"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_half"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_11_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/november"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_11"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_11_label"
|
||||
android:layout_marginStart="@dimen/yearly_month_padding"
|
||||
app:days="30" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/month_12_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_12_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/december"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/month_12"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/month_12_label" />
|
||||
|
||||
</RelativeLayout>
|
||||
</TableRow>
|
||||
</TableLayout>
|
||||
<include
|
||||
android:id="@+id/month_12_holder"
|
||||
layout="@layout/small_month_view_holder"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_rowWeight="1"
|
||||
android:layout_columnWeight="1"
|
||||
android:layout_marginStart="@dimen/yearly_padding_full" />
|
||||
</GridLayout>
|
||||
</RelativeLayout>
|
||||
|
@@ -1,38 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/item_autocomplete_holder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingStart="@dimen/small_margin"
|
||||
android:paddingTop="@dimen/medium_margin"
|
||||
android:paddingEnd="@dimen/medium_margin"
|
||||
android:paddingBottom="@dimen/medium_margin">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/item_autocomplete_image"
|
||||
android:layout_width="@dimen/avatar_size"
|
||||
android:layout_height="@dimen/avatar_size"
|
||||
android:layout_margin="@dimen/tiny_margin"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/item_autocomplete_email"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:lines="1"
|
||||
android:maxLines="1"
|
||||
android:paddingStart="@dimen/medium_margin"
|
||||
android:paddingEnd="@dimen/medium_margin"
|
||||
android:singleLine="true"
|
||||
android:textSize="@dimen/bigger_text_size"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/item_autocomplete_image"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="hello@simplemobiletools.com" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
@@ -19,7 +19,7 @@
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/item_autocomplete_name"
|
||||
android:id="@+id/item_autocomplete_title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:lines="1"
|
||||
@@ -28,7 +28,7 @@
|
||||
android:paddingEnd="@dimen/medium_margin"
|
||||
android:singleLine="true"
|
||||
android:textSize="@dimen/bigger_text_size"
|
||||
app:layout_constraintBottom_toTopOf="@+id/item_autocomplete_email"
|
||||
app:layout_constraintBottom_toTopOf="@+id/item_autocomplete_subtitle"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/item_autocomplete_image"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
@@ -36,10 +36,10 @@
|
||||
tools:text="Simple Mobile" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/item_autocomplete_email"
|
||||
android:id="@+id/item_autocomplete_subtitle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/item_autocomplete_name"
|
||||
android:layout_below="@+id/item_autocomplete_title"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:alpha="0.8"
|
||||
android:lines="1"
|
||||
@@ -51,7 +51,7 @@
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/item_autocomplete_image"
|
||||
app:layout_constraintTop_toBottomOf="@+id/item_autocomplete_name"
|
||||
app:layout_constraintTop_toBottomOf="@+id/item_autocomplete_title"
|
||||
tools:text="hello@simplemobiletools.com" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
24
app/src/main/res/layout/small_month_view_holder.xml
Normal file
24
app/src/main/res/layout/small_month_view_holder.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginEnd="@dimen/yearly_padding_full"
|
||||
android:layout_weight="1">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/month_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/january"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="@dimen/normal_text_size" />
|
||||
|
||||
<com.simplemobiletools.calendar.pro.views.SmallMonthView
|
||||
android:id="@+id/small_month_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/month_label"
|
||||
android:layout_centerInParent="true" />
|
||||
|
||||
</RelativeLayout>
|
32
build.gradle
32
build.gradle
@@ -1,32 +0,0 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.7.10'
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
maven { url "https://plugins.gradle.org/m2" }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.3.1'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
classpath "de.timfreiheit.resourceplaceholders:placeholders:0.4"
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
maven { url "https://jitpack.io" }
|
||||
}
|
||||
}
|
||||
|
||||
task clean(type: Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
11
build.gradle.kts
Normal file
11
build.gradle.kts
Normal file
@@ -0,0 +1,11 @@
|
||||
plugins {
|
||||
alias(libs.plugins.android).apply(false)
|
||||
alias(libs.plugins.kotlinAndroid).apply(false)
|
||||
alias(libs.plugins.ksp).apply(false)
|
||||
}
|
||||
|
||||
tasks.register<Delete>("clean") {
|
||||
delete {
|
||||
rootProject.buildDir
|
||||
}
|
||||
}
|
@@ -1,2 +1,3 @@
|
||||
android.enableJetifier=true
|
||||
android.useAndroidX=true
|
||||
org.gradle.jvmargs=-Xmx8192m
|
||||
|
48
gradle/libs.versions.toml
Normal file
48
gradle/libs.versions.toml
Normal file
@@ -0,0 +1,48 @@
|
||||
[versions]
|
||||
#jetbrains
|
||||
kotlin = "1.9.10"
|
||||
#KSP
|
||||
ksp = "1.9.10-1.0.13"
|
||||
#Androidx
|
||||
multidex = "2.0.1"
|
||||
print = "1.0.0"
|
||||
constraintlayout = "2.1.4"
|
||||
swiperefreshlayout = "1.1.0"
|
||||
#Room
|
||||
room = "2.5.2"
|
||||
#Simple tools
|
||||
simple-commons = "7c1e5b5777"
|
||||
#Gradle
|
||||
gradlePlugins-agp = "8.1.1"
|
||||
#build
|
||||
app-build-compileSDKVersion = "34"
|
||||
app-build-targetSDK = "34"
|
||||
app-build-minimumSDK = "23"
|
||||
app-build-javaVersion = "VERSION_17"
|
||||
app-build-kotlinJVMTarget = "17"
|
||||
#versioning
|
||||
app-version-appId = "com.simplemobiletools.calendar.pro"
|
||||
app-version-versionCode = "238"
|
||||
app-version-versionName = "6.22.2"
|
||||
[libraries]
|
||||
#Android X
|
||||
androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" }
|
||||
androidx-multidex = { module = "androidx.multidex:multidex", version.ref = "multidex" }
|
||||
androidx-print = { module = "androidx.print:print", version.ref = "print" }
|
||||
androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "swiperefreshlayout" }
|
||||
#Room
|
||||
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" }
|
||||
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" }
|
||||
androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" }
|
||||
#Simple Mobile Tools
|
||||
simple-mobile-tools-commons = { module = "com.github.SimpleMobileTools:Simple-Commons", version.ref = "simple-commons" }
|
||||
[bundles]
|
||||
room = [
|
||||
"androidx-room-ktx",
|
||||
"androidx-room-runtime",
|
||||
]
|
||||
[plugins]
|
||||
android = { id = "com.android.application", version.ref = "gradlePlugins-agp" }
|
||||
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
||||
kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
||||
|
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
||||
#Mon Nov 02 19:09:05 CET 2020
|
||||
#Wed Aug 30 15:51:27 IST 2023
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
|
||||
|
@@ -1 +0,0 @@
|
||||
include ':app'
|
16
settings.gradle.kts
Normal file
16
settings.gradle.kts
Normal file
@@ -0,0 +1,16 @@
|
||||
pluginManagement {
|
||||
repositories {
|
||||
gradlePluginPortal()
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
dependencyResolutionManagement {
|
||||
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
maven { setUrl("https://jitpack.io") }
|
||||
}
|
||||
}
|
||||
include(":app")
|
Reference in New Issue
Block a user