Jump to content

STF News

  • Content Count

  • Joined

  • Last visited

  1. Start Date Oct 26, 2020 Location Atlanta, GA Stop by the Samsung Developer booth at HOW Design Live and learn how to create watch faces and themes that will wow consumers. Participate in a design challenge for a chance to win a device! View the full blog at its source
  2. Start Date Sep 01, 2020 Location MGM Grand, Las Vegas, NV Meet up with Samsung at the leading mobile acquisition and retention summit. Don't miss our panel session in the Monetization track! Check out everything the conference has to offer. View the full blog at its source
  3. Start Date Aug 12, 2020 Location Loundermilk Conference Center, Atlanta, GA Connect with our developer evangelist Diego Lizarazo Rivera onsite at REFACTR.TECH 2020, a conference focused on underrepresented and marginalized groups in tech. Use code SPONSOR20_25 for 25% off tickets! View the full blog at its source
  4. Start Date Aug 05, 2020 Location Online The desire to make meaningful connections and to stay productive are constants in a world of change. Our mobile devices need to be ready to help us stay in touch with what matters most and give us new ways to work and play. Join us for a virtual Galaxy Unpacked event on August 5 to explore our latest Galaxy Devices ecosystem designed to empower your life. Live streaming of the event will be available at Samsung U.S. Newsroom and Samsung.com at 10 a.m. ET. View the full blog at its source
  5. Start Date Jul 23, 2020 Location Online Join Samsung Evangelist Tony Morelan and special guest, Andrew Zanella from Jibber Jab Reviews, as they talk YouTube strategies to market apps and other content. With over 6 million views, Jibber Jab Reviews is the leading channel on YouTube dedicated to promoting apps and content in the Galaxy Store. Join the conversation and receive live support from the pros! View the full blog at its source
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. Did you miss out on the latest Samsung Developer newsletter? Catch up now. If you don't currently receive the newsletter, you can subscribe here. View the full blog at its source
  12. 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
  13. 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
  14. 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 Gear Sport SM-R600 Tizen Gear S3 SM-R765A Tizen Gear Fit2 SM-R360 Tizen 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
  15. 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
  • Create New...