mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-06-05 21:59:17 +02:00
populating list widget with some test data
This commit is contained in:
@@ -90,6 +90,10 @@
|
|||||||
android:resource="@xml/widget_list_info"/>
|
android:resource="@xml/widget_list_info"/>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
|
<service
|
||||||
|
android:name=".services.WidgetService"
|
||||||
|
android:permission="android.permission.BIND_REMOTEVIEWS"/>
|
||||||
|
|
||||||
<receiver android:name=".receivers.NotificationReceiver"/>
|
<receiver android:name=".receivers.NotificationReceiver"/>
|
||||||
|
|
||||||
<receiver android:name=".receivers.BootCompletedReceiver">
|
<receiver android:name=".receivers.BootCompletedReceiver">
|
||||||
|
@@ -10,7 +10,7 @@ import android.os.Bundle
|
|||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import com.simplemobiletools.calendar.R
|
import com.simplemobiletools.calendar.R
|
||||||
import com.simplemobiletools.calendar.adapters.EventListWidgetAdapter
|
import com.simplemobiletools.calendar.adapters.EventListWidgetAdapterOld
|
||||||
import com.simplemobiletools.calendar.extensions.adjustAlpha
|
import com.simplemobiletools.calendar.extensions.adjustAlpha
|
||||||
import com.simplemobiletools.calendar.helpers.*
|
import com.simplemobiletools.calendar.helpers.*
|
||||||
import com.simplemobiletools.calendar.helpers.Formatter
|
import com.simplemobiletools.calendar.helpers.Formatter
|
||||||
@@ -33,7 +33,7 @@ class WidgetListConfigureActivity : AppCompatActivity() {
|
|||||||
private var mTextColorWithoutTransparency = 0
|
private var mTextColorWithoutTransparency = 0
|
||||||
private var mTextColor = 0
|
private var mTextColor = 0
|
||||||
|
|
||||||
private var mEventsAdapter: EventListWidgetAdapter? = null
|
private var mEventsAdapter: EventListWidgetAdapterOld? = null
|
||||||
|
|
||||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -49,7 +49,7 @@ class WidgetListConfigureActivity : AppCompatActivity() {
|
|||||||
if (mWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID)
|
if (mWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID)
|
||||||
finish()
|
finish()
|
||||||
|
|
||||||
mEventsAdapter = EventListWidgetAdapter(this, getListItems())
|
mEventsAdapter = EventListWidgetAdapterOld(this, getListItems())
|
||||||
mEventsAdapter!!.setTextColor(mTextColor)
|
mEventsAdapter!!.setTextColor(mTextColor)
|
||||||
config_events_list.adapter = mEventsAdapter
|
config_events_list.adapter = mEventsAdapter
|
||||||
|
|
||||||
|
@@ -1,104 +1,86 @@
|
|||||||
package com.simplemobiletools.calendar.adapters
|
package com.simplemobiletools.calendar.adapters
|
||||||
|
|
||||||
|
import android.appwidget.AppWidgetManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.drawable.Drawable
|
import android.content.Intent
|
||||||
import android.view.LayoutInflater
|
import android.content.SharedPreferences
|
||||||
import android.view.View
|
import android.graphics.Color
|
||||||
import android.view.ViewGroup
|
import android.widget.RemoteViews
|
||||||
import android.widget.BaseAdapter
|
import android.widget.RemoteViewsService
|
||||||
import android.widget.TextView
|
|
||||||
import com.simplemobiletools.calendar.R
|
import com.simplemobiletools.calendar.R
|
||||||
|
import com.simplemobiletools.calendar.extensions.adjustAlpha
|
||||||
import com.simplemobiletools.calendar.helpers.Formatter
|
import com.simplemobiletools.calendar.helpers.Formatter
|
||||||
|
import com.simplemobiletools.calendar.helpers.HIGH_ALPHA
|
||||||
|
import com.simplemobiletools.calendar.helpers.PREFS_KEY
|
||||||
|
import com.simplemobiletools.calendar.helpers.WIDGET_TEXT_COLOR
|
||||||
import com.simplemobiletools.calendar.models.ListEvent
|
import com.simplemobiletools.calendar.models.ListEvent
|
||||||
import com.simplemobiletools.calendar.models.ListItem
|
import com.simplemobiletools.calendar.models.ListItem
|
||||||
import com.simplemobiletools.calendar.models.ListSection
|
import com.simplemobiletools.calendar.models.ListSection
|
||||||
import kotlinx.android.synthetic.main.event_item.view.*
|
import org.joda.time.DateTime
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class EventListWidgetAdapter(val context: Context, val mEvents: List<ListItem>) : BaseAdapter() {
|
class EventListWidgetAdapter(val context: Context, val intent: Intent) : RemoteViewsService.RemoteViewsFactory {
|
||||||
val ITEM_EVENT = 0
|
val appWidgetId: Int
|
||||||
val ITEM_HEADER = 1
|
var events: List<ListItem>
|
||||||
|
val prefs: SharedPreferences
|
||||||
private val mInflater: LayoutInflater
|
val textColor: Int
|
||||||
private var mTopDivider: Drawable? = null
|
|
||||||
private var mTextColor = 0
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
mInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
prefs = context.getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE)
|
||||||
mTopDivider = context.resources.getDrawable(R.drawable.divider)
|
textColor = prefs.getInt(WIDGET_TEXT_COLOR, Color.WHITE).adjustAlpha(HIGH_ALPHA)
|
||||||
|
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID)
|
||||||
|
events = getListItems()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
override fun getViewAt(position: Int): RemoteViews {
|
||||||
var view = convertView
|
val rv = RemoteViews(context.packageName, R.layout.event_list_section)
|
||||||
val viewHolder: ViewHolder
|
rv.setTextViewText(R.id.event_item_title, "hello")
|
||||||
val type = getItemViewType(position)
|
rv.setInt(R.id.event_item_title, "setTextColor", textColor)
|
||||||
|
|
||||||
if (view == null) {
|
return rv
|
||||||
if (type == ITEM_EVENT) {
|
|
||||||
view = mInflater.inflate(R.layout.event_list_item, parent, false)
|
|
||||||
} else {
|
|
||||||
view = mInflater.inflate(R.layout.event_list_section, parent, false)
|
|
||||||
view.setOnClickListener(null)
|
|
||||||
}
|
|
||||||
viewHolder = ViewHolder(view)
|
|
||||||
view!!.tag = viewHolder
|
|
||||||
} else {
|
|
||||||
viewHolder = view.tag as ViewHolder
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == ITEM_EVENT) {
|
override fun getLoadingView() = null
|
||||||
val item = mEvents[position] as ListEvent
|
|
||||||
viewHolder.apply {
|
|
||||||
title.text = item.title
|
|
||||||
description?.text = item.description
|
|
||||||
start?.text = Formatter.getTime(item.startTS)
|
|
||||||
|
|
||||||
if (item.startTS == item.endTS) {
|
override fun getViewTypeCount() = 1
|
||||||
end?.visibility = View.INVISIBLE
|
|
||||||
} else {
|
|
||||||
end?.text = Formatter.getTime(item.endTS)
|
|
||||||
end?.visibility = View.VISIBLE
|
|
||||||
|
|
||||||
val startCode = Formatter.getDayCodeFromTS(item.startTS)
|
override fun onCreate() {
|
||||||
val endCode = Formatter.getDayCodeFromTS(item.endTS)
|
|
||||||
if (startCode != endCode) {
|
|
||||||
end?.append(" (${Formatter.getEventDate(context, endCode)})")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start?.setTextColor(mTextColor)
|
override fun getItemId(position: Int) = position.toLong()
|
||||||
end?.setTextColor(mTextColor)
|
|
||||||
title.setTextColor(mTextColor)
|
override fun onDataSetChanged() {
|
||||||
description?.setTextColor(mTextColor)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
val item = mEvents[position] as ListSection
|
|
||||||
viewHolder.title.text = item.title
|
|
||||||
viewHolder.title.setCompoundDrawablesWithIntrinsicBounds(null, if (position == 0) null else mTopDivider, null, null)
|
|
||||||
viewHolder.title.setTextColor(mTextColor)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return view
|
override fun hasStableIds() = true
|
||||||
|
|
||||||
|
override fun getCount() = events.size
|
||||||
|
|
||||||
|
override fun onDestroy() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setTextColor(color: Int) {
|
private fun getListItems(): ArrayList<ListItem> {
|
||||||
mTextColor = color
|
val listItems = ArrayList<ListItem>(10)
|
||||||
notifyDataSetChanged()
|
var dateTime = DateTime.now().withTime(0, 0, 0, 0).plusDays(1)
|
||||||
}
|
var code = Formatter.getDayCodeFromTS((dateTime.millis / 1000).toInt())
|
||||||
|
var day = Formatter.getDayTitle(context, code)
|
||||||
|
listItems.add(ListSection(day))
|
||||||
|
|
||||||
override fun getItemViewType(position: Int) = if (mEvents[position] is ListEvent) ITEM_EVENT else ITEM_HEADER
|
var time = dateTime.withHourOfDay(7)
|
||||||
|
listItems.add(ListEvent(1, (time.millis / 1000).toInt(), (time.plusMinutes(30).millis / 1000).toInt(), "Workout", "Leg day"))
|
||||||
|
time = dateTime.withHourOfDay(8)
|
||||||
|
listItems.add(ListEvent(2, (time.millis / 1000).toInt(), (time.plusHours(1).millis / 1000).toInt(), "Meeting with John", "In Rockstone Garden"))
|
||||||
|
|
||||||
override fun getViewTypeCount() = 2
|
dateTime = dateTime.plusDays(1)
|
||||||
|
code = Formatter.getDayCodeFromTS((dateTime.millis / 1000).toInt())
|
||||||
|
day = Formatter.getDayTitle(context, code)
|
||||||
|
listItems.add(ListSection(day))
|
||||||
|
|
||||||
override fun getCount() = mEvents.size
|
time = dateTime.withHourOfDay(13)
|
||||||
|
listItems.add(ListEvent(3, (time.millis / 1000).toInt(), (time.plusHours(1).millis / 1000).toInt(), "Lunch with Mary", "In the Plaza"))
|
||||||
|
time = dateTime.withHourOfDay(18)
|
||||||
|
listItems.add(ListEvent(4, (time.millis / 1000).toInt(), (time.plusMinutes(10).millis / 1000).toInt(), "Coffee time", ""))
|
||||||
|
|
||||||
override fun getItem(position: Int) = mEvents[position]
|
return listItems
|
||||||
|
|
||||||
override fun getItemId(position: Int) = 0L
|
|
||||||
|
|
||||||
internal class ViewHolder(view: View) {
|
|
||||||
val title = view.event_item_title
|
|
||||||
val description: TextView? = view.event_item_description
|
|
||||||
val start: TextView? = view.event_item_start
|
|
||||||
val end: TextView? = view.event_item_end
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,104 @@
|
|||||||
|
package com.simplemobiletools.calendar.adapters
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.graphics.drawable.Drawable
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.BaseAdapter
|
||||||
|
import android.widget.TextView
|
||||||
|
import com.simplemobiletools.calendar.R
|
||||||
|
import com.simplemobiletools.calendar.helpers.Formatter
|
||||||
|
import com.simplemobiletools.calendar.models.ListEvent
|
||||||
|
import com.simplemobiletools.calendar.models.ListItem
|
||||||
|
import com.simplemobiletools.calendar.models.ListSection
|
||||||
|
import kotlinx.android.synthetic.main.event_item.view.*
|
||||||
|
|
||||||
|
class EventListWidgetAdapterOld(val context: Context, val mEvents: List<ListItem>) : BaseAdapter() {
|
||||||
|
val ITEM_EVENT = 0
|
||||||
|
val ITEM_HEADER = 1
|
||||||
|
|
||||||
|
private val mInflater: LayoutInflater
|
||||||
|
private var mTopDivider: Drawable? = null
|
||||||
|
private var mTextColor = 0
|
||||||
|
|
||||||
|
init {
|
||||||
|
mInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
||||||
|
mTopDivider = context.resources.getDrawable(R.drawable.divider)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||||
|
var view = convertView
|
||||||
|
val viewHolder: ViewHolder
|
||||||
|
val type = getItemViewType(position)
|
||||||
|
|
||||||
|
if (view == null) {
|
||||||
|
if (type == ITEM_EVENT) {
|
||||||
|
view = mInflater.inflate(R.layout.event_list_item, parent, false)
|
||||||
|
} else {
|
||||||
|
view = mInflater.inflate(R.layout.event_list_section, parent, false)
|
||||||
|
view.setOnClickListener(null)
|
||||||
|
}
|
||||||
|
viewHolder = ViewHolder(view)
|
||||||
|
view!!.tag = viewHolder
|
||||||
|
} else {
|
||||||
|
viewHolder = view.tag as ViewHolder
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == ITEM_EVENT) {
|
||||||
|
val item = mEvents[position] as ListEvent
|
||||||
|
viewHolder.apply {
|
||||||
|
title.text = item.title
|
||||||
|
description?.text = item.description
|
||||||
|
start?.text = Formatter.getTime(item.startTS)
|
||||||
|
|
||||||
|
if (item.startTS == item.endTS) {
|
||||||
|
end?.visibility = View.INVISIBLE
|
||||||
|
} else {
|
||||||
|
end?.text = Formatter.getTime(item.endTS)
|
||||||
|
end?.visibility = View.VISIBLE
|
||||||
|
|
||||||
|
val startCode = Formatter.getDayCodeFromTS(item.startTS)
|
||||||
|
val endCode = Formatter.getDayCodeFromTS(item.endTS)
|
||||||
|
if (startCode != endCode) {
|
||||||
|
end?.append(" (${Formatter.getEventDate(context, endCode)})")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
start?.setTextColor(mTextColor)
|
||||||
|
end?.setTextColor(mTextColor)
|
||||||
|
title.setTextColor(mTextColor)
|
||||||
|
description?.setTextColor(mTextColor)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val item = mEvents[position] as ListSection
|
||||||
|
viewHolder.title.text = item.title
|
||||||
|
viewHolder.title.setCompoundDrawablesWithIntrinsicBounds(null, if (position == 0) null else mTopDivider, null, null)
|
||||||
|
viewHolder.title.setTextColor(mTextColor)
|
||||||
|
}
|
||||||
|
|
||||||
|
return view
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setTextColor(color: Int) {
|
||||||
|
mTextColor = color
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getItemViewType(position: Int) = if (mEvents[position] is ListEvent) ITEM_EVENT else ITEM_HEADER
|
||||||
|
|
||||||
|
override fun getViewTypeCount() = 2
|
||||||
|
|
||||||
|
override fun getCount() = mEvents.size
|
||||||
|
|
||||||
|
override fun getItem(position: Int) = mEvents[position]
|
||||||
|
|
||||||
|
override fun getItemId(position: Int) = 0L
|
||||||
|
|
||||||
|
internal class ViewHolder(view: View) {
|
||||||
|
val title = view.event_item_title
|
||||||
|
val description: TextView? = view.event_item_description
|
||||||
|
val start: TextView? = view.event_item_start
|
||||||
|
val end: TextView? = view.event_item_end
|
||||||
|
}
|
||||||
|
}
|
@@ -1,6 +1,5 @@
|
|||||||
package com.simplemobiletools.calendar.helpers
|
package com.simplemobiletools.calendar.helpers
|
||||||
|
|
||||||
import android.app.PendingIntent
|
|
||||||
import android.appwidget.AppWidgetManager
|
import android.appwidget.AppWidgetManager
|
||||||
import android.appwidget.AppWidgetProvider
|
import android.appwidget.AppWidgetProvider
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
@@ -10,18 +9,11 @@ import android.content.res.Resources
|
|||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.widget.RemoteViews
|
import android.widget.RemoteViews
|
||||||
import com.simplemobiletools.calendar.R
|
import com.simplemobiletools.calendar.R
|
||||||
import com.simplemobiletools.calendar.activities.DayActivity
|
|
||||||
import com.simplemobiletools.calendar.adapters.EventListWidgetAdapter
|
|
||||||
import com.simplemobiletools.calendar.extensions.adjustAlpha
|
import com.simplemobiletools.calendar.extensions.adjustAlpha
|
||||||
import com.simplemobiletools.calendar.models.Event
|
import com.simplemobiletools.calendar.services.WidgetService
|
||||||
import com.simplemobiletools.calendar.models.ListEvent
|
|
||||||
import com.simplemobiletools.calendar.models.ListItem
|
|
||||||
import com.simplemobiletools.calendar.models.ListSection
|
|
||||||
import org.joda.time.DateTime
|
|
||||||
import java.util.*
|
|
||||||
import kotlin.comparisons.compareBy
|
|
||||||
|
|
||||||
class MyWidgetListProvider : AppWidgetProvider(), DBHelper.GetEventsListener {
|
|
||||||
|
class MyWidgetListProvider : AppWidgetProvider() {
|
||||||
companion object {
|
companion object {
|
||||||
private var mTextColor = 0
|
private var mTextColor = 0
|
||||||
|
|
||||||
@@ -34,7 +26,6 @@ class MyWidgetListProvider : AppWidgetProvider(), DBHelper.GetEventsListener {
|
|||||||
|
|
||||||
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
|
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
|
||||||
initVariables(context)
|
initVariables(context)
|
||||||
updateWidget()
|
|
||||||
super.onUpdate(context, appWidgetManager, appWidgetIds)
|
super.onUpdate(context, appWidgetManager, appWidgetIds)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,41 +44,13 @@ class MyWidgetListProvider : AppWidgetProvider(), DBHelper.GetEventsListener {
|
|||||||
|
|
||||||
val bgColor = prefs.getInt(WIDGET_BG_COLOR, Color.BLACK)
|
val bgColor = prefs.getInt(WIDGET_BG_COLOR, Color.BLACK)
|
||||||
mRemoteViews.setInt(R.id.widget_event_list, "setBackgroundColor", bgColor)
|
mRemoteViews.setInt(R.id.widget_event_list, "setBackgroundColor", bgColor)
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateWidget() {
|
val intent = Intent(context, WidgetService::class.java)
|
||||||
|
mRemoteViews.setRemoteAdapter(R.id.widget_event_list, intent)
|
||||||
|
|
||||||
val thisWidget = ComponentName(mContext, MyWidgetListProvider::class.java)
|
val thisWidget = ComponentName(mContext, MyWidgetListProvider::class.java)
|
||||||
AppWidgetManager.getInstance(mContext).updateAppWidget(thisWidget, mRemoteViews)
|
AppWidgetManager.getInstance(mContext).updateAppWidget(thisWidget, mRemoteViews)
|
||||||
|
|
||||||
val fromTS = (DateTime().millis / 1000).toInt()
|
|
||||||
val toTS = (DateTime().plusMonths(6).millis / 1000).toInt()
|
|
||||||
DBHelper(mContext).getEvents(fromTS, toTS, this)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupDayOpenIntent(id: Int, dayCode: String) {
|
|
||||||
Intent(mContext, DayActivity::class.java).apply {
|
|
||||||
putExtra(DAY_CODE, dayCode)
|
|
||||||
val pendingIntent = PendingIntent.getActivity(mContext, Integer.parseInt(dayCode), this, 0)
|
|
||||||
mRemoteViews.setOnClickPendingIntent(id, pendingIntent)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initPrefs(context: Context) = context.getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE)
|
private fun initPrefs(context: Context) = context.getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE)
|
||||||
|
|
||||||
override fun gotEvents(events: MutableList<Event>) {
|
|
||||||
val listItems = ArrayList<ListItem>(events.size)
|
|
||||||
val sorted = events.sortedWith(compareBy({ it.startTS }, { it.endTS }, { it.title }, { it.description }))
|
|
||||||
var prevCode = ""
|
|
||||||
sorted.forEach {
|
|
||||||
val code = Formatter.getDayCodeFromTS(it.startTS)
|
|
||||||
if (code != prevCode) {
|
|
||||||
val day = Formatter.getDayTitle(mContext, code)
|
|
||||||
listItems.add(ListSection(day))
|
|
||||||
prevCode = code
|
|
||||||
}
|
|
||||||
listItems.add(ListEvent(it.id, it.startTS, it.endTS, it.title, it.description))
|
|
||||||
}
|
|
||||||
|
|
||||||
val eventsAdapter = EventListWidgetAdapter(mContext, listItems)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,9 @@
|
|||||||
|
package com.simplemobiletools.calendar.services
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.widget.RemoteViewsService
|
||||||
|
import com.simplemobiletools.calendar.adapters.EventListWidgetAdapter
|
||||||
|
|
||||||
|
class WidgetService : RemoteViewsService() {
|
||||||
|
override fun onGetViewFactory(intent: Intent) = EventListWidgetAdapter(applicationContext, intent)
|
||||||
|
}
|
Reference in New Issue
Block a user