populating list widget with some test data

This commit is contained in:
tibbi
2016-11-29 18:53:26 +01:00
parent 42747a5914
commit 98877c9fb0
6 changed files with 187 additions and 125 deletions

View File

@@ -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">

View File

@@ -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

View File

@@ -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) {
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) { override fun getLoadingView() = null
mTextColor = color
notifyDataSetChanged() 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) { private fun getListItems(): ArrayList<ListItem> {
val title = view.event_item_title val listItems = ArrayList<ListItem>(10)
val description: TextView? = view.event_item_description var dateTime = DateTime.now().withTime(0, 0, 0, 0).plusDays(1)
val start: TextView? = view.event_item_start var code = Formatter.getDayCodeFromTS((dateTime.millis / 1000).toInt())
val end: TextView? = view.event_item_end 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
} }
} }

View File

@@ -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
}
}

View File

@@ -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)
}
} }

View File

@@ -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)
}