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"/>
|
||||
</receiver>
|
||||
|
||||
<service
|
||||
android:name=".services.WidgetService"
|
||||
android:permission="android.permission.BIND_REMOTEVIEWS"/>
|
||||
|
||||
<receiver android:name=".receivers.NotificationReceiver"/>
|
||||
|
||||
<receiver android:name=".receivers.BootCompletedReceiver">
|
||||
|
@@ -10,7 +10,7 @@ import android.os.Bundle
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.widget.SeekBar
|
||||
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.helpers.*
|
||||
import com.simplemobiletools.calendar.helpers.Formatter
|
||||
@@ -33,7 +33,7 @@ class WidgetListConfigureActivity : AppCompatActivity() {
|
||||
private var mTextColorWithoutTransparency = 0
|
||||
private var mTextColor = 0
|
||||
|
||||
private var mEventsAdapter: EventListWidgetAdapter? = null
|
||||
private var mEventsAdapter: EventListWidgetAdapterOld? = null
|
||||
|
||||
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -49,7 +49,7 @@ class WidgetListConfigureActivity : AppCompatActivity() {
|
||||
if (mWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID)
|
||||
finish()
|
||||
|
||||
mEventsAdapter = EventListWidgetAdapter(this, getListItems())
|
||||
mEventsAdapter = EventListWidgetAdapterOld(this, getListItems())
|
||||
mEventsAdapter!!.setTextColor(mTextColor)
|
||||
config_events_list.adapter = mEventsAdapter
|
||||
|
||||
|
@@ -1,104 +1,86 @@
|
||||
package com.simplemobiletools.calendar.adapters
|
||||
|
||||
import android.appwidget.AppWidgetManager
|
||||
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 android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
import android.graphics.Color
|
||||
import android.widget.RemoteViews
|
||||
import android.widget.RemoteViewsService
|
||||
import com.simplemobiletools.calendar.R
|
||||
import com.simplemobiletools.calendar.extensions.adjustAlpha
|
||||
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.ListItem
|
||||
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() {
|
||||
val ITEM_EVENT = 0
|
||||
val ITEM_HEADER = 1
|
||||
|
||||
private val mInflater: LayoutInflater
|
||||
private var mTopDivider: Drawable? = null
|
||||
private var mTextColor = 0
|
||||
class EventListWidgetAdapter(val context: Context, val intent: Intent) : RemoteViewsService.RemoteViewsFactory {
|
||||
val appWidgetId: Int
|
||||
var events: List<ListItem>
|
||||
val prefs: SharedPreferences
|
||||
val textColor: Int
|
||||
|
||||
init {
|
||||
mInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
||||
mTopDivider = context.resources.getDrawable(R.drawable.divider)
|
||||
prefs = context.getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE)
|
||||
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 {
|
||||
var view = convertView
|
||||
val viewHolder: ViewHolder
|
||||
val type = getItemViewType(position)
|
||||
override fun getViewAt(position: Int): RemoteViews {
|
||||
val rv = RemoteViews(context.packageName, R.layout.event_list_section)
|
||||
rv.setTextViewText(R.id.event_item_title, "hello")
|
||||
rv.setInt(R.id.event_item_title, "setTextColor", textColor)
|
||||
|
||||
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
|
||||
return rv
|
||||
}
|
||||
|
||||
fun setTextColor(color: Int) {
|
||||
mTextColor = color
|
||||
notifyDataSetChanged()
|
||||
override fun getLoadingView() = null
|
||||
|
||||
override fun getViewTypeCount() = 1
|
||||
|
||||
override fun onCreate() {
|
||||
}
|
||||
|
||||
override fun getItemViewType(position: Int) = if (mEvents[position] is ListEvent) ITEM_EVENT else ITEM_HEADER
|
||||
override fun getItemId(position: Int) = position.toLong()
|
||||
|
||||
override fun getViewTypeCount() = 2
|
||||
override fun onDataSetChanged() {
|
||||
}
|
||||
|
||||
override fun getCount() = mEvents.size
|
||||
override fun hasStableIds() = true
|
||||
|
||||
override fun getItem(position: Int) = mEvents[position]
|
||||
override fun getCount() = events.size
|
||||
|
||||
override fun getItemId(position: Int) = 0L
|
||||
override fun onDestroy() {
|
||||
}
|
||||
|
||||
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
|
||||
private fun getListItems(): ArrayList<ListItem> {
|
||||
val listItems = ArrayList<ListItem>(10)
|
||||
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))
|
||||
|
||||
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"))
|
||||
|
||||
dateTime = dateTime.plusDays(1)
|
||||
code = Formatter.getDayCodeFromTS((dateTime.millis / 1000).toInt())
|
||||
day = Formatter.getDayTitle(context, code)
|
||||
listItems.add(ListSection(day))
|
||||
|
||||
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", ""))
|
||||
|
||||
return listItems
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
||||
import android.app.PendingIntent
|
||||
import android.appwidget.AppWidgetManager
|
||||
import android.appwidget.AppWidgetProvider
|
||||
import android.content.ComponentName
|
||||
@@ -10,18 +9,11 @@ import android.content.res.Resources
|
||||
import android.graphics.Color
|
||||
import android.widget.RemoteViews
|
||||
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.models.Event
|
||||
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
|
||||
import com.simplemobiletools.calendar.services.WidgetService
|
||||
|
||||
class MyWidgetListProvider : AppWidgetProvider(), DBHelper.GetEventsListener {
|
||||
|
||||
class MyWidgetListProvider : AppWidgetProvider() {
|
||||
companion object {
|
||||
private var mTextColor = 0
|
||||
|
||||
@@ -34,7 +26,6 @@ class MyWidgetListProvider : AppWidgetProvider(), DBHelper.GetEventsListener {
|
||||
|
||||
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
|
||||
initVariables(context)
|
||||
updateWidget()
|
||||
super.onUpdate(context, appWidgetManager, appWidgetIds)
|
||||
}
|
||||
|
||||
@@ -53,41 +44,13 @@ class MyWidgetListProvider : AppWidgetProvider(), DBHelper.GetEventsListener {
|
||||
|
||||
val bgColor = prefs.getInt(WIDGET_BG_COLOR, Color.BLACK)
|
||||
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)
|
||||
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)
|
||||
|
||||
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