[sugar] Record (was Re: VoiceThreads ... a very interesting education service)

2008-04-16 Thread Morgan Collett
On Wed, Apr 16, 2008 at 4:48 AM, Gary C Martin [EMAIL PROTECTED] wrote:
  ** except for the (my opinion) design flaw where you can't share
  existing recordings, only ones you record after  someone else joins a
  shared session – so no point taking a bunch of photos of things and
  then clicking share – no one sees anything. For a test, a while back,
  I set up a Record session, named it 'View out your window', took a
  couple of photos, and turned sharing on. A bunch of folks joined over
  an hour or so and left photos of their view, but they couldn't see my
  photos, and I could only see a thumbnail of their photos (gave a
  network time-out error if I tried to click a thumb). Still a
  fascinating exercise even if it didn't quite go to plan (showed the
  potential).

Record sends the thumbnails as people take photos, and only transfers
the full photo when you click on it. That assumes the XO with that
photo is still around - or that someone else in the shared session has
obtained that photo from the sharer. I've logged #6896 about improving
this.

I've logged #6897 about joiners getting existing content in the
session. I think it depends on #4497, which is a redesign of the
collaboration in Record.

  *** If you could resume a pre-recorded Record activity *AND* then
  share it out, it could be a good way to do photo journal type homework
  or research. Perhaps needs a better playback mode (text notes and
  images shown at once; ability to reorder the items in the bottom pane;
  ability to take a photo, then record audio associated with it).

Feel free to express your opinions in Trac :)

  Maybe if Journal item sharing arrives as some point, this will be a
  practical way of generating and sharing similar content.

Yes - although that's more transfer of content than collaborating
together in the activity (as I understand it).

Morgan
___
Sugar mailing list
Sugar@lists.laptop.org
http://lists.laptop.org/listinfo/sugar


Re: [sugar] Record (was Re: VoiceThreads ... a very interesting education service)

2008-04-16 Thread Tomeu Vizoso
On Wed, Apr 16, 2008 at 11:05 AM, Morgan Collett
[EMAIL PROTECTED] wrote:
 On Wed, Apr 16, 2008 at 4:48 AM, Gary C Martin [EMAIL PROTECTED] wrote:
Maybe if Journal item sharing arrives as some point, this will be a
practical way of generating and sharing similar content.

  Yes - although that's more transfer of content than collaborating
  together in the activity (as I understand it).

Perhaps we could distinguish between synchronous and asynchronous
collaboration? Transfer of frozen activities may serve for the
later.

Tomeu
___
Sugar mailing list
Sugar@lists.laptop.org
http://lists.laptop.org/listinfo/sugar


Re: [sugar] [Server-devel] sugar roadmap

2008-04-16 Thread Martin Langhoff
On Tue, Apr 15, 2008 at 8:29 PM, Benj. Mako Hill [EMAIL PROTECTED] wrote:
   On Sun, Apr 13, 2008 at 10:02 PM, Martin Langhoff
 Personally, I have been dreaming of a mix between ion3 and Sugar's
 4-zoom-stages. Talking with some hard-core ion3 friends, they seemed
 to be convinced that it was doable as a special configuration, binding
 the F1-F3 keys to full screen apps, and having a nested X in F4.

  Yes. This would be pretty simple. I'd be happy to help someone hack
  this up. Ion3 is extensible in Lua and a little bit of Lua will get
  tihs up and running pretty quickly.

The whole plan would look like

 - Network-pane visual app on F1
 - Network-local-resources+Friends visual app on F2
 - Desktop mgmt app on F3
 - F4 as an ion3 managed desktop

with the whole concert of things managed by Ion3. Good to know that
the Ion3 Lua part is doable and relatively easy. The visual apps
needed for F1/2 are probably a ton of work.

H. A weekend project for next time I have a weekend (next one up:
Feb 2010 I think ;-) ). Maybe next time I'm in Cambridge we can
explore it together if you have time+inclination...

cheers,



m



-- 
 [EMAIL PROTECTED]
 [EMAIL PROTECTED] -- School Server Architect
 - ask interesting questions
 - don't get distracted with shiny stuff - working code first
 - http://wiki.laptop.org/go/User:Martinlanghoff
___
Sugar mailing list
Sugar@lists.laptop.org
http://lists.laptop.org/listinfo/sugar


Re: [sugar] [Server-devel] sugar roadmap

2008-04-16 Thread Tomeu Vizoso
On Wed, Apr 16, 2008 at 2:52 PM, Martin Langhoff
[EMAIL PROTECTED] wrote:
 On Tue, Apr 15, 2008 at 8:29 PM, Benj. Mako Hill [EMAIL PROTECTED] wrote:
 On Sun, Apr 13, 2008 at 10:02 PM, Martin Langhoff

  Personally, I have been dreaming of a mix between ion3 and Sugar's
   4-zoom-stages. Talking with some hard-core ion3 friends, they seemed
   to be convinced that it was doable as a special configuration, 
 binding
   the F1-F3 keys to full screen apps, and having a nested X in F4.
  
Yes. This would be pretty simple. I'd be happy to help someone hack
this up. Ion3 is extensible in Lua and a little bit of Lua will get
tihs up and running pretty quickly.

  The whole plan would look like

   - Network-pane visual app on F1
   - Network-local-resources+Friends visual app on F2
   - Desktop mgmt app on F3
   - F4 as an ion3 managed desktop

You mean the zoom levels when you talk about F1, F2, etc, right?

  with the whole concert of things managed by Ion3. Good to know that
  the Ion3 Lua part is doable and relatively easy. The visual apps
  needed for F1/2 are probably a ton of work.

Apps or rather windows created by the shell process?

  H. A weekend project for next time I have a weekend (next one up:
  Feb 2010 I think ;-) ). Maybe next time I'm in Cambridge we can
  explore it together if you have time+inclination...

Can we have some more discussion here? I'm very intrigued about all this.

Thanks,

Tomeu
___
Sugar mailing list
Sugar@lists.laptop.org
http://lists.laptop.org/listinfo/sugar


Re: [sugar] [Server-devel] sugar roadmap

2008-04-16 Thread Martin Langhoff
On Wed, Apr 16, 2008 at 8:22 AM, Marco Pesenti Gritti
[EMAIL PROTECTED] wrote:
  What is the goal exactly? I can only spot two real differences from
  how the Sugar shell currently works:
...
  Is there anything I'm missing? Is the point to be able to run desktop
  applications?

Yes. A Sugar-like ZUI for big kids that want to bridge the
Gnome/KDE/XFCE world with the ion3 spartanness.

cheers,



m
-- 
 [EMAIL PROTECTED]
 [EMAIL PROTECTED] -- School Server Architect
 - ask interesting questions
 - don't get distracted with shiny stuff - working code first
 - http://wiki.laptop.org/go/User:Martinlanghoff
___
Sugar mailing list
Sugar@lists.laptop.org
http://lists.laptop.org/listinfo/sugar


[sugar] [PATCH] Improve formatting of relative dates

2008-04-16 Thread Eben Eliason

From adcd918d40fb3e45d7e3c2239104ab95de003c14 Mon Sep 17 00:00:00 2001
From: Eben Eliason [EMAIL PROTECTED]
Date: Tue, 15 Apr 2008 22:43:49 -0400
Subject: [PATCH] Improve formatting of relative dates

This limits disply of relative dates to units that are
within max_levels of magnitude from the primary unit.  In
other words, (years, months), (weeks, days), or (hours, min),
but not (weeks, hours) if max_levels is 2.

It also changes the appearance of just created entries and
adds the ago suffix to indicate the passage of time.
---
 misc.py |   21 +++--
 1 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/misc.py b/misc.py
index 652930e..bcfd596 100644
--- a/misc.py
+++ b/misc.py
@@ -93,7 +93,8 @@ units = [['%d year',   '%d years',   356 * 24 * 60 * 60],
 
 AND = _(' and ')
 COMMA = _(', ')
-RIGHT_NOW = _('Right now')
+NOW = _('Seconds ago')
+AGO = _(' ago')
 
 # Explanation of the following hack:
 # The xgettext utility extracts plural forms by reading the strings included as
@@ -119,29 +120,29 @@ def _get_elapsed_string(timestamp, max_levels=2):
 levels = 0
 result = ''
 elapsed_seconds = int(time.time() - timestamp)
+
 for name_singular, name_plural, factor in units:
 elapsed_units = elapsed_seconds / factor
 if elapsed_units  0:
 
 if levels  0:
-if max_levels - levels == 1:
-result += AND
-else:
-result += COMMA
+result += COMMA
 
 result += gettext.ngettext(name_singular, name_plural,
 elapsed_units) % elapsed_units
 
 elapsed_seconds -= elapsed_units * factor
-levels += 1
 
-if levels == max_levels:
-break
+if result != '':
+levels += 1
 
+if levels == max_levels:
+break
+
 if levels == 0:
-return RIGHT_NOW
+return NOW
 
-return result
+return result + AGO
 
 def get_date(jobject):
  Convert from a string in iso format to a more human-like format. 
-- 
1.5.3.3

___
Sugar mailing list
Sugar@lists.laptop.org
http://lists.laptop.org/listinfo/sugar


Re: [sugar] [PATCH] Add support for inline renaming of Journal entries

2008-04-16 Thread Eben Eliason
The former patch cut some comments that should have been cut (and now
have been) in the initial visual patch.  This eliminates those parts
of the patch.

- Eben

On Wed, Apr 16, 2008 at 11:24 AM, Eben Eliason [EMAIL PROTECTED] wrote:


From 2b22fbce63388a82aa57a91d1247c481fdf4ff3b Mon Sep 17 00:00:00 2001
From: Eben Eliason [EMAIL PROTECTED]
Date: Wed, 16 Apr 2008 00:29:14 -0400
Subject: [PATCH] Add support for inline renaming of Journal entries.

This provides support for renaming Journal entries
directly within the list view, by clicking on the
title field.
---
 collapsedentry.py |   55 +
 1 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/collapsedentry.py b/collapsedentry.py
index 9fff01a..26a9642 100644
--- a/collapsedentry.py
+++ b/collapsedentry.py
@@ -28,6 +28,7 @@ from sugar.graphics.xocolor import XoColor
 from sugar.graphics import style
 from sugar.datastore import datastore
 from sugar.graphics.roundbox import CanvasRoundBox
+from sugar.graphics.entry import CanvasEntry
 
 from keepicon import KeepIcon
 import misc
@@ -84,7 +85,17 @@ class CollapsedEntry(hippo.CanvasBox):
 self._icon = self._create_icon()
 self.append(self._icon)
 
+self._title_entry = self._create_title_entry()
+self._title_entry.props.widget.connect('focus-out-event',
+   self._title_entry_focus_out_event_cb)
+self._title_entry.connect('key-press-event',
+  self._title_entry_key_press_event_cb)
+self.append(self._title_entry, hippo.PACK_EXPAND)
+self._title_entry.set_visible(False)
+
 self._title = self._create_title()
+self._title.connect('button_release_event',
+self._title_button_release_event_cb)
 self.append(self._title, hippo.PACK_EXPAND)
 
 self._buddies_list = self._create_buddies_list()
@@ -135,6 +146,11 @@ class CollapsedEntry(hippo.CanvasBox):
  size_mode=hippo.CANVAS_SIZE_ELLIPSIZE_END)
 return title
 
+def _create_title_entry(self):
+title = CanvasEntry()
+title.set_background(style.COLOR_WHITE.get_html())
+return title
+
 def _create_buddies_list(self):
 return BuddyList([], self._BUDDIES_COL_WIDTH)
 
@@ -223,6 +239,43 @@ class CollapsedEntry(hippo.CanvasBox):
 self._jobject.resume()
 return True
 
+def _title_button_release_event_cb(self, button, event):
+self._title.set_visible(False)
+self._title_entry.set_visible(True)
+self._title_entry.props.widget.grab_focus()
+
+def _title_entry_focus_out_event_cb(self, entry, event):
+self._set_title(entry.props.text)
+self._title_entry.set_visible(False)
+self._title.set_visible(True)
+
+def _title_entry_key_press_event_cb(self, entry, event):
+if event.key == hippo.KEY_RETURN:
+self._set_title(entry.props.text)
+self._title_entry.set_visible(False)
+self._title.set_visible(True)
+elif event.key == hippo.KEY_ESCAPE:
+entry.props.text = self._title.props.text
+self._title_entry.set_visible(False)
+self._title.set_visible(True)
+
+def _set_title(self, title):
+if title == '':
+self._title_entry.props.text = self._title.props.text
+elif self._title.props.text != title:
+self._title.props.text = title
+self._jobject.metadata['title'] = title
+self._jobject.metadata['title_set_by_user'] = '1'
+datastore.write(self._jobject, update_mtime=False,
+reply_handler=self._datastore_write_cb,
+error_handler=self._datastore_write_error_cb)
+
+def _datastore_write_cb(self):
+pass
+
+def _datastore_write_error_cb(self):
+logging.error('CollapsedEntry._datastore_write_error_cb: %r' % error)
+
 def _detail_button_release_event_cb(self, button, event):
 logging.debug('_detail_button_release_event_cb')
 if not self._is_in_progress():
@@ -256,6 +309,7 @@ class CollapsedEntry(hippo.CanvasBox):
 self._icon.props.fill_color=style.COLOR_TRANSPARENT.get_svg()
 self._icon.props.stroke_color=style.COLOR_BLACK.get_svg()
 self._title.props.text = self._format_title() + _(' Activity')
+self._title_entry.props.text = self._format_title() + _(' Activity')
 else:
 if jobject.metadata.has_key('icon-color') and \
jobject.metadata['icon-color']:
@@ -264,6 +318,7 @@ class CollapsedEntry(hippo.CanvasBox):
 else:
 self._icon.props.xo_color = None
 self._title.props.text = self._format_title()
+self._title_entry.props.text = self._format_title()
 
 

Re: [sugar] [PATCH] support battery-charge-state-dependent battery frame icon

2008-04-16 Thread Eben Eliason
So, I'm not the authoritative source on this, but I'll toss in my thoughts...

  +lvl = self._level
  +secondary_text = ''
  +status_text = '%s%%' % lvl

I would avoid declaring variables unless they really make serve a
purpose.  Here it seems to add a level of indirection to what's going
on, actually making it less clear.  For instance, lvl = self._level
just duplicates a private variable that already exists, which for that
matter is only used twice.  The same goes for status_text...it's only
used in one place.  The introduction of the secondary_text variable
also adds indirection, since you have to follow it through to its use
in the assignment at the end.  It would be clearer to do this
assignment in place, skipping the temp variable.

  +if lvl = 15:
  +secondary_text = _('Very little power remaining')

This is probably the correct place to fire off a notification, and
perhaps even badge the icon with a warning badge.  Of course, all of
the necessary components aren't in place for this to work perfectly
just yet...not sure if it's worth adding at this point.  It would
depend, at a minimum on Eric Burns' forthcoming notification patch for
specifying the appropriate screen corner.

  +minutes = _('m')
  +hours = _('h')
  +#TODO: make this less of an wild/educated guess
  +minutes_left = int(lvl / 0.59)
  +if minutes_left  60:
  +guess_text = '%s%s' % (minutes_left, minutes)
  +else:
  +hours_left = minutes_left / 60
  +mins_leftover = minutes_left % 60
  +guess_text = '%s%s%s%s' % (hours_left, hours,
  +   mins_leftover, minutes)

I think I'd prefer the format 1:23 remaining, without the extra 'h'
and 'm' business.  Also, I'd use a more descriptive variable name like
time_left; guess_text is somewhat ambiguous, apart from the context.
In fact, I might forego that string completely in favor of calculating
hours_left and mins_left variables, and then directly doing:

self.props.secondary_text = '%d:%.2d %s' + (hours, mins, _('remaining'))

Note that we need to ensure the minutes string contains two digits
(.2), and also that we are passing integers (%d).

  +mins_leftover = minutes_left % 60

I would personally just overwrite the minutes_left variable here
instead of creating a new one.

Of course, many of my changes depend on whether or not people think
that the guesswork employed here is worth implementing.

- Eben
___
Sugar mailing list
Sugar@lists.laptop.org
http://lists.laptop.org/listinfo/sugar


[sugar] [PATCH] Add prelight to buttons in Journal list

2008-04-16 Thread Eben Eliason
These two patches are both pretty simple, and each add a prelight
state to buttons in the list view of the Journal.  I include them
together as they're similar, but also because they both suffer a
common glitch, which I'm going to assume is a bug in Hippo.  Despite
connecting to MOTION_NOTIFY events for both ENTER and LEAVE, the
prelight states only appear when the mouse is clicked on the icons.
Something in the event processing is acting strangely.

Ideas as to the cause (or corrections of a stupid mistake of my own)
are appreciated.

- Eben
From ad37e9584c51ad21671ebcc251305287049e1c97 Mon Sep 17 00:00:00 2001
From: Eben Eliason [EMAIL PROTECTED]
Date: Wed, 16 Apr 2008 01:50:25 -0400
Subject: [PATCH] Add prelight to favorite icons

---
 keepicon.py |   10 ++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/keepicon.py b/keepicon.py
index ace98e2..ba0f180 100644
--- a/keepicon.py
+++ b/keepicon.py
@@ -15,6 +15,7 @@
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 import gobject
+import hippo
 
 from sugar.graphics.icon import CanvasIcon
 from sugar.graphics import style
@@ -30,6 +31,8 @@ class KeepIcon(CanvasIcon):
 CanvasIcon.__init__(self, icon_name='emblem-favorite',
 box_width=style.GRID_CELL_SIZE * 3 / 5,
 size=style.SMALL_ICON_SIZE)
+self.connect('motion-notify-event', self.__motion_notify_event_cb)
+
 self._keep = None
 self._set_keep(keep)
 
@@ -56,3 +59,10 @@ class KeepIcon(CanvasIcon):
 else:
 return CanvasIcon.do_get_property(self, pspec)
 
+def __motion_notify_event_cb(self, icon, event):
+if not self._keep:
+if event.detail == hippo.MOTION_DETAIL_ENTER:
+icon.props.fill_color = style.COLOR_BUTTON_GREY.get_svg()
+elif event.detail == hippo.MOTION_DETAIL_LEAVE:
+icon.props.fill_color = style.COLOR_TRANSPARENT.get_svg()
+
-- 
1.5.3.3

From 3a51a492d0b3394188b25e08fa8f8ea6d747a32b Mon Sep 17 00:00:00 2001
From: Eben Eliason [EMAIL PROTECTED]
Date: Wed, 16 Apr 2008 18:01:54 -0400
Subject: [PATCH] Add prelight to detail button of journal entries

---
 collapsedentry.py |8 
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/collapsedentry.py b/collapsedentry.py
index 26a9642..8584ac4 100644
--- a/collapsedentry.py
+++ b/collapsedentry.py
@@ -105,6 +105,8 @@ class CollapsedEntry(hippo.CanvasBox):
 self.append(self._date)
 
 self._detail_button = self._create_detail_button()
+self._detail_button.connect('motion-notify-event',
+self._detail_button_motion_notify_event_cb)
 self.append(self._detail_button)
 if not self._allow_resume:
  self.set_child_visible(self._detail_button, False)
@@ -282,6 +284,12 @@ class CollapsedEntry(hippo.CanvasBox):
 self.emit('entry-activated')
 return True
 
+def _detail_button_motion_notify_event_cb(self, button, event):
+if event.detail == hippo.MOTION_DETAIL_ENTER:
+button.props.fill_color = style.COLOR_TOOLBAR_GREY.get_svg()
+elif event.detail == hippo.MOTION_DETAIL_LEAVE:
+button.props.fill_color = style.COLOR_BUTTON_GREY.get_svg()
+
 def _cancel_button_release_event_cb(self, button, event):
 logging.debug('_cancel_button_release_event_cb')
 datastore.delete(self._jobject.object_id)
-- 
1.5.3.3

___
Sugar mailing list
Sugar@lists.laptop.org
http://lists.laptop.org/listinfo/sugar


[sugar] [PATCH] (Incomplete) Activity Launch Feedback

2008-04-16 Thread Eben Eliason
This patch is mainly for Marco, who plans to help me finish and clean
up the new activity launcher.  It's currently full of TODOs, comments,
temporary hacks, etc, but it's in a nearly complete state inasmuch
as it will run smoothly despite the partially unfinished and poorly
styled implementation.

Also, launchbox.py is a new file to be added to src/view/home/ in
addition to applying the patch, and of course you'll need to edit the
Makefile to include it as well.

Marco, take a peek at the various comments I've made; I look forward
to hearing your thoughts on the remainder.  It's looking good so far.

- Eben
diff --git a/src/model/shellmodel.py b/src/model/shellmodel.py
index 1834fcd..847136c 100644
--- a/src/model/shellmodel.py
+++ b/src/model/shellmodel.py
@@ -36,6 +36,7 @@ class ShellModel(gobject.GObject):
 ZOOM_FRIENDS = 1
 ZOOM_HOME = 2
 ZOOM_ACTIVITY = 3
+ZOOM_LAUNCH = 4
 
 __gproperties__ = {
 'state'  : (int, None, None,
diff --git a/src/view/Shell.py b/src/view/Shell.py
index 2810c74..27a7123 100644
--- a/src/view/Shell.py
+++ b/src/view/Shell.py
@@ -151,16 +151,26 @@ class Shell(gobject.GObject):
 activityfactory.create(bundle_id, handle)
 
 def notify_launch(self, bundle_id, activity_id):
-# Zoom to Home for launch feedback
-self.set_zoom_level(shellmodel.ShellModel.ZOOM_HOME)
-
 home_model = self._model.get_home()
 home_model.notify_activity_launch(activity_id, bundle_id)
 
+# Zoom in for launch feedback, except for Journal
+if bundle_id != 'org.laptop.JournalActivity':
+# TODO: How do I get the home_activity object properly?
+home_activity = home_model._get_activity_by_id(activity_id)
+self._home_window.do_activity_launch(home_activity.get_icon_path(),
+ home_activity.get_icon_color())
+self.set_zoom_level(shellmodel.ShellModel.ZOOM_LAUNCH)
+
+# TODO: This never gets called...why?
 def notify_launch_failure(self, activity_id):
 home_model = self._model.get_home()
 home_model.notify_activity_launch_failed(activity_id)
 
+# TODO: Add failure alert to launchbox; zoom home for now
+print 'Launch Failure...returning to home zoom level'
+self.set_zoom_level(shellmodel.ShellModel.ZOOM_HOME)
+
 def start_activity(self, activity_type):
 if activity_type in self._activities_starting:
 logging.debug(This activity is still launching.)
@@ -185,16 +195,26 @@ class Shell(gobject.GObject):
 except dbus.DBusException, e:
 logging.debug('Error raised by TakeScreenshot(): %s', e)
 
+def set_launching_icon(self, icon_path, icon_color):
+# There is a race condition here, if set_zoom_level gets called first
+# We could call set_zoom_level(ZOOM_LAUNCH) within this function instead
+zoom = self._model.get_zoom_level()  shellmodel.ShellModel.ZOOM_ACTIVITY
+self._home_window.set_launching_icon(icon_path, icon_color, zoom)
+
 def set_zoom_level(self, level):
 if level == self._model.get_zoom_level():
 return
 
 self.take_activity_screenshot()
 
+# TODO: We could check here to see if the selected activity is
+# launching, and interpret ZOOM_LAUNCH if so.
 if level == shellmodel.ShellModel.ZOOM_ACTIVITY:
 if self._pending_host is not None:
 self._pending_host.present()
 self._screen.toggle_showing_desktop(False)
+self._model.set_zoom_level(level)
+self._home_window.set_zoom_level(level)
 else:
 self._model.set_zoom_level(level)
 self._screen.toggle_showing_desktop(True)
diff --git a/src/view/frame/activitiestray.py b/src/view/frame/activitiestray.py
index f50a308..2b4cd72 100644
--- a/src/view/frame/activitiestray.py
+++ b/src/view/frame/activitiestray.py
@@ -43,6 +43,10 @@ class ActivityButton(RadioToolButton):
 
 self._home_activity = home_activity
 
+# TODO: Clean up this temporary hack to access the info
+self.icon_path = home_activity.get_icon_path()
+self.icon_color = home_activity.get_icon_color()
+
 self._icon = PulsingIcon()
 self._icon.props.base_color = home_activity.get_icon_color()
 self._icon.props.pulse_color = \
@@ -68,23 +72,23 @@ class ActivityButton(RadioToolButton):
 self._notify_launching_hid = home_activity.connect('notify::launching',
 self.__notify_launching_cb)
 
-self._notif_icon = NotificationIcon()
-self._notif_icon.props.xo_color = home_activity.get_icon_color()
-if home_activity.get_icon_path():
-self._notif_icon.props.icon_filename = home_activity.get_icon_path()
-else:
-self._notif_icon.props.icon_name = 'image-missing'
-