sobota, 28 grudnia 2013

O kontrolkach Telerika dla Windows Phone 7

Wstrzymywałem się z napisaniem tego posta, ale ostatnio moje aplikacje korzystające z RadControls for Windows Phone nie działają jak powinny...

Błędy w kontrolkach

Już od jakiegoś czasu spisywałem irytujące błędy w kontrolkach Telerika:
  1. AutoComplete rzucał wyjątkiem podczas wyboru podpowiedzi (poprawiono). Ten błąd nie został przeze mnie wyłapany podczas publikowania aktualizacji Listy zakupów, przez co posypało się kilka negatywnych recenzji :-(
  2. Innym razem RadMessageBox zawsze zwracał informację, że został wciśnięty przycisk nr 1, mimo że było ich kilka (poprawiono).
  3. LiveTileHelper działa zawodnie przy zrzucaniu kontrolki do kafelka. Co któryś raz kafelek nie jest renderowany prawidłowo, a cała operacja działa zadziwiająco wolno.

    Raczej lepszym sposobem będzie samodzielny zrzut kontrolki do obrazka (przykładowy kod). Wynik jest świetny - kafelek po lewej to wynik działania Telerikowej kontrolki, po prawej to własny kod:


Wnioski

Nie chcę powiedzieć, że programiści nie mają prawa popełniać błędów, ale przy płatnych narzędziach wymagam przynajmniej, aby podstawowa funkcjonalność była przetestowana. W dwóch pierwszych przykładach tak nie było - błędy były powtarzalne i można je było wyłapać praktycznie przy pierwszym użyciu.

Co więc robić?

  • Nie ufać, że jakikolwiek zewnętrzny komponent jaki używamy jest gruntownie przetestowany. 
  • Samodzielnie testować całą aplikację, zwłaszcza w tych miejscach w których korzystamy z zewnętrznych kontrolek.
  • Samodzielnie pisać kod i ograniczyć korzystanie z zewnętrznych komponentów :-) Przynajmniej mamy kontrolę nad kodem i wiemy jak coś zostało zaimplementowane.
  • Ewentualnie: wstrzymać się z aktualizacją kontrolek w naszym projekcie, jeśli aplikacja działa dobrze i użytkownicy nie zgłaszają błędów.

czwartek, 26 grudnia 2013

Zapis kontrolki do kafelka Live Tile

W bibliotece RadControls for Windows Phone znajduje się mechanizm do zrzucania kontrolki do kafelka Live Tile (przy użyciu LiveTileHelper). Niestety, ta operacja jest bardzo zawodna - często kafelek nie renderuje się prawidłowo (zwłaszcza gdy jest nieco bardziej skomplikowany), a i czas wykonywania pozostawia wiele do życzenia. Nie mam pojęcia jak to ich programiści zaimplementowali, ale postanowiłem wziąc sprawy w swoje ręce, by znaleźć lepsze rozwiązanie!

Kod


Oto mała metoda, która zapisze kontrolkę (która ma być użyta jako Live Tile), a następnie zwróci ścieżkę do pliku w Isolated Storage. Tą ścieżkę następnie musimy dodać do StandardTileData we właściwości BackgroundImage.

I to tyle - obrazkowy kafelek powinien pojawić się na ekranie głównym telefonu! Warto również potestować nazwę kafelka, bo mam wrażenie że raz na jakiś czas nie odświeża się na WP8, a więc można tak zmienić poniższy kod, aby nazwa pliku była generowana z GUID-em. Oczywiście wówczas należy kasować wszystkie nieużywane kafelki, żeby niepotrzebnie nie zużywać pamięci telefonu.

public static string SaveTileToJpeg(UIElement customTile, string filename = "CustomTile.jpg", int width = 336, int height = 336, int quality = 95)
        {
            string dir = "Shared/ShellContent";
            string filePath = dir + "/" + filename;

            customTile.UpdateLayout();
            customTile.Measure(new Size(width, height));
            customTile.UpdateLayout();
            customTile.Arrange(new Rect(0, 0, width, height));

            var bmp = new WriteableBitmap(width, height);
            bmp.Render(customTile, null);
            bmp.Invalidate();

            var myStore = IsolatedStorageFile.GetUserStoreForApplication();
            if (!myStore.DirectoryExists(dir))
            {
                myStore.CreateDirectory(dir);
            }

            using (IsolatedStorageFileStream myFileStream = myStore.CreateFile(filePath))
            {
                bmp.SaveJpeg(myFileStream, bmp.PixelWidth, bmp.PixelHeight, 0, quality);
                myFileStream.Close();
            }

            return "isostore:" + filePath;
        }

A oto przykładowy efekt:

Pomocne linki:

środa, 18 grudnia 2013

Szablony SMS dla Windows Phone

Z pewnością każdy z nas wysyła regularnie SMS-y o podobnej treści, typu "spóźnię się", "będę za 15 minut", czy "kocham cię"... Co więcej, ja te SMSy bardzo często wysyłam podczas jazdy samochodem. Postanowiłem wziąć sprawy w swoje ręce i rozwiązać ten problem! Tak powstała aplikacja o nazwie Szablony wiadomości.

Aplikacja umożliwia tworzenie nieograniczonej liczby szablonów SMS, które następnie wyświetlanie są w oknie głównym z użyciem dużej czcionki, tak aby szybko można było wysłać wiadomość w pośpiechu, np. podczas jazdy samochodem. Aby było jeszcze szybciej, to możemy każdą wiadomość przypiąć do ekranu startowego. Na żywym kafelku pojawi się wówczas treść wiadomości oraz nazwa odbiorcy. W celu dalszego usprawnienia dodałem licznik do każdej wiadomości, dzięki któremu widzimy jak często wysłaliśmy daną wiadomość, a lista szablonów na ekranie głównym jest posortowana malejąco wg wskazania liczników.

Korzystajcie z aplikacji póki darmowa, polubcie ją i udostępniajcie:


Poniżej kilka zrzutów ekranu:

Pobierz tutaj:

niedziela, 8 grudnia 2013

"Pin to start" w różnych językach

Pisząc aplikacje na Windows Phone często chcemy dać użytkownikowi możliwość przypnięcia jakiegoś elementu do menu start. Problem pojawia się, gdy chcemy to sformułowanie przetłumaczyć na inny język tak, aby było zgodne z obowiązujym nazewnictwem WP. Żywi lub automatyczni tłumacze nie do końca sobie z tym radzą, dlatego też zebrałem oficjalne określenia polecenia "przypnij do ekranu startowego" z kilku języków. Może się komuś przyda, mnie na pewno!

  • Angielski: pin to start
  • Czeski: připnout na úvodní obrazovku
  • Duński: fastgør til start
  • Francuski: épingler sur l'écran d'accueil
  • Hiszpański: anclar a inicio
  • Niemiecki: Auf Starten
  • Norweski: fest til start
  • Polski: przypnij do ekranu startowego
  • Portugalski / brazylijski: fixar na tela inicial
  • Szwedzki: fäst på startskärmen
  • Włoski: aggiungere a start

PS. Okazało się, że na stronie Microsoft Terminology Search można samodzielnie wyszukiwać tłumaczenia poleceń w oficjalnej terminologii Microsftu. Wystrarczy wpisać frazę, wybrać język oryginalny i docelowy, a także wybrać produkt (np. Windows Phone). Po chwili otrzymujemy tłumaczenie wraz z krótkim komentarzem. Dostępne jest również API Terminology Service do wyszukiwania tłumaczeń.

Mimo wszystko, jak tylko natkniecie się na nowe tłumaczenia, to dopisujcie je w komentarzach - łatwiej z nich korzystać, gdy są zebrane razem :)