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"/>
</receiver>
<service
android:name=".services.WidgetService"
android:permission="android.permission.BIND_REMOTEVIEWS"/>
<receiver android:name=".receivers.NotificationReceiver"/>
<receiver android:name=".receivers.BootCompletedReceiver">

View File

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

View File

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

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

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