diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b033bde..48a41b4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -38,10 +38,9 @@ + android:priority="1000"> - diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/object/Calendar.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/object/CalendarSelector.kt similarity index 80% rename from app/src/main/java/com/tommasoberlose/anotherwidget/object/Calendar.kt rename to app/src/main/java/com/tommasoberlose/anotherwidget/object/CalendarSelector.kt index 420cc71..8600bc9 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/object/Calendar.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/object/CalendarSelector.kt @@ -3,7 +3,7 @@ package com.tommasoberlose.anotherwidget.`object` /** * Created by tommaso on 08/10/17. */ -class Calendar(id: Int, name: String, account_name: String) { +class CalendarSelector(id: Int, name: String, account_name: String) { var id: Int = 0 var name: String = "" var account_name: String = "" diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/object/Constants.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/object/Constants.kt index b42fb80..4aaddec 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/object/Constants.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/object/Constants.kt @@ -18,6 +18,12 @@ object Constants { val PREF_CALENDAR_ALL_DAY = "PREF_CALENDAR_ALL_DAY" val PREF_CALENDAR_FILTER = "PREF_CALENDAR_FILTER" + val PREF_NEXT_EVENT_ID = "PREF_NEXT_EVENT_ID" + val PREF_NEXT_EVENT_NAME = "PREF_NEXT_EVENT_NAME" + val PREF_NEXT_EVENT_START_DATE = "PREF_NEXT_EVENT_START_DATE" + val PREF_NEXT_EVENT_END_DATE = "PREF_NEXT_EVENT_END_DATE" + val PREF_NEXT_EVENT_CALENDAR_ID = "PREF_NEXT_EVENT_CALENDAR_ID" + val dateFormat = SimpleDateFormat("EEEE, MMM d", Locale.getDefault()) val hourFormat = SimpleDateFormat("HH:mm", Locale.getDefault()) diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/object/Event.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/object/Event.kt index 2468172..ebbbd27 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/object/Event.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/object/Event.kt @@ -8,18 +8,28 @@ import java.util.Date * Created by tommaso on 05/10/17. */ -class Event(eventCursor: Cursor, instanceCursor: Cursor) { +class Event { var id: Int = 0 var title: String? = null var startDate: Long = 0 var endDate: Long = 0 + var calendarID: Int = 0 - init { + constructor(id:Int, title:String, startDate:Long, endDate:Long, calendarID: Int) { + this.id = id + this.title = title + this.startDate = startDate + this.endDate = endDate + this.calendarID = calendarID + } + + constructor(eventCursor: Cursor, instanceCursor: Cursor) { id = instanceCursor.getInt(0) startDate = instanceCursor.getLong(1) endDate = instanceCursor.getLong(2) title = eventCursor.getString(0) + calendarID = eventCursor.getInt(2) } override fun toString(): String { diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/NewCalendarEventReceiver.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/NewCalendarEventReceiver.kt index ef39df2..3477904 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/NewCalendarEventReceiver.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/NewCalendarEventReceiver.kt @@ -3,11 +3,15 @@ package com.tommasoberlose.anotherwidget.receiver import android.content.BroadcastReceiver import android.content.Context import android.content.Intent +import android.util.Log +import com.tommasoberlose.anotherwidget.util.CalendarUtil import com.tommasoberlose.anotherwidget.util.Util class NewCalendarEventReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { - Util.updateWidget(context) + if (intent.action.equals(Intent.ACTION_PROVIDER_CHANGED)) { + CalendarUtil.updateEventList(context) + } } } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/UpdatesReceiver.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/UpdatesReceiver.kt index 03b8d2c..274b356 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/UpdatesReceiver.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/receiver/UpdatesReceiver.kt @@ -7,6 +7,7 @@ import android.content.Intent import android.app.AlarmManager import android.app.PendingIntent import com.tommasoberlose.anotherwidget.`object`.Constants +import com.tommasoberlose.anotherwidget.util.CalendarUtil import com.tommasoberlose.anotherwidget.util.Util @@ -22,7 +23,7 @@ class UpdatesReceiver : BroadcastReceiver() { removeUpdates(context) if (Util.checkGrantedPermission(context, Manifest.permission.READ_CALENDAR)) { - Util.updateWidget(context) + CalendarUtil.updateEventList(context) val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager val i = Intent(context, UpdatesReceiver::class.java) diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activity/MainActivity.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activity/MainActivity.kt index f392ea5..82ab7c9 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activity/MainActivity.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/activity/MainActivity.kt @@ -2,6 +2,7 @@ package com.tommasoberlose.anotherwidget.ui.activity import android.Manifest import android.annotation.SuppressLint +import android.app.AlertDialog import android.content.pm.PackageManager import android.support.v7.app.AppCompatActivity import android.os.Bundle @@ -23,6 +24,9 @@ import android.content.Intent import android.content.BroadcastReceiver import com.tommasoberlose.anotherwidget.util.CalendarUtil import com.tommasoberlose.anotherwidget.util.WeatherUtil +import android.content.DialogInterface +import android.util.Log +import com.tommasoberlose.anotherwidget.`object`.CalendarSelector class MainActivity : AppCompatActivity() { @@ -53,9 +57,9 @@ class MainActivity : AppCompatActivity() { } }) - action_project.setOnClickListener(object: View.OnClickListener { + action_rate.setOnClickListener(object: View.OnClickListener { override fun onClick(p0: View?) { - Util.openURI(this@MainActivity, "https://github.com/tommasoberlose/another-widget") + Util.openURI(this@MainActivity, "https://play.google.com/store/apps/details?id=com.tommasoberlose.anotherwidget") } }) } @@ -133,10 +137,12 @@ class MainActivity : AppCompatActivity() { empty_date.text = String.format("%s%s", Constants.dateFormat.format(now.time)[0].toUpperCase(), Constants.dateFormat.format(now.time).substring(1)) if (calendarLayout) { - val eventList = CalendarUtil.getNextEvent(this) + val e = CalendarUtil.getNextEvent(this) + + if (e.id != 0) { + val difference = e.startDate - now.timeInMillis + - if (eventList.isNotEmpty()) { - val difference = eventList[0].startDate - now.timeInMillis if (difference > 1000 * 60) { var time = "" @@ -149,11 +155,11 @@ class MainActivity : AppCompatActivity() { time += " " + minutes + getString(R.string.min_code) } - next_event.text = String.format("%s %s %s", eventList[0].title, getString(R.string.in_code), time) + next_event.text = String.format("%s %s %s", e.title, getString(R.string.in_code), time) } else { - next_event.text = String.format("%s", eventList[0].title) + next_event.text = String.format("%s", e.title) } - next_event_date.text = String.format("%s - %s", Constants.hourFormat.format(eventList[0].startDate), Constants.hourFormat.format(eventList[0].endDate)) + next_event_date.text = String.format("%s - %s", Constants.hourFormat.format(e.startDate), Constants.hourFormat.format(e.endDate)) empty_layout.visibility = View.GONE calendar_layout.visibility = View.VISIBLE @@ -204,7 +210,32 @@ class MainActivity : AppCompatActivity() { action_show_all_day.setOnClickListener { SP.edit().putBoolean(Constants.PREF_CALENDAR_ALL_DAY, !SP.getBoolean(Constants.PREF_CALENDAR_ALL_DAY, false)).commit() updateUI() - Util.updateWidget(this) + CalendarUtil.updateEventList(this) + } + + action_filter_calendar.setOnClickListener { + val calendarSelectorList: List = CalendarUtil.getCalendarList(this) + var calFiltered = SP.getString(Constants.PREF_CALENDAR_FILTER, "") + + + val calNames = calendarSelectorList.map { if (it.name.equals(it.account_name)) String.format("%s: %s", getString(R.string.main_calendar), it.name) else it.name }.toTypedArray() + val calSelected = calendarSelectorList.map { !calFiltered.contains(" " + Integer.toString(it.id)+",") }.toBooleanArray() + + AlertDialog.Builder(this).setTitle(getString(R.string.settings_filter_calendar_subtitle)) + .setMultiChoiceItems(calNames, calSelected, + DialogInterface.OnMultiChoiceClickListener { dialog, item, isChecked -> + val dialogItem: String = String.format(" %s%s", calendarSelectorList.get(item).id, ",") + calFiltered = calFiltered.replace(dialogItem, ""); + if (!isChecked) { + calFiltered += dialogItem + } + }) + .setPositiveButton(android.R.string.ok, { dialog: DialogInterface, _: Int -> + SP.edit().putString(Constants.PREF_CALENDAR_FILTER, calFiltered).commit() + CalendarUtil.updateEventList(this) + }) + .setNegativeButton(android.R.string.cancel, null) + .show() } } diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widget/TheWidget.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widget/TheWidget.kt index 8e2b1ff..6929e36 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widget/TheWidget.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/ui/widget/TheWidget.kt @@ -77,10 +77,10 @@ class TheWidget : AppWidgetProvider() { if (calendarLayout) { - val eventList = CalendarUtil.getNextEvent(context) + val e = CalendarUtil.getNextEvent(context) - if (eventList.isNotEmpty()) { - val difference = eventList[0].startDate - now.timeInMillis + if (e.id != 0) { + val difference = e.startDate - now.timeInMillis if (difference > 1000 * 60) { var time = "" @@ -93,18 +93,18 @@ class TheWidget : AppWidgetProvider() { time += " " + minutes + context.getString(R.string.min_code) } - views.setTextViewText(R.id.next_event, String.format("%s %s %s", eventList[0].title, context.getString(R.string.in_code), time)) + views.setTextViewText(R.id.next_event, String.format("%s %s %s", e.title, context.getString(R.string.in_code), time)) } else { - views.setTextViewText(R.id.next_event, String.format("%s", eventList[0].title)) + views.setTextViewText(R.id.next_event, String.format("%s", e.title)) } - views.setTextViewText(R.id.next_event_date, String.format("%s - %s", Constants.hourFormat.format(eventList[0].startDate), Constants.hourFormat.format(eventList[0].endDate))) + views.setTextViewText(R.id.next_event_date, String.format("%s - %s", Constants.hourFormat.format(e.startDate), Constants.hourFormat.format(e.endDate))) views.setViewVisibility(R.id.empty_layout, View.GONE) views.setViewVisibility(R.id.calendar_layout, View.VISIBLE) val builder = CalendarContract.CONTENT_URI.buildUpon() builder.appendPath("time") - ContentUris.appendId(builder, eventList[0].startDate) + ContentUris.appendId(builder, e.startDate) val intent = Intent(Intent.ACTION_VIEW) .setData(builder.build()) val pIntent = PendingIntent.getActivity(context, widgetID, intent, 0) diff --git a/app/src/main/java/com/tommasoberlose/anotherwidget/util/CalendarUtil.kt b/app/src/main/java/com/tommasoberlose/anotherwidget/util/CalendarUtil.kt index e7d93b3..caf993e 100644 --- a/app/src/main/java/com/tommasoberlose/anotherwidget/util/CalendarUtil.kt +++ b/app/src/main/java/com/tommasoberlose/anotherwidget/util/CalendarUtil.kt @@ -1,11 +1,14 @@ package com.tommasoberlose.anotherwidget.util import android.Manifest +import android.annotation.SuppressLint import android.content.ContentUris import android.content.Context import android.content.SharedPreferences import android.preference.PreferenceManager import android.provider.CalendarContract +import android.util.Log +import com.tommasoberlose.anotherwidget.`object`.CalendarSelector import com.tommasoberlose.anotherwidget.`object`.Constants import com.tommasoberlose.anotherwidget.`object`.Event import java.util.* @@ -16,7 +19,7 @@ import java.util.* object CalendarUtil { - fun getNextEvent(context: Context): List { + fun updateEventList(context: Context) { val SP: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) val eventList = ArrayList() @@ -29,24 +32,26 @@ object CalendarUtil { ContentUris.appendId(builder, hourLimit.timeInMillis) if (!Util.checkGrantedPermission(context, Manifest.permission.READ_CALENDAR)) { - return eventList + resetNextEventData(context) } - val instanceCursor = context.contentResolver.query(builder.build(), arrayOf(CalendarContract.Instances.EVENT_ID, CalendarContract.Instances.BEGIN, CalendarContract.Instances.END), null, null, null) ?: return eventList + val instanceCursor = context.contentResolver.query(builder.build(), arrayOf(CalendarContract.Instances.EVENT_ID, CalendarContract.Instances.BEGIN, CalendarContract.Instances.END), null, null, null) instanceCursor.moveToFirst() + + for (i in 0 until instanceCursor.count) { val ID = instanceCursor.getInt(0) - val eventCursor = context.contentResolver.query(CalendarContract.Events.CONTENT_URI, arrayOf(CalendarContract.Events.TITLE, CalendarContract.Events.ALL_DAY), + val eventCursor = context.contentResolver.query(CalendarContract.Events.CONTENT_URI, arrayOf(CalendarContract.Events.TITLE, CalendarContract.Events.ALL_DAY, CalendarContract.Events.CALENDAR_ID), CalendarContract.Events._ID + " is ?", - arrayOf(Integer.toString(ID)), null) ?: return eventList + arrayOf(Integer.toString(ID)), null) eventCursor.moveToFirst() for (j in 0 until eventCursor.count) { val e = Event(eventCursor, instanceCursor) val allDay: Boolean = !eventCursor.getString(1).equals("0") - if (e.endDate - now.timeInMillis > 1000 * 60 * 30 && (SP.getBoolean(Constants.PREF_CALENDAR_ALL_DAY, false) || !allDay)) { + if (e.endDate - now.timeInMillis > 1000 * 60 * 30 && (SP.getBoolean(Constants.PREF_CALENDAR_ALL_DAY, false) || !allDay) && !(SP.getString(Constants.PREF_CALENDAR_FILTER, "").contains(" " + e.calendarID + ","))) { eventList.add(e) } eventCursor.moveToNext() @@ -58,10 +63,17 @@ object CalendarUtil { } instanceCursor.close() - return eventList + + if (eventList.isEmpty()) { + resetNextEventData(context) + } else { + saveNextEventData(context, eventList.get(0)) + } + } - fun getCalendarList(context: Context): List { - val calendarList = ArrayList() + + fun getCalendarList(context: Context): List { + val calendarList = ArrayList() if (!Util.checkGrantedPermission(context, Manifest.permission.READ_CALENDAR)) { return calendarList @@ -76,7 +88,7 @@ object CalendarUtil { calendarCursor.moveToFirst() for (j in 0 until calendarCursor.count) { - calendarList.add(com.tommasoberlose.anotherwidget.`object`.Calendar(calendarCursor.getInt(0), calendarCursor.getString(1), calendarCursor.getString(2))) + calendarList.add(CalendarSelector(calendarCursor.getInt(0), calendarCursor.getString(1), calendarCursor.getString(2))) calendarCursor.moveToNext() } @@ -84,4 +96,33 @@ object CalendarUtil { return calendarList } + + fun resetNextEventData(context: Context) { + val SP: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) + SP.edit() + .remove(Constants.PREF_NEXT_EVENT_ID) + .remove(Constants.PREF_NEXT_EVENT_NAME) + .remove(Constants.PREF_NEXT_EVENT_START_DATE) + .remove(Constants.PREF_NEXT_EVENT_END_DATE) + .remove(Constants.PREF_NEXT_EVENT_CALENDAR_ID) + .apply() + } + + @SuppressLint("ApplySharedPref") + fun saveNextEventData(context: Context, event: Event) { + val SP: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) + SP.edit() + .putInt(Constants.PREF_NEXT_EVENT_ID, event.id) + .putString(Constants.PREF_NEXT_EVENT_NAME, event.title) + .putLong(Constants.PREF_NEXT_EVENT_START_DATE, event.startDate) + .putLong(Constants.PREF_NEXT_EVENT_END_DATE, event.endDate) + .putInt(Constants.PREF_NEXT_EVENT_CALENDAR_ID, event.calendarID) + .commit() + Util.updateWidget(context) + } + + fun getNextEvent(context: Context): Event { + val SP: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) + return Event(SP.getInt(Constants.PREF_NEXT_EVENT_ID, 0), SP.getString(Constants.PREF_NEXT_EVENT_NAME, ""), SP.getLong(Constants.PREF_NEXT_EVENT_START_DATE, 0), SP.getLong(Constants.PREF_NEXT_EVENT_END_DATE, 0), SP.getInt(Constants.PREF_NEXT_EVENT_CALENDAR_ID, 0)) + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/dark_card_background.xml b/app/src/main/res/drawable/dark_card_background.xml index cb6b3b0..02eddae 100644 --- a/app/src/main/res/drawable/dark_card_background.xml +++ b/app/src/main/res/drawable/dark_card_background.xml @@ -3,7 +3,7 @@ + android:radius="2dp" /> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index db38dc8..8e917ad 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -61,35 +61,17 @@ android:orientation="vertical" android:paddingTop="20dp" android:paddingBottom="20dp"> + - - - - + + + + + @@ -236,18 +248,18 @@ android:background="?android:attr/selectableItemBackground" android:clickable="true" android:focusable="true" - android:id="@+id/action_share" + android:id="@+id/action_rate" android:orientation="vertical"> + android:src="@drawable/ic_action_rate"/> @@ -261,18 +273,18 @@ android:background="?android:attr/selectableItemBackground" android:clickable="true" android:focusable="true" - android:id="@+id/action_project" + android:id="@+id/action_share" android:orientation="vertical"> + android:src="@drawable/ic_action_sms"/> diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 3d2c34b..d41c959 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -29,4 +29,8 @@ Eventi Giornalieri Visibili Non Visibili + Calendario Account + Impostazioni Calendario + Impostazioni Meteo + Impostazioni Generali \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index bcabb1d..a542063 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,7 +3,7 @@ #0092ca #0083B5 #124E96 - #FF008E + #124E96 #DAEAF6 #80000000 #48000000 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 402f5d1..9f90b50 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -30,4 +30,8 @@ All Day Events Visible Not Visible + Account Calendar + Calendar Settings + Weather Settings + General Settings diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index e58dca2..c5bbc32 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -57,6 +57,17 @@ 12sp + +