Snowstorm (fd YrVader) - Svensk väderwidget

Diskussion i 'Applikationsutveckling' startad av Kaj, 1 juli 2009.

  1. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 juni 2009
    Inlägg:
    1.768
    Mottagna gillanden:
    44

    MINA ENHETER

    Ibland är regn bra. Nu funkar min kod som skall läsa layoutfiler och rendrera widgets. Tror att formatet på layoutfiler kommer vara rätt lätt för folk att förstå, och man kan i layoutfilen styra hur många perioder som visas i widgeten, vart olika texter skall ligga, och hur de skall vara formaterade.

    Funderar även på att lägga till så att man i filen kan bestämma att man vill ha särskilda grafiska element (som då måste ligga i samma zip som layoutfilen) i widgeten. Sådana element skulle kunna vara bakgrunder, men även annan grafik. Rendreraren läser alltid layoutfilen uppifrån och ned, och man anger position på alla element. På det sättet kan man bygga upp lager vilket gör att någon kan skapa en layout där det t.ex ligger halvtransparenta bilder ovanpå allt annat.
     
    Hund gillar detta.
  2. OliverG

    OliverG Professional Droid Hedersmedlem

    Blev medlem:
    7 oktober 2009
    Inlägg:
    2.900
    Mottagna gillanden:
    125

    MINA ENHETER

    Ser intressant ut. :)
     
  3. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 juni 2009
    Inlägg:
    1.768
    Mottagna gillanden:
    44

    MINA ENHETER

    Nu har jag skapat en vääääldigt enkel editor. Skall fortsätta med det när jag kommer tillbaka från lite resor. Editorn kan just nu bara hantera storlek 4x2, och man kan inte spara sin layoutfil (man får istället göra copy&paste) från textfältet och sedan spara i en textfil.

    Editorn är ful som stryk, och det som visas när man klickar rendrera är inte helt 100% så som det kommer bli i telefonen, men det skall åtminstone vara nära.

    Editorn kan just nu inte heller hantera landscape. När jag kommer tillbaka skall jag göra så att man kan välja widgetstorlek, landscape, visa stödlinjer och göra den snyggare. Ev även göra en propertyeditor så att man kan se vilka egenskaper som finns tillgängliga för varje typ.

    Med editorn följer ett exempel som försöker likna den 4x2 design som snowstorm har idag.

    Editorn finns att hämta här Editor

    Man skriver i textfältet, och klickar sedan rendera. Kryssrutan gör att man väljer att visa "bounds".

    [​IMG]

    [​IMG]
     
    OliverG och Hund gillar detta.
  4. Hund

    Hund Android Hedersmedlem

    Blev medlem:
    15 augusti 2009
    Inlägg:
    5.563
    Mottagna gillanden:
    1.002
    Operatör:
    Fello
    Telefon:
    Google Pixel 7

    MINA ENHETER

    Operatör:
    Fello
    Telefon:
    Google Pixel 7
    ROM:
    GrapheneOS
    Det ser lovande ut! :)
     
  5. asperon

    asperon Adult Droid Medlem

    Blev medlem:
    6 augusti 2009
    Inlägg:
    586
    Mottagna gillanden:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Coolt, vi kanske kan se om vi kan använda samma format på skinsen, känns ju dumt att göra allt det här jobbet två gånger!
     
  6. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 juni 2009
    Inlägg:
    1.768
    Mottagna gillanden:
    44

    MINA ENHETER

    Japp. Det är ett library projekt, så tanken är att det inte skall vara knutet till Snowy/Snowstorm.

    I sin android app behöver man bara implementera ett interface som är en resource handler. När layouten parsats och skall rendreras gör rendreraren callbacks till resource handlers för att "resolva" strängar och bilder.

    Skall senare under dagen förklara filformatet så att folk kan testa editorn och börja fundera på skins. Det är rätt enkelt att förstå, och skall förhoppningsvis vara bakåt/framåt kompatibelt.
     
  7. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 juni 2009
    Inlägg:
    1.768
    Mottagna gillanden:
    44

    MINA ENHETER

    Nu finns det dokumentation:
    snowstorm:layout [AndBin]

    @asperon. Dokumentationen utgår från content som är relevant för Snowy, men strängen som man anger som content skickas med till resource handlern, så om man gör layoutfiler för t.ex en kalender skulle allt se likadant ut, men du skulle t.ex skriva att giltiga contents för din widget är t.ex content=entry[0] för att hämta texten för första kalendereventet.
     
  8. asperon

    asperon Adult Droid Medlem

    Blev medlem:
    6 augusti 2009
    Inlägg:
    586
    Mottagna gillanden:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Strålande, ska se om jag kan hitta lite tid att börja hacka på detta, det är något som jag velat i evigheter men aldrig kommit mig för att göra. Så content kan vara vad som helst och sedan populerar jag dom värden som jag vill kännas vid via koden? Har du funderat något på att kunna beskriva dynamiskt genererad grafik, tex olika långa streck eller liknande? Tänker tex om man skulle vilja göra tex en analog klocka? Läggs bilderna ovanpå varnadra uppifrån eller hur funkar z order?
     
  9. asperon

    asperon Adult Droid Medlem

    Blev medlem:
    6 augusti 2009
    Inlägg:
    586
    Mottagna gillanden:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Lite mera tankar, olika fonter? Kommer du ha en fil för varje widgetstorlek eller komma man kunna ha flera layouts i samma skinfil?
     
  10. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 juni 2009
    Inlägg:
    1.768
    Mottagna gillanden:
    44

    MINA ENHETER

    Japp, du implementerar ResourceHandler. Under rendrering kommer getImage samt getText anropas när rendreraren stöter på Image samt Text element. ResourceHandlern skall retunera en referens till aktuell grafik/text. Interfaces ser ut så här:

    Kod:
    public interface ResourceHandler {
    
    	
    	ImageResource getImage(Image definition);
    	
    	TextResource getText(Text definition);
    	
    	Context getContext();
    	
    	public static final class TextResource {
    		public static enum Type {
    			CharSequence,
    			ResourceId;
    		}
    		
    		public final Type type;
    		public final Object value;
    		public final int resourceId;
    		
    		public TextResource(Type type, Object value, int resourceId) {
    			this.type = type;
    			this.value = value;
    			this.resourceId = resourceId;
    		}
    	}
    	
    	public static final class ImageResource {
    		public static enum Type {
    			Uri,
    			Bitmap,
    			Drawable,
    			ResourceId;
    		}
    		
    		public final Type type;
    		public final Object value;
    		public final int resourceId;
    		
    		public ImageResource(Type type, Object value, int resourceId) {
    			this.type = type;
    			this.value = value;
    			this.resourceId = resourceId;
    		}
    	}
    }
    
    
    Argumenten Image samt Text är definitionerna som är specade i layouten som har parsats. Alla fält är typade, och validerade, förutom content som kan vara valfri sträng. Ett exempel på hur Text-klassen ser ut:

    Kod:
    public class Text extends AbstractElement {
    
    	public final Format format;
    	public final Set<Gravity> gravity;     
    	public final Lines lines; 
    	public final Float size;
    	public final Set<FontStyle> style; 
    	public final Integer color; 
    	public final Integer color2;
    	
    	public Text(String content, int contentIndex, double x, double y, double w, double h, 
    			Set<Gravity> gravity, Lines lines, Float size,
    			Set<FontStyle> style, Integer color, Integer color2, Format format) {
    		
    		super(content, contentIndex, x, y, w, h);
    		this.gravity = Collections.unmodifiableSet(gravity);
    		this.lines = lines;
    		this.size = size;
    		this.style = Collections.unmodifiableSet(style);
    		this.color = color;
    		this.color2 = color2;
    		this.format = format;
    	}
    
    	public void accept(ElementVisitor visitor) {
    		visitor.visit(this);
    	}
    
    AbstractElement:

    Kod:
    public abstract class AbstractElement implements VisitableElement {
    
    	public final String content;
    	public final int contentIndex;
    	public final double x;
    	public final double y;
    	public final double w;
    	public final double h;
    	
    	public AbstractElement(String content, int contentIndex, double x, double y, double w, double h) {
    		this.content = content;
    		this.contentIndex = contentIndex;
    		this.x = x;
    		this.y = y;
    		this.w = w;
    		this.h = h;
    	}
    }
    
    Allt är immutable, och värden är aldrig satta till null, de har antingen ett värde som är angivet i layouten, eller ett defaultvärde.

    När en layout parsas läggs alla element i en lista, elementet som är angivet överst i layoutfilen kommer alltid ritas före elementet som är angivet efter. Dvs allt ritas bakifrån och framåt om man tänker i Z.

    När jag kommer tillbaka from USA ska jag göra clock-elementet. Det kommer ha samma attribut som AbstractElement plus några attribut för att ange digital/analog, och ev resursnamn för visarna. Kanske något mer, men inget jag kommer på nu. I ResourceHandler lägger jag då till metoden getClock(Clock definition)

    Edit: Såg att när jag postade koden togs generics bort. Alla Set har en type. T.ex typen för "Set style" är FontStyle.
     
    Last edited: 22 juni 2011
  11. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 juni 2009
    Inlägg:
    1.768
    Mottagna gillanden:
    44

    MINA ENHETER

    Jag har inte funderat kring fonter mer än några sekunder. Ett tag funderade jag på om man i en layoutpacketering skulle kunna ha med font-filer, men vet inte om det är så bra, rent storleksmässigt, men skulle ev kunna skapa stöd för det.
    Ett alternativ är att du har olika typsnitt i din app, och att användare sedan kan styra val av typsnitt via en property tå textelement.

    Har inte bestämt hur jag skall göra med multipla layoutstorlekar i samma zip. Från början hade jag tänkt tillåta det, och tror fortfarande att jag kommer göra det, men det kommer göra nedladdning av valbara layouter lite knepigare, men bara aningen knepigare.
     
  12. asperon

    asperon Adult Droid Medlem

    Blev medlem:
    6 augusti 2009
    Inlägg:
    586
    Mottagna gillanden:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Funderar på om vi skulle hacka ihop en demo widget, helt utan någon kod från Snowstorm/Smooth bara för att se hur vi kan vända och vrida på formatet. Editorn kommer ju behöva ha inställningar för de olika programmen (både tillgängliga variabler samt fake data).

    Tror att det är bra med olika storlekar i samma, då när man ska välja ett skin så visar vi bara de skin som stödjer den aktuella storleken.
     
  13. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 juni 2009
    Inlägg:
    1.768
    Mottagna gillanden:
    44

    MINA ENHETER

    Skulle kunna fixa till så att editorn laddar sin ResourceHandler dynamiskt via konfigurationsfil eller programargument. Då behöver du bara gör en resource handler som retunerar dummyvärden för din app.

    En demowidget skulle kunna vara bra att ha, och går nog rätt lätt att skapa.

    Jupp, tänker också bara visa layouter som stödjer den widgetstorlek som användaren försöker konfigurera. Kommer troligen använda samma kod som jag använder för skins (utseendet rent layoutmässigt är ändrat i Snowy så att det ser bättre ut, men funkar likadant).

    En grej som inte framgått av min dokumentation är att jag troligen tänker göra så att användaren kan göra override på textfärger, och ev sätta eget alphavärde för bakgrunden.
     
  14. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 juni 2009
    Inlägg:
    1.768
    Mottagna gillanden:
    44

    MINA ENHETER

    ... en annan sak som jag tänkt på, men som jag inte vet om folk som gör layouter kommer använda, är att lägga till så att man kan skriva "selectors" i layouter. Typ, använd denna bakgrundsbilden om det regnar, eller använd denna bakgrundsbilden om det är kväll.

    Har inte riktigt funderat klart på det, och vet som sagt inte om behovet finns.
     
  15. Adam2

    Adam2 Adult Droid Medlem

    Blev medlem:
    26 juli 2010
    Inlägg:
    732
    Mottagna gillanden:
    55

    MINA ENHETER

    Tjenare!
    Trevligt att se att saker för på sig. Trots att snowstorm typ aldrig har uppdaterats sedan jag skaffade en androidtelefon rockar appen, jag kan inte leva utan den.

    Skummade nu bara igenom inläggen och gläds åt upplägget med skins. Dock är jag inte förtjust i skins på market is form av apk-filer. Snyggare och mer användarvänligt vore i min värld att skapa en egen "market" i stil med den som finns i fancy widget tex...
    Inser att detta är ganska långt bort som det ser ut nu men hus ställer du dig till detta Kaj? Market eller eget gränssnitt för förhandsgranskning och installation?

    Sent from my Nexus S using Tapatalk
     
  16. asperon

    asperon Adult Droid Medlem

    Blev medlem:
    6 augusti 2009
    Inlägg:
    586
    Mottagna gillanden:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Det tror jag överlag är bra, för mig tex så kan det vara intressant att ha dagens poster i en färg, eller heldags events eller liknande, så kan man bygga in det i temat och inte i appen så vore det grymt! Sedan tror jag det är bra att man ger användaren möjlighet att overrida lite, för att editera ett tema är det nog inte alla som klarar av.
     
  17. asperon

    asperon Adult Droid Medlem

    Blev medlem:
    6 augusti 2009
    Inlägg:
    586
    Mottagna gillanden:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Jag tror inte på market heller (det blir för rörigt), sd kort eller egen nedladdning i appen (så som snowstorm har idag)
     
  18. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 juni 2009
    Inlägg:
    1.768
    Mottagna gillanden:
    44

    MINA ENHETER

    Stämmer att jag under rätt många månader inte skrev en enda kodrad, men förhoppningsvis skall jag nu slutföra Snowy/Snowstorm 3.0.

    Jag kommer hantera layouter på samma sätt som jag hanterar skins, dvs egen download från appen, alternativt kan folk lägga en layout på sd-kortet på ett specifikt ställe.
     
  19. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 juni 2009
    Inlägg:
    1.768
    Mottagna gillanden:
    44

    MINA ENHETER

    Tänkte bara säga att jag nu är tillbaka i Sverige, och börjat fortsätta kodningen av rendreraren, och ändrat lite på filformatet för att kunna ha stöd för defaultvärden så att man inte behöver upprepa allt som är likadant i alla block. Har även lagt till stöd för custom fonter samt selektorer.
     
    enorlin och Hund gillar detta.
  20. FOO

    FOO Adult Droid Medlem

    Blev medlem:
    15 juli 2009
    Inlägg:
    549
    Mottagna gillanden:
    21

    MINA ENHETER

    Ska bli intressant, iofs så funkar det bra med alla saker jag vill ha (tror jag iaf), men uppdateringar är alltid kul

    Sent from my Nexus One using Tapatalk