-
Posts
1,079 -
Joined
-
Last visited
Never
Everything posted by Samsung Newsroom
-
Hello Everyone! My colleagues are still on holiday, enjoying socially-distant vacations and staycations. While they're on hikes in the Sierra Mountains and swimming in backyard pools, I'll continue on from my post last week. We made big changes to the layout and function of the Samsung Developers site in January, so if you haven't explored the site in detail, here are some highlights. D'ya Like Games? If you're a game developer or have interest in developing games in the future, you'll want to investigate the Galaxy GameDev section of the site. Our colleagues in the GameDev team are building useful tools for optimizing games so they'll run great on Galaxy phones, tablets, as well as other Android devices. The GameDev team is updating their content frequently, so if you want to get the most out of your game projects, check back often. If you have existing game titles and you're interested in expanding your user base, spend some time in the Galaxy Store Games section to learn how to list your games (and other apps) in Galaxy Store. You can also learn how to use Samsung's In-App Purchase (IAP) SDK for new ways to increase your revenue. What's up, Docs? We know, what you're looking for is information and ways to develop faster and smarter. A developer site would not be complete without reams of technical documentation describing the APIs and tools. That's all there, again, with new ways to view and access the information. Most every tool or SDK listed on the top navigation bar has documentation affiliated with it. After choosing a topic from the navigation bar, often you can access the documentation by clicking the "Get Started" button in the header image, or by scrolling down the page and looking for the specific API you are interested in. For example, if you're looking for information on optimizing your apps for foldable devices, use the main navigation bar to go to Build > Mobile and then click the Galaxy Fold icon partway down the page. Test, Test, & Test When you're ready to test your app on a real device, you have a couple of options. The Remote Test Lab allows you to test real devices in labs located in Asia, North America, and Europe. This includes the latest devices like the Galaxy Z Flip or Galaxy S20, as well as Galaxy Watch and Galaxy Tab devices. If you have a Galaxy Android device, you can test locally with your Mac, Linux, or Windows device using the Android platform SDK tools. Windows users will need to install the Samsung-specific USB drivers, which can be found on the developer portal. Feed Me, Again I mentioned the RSS feed features of Discourse in my earlier post. If it's not obvious, I really enjoy the convenience and consistency of reading my day's worth of news all within one app. If I find an article or topic that I want to read in more depth, I'll click the heading and go to the site in my mobile browser or save it for later reading on the desktop. Here, you can see that I can read all the latest posts from Android enthusiast sites, the NY Times, and our very own product teams. The link to the Samsung Developers Portal (SDP) RSS feed can be found at the footer of every page, or you can simply add https://developer.samsung.com/feed to your favorite RSS reader. We Got You Covered If you have a question that can't be answered in the public forums, you can request support through the portal dashboard. If you log into the site using your Samsung Account ID, you can submit a ticket to our Developer Support team. To check on the status of your ticket and read feedback, visit the dashboard Support page. In addition to submitting and viewing support tickets, the portal dashboard is your gateway to special partner benefits. For example, if you're a registered Galaxy Themes or Galaxy Watch creator, you can use the dashboard to access tools, services, and SDKs for developing new content. From the dashboard, you can also sign up for our monthly newsletter or withdraw membership from the developer program altogether. POW! While it's not exactly a feature of the site, it's an example of the ways we're trying to reach developers. My colleague Tony Morelan started working on a new podcast earlier this year, called POW! Podcasts of Wisdom. Tony has a lot of enthusiasm for design and he's always searching for his next great topic. Give him a listen on your favorite podcasting app or by visiting our podcast archive on Buzzsprout. We Still Feedback I hope you're enjoying the new layout and design of the site. If you have suggestions (or even bug reports), hop into the Feature Requests section of the forums and let me know. Thank you for being a Samsung Developer. View the full blog at its source
-
In this episode of POW, we interview Andy Beaudoin, Principal Design Director at Turn 10 Studios, the Microsoft team behind the mega successful racing game, Forza. Andy and I sat down to chat about their latest addition to the Forza franchise, Forza Street, and how they specifically designed this game for play on mobile devices. Topics Covered: Turn 10 Studios Samsung Partnership Forza Motorsport Forza Street Soundtrack Galaxy S10 Optimizations Galaxy GameDev View the full blog at its source
-
We continue to celebrate the top performing apps in creativity, quality, design, and innovation, as we interview winners of our Best of Galaxy Store Awards. Today, we're talking with Alexandr Kovalev about how he creates dials (watch faces) for the Galaxy Watch. How did you start designing watch faces? I first bought a Samsung Gear S2 watch at the end of 2016. When I found out about the GWD program (now Galaxy Watch Studio), I immediately wanted to draw my own dial. At first it was not easy, because I never studied as a designer. I began to slowly study Photoshop. In 2017, I made my first submission to the Galaxy Store. After I saw it in the Galaxy Store, it inspired me even more. Since then, I am constantly learning something new, and it seems to me that this training will never end. But the most important thing is that the design of the dials gives me really great joy. As the Best of Galaxy Store Awards Winner for Best Watch Face Design for Summer Vacation, tell us what went into this design and why it stood out amongst the crowd? This design, like my other work, came about spontaneously. I have no initial or ready-made projects. Each of my dials is born in the course of work in Galaxy Watch Studio and Photoshop. Therefore, I can redraw the finished work dozens of times, as if bringing it to the ideal state. I painted Summer Vacation for the summer season. I really looked forward to the summer, and it inspired me. I wanted to create something colorful and beautiful for Galaxy Watch users, so that everyone who downloaded this watch would be in a better mood after looking at it. After all, we all love summer and holidays! You have a new pro version of Summer Vacation. How have you evolved Summer Vacation with this new version I have a new version of Summer Vacation; it's name is WFP211 WEATHER TIME PRO. In this dial, I tried to improve the design and quality, as well as optimize battery consumption. I added the temperature in degrees Celsius and Fahrenheit on the same dial (earlier they were two different versions, which confused users and often they downloaded the wrong version). As for me, the new version turned out to be more interesting, but my opinion does not always coincide with the opinion of a huge audience of users. Over time, it will become known how much my efforts will be justified in front of users. What are key features of a good watch face design? In fact, the main thing is everything! The quality of each detail should be perfect, given that the screen resolution of the watch is only 360 pixels. Readability is very important, while the dial must be optimized for minimal power consumption. The Always On Display (AOD) mode also plays a huge role, as experience has shown that many users often use the AOD mode, but only occasionally the main mode. I spend a lot of time until I send the dial to the store, because you need to test it yourself. And only when my work suits me do I send it for testing. It is also important to record video reviews in the Galaxy Store, because only on a video review can users can see what it really looks like and appreciate it. Your brand Watch Face Production (WFP) includes Luxury Pro, Techno, and Plasma watch faces, all with an exceptional look and feel. How do you come up with new designs to support the continued growth and evolution of your brand? As I wrote above, I do not have any blanks or projects drawn on paper. An idea is born in my head, and I sketch out Photoshop as soon as possible. After that comes the development of the idea. I constantly upload my project to my watch and can watch it for some time, sorting through the thoughts in my head, and so on until the design suits me. After that, the second stage begins - this is quality, functionality, and optimization. Almost all of my dials are really very functional, almost everything changes in them - arrows, backgrounds, glow, and much more. This significantly affects the battery consumption, but the user can customize the dial as they like, for any clothes and mood. I think this is very important. How do you maintain the quality of your watch face designs? I try not to be like others. Each of my works should have a highlight. It should be something not ordinary and not standard. There are thousands of thoughts in my head, but unfortunately many of them are not yet feasible in Galaxy Watch Studio. I hope that with every update of the tool, I will be able to translate my ideas into reality. Your designs have received great ratings and reviews, including third party watch face reviews from Huck's World. How much does user feedback factor into the designs you create? Thanks to the Huck's World Channel for its work! It makes excellent video reviews for all users. Feedback is very important for any developer in any field of activity, because this is the only way we can understand, take into account, and further realize the wishes of users and correct our shortcomings! You employ various marketing strategies including social media promotions. Can you share the channels and resources you use to market your watch faces? Yes, I have pages and chats in almost all social networks that I know of. Just recently, I had my own website where users can see all my new products. In the development of marketing and promotion on social networks, I work with a team, these are great guys who are also dial designers. What have you found to be successful in marketing your watch faces? I cannot consider something more successful than another. In each country, people use different social networks, some places use Facebook more, and other places use Reddit. Therefore, it is important to be visible everywhere. When my new work appears in the store, I can spend several hours until I send alerts to all sources. How does the Galaxy Store badge support your marketing strategy? It is very convenient, short, and clear! There is no set of obscure characters in each link, as it was before. In addition, I can see the number of clicks on the link, which allows me to understand the interest of users of one or another of my work. How has the Samsung Developer Program supported your journey and growth as a watch face designer? I express my deep gratitude to each member of the team that has worked and is working with me so far! To all the questions that interest me, I instantly received not only answers, but also often useful tips. Each team member is professional in their field. What advice do you have for new designers looking to create a successful watch face business? Strive, and you will succeed! Maybe not right away, but study your business, and do not rush. There is no need to take pictures from the Internet and with the addition of arrows or digital time put it in the store. And most importantly, it should give you joy. First of all, this should be your hobby, as for most famous designers. What is next for WFP? Next, only the development and study of the future functionality of Galaxy Watch Studio, Photoshop, and other programs that allow you to create masterpieces for the Galaxy Store. Thanks to Alexandr Kovalev for sharing his insights on how to design and promote award-winning watch faces. Follow our Twitter @samsung_dev for more developer interviews and tips for building games, apps, and more for the Galaxy Store. Find out more about our Best of Galaxy Store Awards. View the full blog at its source
-
Hello Everyone! It's a quiet week here at Samsung Developer Central, and many of our developer advocates are enjoying a few days of summer vacation. I typically work behind the scenes, creating features of the Samsung Developers site and supporting the efforts of everyone else. Since nobody is looking, I thought I'd step out from behind the curtain and share a few secrets of our site(s) with you. Let's Get Talking Back in January, we made several big changes to our site and the way we work with third-party developers. One of those changes is the forums where we interact with our developer communities. The new Samsung Developer forums use the popular Discourse project, and we're very excited to be working with them. The wonderful thing about Discourse is it's built on a modern framework so it looks great on my 32 inch (80cm) monitor, and yet it's completely usable on a mobile phone or tablet. Nearly every operation of Discourse occurs using an API, so there are many ways to work with the site as a result. On The Road Again Even though they may be on vacation, our developer advocates can still keep up with their favorite user communities using the DiscourseHub mobile app. You can as well--installation is quick, and setup is relatively painless. Once the app is installed, simply click the "Add your first site" button and enter https://forum.developer.samsung.com in the search box. When the site appears, click the "connect" button. Next, you'll be prompted to log into your Samsung Account. As with the Samsung Developers site, the forums use Samsung Account to authenticate you. After logging in, you'll need to authorize your mobile device to access your Samsung Developer forums account. Once you've logged in and authorized your device, you can browse, view, and respond to forum posts from the comfort of your beach chair. Feed Me, Please Like many of you, I'm a gadget enthusiast. Cameras, audio gear, things that go fast, and mobile devices to name a few. I read a lot of tech sites and keep up with the latest issues involving site security. I prefer to browse and read all these sites with the same experience rather than jumping from site to site. This is where RSS plays a major role in my daily existence. Every morning, I spend 20-30 minutes catching up on the news and activities on the sites I manage using one of the popular mobile/web RSS readers. Discourse built RSS support into their platform, so it's simple to add alerts on the content you want to see. For example, if I want to follow all the latest topics that are being discussed in the Mobile category, I simply need to take the URL for the page and append .rss to it. Instead of browsing to https://forum.developer.samsung.com/c/mobile/12, I put https://forum.developer.samsung.com/c/mobile/12.rss into my RSS reader, and Voila! Similarly, if there's a person whose advice is always useful, you can follow them in RSS as well. I'll pick on John Shih, who is one of our award-winning Galaxy Theme creators. His handle on the developer forums is X9_Studio. To follow his account, I'd go to the activity tab of his profile and append .rss. Now, I can see in my RSS viewer any time he's giving out great advice. We Feedback Communities are about the people, and we love to hear what our community has to say. Do you use Discourse for your hobbies or other technical communities? Is there some feature you'd like to see? Hop into the Feature Requests section and let me know. There are several upgrades that I'm planning to make to the forums in the next few months, so come back often and check out the progress. Thank you for being part of Samsung Developers. Stay safe out there! View the full blog at its source
-
Lots of small quality of life improvements One benefit of using Samsung Internet is regular updates to improve your browsing experience. Samsung Internet 12.1 focuses on improving the experience on specific devices and improving the tab bar and tab switcher. You can test these out right now by downloading the beta from the play store: Samsung Internet Browser Beta There is a new layout on tablet devices to move the toolbar, usually at the bottom on mobile to sit next to the address bar so it behaves like a desktop browser. We’ve also added a new feature for devices which can ‘flex’ like the Z Flip, shown below. When you are watching video, if you flex the device we will play the video on the top half and the controls on the bottom half giving a lovely viewing experience. The tab bar is a feature which has been present for a few versions. It’s an optional tab bar like you would get in a desktop browser. The tab bar in Samsung Internet The first new feature is a context menu to let you control your tabs easily without needing to open up the tab switcher: The context menu. The final feature is one I am very excited about which is support for Augmented Reality websites with the WebXR device API. This feature will get an entire blog post on it’s own so stay tuned. View the full blog at its source
-
Have you published an app on the Galaxy Store and wanted to assign different roles and responsibilities to people within your organization? Now you can with the June update of Seller Portal. Assign separate managers for applications, promotions, statistics, and buyer comments by sending an email invitation. View the full blog at its source
-
Start Date Jun 30, 2020 Location Online Asiste al Taller de Desarrolladores del Programa de Desarrolladores de Samsung y aprenda a desarrollar aplicaciones portátiles en Tizen. Conecta con el equipo del Programa de Desarrolladores de Samsung durante el taller práctico, centrado en el desarrollo de aplicaciones portátiles. En este taller de dos horas (o más) aprenderás sobre la plataforma Tizen. El taller incluirá una sesión práctica de codificación, así que prepárate para obtener experiencia práctica con Tizen Studio y el Samsung Galaxy Watch. Al final de este taller, tendrás el conocimiento necesario para desarrollar tu primera aplicación Tizen Wearable. Si tiene conocimientos de programación HTML, CSS, JavaScript y experiencia en el desarrollo de aplicaciones utilizando una IDE, le recomendamos que se registre. Este taller mostrará a los participantes cómo: • Desarrollar una aplicación web usando Tizen Studio IDE • Diseñar una aplicación con la biblioteca Tizen Advance UI (TAU) • Implementar las funciones de los sensores del Galaxy Watch con JavaScript • Probar tu aplicación en el emulador • Obtener una descripción general del proceso de publicación de aplicaciones en Galaxy Store View the full blog at its source
-
Asynchronous coding is essential for writing responsive and efficient programs. However, writing good asynchronous code is often not easy. Some bad asynchronous code even leads to hard-to-diagnose problems like deadlocks. In this article, I'll explain a few basic concepts of asynchronous coding in C# and some common practices in Tizen applications. How is asynchronous coding different from multi-threading? Asynchronous coding allows a program to run multiple tasks at once without blocking a specific thread. However, this does not necessarily mean that another thread is created. For example, if a program started a Task on the main thread to read some large data from the storage, the program can still do something else on that thread until the data are fully read. You may think async code seems a little like multithreaded code. After all, many methods could be executing at the same time in both. In reality, async programming can be used together with singular or multithreaded applications. This means you can have a single-threaded async program, where one thread can run concurrent tasks. Conversely, you can also have a multi-threaded async application, where multiple threads can each run multiple concurrent tasks. Leslie Richardson - How Do I Think About Async Code?! I'll show you what really happens with this simple code: static void Main() { AsyncContext.Run(Start); } static async Task Start() { var task = DoSomethingAsync(); Thread.Sleep(1000); await task; Thread.Sleep(1000); } static async Task DoSomethingAsync() { await Task.Delay(1000); } Don't worry about AsyncContext.Run. It's used to make this console program have a UI app-like nature. This program is single-threaded, but runs two concurrent tasks at once: running an async Task (DoSomethingAsync) for a second and doing some other computation (Thread.Sleep) for a second. After the Task finishes, it again does some computation (Thread.Sleep) for a second. As shown in the below trace, the program only takes two seconds to finish and everything happens in a single thread. Notice that the two Thread.Sleep calls have different callstacks although they have the same caller (Start) in the code. This is because the compiler internally deconstructs and transforms the async method into an async state machine at compile time. (You don't have to learn the details right now.) When should I use async code? There are three major types of asynchronous operations. You have to identify which one of these fits your need. 1. I/O-bound work When you perform an I/O operation (such as sending a network request or reading a large file from disk), you don't want the whole application UI to freeze until the operation finishes. The await keyword in the following example allows the caller thread to do other work (such as handling UI events) while the network operation is in progress. There is no need to create a thread. button.Clicked += async (s, e) => { var result = await httpClient.GetStringAsync(requestUri); label.Text = result; }; Note: Although you don't typically need threading for I/O-bound work, you may sometimes have to use synchronous APIs which do not natively support asynchronous operations (for example, DataContractSerializer.WriteObject). In that case, a sync API can be wrapped into an async API using a background thread (or preferably, re-implement the async API). For how to use a background thread, read the next section. 2. CPU-bound work A background thread can be used if you don't want a specific thread to be occupied by a heavy computational job for a long time. This type of concurrency is also called parallelism or multi-threading. You can generally use Task.Run to offload work to a background thread in most cases. Consider you have a large JSON text that requires a noticeable amount of time to be deserialized. The following example parses a JSON string into an instance of Book class on a thread pool thread. Without Task.Run, you experience an uncomfortable delay when pressing the button because the operation blocks the UI thread. button.Clicked += async (s, e) => { var book = await Task.Run(() => { return JsonSerializer.Deserialize<Book>(jsonString); }); label.Text = book.Title; }; 3. UI transitions This is the most common scenario where a developer encounters an async Task for the first time when developing a UI application. In Xamarin.Forms, most page transitions (such as NavigationPage.PushAsync) and animations have a return type of Task, which means that the operations are done asynchronously. Similarly to the I/O-bound scenario, you can simply use the async and await keywords to wait for the Task completion. button.Clicked += async (s, e) => { await Navigation.PushAsync(page); }; Notice that the await expression has no return value. You might think that you can just call Navigation.PushAsync without the async and await keywords (it's syntactically correct). However, not properly waiting for a Task returned by an asynchronous method is not safe. I'll explain why in the next chapter. Important principles Badly written asynchronous code is an evil. Keep the following principles in mind when you write any asynchronous code. 1. Avoid async void As described in many other articles, you should always avoid using async void methods in your code. The main reason is their unique exception handling semantics. Any exception thrown by the async void methods cannot be caught by their callers and always crashes the process. Async/Await - Best Practices in Asynchronous Programming: Avoid Async Void by Stephen Cleary Asynchronous Programming: Async void by David Fowler Removing async void by John Thiriet There are only three exceptions when you can use async void. Otherwise, all async methods should return Tasks which can be awaited by their callers. App lifecycle methods (OnCreate, OnStart, etc.) Event handlers Commands (ICommand implementations) Caution: Just changing the signature of the method from async void to async Task (and not waiting for the returned Task) makes the problem even worse. Any exception thrown by the unawaited Task is silently ignored (actually, it's captured within the Task's Exception property). The following code doesn't raise an exception, but is not safe. public async Task DoSomethingAsync() { await Task.Delay(1000); throw new Exception(); } button.Clicked += (s, e) => { _ = DoSomethingAsync(); // Discard the result }; The above pattern is also referred to as fire-and-forget. Use this pattern only if you don't really care about the Task's result. Consider using an extension method to enable structured error logging. 2. Avoid .Result and .Wait() It is sometimes tempting to use Task.Result or Task.Wait to synchronously wait for Task completion without having to use async/await. Never use them because they can lead to immediate deadlocks when used in UI applications. Blocking a thread for a background task (sync-over-async) is always a bad idea. Don't Block on Async Code by Stephen Cleary Asynchronous Programming: Avoid using Task.Result and Task.Wait by David Fowler Async/Await - Best Practices in Asynchronous Programming: Async All the Way by Stephen Cleary The best solution is to use async and await. The problem usually arises when a developer wants to change only a small part of their application and 'hide' asynchronous operations from the rest of the code. However, switching from sync to async often requires significant changes in your application. For example, you may have to implement a new INotifyPropertyChanged-based type to visualize the progress and the result of the currently running asynchronous operation. If the callee is a pure library method which knows nothing about the app UI, you can make use of .ConfigureAwait(false) to enable synchronous calls to the method. Adding .ConfigureAwait(false) to every occurrence of await in the callee method prevents deadlocks. However, this is a dangerous practice and not generally recommended. Scenarios I have investigated some common patterns of using async code in Tizen applications. Some of them are listed below. 1. UI transitions Any UI transitions including animations and page navigations (.PushAsync, .PopAsync, .PopToRootAsync) should be awaited in Xamarin.Forms applications even though there is no extra work to do after the await expression. DON'T private void OnDismissButtonClicked(object s, EventArgs e) { Navigation.PopAsync(); } DO private async void OnDismissButtonClicked(object s, EventArgs e) { await Navigation.PopAsync(); } 2. Async Commands The ICommand interface is often used to define a data binding between a XAML file and a ViewModel in the MVVM architecture. Similar to an event handler, a Command can be constructed using an async void Action delegate. Make sure all exceptions are captured in the scope of the Command so as not to crash your application. public ICommand CheckForecastCommand = new Command(CheckForecast); private async void CheckForecast() { ... } Another approach is to implement a custom AsyncCommand class to visualize the Command's execution status using data binding. For more details, read the post Async Programming : Patterns for Asynchronous MVVM Applications: Commands. 3. Async constructors The await keyword cannot be used in constructors because they are synchronous. I've seen many developers using async void methods for asynchronous construction without considering the exact consequences. As stated above however, this kind of code should be avoided: DON'T private readonly SQLiteAsyncConnection _database; public RecordDatabase() { _database = new SQLiteAsyncConnection(PATH); InitializeAsync(); } private async void InitializeAsync() { await _database.CreateTableAsync<Record>(); } Instead, the factory pattern can be used to enable async construction. The caller should await the static method CreateAsync to instantiate this type. DO private readonly SQLiteAsyncConnection _database; public RecordDatabase() { _database = new SQLiteAsyncConnection(PATH); } private async Task<RecordDatabase> InitializeAsync() { await _database.CreateTableAsync<Record>(); return this; } public static Task<RecordDatabase> CreateAsync() { var instance = new RecordDatabase(); return instance.InitializeAsync(); } There are also other approaches. The AsyncLazy pattern is useful when the creation of an expensive resource can be delayed until it's actually needed. If the type is instantiated using data binding, you can implement the INotifyPropertyChanged interface to update the UI according to the status of the asynchronous initialization. For more details, see the post Async OOP 2: Constructors by Stephen Cleary. 4. Wrapping event-based APIs Many TizenFX APIs follow the Event-based Asynchronous Pattern (EAP). You may want to wrap some of these APIs into Task-based asynchronous calls using TaskCompletionSource to make your code more readable and easier to understand. A common example of this is asking users for privacy-related privileges using the PrivacyPrivilegeManager API. public async Task<bool> CheckPrivilege() { switch (PrivacyPrivilegeManager.CheckPermission(HEALTHINFO_PRIVILEGE)) { case CheckResult.Allow: return true; case CheckResult.Deny: return false; case CheckResult.Ask: if (!PrivacyPrivilegeManager.GetResponseContext(HEALTHINFO_PRIVILEGE).TryGetTarget(out var context)) return false; var tcs = new TaskCompletionSource<bool>(); context.ResponseFetched += (s, e) => { if (e.cause == CallCause.Answer) tcs.SetResult(e.result == RequestResult.AllowForever); else tcs.SetResult(false); }; PrivacyPrivilegeManager.RequestPermission(HEALTHINFO_PRIVILEGE); return await tcs.Task; default: return false; } } The ResponseFetched event is raised when there is a user response for PrivacyPrivilegeManager.RequestPermission. The wrapper Task is awaited until the result is set by the EventHandler associated with the event. You can also consider registering a CancellationToken to set a timeout for the Task. Advanced tips 1. Use .ConfigureAwait(false) for library code It is recommended to use .ConfigureAwait(false) for every await call in your (non-UI) library code. It prevents deadlocks when the code is accidentally called from a synchronous context in the user code. Tizen has its own SynchronizationContext-derived type (TizenSynchronizationContext) just as other platforms (such as WinForms and WPF) do. For more details, read the following articles. Why you should use ConfigureAwait(false) in your library code by Juan Don't Block on Async Code by Stephen Cleary ConfigureAwait FAQ by Stephen Toub 2. Run UI code on the UI thread When you manipulate the app UI in your code, make sure to do it on the UI thread. Otherwise, the code will not act as you expect. Your code runs on the UI thread unless you explicitly use a thread (Task.Run) or a non-default context (.ConfigureAwait(false)). For example, in the following code, the current SynchronizationContext is captured by the await keyword, and the code after await also runs on the same context. If you change Task.Delay(100) to Task.Delay(100).ConfigureAwait(false), the context is null and changing the button text has no effect. private async void OnButtonClicked(object sender, EventArgs e) { await Task.Delay(100); button.Text = "Clicked"; } The following code is incorrect because it tries to change the UI from a background (thread pool) thread. There is no SynchronizationContext for a thread pool thread. private void OnButtonClicked(object sender, EventArgs e) { Task.Run(() => { button.Text = "Clicked"; }); } In a Xamarin.Forms application with the MVVM architecture, it is generally possible to update ViewModels from non-UI threads. However, the better practice is to use Device.BeginInvokeOnMainThread to avoid any confusion. 3. TizenFX thread-safety TizenFX APIs are not generally meant to be thread-safe. If you call APIs which are not marked to be thread-safe simultaneously from different threads, they may lead to incorrect results or even deadlocks. For now, I recommend calling TizenFX APIs only from the main (UI) thread. Conclusion Although I've tried to provide as many details as possible, there are also other patterns you may face in real-world applications. If the above information is not sufficient to fit your need, you can find other materials on the web, including the pages I linked below. If you don't feel you fully understand all the concepts, simply note that you should try to complete your code first, and then polish it as you can. Even though your code doesn't meet the async standards, it should generally work for most cases. Asynchronous programming Task-based asynchronous programming C# Deadlocks in Depth - Part 2 by Michael Shpilt Understanding Async, Avoiding Deadlocks in C# by Eke Péter If you have any questions or feedback, please let me know at [email protected]. View the full blog at its source
-
In this episode of POW!, we interview Tomas Joscak from Vienna Studios. Tomas is an amazing watch face designer, winning the 2019 Best of Galaxy Store Award for Best Indie Watch Face Designer. He's priced some of his designs in the hundreds of dollars... and people are buying them. And, the software he uses to create the graphics is typically not used for designing watch faces. You’ll want to listen in and learn not only how he designs high-end watch faces, but also his tips on marketing. Topics Covered: Galaxy Watch Studio Galaxy Store Coupons Galaxy Store Badges Banner Promotions Social Media Multi-language Support Best of Galaxy Store Awards View the full blog at its source
-
If you are a watch face designer and want to distribute your watch face, it is highly recommended that you test your watch face on a real device before publishing it. While Galaxy Watch Studio (GWS) provides an emulator (the Run window) on which to run your watch face, it is not the same as running it on an actual device. Remote Test Lab (RTL) is a service that allows you to test your app on a real device, access the device remotely through the web, and it’s free! RTL is an amazing solution if you can’t buy a device or if you want to test your watch face on different watch models. This reduces your hardware costs for testing a watch face. Design a Watch Face If you don’t have a watch face to test, here is how to create a simple design using GWS. Launch GWS and create a new project. For simplicity, add a background, analog clock, and digital clock. The digital clock is used to add a time zone selector. The intention behind using the time zone selector is because we can’t test the tap action using the Run window. So, a real device is needed to test the time zone selector. If you want to know how to make a time zone selector, you can read this blog. After completing the design, you have to build the project so that a .tpk file is created. Go to Project > Build, set the Target API version, enter the password for your author certificate, and click Build (see image below). If you don’t change the location path of the workspace folder, then the .tpk file is saved in C:\Users\user_name\GearWatchDesigner\workspace. Get Started with RTL There are a few system requirements to run RTL on your PC. Read about Remote Test Lab from here. The system requirements are: A Samsung account Standard web browser with JavaScript support Java Runtime Environment 7 or later with Java Web Start. Internet environment where port 2600 is available. First, go to Remote Test Lab and sign in using your Samsung account. If you don’t have a Samsung account, create one and then sign in. Next, click GET STARTED. Now, select Watch from left sidebar. There are four types of devices and OS versions that are available (on 26th June, 2020): Device Name Model Name OS Version Galaxy Watch SM-R800 Tizen 4.0.0.2 Gear Sport SM-R600 Tizen 3.0.0.2 Gear S3 SM-R765A Tizen 3.0.0.2 Gear Fit2 SM-R360 Tizen 2.3.1.6 Choose a device based on your requirements. In the following example, Galaxy Watch is selected for testing. Select the OS version for the Galaxy Watch. Select any available device from the Device List. In the device name, IN, KR, or US indicates the country in which the device is located. It is better to choose the closest country to avoid latency issues. For example, if you are in Korea, you should select KR. Choose the amount of time to reserve the device from Reserve Time. Higher reservation times require more credits (credits are free and you receive a limited number every day), so it would be wise if you don’t reserve unnecessary time. After selecting all options for your selected device, click Start. The details of your selected device are shown. If a download window displays, click on start to download the JNLP file. Run the JNLP file to download the RTL client. The download window displays when the RTL Client is downloaded for the first time or an updated version is available. After launching the RTL client, click Run. The time to launch a device on RTL may vary depending on your network environment. A warning box appears. Read the warnings and click** I understand and wish to proceed.** Next, choose the language of your selected device. Test Your Watch Face on RTL After starting the device, follow the steps below to install and run your watch face. Right-click on the watch to launch the context menu. To learn about all features of the context menu, read RTL client features. Click on Test > Install Application From the Look in dropdown menu, navigate to the directory that contains the .tpk file which you want to test. Select the .tpk file and click Open. A dialog box shows the progress of opening the selected file on the remote device. Click Install from the Application Manager. Click OK after installing the watch face. Click on the default watch face. Rotate the bezel clockwise or counter-clockwise to select your installed watch face. When you find your installed watch face, click on it to launch it. Now, click on the digital clock to change the time zone for testing the time zone selector tap action. Search for and select your desired city to change the time zone Exit from the Remote Device It is recommended to uninstall your application from the remote device after completing your test. Tap on the watch face and click on the delete icon to uninstall the watch face. Now, right-click on the watch and click Exit to close the remote device. Using RTL, you can test your watch face designs on different watch models and different Tizen versions of your targeted users. You can do it anywhere, even if you are not at home or in the office. Remote Test Lab allows you to test your watch faces on many devices even if you have a small budget. View the full blog at its source
-
This is part of a 2 hour Tizen workshop that you can find here: https://youtu.be/5xp8jFpXOm8 In this video, you will modify the heart rate monitor and Tizen Advanced UI samples. These will give you several UI components that you can re-use in your projects. You can also connect with me, Diego, a Sr. Developer Evangelist, on Twitter: https://twitter.com/hielo777 Have questions? Post them in our forums: https://forum.developer.samsung.com/ Check out other videos, blog posts, and tips to improve your Tizen app development. Check out the Tizen Tidbits playlist on our YouTube channel, and learn more about the wide selection of Samsung technologies on our developer portal. View the full blog at its source
-
Start Date Jun 25, 2020 Location Online Les damos bienvenida a nuestra segundo evento en Español. Si alguna vez te has preguntado como crear tu primera aplicación para el Samsung Galaxy Watch, si te preguntas qué es Tizen, o cómo publicar tus aplicaciones en el Samsung Galaxy Store, esta es la charla para ti. Esta vez nuestro Desarrollador Evangelista Senior, Diego Lizarazo Rivera, se encargará de dar una introducción al desarrollo de aplicaciones para los relojes inteligentes de Samsung, y las diferentes ventajas de desarrollar con Tizen. Será una charla en vivo, completamente en castellano, en la que podrás hablar directamente con nuestros expertos y plantearles todas tus dudas sobre cómo desarrollar tus aplicaciones para el mercado global de Samsung. Aprovecha esta oportunidad para hablar con los expertos y otros desarrolladores sobre tus creaciones y para aprender más sobre la tecnología Samsung. View the full blog at its source
-
Start Date Jun 25, 2020 Location Online Diego Gonzalez, a product manager in the Samsung Internet team, will be giving a webinar on WebXR as part of the Horizon 2020 project. He'll show how WebXR is powering immersive experiences for several 5G Tours use cases. View the full blog at its source
-
Start Date Jun 24, 2020 Location Online OpenJS Foundation’s annual event brings together the JavaScript and web ecosystem including Node.js, Electron, AMP and more. In 2020, we’re going virtual to learn and engage with leaders deploying innovative applications at massive scale. Ada Rose Cannon, a developer advocate on the Samsung Internet team, will be giving a talk. She will run through what WebXR can do today, how you can use it to build Virtual Reality and Augmented Reality enabled websites, and show what WebXR has planned for the future. View the full blog at its source
-
This is part of a 2 hour Tizen workshop that you can find here: https://youtu.be/5xp8jFpXOm8 In this video, you will learn to use the wearable device sensors and modify a project to detect the user's heart rate. You can also connect with me, Diego, a Sr. Developer Evangelist, on Twitter: https://twitter.com/hielo777 Have questions? Post them in our forums: https://forum.developer.samsung.com/ Check out other videos, blog posts, and tips to improve your Tizen app development. Check out the Tizen Tidbits playlist on our YouTube channel, and learn more about the wide selection of Samsung technologies on our developer portal. View the full blog at its source
-
We continue to celebrate the top performing apps in creativity, quality, design, and innovation, as we interview winners of our Best of Galaxy Store Awards. Today, we're talking with Greg Borrud from Niantic about building games that take players out of their homes and into the real world. Tell us about Niantic Niantic is probably best known as the developer of Pokémon GO, but we are much more than that! Niantic is an Augmented Reality company that helps get people out into the world - exploring with others and having meaningful and engaging experiences. We are both a game developer/publisher as well as a technology company focused on bringing new games and experiences to the world through location-based and AR technology. Can you share how Niantic has pioneered real world gaming experiences? It started with Ingress - a game that asked you to go out and battle for control of points of interest in the real world. This then exploded with the launch of Pokémon GO in 2016. We all remember packs of people searching for Pokémon throughout their neighborhoods. We have continued to evolve our Real World Platform with more information about the world (we’ve mapped hundreds of millions of places around the world so far), with a focus on creating new gameplay experiences that encourage people to go outside and explore. Your premise has been to include a combination of maps and gaming in your app development. Can you share how this is done? We’ve built a robust platform that is a map of all the unique and interesting places in our world. This map is curated and updated by our players all the time and we strive to keep it as accurate as we can. That forms the foundation for our new game development. We want to have a wide variety of games and experiences, so we don't have too many restrictions on what a Niantic product can be. We want to let the creativity of our teams and our developer partners lead us to entirely new gameplay concepts. What programming languages do you use in development of your games? We use a variety of languages depending on what part of the code our engineers are working in. We primarily develop in C# for the player’s device and Java for our servers. Occasionally we'll also use C++ or a scripting language like Python. At Niantic, your work represents the culmination of decades of obsessing about geospatial technology. How important is this technology to your game experiences? Critically important. Our games are a reflection of the real world. They literally take you outside, exploring neighborhoods and cities, so without precise mapping, we couldn’t build what we offer today. We often hear stories from our Pokémon GO community about how walking with our games has uncovered hidden gems and historic monuments in their neighborhoods that they never knew existed. Our next area of focus is building a dynamic 3D map of the world so that we can progressively layer in augmented reality and other features into our games to make exploring the world more interesting and fun. At the end of the day, the game/experience needs to be fun no matter what technology it is built on top of. You have developed some of the biggest game titles, including Pokémon GO and Harry Potter: Wizards Unite, winner of the Best of Galaxy Store Awards 2019 for Best AR Game. How does Augmented Reality enhance your games and bring them to life? AR allows us to turn the world outside your door into one of the most amazing, dynamic game boards you can imagine. Through AR, your world can be filled with Pokémon or Wizards. And we’re just in the infancy of what AR can offer. We’re excited to share some of the new AR technologies we are cooking up. Your games are highly rated on the Galaxy Store. How do you maintain your games' quality? We try to learn from and listen to our players as much as we can. Although it’s impossible to please everyone all of the time, we do take player feedback very seriously, and we are constantly striving to improve our games by listening, then iterating fast. How has the Galaxy Store badge supported your game discovery on the Galaxy Store? The Galaxy Store badge is supported on a variety of our marketing materials, including the product's website, so players know the game is available on their preferred platform. With all of your success, do you still experience challenges when developing your games? That is one of the great things about making games - there are always new challenges. As technologies, devices, and player preferences evolve, we are challenged every single day we come to work. You have to love (and live for) challenges if you want to be happy in this industry. Are there common errors made by developers while programming games? A common error is not testing in a way that replicates a player’s real experience. When tested in isolation, something might ‘work’. But the key is constant testing while looking through the lens of the players. What advice do you have for indie developers attempting to develop a successful game business? Start with a small, simple game loop and build it. Get it into the hands of your friends and then iterate. It’s an incredible world for game developers right now, as the ability to build something on your own has never been easier. I’m a firm believer in learning by doing. As you continue to pioneer new technologies and gameplay mechanics, what trends do you expect to see? As our mapping and AR technologies continue to evolve and converge, we envision a 3D map of the world that will truly be the ultimate game board. If we can pair that with wearable devices in the future, we believe we will develop new entertainment experiences unlike anything you have seen before. What is ahead for Niantic? We’ve got a lot of exciting stuff coming in the near term. As the end of June nears, we’re fast approaching our first anniversary of Harry Potter: Wizards Unite, which put magic in the hands of witches and wizards all around the world last summer. For that product, we’re thinking of some exciting new ways to immerse players in the wizarding world with new upcoming features, content releases, and fun in-game events. The fourth anniversary of Pokémon GO is also approaching this July, and we’ve reimagined our tentpole Pokémon GO Fest event to be playable by the global player base on July 25-26th, wherever they may be. Over the past four years, Trainers have accomplished some amazing feats; notably walking a collective 28 billion kilometers and making over 280 billion visits to unique points of interest around the world. In the long term, our ultimate goal is to create meaningful and purposeful gameplay experiences. We think these will come in a wide variety of shapes and sizes, and to that extent we have more than 10 new games and AR experiences in different stages of development. We hope to release two new titles in the next six months, with a goal to sustain that cadence annually. We hope these experiences will have a long lasting impact on those who play them. Thanks to Greg Borrud for sharing how Niantic creates successful game franchises. Follow us on Twitter @samsung_dev for more developer interviews and tips for building games, apps, and more for the Galaxy Store. Find out more about our Best of Galaxy Store Awards. View the full blog at its source
-
Start Date Jun 19, 2020 Location Online Close out your week with a chat about web gaming with Srushtika Neelakantam, developer advocate at Ably Realtime. Srushtika will join us for our developer "office hours" to talk about her real time space invaders game. Join us for the discussion! Agenda Time (UTC) Time (PDT) Topic 17:30 PM GMT+1 9:30 AM PDT Welcome, Latest Samsung Internet News 17:40 PM GMT+1 9:40 AM PDT Web Gaming Discussion 18:20 PM GMT+1 10:20 AM PDT Q&A 18:30 PM GMT+1 10:30 AM PDT Event Ends About Srushtika Srushtika Neelakantam is a Developer Advocate for Ably Realtime. She is a passionate tech advocate, with a keen interest in real-time and web technologies. She loves spending time fiddling around with tech and then simplifying that for others by speaking or writing about it. She is a co-author of “Learning Web-Based Virtual Reality” and supports the open web by volunteering with Mozilla's Tech Speaker and Reps programs. View the full blog at its source
-
Are you interested in designing mobile UI themes for Galaxy devices? You can now submit your portfolio to Samsung and apply to become a Galaxy Themes seller. The submission window is open June 17 - July 1. Watch the video below for an overview of the process and what you need to prepare. Then download the Themes Submission Starter Kit and let the creative juices flow. The application process is very selective, and only the best of the best are selected. Think you have what it takes? We can't wait to find out. View the full blog at its source
-
Start Date Jun 17, 2020 Join Samsung Evangelist Tony Morelan and special guest, John Shih from X9 Studios as they talk Galaxy Themes designing, publishing, marketing and more! X9 Studios won Best Indie Themes Designer at the 2019 Best of Galaxy Store Awards and continues to be a top developer on the Galaxy Store. Join the discussion and receive live support from a pro! View the full blog at its source
-
Start Date Jun 17, 2020 Join Samsung Evangelist Tony Morelan and special guest, John Shih from X9 Studios as they talk Galaxy Themes designing, publishing, marketing and more! X9 Studios won Best Indie Themes Designer at the 2019 Best of Galaxy Store Awards and continues to be a top developer on the Galaxy Store. Join the discussion and receive live support from a pro! View the full blog at its source
-
Congrats! You've published your app on the Galaxy Store. Now it's time to let the world know with a Galaxy Store badge. For some publishers, the Galaxy Store may be the only place your content is listed. For others, your app may be available on multiple app stores. Either way, a Galaxy Store badge lets consumers know exactly where to find your content. In addition to the badge image, the Galaxy Store badge service provides short links that deep link directly to your content in the store. While you can use the full, long URL, using the galaxy.store short link will allow you to better track any traffic you drive to your content from your website or digital marketing promotions. You can generate your short link in the promotion section of the Seller Portal. If you've been a Galaxy Store badge user for a while, here are a few quick tips to ensure you're completely up-to-date with the latest brand requirements. First make sure you're using the latest badge image. The badge should not include the Samsung lettermark and should not say Galaxy Apps. You can download the image above here. Next, make sure you update your short link from the older galxy.us domain to galaxy.store. Your badge name remains the same. The Galaxy Store badge makes it easy for users to find and download your content. Get started today! View the full blog at its source
-
The new Developer Economics survey, administered by Slash Data, is now live for Q2 2020! Speak out about the type of projects you're working on and your favorite languages, tools, technologies, or platforms. In return, you enter prize drawings to win new dev gear to upgrade your workstation or courses and licenses to learn something new, worth over USD $15,000 in total. You will also get a free, complimentary report and graphs which compare your skills to the global average. The survey is available in eight languages and is open to students, hobbyists, and professionals. Whether you developing for the web, IoT, voice, mobile, games, or other platforms, we and Slash Data want to hear from you. View the full blog at its source
-
What is Water lock mode? Water lock mode was introduced on the Galaxy Watch to prevent accidental touches and wake-up gestures on your screen while swimming. And the thrilling news for developers is that you can enable Water lock mode directly from your app. If you have a fitness-related app, you can use this feature to enhance your app’s capability for various water-based exercises like swimming, water aerobics, and aqua teaser. Let’s dig into the details of how to do this in a Tizen web app. How do you enable Water lock mode from your app? This implementation is quite simple. Water lock mode can be enabled using the Application launch API. It involves three simple steps: Configure your app with privileges Retrieve application ID Enable Water lock mode Let’s get started. Configure your app with privileges First, add the following privileges to the config.xml file. <tizen:privilege name="http://tizen.org/privilege/application.launch"/> <tizen:privilege name="http://tizen.org/privilege/application.info"/> <tizen:privilege name="http://tizen.org/privilege/power"/> http://tizen.org/privilege/application.launch - Allows the application to open other applications http://tizen.org/privilege/application.info - Allows the application to retrieve information related to other applications http://tizen.org/privilege/power - Allows the application to control power-related settings Retrieve application ID You can enable Water lock mode directly using the launch() method of the Application API. The launch() method launches an application with the given application ID. That’s why we need to know the application ID of the Water lock mode pop-up. Retrieve the app ID using the following code snippet in the JS file. The following code snippet returns the list of all applications installed on the watch. Among them you can choose the exact ID of the app which you need to launch. For example, we picked the ID com.samsung.clocksetting.water-lock-popup to enable Water lock mode. function onListInstalledApps(applications) { for (var i = 0; i < applications.length; i++) console.log("ID : " + applications[i].id); } tizen.application.getAppsInfo(onListInstalledApps); Figure 1: Installed application list Enable Water lock mode Once you get the app ID, you can enable Water lock mode with following code snippet in the JS file: tizen.application.launch("com.samsung.clocksetting.water-lock-popup"); And that’s it. Water lock mode is launched. Please note that, if the mode is launched for the first time in the device, a pop-up appears with a permission message. When Water lock mode is enabled, the touchscreen, as well as the wake-up gesture feature, is deactivated. So, there is no user interaction between the user and your app. Meanwhile your application runs in the background. So if you want to keep your app running in the foreground, you can use the Power API. To set the power state, the request() method is called. To manage the screen and CPU state, use the following code snippet in the JS file: tizen.power.request(“SCREEN”, “SCREEN_NORMAL"); tizen.power.request("CPU", "CPU_AWAKE"); tizen.power.release("SCREEN"); tizen.power.release("CPU"); For example, here I have added a time counter while the Water lock mode is on using an open source library named EasyTimer.js. First, add the JS library to the HTML file. <script src="lib/easytimer/dist/easytimer.min.js"></script> After that, add the following code snippet to the JS file to implement a time counter. var timerInstance = new easytimer.Timer(); timerInstance.start(); timerInstance.addEventListener('secondsUpdated', function (e) { document.getElementById("excercise_timer").textContent=timerInstance.getTimeValues().toString(); }); document.getElementById("counting_done").addEventListener("click", function(){ timerInstance.stop(); }); Figure 2: Water lock enabled To disable Water lock mode, users must long press the Home key. After disabling Water lock mode, the user can start interacting with your app immediately. For example, the user can stop the time counter using the Done button in the sample app (see Figure 2). Quite simple, right? You can check out the sample app here. If you have any questions, you can post your queries to Samsung Developer's forum. View the full blog at its source