برچسب: Whats

  • What’s the Highest Paid Hourly Position at Walmart?

    What’s the Highest Paid Hourly Position at Walmart?


    Walmart managers can make hundreds of thousands of dollars a year, with some even taking home mid-six-figure salaries. But there’s another high-paying role at Walmart, one that’s focused on creativity and art.

    The retail giant confirmed to USA Today that, besides managers, cake decorators are the highest-paid hourly positions in U.S. Walmart stores. The average pay for a cake decorator at Walmart starts at around $19.25 an hour, according to the outlet.

    Related: Walmart Is Raising Prices, According to the Company’s CEO. Here’s When.

    And recently, a New Jersey Walmart employee, Melissa Fernandez, has been going viral on TikTok for her cupcake bouquets.

    @melimakescakes Another Cupcake Bouquet!!! ???@Walmart #walmartcakes #cakedecorating #walmartcakedecorator #walmart3795 #cupcakes #cupcakebouquet #flowers #buttercreamflowers #walmartbakery #buttercream ♬ luther – Kendrick Lamar & SZA

    Fernandez told the AP that she’s been at Walmart for 11 years and makes about $24.40 an hour.

    The average hourly wage for Walmart’s “U.S. frontline associates” is “close to $18,” according to Walmart.

    USA Today reports that there are at least 6,000 cake decorators employed by Walmart at press time.

    According to Walmart’s career website, there are more than 50 cake decorator roles open across the country.

    Walmart had around 1.6 million U.S. employees at the end of fiscal year 2024, though the company announced in May that it was cutting 1,500 corporate employees.

    Related: Walmart Is Laying Off 1,500 Corporate Employees: ‘Reshaping Our Structure’

    Walmart managers can make hundreds of thousands of dollars a year, with some even taking home mid-six-figure salaries. But there’s another high-paying role at Walmart, one that’s focused on creativity and art.

    The retail giant confirmed to USA Today that, besides managers, cake decorators are the highest-paid hourly positions in U.S. Walmart stores. The average pay for a cake decorator at Walmart starts at around $19.25 an hour, according to the outlet.

    Related: Walmart Is Raising Prices, According to the Company’s CEO. Here’s When.

    The rest of this article is locked.

    Join Entrepreneur+ today for access.



    Source link

  • What’s new in Android development tools



    Posted by Mayank Jain – Product Manager, Android Studio

    Android Studio continues to advance Android development by empowering developers to build better app experiences, faster. Our focus has been on improving AI-driven functionality with Gemini, streamlining UI creation and testing, and helping you future-proof apps for the evolving Android ecosystem. These innovations accelerate development cycles, improve app quality, and help you stay ahead in the fast-paced world of mobile development.

    You can check out the What’s new in Android Developer Tools session at Google I/O 2025 to see some of the new features in action or better yet, try them out yourself by downloading Android Studio Narwhal Feature Drop (2025.2.1) in the preview release channel. Here’s a look at our latest developments:

    Get the latest Gemini 2.5 Pro model in Android Studio

    The power of artificial intelligence through Gemini is now deeply integrated into Android Studio, helping you at all stages of Android app development. Now with access to Gemini 2.5 Pro, we’re continuing to look for new ways to use AI to supercharge Android development — and help you build better app experiences, faster.

    Journeys for Android Studio

    We’re also introducing agentic AI with Gemini in Android Studio.Testing your app is now much easier when you create journeys – just describe the actions and assertions in natural language for the user journeys you want to test, and Gemini performs the tests for you. Creating journeys lets you test your app’s critical user journeys across various devices without writing extensive code. You can then run these tests on local physical or virtual Android devices to validate that the test worked as intended by reviewing detailed results directly within the IDE. Although the feature is experimental, the goal is to increase the speed that you can ship high-quality code, while significantly reducing the amount of time you spend manually testing, validating, or reproducing issues.

    moving image of Gemini testing an app in Android Studio

    Journeys for Android Studio uses Gemini to test your app.

    https://www.youtube.com/watch?v=mP1tlIKK0R4

    Suggested fixes for crashes with Gemini

    The App Quality Insights panel has a great new feature. The crash insights now analyzes your app’s source code referenced from the crash, and not only offers a comprehensive analysis and explanation of the crash, in some cases it even offers a source fix! With just a few clicks, you are able to review the changes, accept the code suggestions, and push the changes to your source control. Now you can determine the root cause of a crash and fix it much faster!

    screenshot of crash analysis with Gemini in Android Studio

    Crash analysis with Gemini

    AI features in Studio Labs (stable releases only)

    We’ve heard feedback that developers want to access AI features in stable channels as soon as possible. You can now discover and try out the latest AI experimental features through the Studio Labs menu in the Settings menu starting with Narwhal stable release. You can get a first look at AI experiments, share your feedback, and help us bring them into the IDE you use everyday. Go to the Studio Labs tab in Settings and enable the features you would like to start using. These AI features are automatically enabled in canary releases and no action is required.

    screenshot of AI features in Studio Labs

    AI features in Studio Labs

      • Compose preview generation with Gemini

      • Gemini can automatically generate Jetpack Compose preview code saving you time and effort. You can access this feature by right-clicking within a composable and navigating to Gemini > Generate Compose Preview or Generate Compose Preview for this file, or by clicking the link in an empty preview panel. The generated preview code is presented in a diff view that enables you to quickly accept, edit, or reject the suggestions, providing a faster way to visualize your composables.

        moving image of compose preview generation with gemini in Android Studio

        Compose Preview generation with Gemini

      • Transform UI with Gemini

      • You can now transform UI code within the Compose Preview environment using natural language directly in the preview. To use it, right click in the Compose Preview and select “Transform UI With Gemini”. Then enter your natural language requests, such as “Center align these buttons,” to guide Gemini in adjusting your layout or styling, or select specific UI elements in the preview for better context. Gemini will then edit your Compose UI code in place, which you can review and approve, speeding up the UI development workflow.

        side by side screenshots showing transforming UI with Gemini in Android Studio

        Transform UI with Gemini

      • Image attachment in Gemini

      • You can now attach image files and provide additional information along with your prompt. For example: you can attach UI mock-ups or screenshots to tell Gemini context about your app’s layout. Consequently, Gemini can generate Compose code based on a provided image, or explain the composables and data flow of a UI screenshot.

        screenshot of image atteachment and preview generation via Gemini in Android Studio

        Image attachment and preview generation via Gemini in Android Studio

      • @File context in Gemini

      • You can now attach your project files as context in chat interactions with Gemini in Android Studio. This lets you quickly reference files in your prompts for Gemini. In the Gemini chat input, type @ to bring up a file completion menu and select files to attach. You can also click the Context drop-down to see which files were automatically attached by Gemini. This gives you more control over the context sent to Gemini.

        screenshot of @File context in Gemini in Android Studio

        @File context in Gemini

    Rules in Prompt Library

    Rules in Gemini let you define preferred coding styles or output formats within the Prompt Library. You can also mention your preferred tech stack and languages. When you set these preferences once, they are automatically applied to all subsequent prompts sent to Gemini. Rules help the AI understand project standards and preferences for more accurate and tailored code assistance. For example, you can create a rule such as “Always give me concise responses in Kotlin.”

    prompt library in Android Studio

    Prompt Library Improvements

    Gemini in Android Studio for businesses

    Gemini in Android Studio for businesses is now available. It provides all the benefits of Gemini in Android Studio, plus enterprise-grade privacy and security features backed by Google Cloud — giving your team the confidence they need to deploy AI at scale while keeping their data protected.

    Developers and admins can unlock these features and benefits by subscribing to Gemini Code Assist Standard or Enterprise editions. Discover the full list of Gemini in Android for business features available for your organization.

    Improved tools for creating great user experiences

    Elevate your Compose UI development with the latest Android Studio enhancements.

    Compose preview improvements

    Compose preview interaction is now more efficient with the latest navigation improvements. Click on the preview name to jump to the preview definition or click the individual component to jump to the function where it’s defined. Hover states provide immediate visual feedback as you mouse over a preview frame. Improved keyboard arrow navigation eases movement through multiple previews, enabling faster UI iteration and refinement. Additionally, the Compose preview picker is now also available in the stable release.

    moving image of compose preview navigation improvements in Android Studio

    Compose preview navigation improvements

    Compose preview picker in Android Studio

    Compose preview picker

    Resizable Previews

    While in Compose Preview’s focus mode in Android Studio, you can now resize the preview window by dragging its edges. This gives you instant visual feedback on how your UI adapts to different screen sizes, ensuring responsiveness and visual consistency. This rapid iteration helps create UIs that look great on any Android device.

    ALT TEXT

    Resizable Preview

    Embedded Android XR Emulator

    The Android XR Emulator now launches by default in the embedded state. You can now deploy your application, navigate the 3D space and use the Layout Inspector directly inside Android Studio, streamlining your development flow.

    Embedded XR emulator in Android Studio

    Embedded XR Emulator

    Improved tools for future-proofing and testing your Android apps

    We’ve enhanced some of your favorite features so that you can test more confidently, future-proof your apps, and ensure app compatibility across a wide range of devices and Android versions.

    Streamlined testing with Backup and Restore support

    Android Studio offers built-in Backup and Restore support by letting you trigger app backups on connected devices directly from the Running Devices window. You can also configure your Run/Debug settings to automatically restore from a previous backup when launching your app. This simplifies the process of validating your app’s Backup and Restore implementation and speeds up development by reducing manual setup for testing.

    Streamlined testing with backup and restore support in Android Studio

    Streamlined testing with Backup and Restore support

    Android’s transition to 16 KB Page Size

    The underlying architecture of Android is evolving, and a key step forward is the transition to 16 KB page sizes. This fundamental change requires all Android apps with native code or dependencies to be recompiled for compatibility. To help you navigate this transition smoothly, Android Studio now offers proactive warnings when building APKs or Android App Bundles that are incompatible with 16 KB devices. Using the APK Analyzer, you can also find out which libraries are incompatible with 16 KB devices. To test your apps in this new environment, a dedicated 16 KB emulator target is also available in Android Studio alongside existing 4 KB images.

    Android’s transition to 16 KB page size in Android Studio

    Android’s transition to 16 KB page size

    Backup and Sync your Studio settings

    When you sign in with your Google account or a JetBrains account in Android Studio, you can now sync your customizations and preferences across all installs and restore preferences automatically on remote Android Studio instances. Simply select “Enable Backup and Sync” while you’re logging in to Android Studio, or from the Settings > Backup and Sync page, and follow the prompts.

    Backup and sync settings in Android Studio

    Backup and Sync your Studio settings

    Increasing developer productivity with Android’s Kotlin Multiplatform improvements

    Kotlin Multiplatform (KMP) enables teams to reach new audiences across Android and iOS with less development time. Usage has been growing in the developer community, with apps such as Google Docs now using it in production. We’ve released new Android Studio KMP project templates, updated Jetpack libraries and new codelabs (Get Started with KMP and Migrate Existing Apps to Room KMP) to help developers who are looking to get started with KMP.

    Experimental and features that are coming soon to Android Studio

    Android Studio Cloud (experimental)

    Android Studio Cloud is now available as an experimental public preview, accessible through Firebase Studio. This service streams a Linux virtual machine running Android Studio directly to your web browser, enabling Android application development from anywhere with an internet connection. Get started quickly with dedicated workspaces featuring pre-downloaded Android SDK components. Explore sample projects or seamlessly access your existing Android app projects from GitHub without a local installation. Please note that Android Studio Cloud is currently in an experimental phase. Features and capabilities are subject to significant change, and users may encounter known limitations.

    Android Studio Cloud

    Version Upgrade Agent (coming soon)

    The Version Upgrade Agent, as part of Gemini in Android Studio, is designed to save you time and effort by automating your dependency upgrades. It intelligently analyzes your Android project, parses the release notes for included libraries, and proposes updates directly from your libs.versions.toml file or the refactoring menu (right-click > Refactor > Update dependencies). The agent automatically updates dependencies to the latest compatible version, builds the project, fixes any errors, and repeats until all errors are fixed. Once the dependencies are upgraded, the agent generates a report showing the changes it made, as well as a high level summary highlighting the changes included in the updated libraries.

    Version updgrade agent in Android Studio

    Version Upgrade Agent

    https://www.youtube.com/watch?v=ubyPjBesW-8

    Agent Mode (coming soon)

    Agent Mode is a new autonomous AI feature using Gemini, designed to handle complex, multi-stage development tasks that go beyond typical AI assistant capabilities, invoking multiple tools to accomplish tasks on your behalf.

    You can describe a complex goal, like integrating a new API, and the agent will formulate an execution plan that spans across files in your project — adding necessary dependencies, editing files, and iteratively fixing bugs. This feature aims to empower all developers to tackle intricate challenges and accelerate the building and prototyping process. You can access it via the Gemini chat window in Android Studio.

    Agent Mode in Android Studio

    Agent Mode

    Play Policy Insights beta in Android Studio (coming soon)

    Android Studio now includes richer insights and guidance on Google Play policies that might impact your app. This information, available as lint checks, helps you build safer apps from the start, preventing issues that could disrupt your launch process and cost more time and resources to fix later on. These lint checks will present an overview of the policy, do and don’ts, and links to Play policy pages where you can find more information about the policy.

    Play Policy Insights beta in Android Studio

    Play Policy Insights beta in Android Studio

    IntelliJ Platform Update (2025.1)

    Here are some important IDE improvements in the IntelliJ IDEA 2025.1 platform release

      • Kotlin K2 mode: Android Studio now supports Kotlin K2 mode in Android-specific features requiring language support such as Live Edit, Compose Preview and many more

      • Improved dependency resolution in Kotlin build scripts: Makes your Kotlin build scripts for Android projects more stable and predictable

      • Hints about code alterations by Kotlin compiler plugins: Gives you clearer insights into how plugins used in Android development modify your Kotlin code

      • Automatic download of library sources for Gradle projects: Simplifies debugging and understanding your Android project dependencies by providing immediate access to their source code

      • Support for Gradle Daemon toolchains: Helps prevent potential JVM errors during your Android project builds and ensures smoother synchronization

      • Automatic plugin updates: Keeps your Android development tools within IntelliJ IDEA up-to-date effortlessly

    To Summarize

    Android Studio Narwhal Feature Drop (2025.2.1) is now available in the Android Studio canary channel with some amazing features to help your Android development

    AI-powered development tools for Android

      • Journeys for Android Studio: Validate app flows easily using tests and assertions in natural language
      • Suggested fixes for crashes with Gemini: Determine the root cause of a crash and fix it much faster with Gemini
      • AI features in Studio Labs
          • Compose preview generation with Gemini: Generate Compose previews with Gemini’s code suggestions
          • Transform UI with Gemini: Transform UI in Compose Preview with natural language, speeding development
          • Image attachment in Gemini: Attach images to Gemini for context-aware code generation
          • @File context in Gemini: Reference project files in Gemini chats for quick AI prompts
      • Rules in Prompt Library: Define preferred coding styles or output formats within the Prompt Library

    Improved tools for creating great user experiences

      • Compose preview improvements: Navigate the Compose Preview using clickable names and components
      • Resizable preview: Instantly see how your Compose UI adapts to different screen sizes
      • Embedded XR Emulator: XR Emulator now launches by default in the embedded state

    Improved tools for future-proofing and testing your Android apps

      • Streamlined testing with Backup and Restore support: Effortless app testing, trigger backups, auto-restore for faster validation
      • Android’s transition to 16 KB Page Size: Prepare for Android’s 16KB page size with Studio’s early warnings and testing
      • Backup and Sync your Studio settings: Sync Android Studio settings across devices and restore automatically for convenience
      • Increasing developer productivity with Android’s Kotlin Multiplatform improvements: simplified cross-platform Android and iOS development with new tools

    Experimental and features that are coming soon to Android Studio

      • Android Studio Cloud (experimental): Develop Android apps from any browser with just an internet connection
      • Version Upgrade Agent (coming soon): Automated dependency updates save time and effort, ensuring projects stay current
      • Agent Mode (coming soon): Empowering developers to tackle multistage complex tasks that go beyond typical AI assistant capabilities
      • Play Policy Insights beta in Android Studio (coming soon): Insights and guidance on Google Play policies that might impact your app

    How to get started

    Ready to try the exciting new features in Android Studio?

    You can download the canary version of Android Studio Narwhal Feature Drop (2025.1.2) today to incorporate these new features into your workflow or try the latest AI features using Studio Labs in the stable version of Android Studio Meerkat. You can also install them side by side by following these instructions.

    As always, your feedback is important to us – check known issues, report bugs, suggest improvements, and be part of our vibrant community on LinkedIn Medium, YouTube, or X. Let’s build the future of Android apps together!

    Explore this announcement and all Google I/O 2025 updates on io.google starting May 22.





    Source link

  • What’s new in Google Play



    Posted by Paul Feng, VP of Product Management, Google Play

    At Google Play, we’re dedicated to helping people discover experiences they’ll love, while empowering developers like you to bring your ideas to life and build successful businesses.

    At this year’s Google I/O, we unveiled the latest ways we’re empowering your success with new tools that provide robust testing and actionable insights. We also showcased how we’re continuing to build a content-rich Play Store that fosters repeat engagement alongside new subscription capabilities that streamline checkout and reduce churn.

    Check out all the exciting developments from I/O below and learn how they’ll help you grow your business on Google Play.

    Helping you succeed every step of the way

    Last month, we introduced our latest Play Console updates focused on improving quality and performance. A redesigned app dashboard centered around four developer objectives (Test and release, Monitor and improve, Grow users, Monetize) and new Android vitals metrics offer quick insights and actionable suggestions to proactively improve the user experience.

    Get more actionable insights with new Play Console overview pages

    Building on these updates, we’ve launched dedicated overview pages for two developer objectives: Test and release and Monitor and improve. These new pages bring together more objective-related metrics, relevant features, and a “Take action” section with contextual, dynamic advice. Overview pages for Grow and Monetize will be coming soon.

    Halt fully-rolled out releases when needed

    Historically, a release at 100% live meant there was no turning back, leaving users stuck with a flawed version until a new update rolled out. Soon, you’ll be able to halt fully-live releases, through Play Console and the Publishing API to stop the distribution of problematic versions to new users.

    a moving screen grab of release manager in Play Console

    You’ll soon be able to halt fully live releases directly from Play Console and the Publishing API, stopping the distribution of problematic versions to new users.

    Optimize your store listings with better management tools and metrics

    We launched two tools to enhance your store listings. The asset library makes it easy to upload, edit, and view your visual assets. Upload them from Google Drive, organize with tags, and crop for repurposing. And with new open metrics, you gain deeper insights into listing performance so you can better understand how they attract, engage, and re-engage users.

    Stay ahead of threats with the Play Integrity API

    We’re committed to robust security and preventing abuse so you can thrive on Play’s trusted platform. The Play Integrity API continuously evolves to combat emerging threats, with these recent enhancements:

      • Stronger abuse detection for all developers that leverages the latest Android hardware-security with no developer effort required.
      • Device security update checks to safeguard your app’s sensitive actions like transfers or data access.
      • Public beta for device recall which enables you to detect if a device is being reused for abuse or repeated actions, even after a device reset. You can express interest in this beta.

    Unlocking more discovery and engagement for your apps and its content

    Last year, we shared our vision for a content-rich Google Play that has already delivered strong results. Year-over-year, Apps Home has seen over a 25% increase in average monthly visitors with apps seeing a 10% growth in acquisitions and double-digit growth in app spend for those monetizing on Google Play. Building on that vision, we’re introducing even more updates to elevate your discovery and engagement, both on and off the store.

    For example, curated spaces, launched last year, celebrate seasonal interests like football (soccer) in Brazil and cricket in India, and evergreen interests like comics in Japan. By adding daily content—match highlights, promotions, and editorial articles directly on the Apps Home—these spaces foster discovery and engagement. Curated spaces are a hit with over 920,000 highly engaged users in Japan returning to the comics space monthly. Building on this momentum, we are expanding to more locations and categories this year.

    a moving image of three mobile devices displaying curated spaces on the Play Store

    Our curated spaces add daily content to foster repeat discovery and engagement.

    We’re launching new topic browse pages that feature timely, relevant, and visually engaging content. Users can find them throughout the Store, including Apps Home, store listing pages, and search. These pages debut this month in the US with Media & Entertainment, showcasing over 100,000 shows, movies, and select sports. More localized topic pages will roll out globally later this year.

    a moving image of two mobile devices displaying new browse pages for media and entertainment in the Play Store

    New topic browse pages for media and entertainment are rolling out this month in the US.

    We’re expanding Where to Watch to more markets, including the UK, Korea, Indonesia, and Mexico, to help users find and deep-link directly into their subscribed apps for movies and TV. Since launching in the US in November 2024, we’ve seen promising results: People who view app content through Where to Watch return to Play more frequently and increase their content search activity by 30%.

    We’re also enhancing how your content is displayed on the Play Store. Starting this July, all app developers can add a hero content carousel and a YouTube playlist carousel to their store listings. These formats will help showcase your best content and drive greater user engagement and discovery.

    For apps best experienced through sound, we’re launching audio samples on the Apps Home. A simple tap offers users a brief escape into your audio content. In early testing, audio samples made users 3x more likely to install or open an app! This feature is now available for all Health & Wellness app developers with users in the US, with more categories and markets coming soon. You can express your interest in promoting audio content.

    a moving image of three mobile devices displaying how content is displayed on the Play Store

    We’re enhancing how your content is displayed on the Play Store, 
    offering new ways to showcase your app and drive user engagement.

    Helping you take advantage of deeper engagement on Play, on and off the Store

    Last year, we introduced Engage SDK, a unified solution to deliver personalized content and guide users to relevant in-app experiences. Integrating it unlocks surfaces like Collections, our immersive full-screen experience bringing content directly to the user’s home screen.

    We’re rolling out updates to expand your content’s reach even further:

      • Engage SDK content is coming to the Play Store this summer, in addition to existing spaces like Collections and Entertainment Space on select Android tablets.
      • New content categories are now supported, starting today with Travel.
      • Collections are rolling out globally to Google Play markets starting today, including Brazil, India, Indonesia, Japan, and Mexico.

    Integrate with Engage SDK today to take advantage of this new expansion and boost re-engagement. Try our codelab to test the ease of publishing content with Engage SDK and express interest in the developer preview.

    a mobile device displaying Collections on the Play Store

    Engage SDK now supports Collections for Travel. 
    Users can find timely itineraries and recent searches, all in one convenient place.

    Maximizing your revenue with subscriptions enhancements

    With over a quarter-billion subscriptions, Google Play is one of the world’s largest subscriptions platforms. We’re committed to helping you turn engaged users into revenue growth by continually enhancing our tools to meet evolving customer needs.

    To streamline your purchase flow, we’re introducing multi-product checkout for subscriptions. This lets you sell subscription add-ons alongside base subscriptions, all under a single, aligned payment schedule. Users get a simplified experience with one price and one transaction, while you gain more control over how subscribers upgrade, downgrade, or manage their add-ons.

    a mobile devices displaying multi-checkout where a base subscription plus add ons in shown a singluar transaction on the Play Store

    You can now sell base subscriptions and add-ons together 
    in a single, streamlined transaction.

    To help you retain more of your subscribers, we’re now showcasing subscription benefits in more places across Play – including the Subscriptions Center, in reminder emails, and during purchase and cancellation flows. This increased visibility has already reduced voluntary churn by 2%. Be sure to enter your subscription benefits in Play Console so you can leverage this powerful new capability.

    five mobile devices showing subscriptions in Play

    To help reduce voluntary churn, we’re showcasing your subscriptions benefits across Play.

    Reducing involuntary churn is a key factor in optimizing your revenue. When payment methods unexpectedly decline, users might unintentionally cancel. Now, instead of immediate cancellation, you can now choose a grace period (up to 30 days) or an account hold (up to 60 days). Developers who increased the decline recovery period – from 30 to 60 days – saw an average 10% reduction in involuntary churn for renewals.

    On top of this, we’re expanding our commitment to get more buyers ready for purchases throughout their entire journey. This includes prompting users to set up payment methods and verification right at device setup. After setup, we’ve integrated prompts into highly visible areas like the Play and Google account menus. And as always, we’re continuously enabling payments in more markets and expanding payment options. Plus, our AI models now help optimize in-app transactions by suggesting the right payment method at the right time, and we’re bringing buyers back with effective cart abandonment reminders.

    Grow your business on Google Play

    Our latest updates reinforce our commitment to fostering a thriving Google Play ecosystem. From enhanced discovery and robust tools to new monetization avenues, we’re empowering you to innovate and grow. We’re excited for the future we’re building together and encourage you to use these new capabilities to create even more impactful experiences. Thank you for being an essential part of the Google Play community.

    Explore this announcement and all Google I/O 2025 updates on io.google starting May 22.



    Source link

  • What’s New in Jetpack Compose



    Posted by Nick Butcher – Product Manager

    At Google I/O 2025, we announced a host of features, performance, stability, libraries, and tools updates for Jetpack Compose, our recommended Android UI toolkit. With Compose you can build excellent apps that work across devices. Compose has matured a lot since it was first announced (at Google I/O 2019!) and we’re now seeing 60% of the top 1,000 apps in the Play Store such as MAX and Google Drive use and love it.

    New Features

    Since I/O last year, Compose Bill of Materials (BOM) version 2025.05.01 adds new features such as:

      • Autofill support that lets users automatically insert previously entered personal information into text fields.
      • Auto-sizing text to smoothly adapt text size to a parent container size.
      • Visibility tracking for when you need high-performance information on a composable’s position in its root container, screen, or window.
      • Animate bounds modifier for beautiful automatic animations of a Composable’s position and size within a LookaheadScope.
      • Accessibility checks in tests that let you build a more accessible app UI through automated a11y testing.

    LookaheadScope {
        Box(
            Modifier
                .animateBounds(this@LookaheadScope)
                .width(if(inRow) 100.dp else 150.dp)
                .background(..)
                .border(..)
        )
    }
    

    moving image of animate bounds modifier in action

    For more details on these features, read What’s new in the Jetpack Compose April ’25 release and check out these talks from Google I/O:

    If you’re looking to try out new Compose functionality, the alpha BOM offers new features that we’re working on including:

      • Pausable Composition (see below)
      • Updates to LazyLayout prefetch
      • Context Menus
      • New modifiers: onFirstVisible, onVisbilityChanged, contentType
      • New Lint checks for frequently changing values and elements that should be remembered in composition

    Please try out the alpha features and provide feedback to help shape the future of Compose.

    Material Expressive

    At Google I/O, we unveiled Material Expressive, Material Design’s latest evolution that helps you make your products even more engaging and easier to use. It’s a comprehensive addition of new components, styles, motion and customization options that help you to build beautiful rich UIs. The Material3 library in the latest alpha BOM contains many of the new expressive components for you to try out.

    moving image of material expressive design example

    Learn more to start building with Material Expressive.

    Adaptive layouts library

    Developing adaptive apps across form factors including phones, foldables, tablets, desktop, cars and Android XR is now easier with the latest enhancements to the Compose adaptive layouts library. The stable 1.1 release adds support for predictive back gestures for smoother transitions and pane expansion for more flexible two pane layouts on larger screens. Furthermore, the 1.2 (alpha) release adds more flexibility for how panes are displayed, adding strategies for reflowing and levitating.

    moving image of compose adaptive layouts updates in the Google Play app

    Compose Adaptive Layouts Updates in the Google Play app

    Learn more about building adaptive android apps with Compose.

    Performance

    With each release of Jetpack Compose, we continue to prioritize performance improvements. The latest stable release includes significant rewrites and improvements to multiple sub-systems including semantics, focus and text optimizations. Best of all these are available to you simply by upgrading your Compose dependency; no code changes required.

    bar chart of internal benchmarks for performance run on a Pixel 3a device from January to May 2023 measured by jank rate

    Internal benchmark, run on a Pixel 3a

    We continue to work on further performance improvements, notable changes in the latest alpha BOM include:

      • Pausable Composition allows compositions to be paused, and their work split up over several frames.
      • Background text prefetch enables text layout caches to be pre-warmed on a background thread, enabling faster text layout.
      • LazyLayout prefetch improvements enabling lazy layouts to be smarter about how much content to prefetch, taking advantage of pausable composition.

    Together these improvements eliminate nearly all jank in an internal benchmark.

    Stability

    We’ve heard from you that upgrading your Compose dependency can be challenging, encountering bugs or behaviour changes that prevent you from staying on the latest version. We’ve invested significantly in improving the stability of Compose, working closely with the many Google app teams building with Compose to detect and prevent issues before they even make it to a release.

    Google apps develop against and release with snapshot builds of Compose; as such, Compose is tested against the hundreds of thousands of Google app tests and any Compose issues are immediately actioned by our team. We have recently invested in increasing the cadence of updating these snapshots and now update them daily from Compose tip-of-tree, which means we’re receiving feedback faster, and are able to resolve issues long before they reach a public release of the library.

    Jetpack Compose also relies on @Experimental annotations to mark APIs that are subject to change. We heard your feedback that some APIs have remained experimental for a long time, reducing your confidence in the stability of Compose. We have invested in stabilizing experimental APIs to provide you a more solid API surface, and reduced the number of experimental APIs by 32% in the last year.

    We have also heard that it can be hard to debug Compose crashes when your own code does not appear in the stack trace. In the latest alpha BOM, we have added a new opt-in feature to provide more diagnostic information. Note that this does not currently work with minified builds and comes at a performance cost, so we recommend only using this feature in debug builds.

    class App : Application() {
       override fun onCreate() {
            // Enable only for debug flavor to avoid perf impact in release
            Composer.setDiagnosticStackTraceEnabled(BuildConfig.DEBUG)
       }
    }
    

    Libraries

    We know that to build great apps, you need Compose integration in the libraries that interact with your app’s UI.

    A core library that powers any Compose app is Navigation. You told us that you often encountered limitations when managing state hoisting and directly manipulating the back stack with the current Compose Navigation solution. We went back to the drawing-board and completely reimagined how a navigation library should integrate with the Compose mental model. We’re excited to introduce Navigation 3, a new artifact designed to empower you with greater control and simplify complex navigation flows.

    We’re also investing in Compose support for CameraX and Media3, making it easier to integrate camera capture and video playback into your UI with Compose idiomatic components.

    @Composable
    private fun VideoPlayer(
        player: Player?, // from media3
        modifier: Modifier = Modifier
    ) {
        Box(modifier) {
            PlayerSurface(player) // from media3-ui-compose
            player?.let {
                // custom play-pause button UI
                val playPauseButtonState = rememberPlayPauseButtonState(it) // from media3-ui-compose
                MyPlayPauseButton(playPauseButtonState, Modifier.align(BottomEnd).padding(16.dp))
            }
        }
    }
    

    To learn more, see the media3 Compose documentation and the CameraX samples.

    Tools

    We continue to improve the Android Studio tools for creating Compose UIs. The latest Narwhal canary includes:

      • Resizable Previews instantly show you how your Compose UI adapts to different window sizes
      • Preview navigation improvements using clickable names and components
      • Studio Labs 🧪: Compose preview generation with Gemini quickly generate a preview
      • Studio Labs 🧪: Transform UI with Gemini change your UI with natural language, directly from preview.
      • Studio Labs 🧪: Image attachment in Gemini generate Compose code from images.

    For more information read What’s new in Android development tools.

    moving image of resizable preview in Jetpack Compose

    Resizable Preview

    New Compose Lint checks

    The Compose alpha BOM introduces two new annotations and associated lint checks to help you to write correct and performant Compose code. The @FrequentlyChangingValue annotation and FrequentlyChangedStateReadInComposition lint check warns in situations where function calls or property reads in composition might cause frequent recompositions. For example, frequent recompositions might happen when reading scroll position values or animating values. The @RememberInComposition annotation and RememberInCompositionDetector lint check warns in situations where constructors, functions, and property getters are called directly inside composition (e.g. the TextFieldState constructor) without being remembered.

    Happy Composing

    We continue to invest in providing the features, performance, stability, libraries and tools that you need to build excellent apps. We value your input so please share feedback on our latest updates or what you’d like to see next.

    Explore this announcement and all Google I/O 2025 updates on io.google starting May 22.



    Source link

  • What’s new in Watch Faces



    Posted by Garan Jenkin – Developer Relations Engineer

    Wear OS has a thriving watch face ecosystem featuring a variety of designs that also aims to minimize battery impact. Developers have embraced the simplicity of creating watch faces using Watch Face Format – in the last year, the number of published watch faces using Watch Face Format has grown by over 180%*.

    Today, we’re continuing our investment and announcing version 4 of the Watch Face Format, available as part of Wear OS 6. These updates allow developers to express even greater levels of creativity through the new features we’ve added. And we’re supporting marketplaces, which gives flexibility and control to developers and more choice for users.

    In this blog post we’ll cover key new features, check out the documentation for more details of changes introduced in recent versions.

    Supporting marketplaces with Watch Face Push

    We’re also announcing a completely new API, the Watch Face Push API, aimed at developers who want to create their own watch face marketplaces.

    Watch Face Push, available on devices running Wear OS 6 and above, works exclusively with watch faces that use the Watch Face Format watch faces.

    We’ve partnered with well-known watch face developers – including Facer, TIMEFLIK, WatchMaker, Pujie, and Recreative – in designing this new API. We’re excited that all of these developers will be bringing their unique watch face experiences to Wear OS 6 using Watch Face Push.

    Three mobile devices representing watch face marketplace apps for watches running Wear OS 6

    From left to right, Facer, Recreative and TIMEFLIK watch faces have been developing marketplace apps to work with watches running Wear OS 6.

    Watch faces managed and deployed using Watch Face Push are all written using Watch Face Format. Developers publish these watch faces in the same way as publishing through Google Play, though there are some additional checks the developer must make which are described in the Watch Face Push guidance.

    A flow diagram demonstrating the flow of information from Cloud-based storage to the user's phone where the app is installed, then transferred to be installed on a wearable device using the Wear OS App via the Watch Face Push API

    The Watch Face Push API covers only the watch part of this typical marketplace system diagram – as the app developer, you have control and responsibility for the phone app and cloud components, as well as for building the Wear OS app using Watch Face Push. You’re also in control of the phone-watch communications, for which we recommend using the Data Layer APIs.

    Adding Watch Face Push to your project

    To start using Watch Face Push on Wear OS 6, include the following dependency in your Wear OS app:

    // Ensure latest version is used by checking the repository
    implementation("androidx.wear.watchface:watchface-push:1.3.0-alpha07")
    

    Declare the necessary permission in your AndroidManifest.xml:

    <uses-permission android:name="com.google.wear.permission.PUSH_WATCH_FACES" />
    

    Obtain a Watch Face Push client:

    val manager = WatchFacePushManagerFactory.createWatchFacePushManager(context)
    

    You’re now ready to start using the Watch Face Push API, for example to list the watch faces you have already installed, or add a new watch face:

    // List existing watch faces, installed by this app
    val listResponse = manager.listWatchFaces()
    
    // Add a watch face
    manager.addWatchFace(watchFaceFileDescriptor, validationToken)
    

    Understanding Watch Face Push

    While the basics of the Watch Face Push API are easy to understand and access through the WatchFacePushManager interface, it’s important to consider several other factors when working with the API in practice to build an effective marketplace app, including:

      • Setting active watch faces – Through an additional permission, the app can set the active watch face. Learn about how to integrate this feature, as well as how to handle the different permission scenarios.

    To learn more about using Watch Face Push, see the guidance and reference documentation.

    Updates to Watch Face Format

    Photos

    Available from Watch Face Format v4

    The new Photos element allows the watch face to contain user-selectable photos. The element supports both individual photos and a gallery of photos. For a gallery of photos, developers can choose whether the photos advance automatically or when the user taps the watch face.

    a wearable device and small screen mobile device side by side demonstrating how a user may configure photos for the watch face through the Companion app on the mobile device

    Configuring photos through the watch Companion app

    The user is able to select the photos of their choice through the companion app, making this a great way to include true personalization in your watch face. To use this feature, first add the necessary configuration:

    <UserConfigurations>
      <PhotosConfiguration id="myPhoto" configType="SINGLE"/>
    </UserConfigurations>
    

    Then use the Photos element within any PartImage, in the same way as you would for an Image element:

    <PartImage ...>
      <Photos source="[CONFIGURATION.myPhoto]"
              defaultImageResource="placeholder_photo"/>
    </PartImage>
    

    For details on how to support multiple photos, and how to configure the different change behaviors, refer to the Photos section of the guidance and reference, as well as the GitHub samples.

    Transitions

    Available from Watch Face Format v4

    Watch Face Format now supports transitions when exiting and entering ambient mode.

    moving image demonstrating an overshoot effect adjusting the time on a watch face to reveal the seconds digit

    State transition animation: Example using an overshoot effect in revealing the seconds digits

    This is achieved through the existing Variant tag. For example, the hours and minutes in the above watch face are animated as follows:

    <DigitalClock ...>
      <Variant mode="AMBIENT" target="x" value="100" interpolation="OVERSHOOT" />
    
       <!-- Rest of "hh:mm" clock definition here -->
    </DigitalClock>
    

    By default, the animation takes the full extent of allowed time for the transition. The new interpolation attribute controls the animation effect – in this case the use of OVERSHOOT adds a playful experience.

    The seconds are implemented in a separate DigitalClock element, which shows the use of the new duration attribute:

    <DigitalClock ...>
      <Variant mode="AMBIENT" target="alpha" value="0" duration="0.5"/>
       <!-- Rest of "ss" clock definition here -->
    </DigitalClock>
    

    The duration attribute takes a value between 0.0 and 1.0, with 1.0 representing the full extent of the allowed time. In this example, by using a value of 0.5, the seconds animation is quicker – taking half the allowed time, in comparison to the hours and minutes, which take the entire transition period.

    For more details on using transitions, see the guidance documentation, as well as the reference documentation for Variant.

    Color Transforms

    Available from Watch Face Format v4

    We’ve extended the usefulness of the Transform element by allowing color to be transformed on the majority of elements where it is an attribute, and also allowing tintColor to be transformed on Group and Part* elements such as PartDraw and PartText.

    The main exceptions to this addition are the clock elements, DigitalClock and AnalogClock, and also ComplicationSlot, which do not currently support Transform.

    In addition to extending the list of transformable attributes to include colors, we’ve also added a handful of useful functions for manipulating color:

    To see these in action, let’s consider an example.

    The Weather data source provides the current UV index through [WEATHER.UV_INDEX]. When representing the UV index, these values are typically also assigned a color:

    moving image demonstrating an overshoot effect adjusting the time on a watch face to reveal the seconds digit

    We want to represent this information as an Arc, not only showing the value, but also using the appropriate color. We can achieve this as follows:

    <Arc centerX="0" centerY="0" height="420" width="420"
      startAngle="165" endAngle="165" direction="COUNTER_CLOCKWISE">
      <Transform target="endAngle"
        value="165 - 40 * (clamp(11, 0.0, 11.0) / 11.0)" />
      <Stroke thickness="20" color="#ffffff" cap="ROUND">
        <Transform target="color"
          value="extractColorFromWeightedColors(#97d700 #FCE300 #ff8200 #f65058 #9461c9, 3 3 2 3 1, false, clamp([WEATHER.UV_INDEX] + 0.5, 0.0, 12.0) / 12.0)" />
      </Stroke>
    </Arc>
    

    Let’s break this down:

      • The first Transform restricts the UV index to the range 0.0 to 11.0 and adjusts the sweep of the Arc according to that value.
      • The second Transform uses the new extractColorFromWeightedColors function.
          • The first argument is our list of colors
          • The second argument is a list of weights – you can see from the chart above that green covers 3 values, whereas orange only covers 2, so we use weights to represent this.
          • The third argument is whether or not to interpolate the color values. In this case we want to stick strictly to the color convention for UV index, so this is false.
          • Finally in the fourth argument we coerce the UV value into the range 0.0 to 1.0, which is used as an index into our weighted colors.

    The result looks like this:

    side by side quadrants of watch face examples showing using the new color functions in applying color transforms to a Stroke in an Arc

    Using the new color functions in applying color transforms to a Stroke in an Arc.

    As well as being able to provide raw colors and weights to these functions, they can also be used with values from complications, such as HR, temperature or steps goal. For example, to use the color range specified in a goal complication:

    <Transform target="color"
        value="extractColorFromColors(
            [COMPLICATION.GOAL_PROGRESS_COLORS],
            [COMPLICATION.GOAL_PROGRESS_COLOR_INTERPOLATE],
            [COMPLICATION.GOAL_PROGRESS_VALUE] /    
                [COMPLICATION.GOAL_PROGRESS_TARGET_VALUE]
    )"/>
    

    Introducing the Reference element

    Available from Watch Face Format v4

    The new Reference element allows you to refer to any transformable attribute from one part of your watch face scene in other parts of the scene tree.

    In our UV index example above, we’d also like the text labels to use the same color scheme.

    We could perform the same color transform calculation as on our Arc, using [WEATHER.UV_INDEX], but this is duplicative work which could lead to inconsistencies, for example if we change the exact color hues in one place but not the other.

    Returning to the Arc definition, let’s create a Reference to the color:

    <Arc centerX="0" centerY="0" height="420" width="420"
      startAngle="165" endAngle="165" direction="COUNTER_CLOCKWISE">
      <Transform target="endAngle"
        value="165 - 40 * (clamp(11, 0.0, 11.0) / 11.0)" />
      <Stroke thickness="20" color="#ffffff" cap="ROUND">
        <Reference source="color" name="uv_color" defaultValue="#ffffff" />
        <Transform target="color"
          value="extractColorFromWeightedColors(#97d700 #FCE300 #ff8200 #f65058 #9461c9, 3 3 2 3 1, false, clamp([WEATHER.UV_INDEX] + 0.5, 0.0, 12.0) / 12.0)" />
      </Stroke>
    </Arc>
    

    The color of the Arc is calculated from the relatively complex extractColorFromWeightedColors function. To avoid repeating this elsewhere in our watch face, we have added a Reference element, which takes as its source the Stroke color.

    Let’s now look at how we can consume this value in a PartText elsewhere in the watch face. We gave the Reference the name uv_color, so we can simply refer to this in any expression:

    <PartText x="0" y="225" width="450" height="225">
      <TextCircular centerX="225" centerY="0" width="420" height="420"
        startAngle="120" endAngle="90"
        align="START" direction="COUNTER_CLOCKWISE">
        <Font family="SYNC_TO_DEVICE" size="24">
          <Transform target="color" value="[REFERENCE.uv_color]" />
          <Template>%d<Parameter expression="[WEATHER.UV_INDEX]" /></Template>
        </Font>
      </TextCircular>
    </PartText>
    <!-- Similar PartText here for the "UV:" label -->
    

    As a result, the color of the Arc and the UV numeric value are now coordinated:

    side by side quadrants of watch face examples showing Coordinating colors across elements using the Reference element

    Coordinating colors across elements using the Reference element

    For more details on how to use the Reference element, refer to the Reference guidance.

    Text autosizing

    Available from Watch Face Format v3

    Sometimes the exact length of the text to be shown on the watch face can vary, and as a developer you want to balance being able to display text that is both legible, but also complete.

    Auto-sizing text can help solve this problem, and can be enabled through the isAutoSize attribute introduced to the Text element:

    <Text align="CENTER" isAutoSize="true">
    

    Having set this attribute, text will then automatically fit the available space, starting at the maximum size specified in your Font element, and with a minimum size of 12.

    As an example, step count could range from tens or hundreds through to many thousands, and the new isAutoSize attribute enables best use of the available space for every possible value:

    side by side examples of text sizing adjustments on watch face using isAutosize

    Making the best use of the available text space through isAutoSize

    For more details on isAutoSize, see the Text reference.

    Android Studio support

    For developers working in Android Studio, we’ve added support to make working with Watch Face Format easier, including:

      • Run configuration support
      • Auto-complete and resource reference
      • Lint checking

    This is available from Android Studio Canary version 2025.1.1 Canary 10.

    Learn More

    To learn more about building watch faces, please take a look at the following resources:

    We’ve also recently launched a codelab for Watch Face Format and have updated samples on GitHub to showcase new features. The issue tracker is available for providing feedback.

    We’re excited to see the watch face experiences that you create and share!

    Explore this announcement and all Google I/O 2025 updates on io.google starting May 22.

    * Google Play data for period 2025-03-24 to 2025-03-23



    Source link

  • What’s new in Wear OS 6



    Posted by Chiara Chiappini – Developer Relations Engineer

    This year, we’re excited to introduce Wear OS 6: the most power-efficient and expressive version of Wear OS yet.

    Wear OS 6 introduces the new design system we call Material 3 Expressive. It features a major refresh with visual and motion components designed to give users an experience with more personalization. The new design offers a great level of expression to meet user demand for experiences that are modern, relevant, and distinct. Material 3 Expressive is coming to Wear OS, Android, and all your favorite Google apps on these devices later this year.

    The good news is that you don’t need to compromise battery for beauty: thanks to Wear OS platform optimizations, watches updating from Wear OS 5 to Wear OS 6 can see up to 10% improvement in battery life.1

    Wear OS 6 developer preview

    Today we’re releasing the Developer Preview of Wear OS 6, the next version of Google’s smartwatch platform, based on Android 16.

    Wear OS 6 brings a number of developer-facing changes, such as refining the always-on display experience. Check out what’s changed and try the new Wear OS 6 emulator to test your app for compatibility with the new platform version.

    Material 3 Expressive on Wear OS

    moving image displays examples of Material 3 Expressive on Wear OS experiences

    Some examples of Material 3 Expressive on Wear OS experiences

    Material 3 Expressive for the watch is fully optimized for the round display. We recommend developers embrace the new design system in their apps and tiles. To help you adopt Material 3 Expressive in your app, we have begun releasing new design guidance for Wear OS, along with corresponding Figma design kits.

    As a developer, you can get access the Material 3 Expressive on Wear OS using new Jetpack libraries:

    These two libraries provide implementations for the components catalog that adheres to the Material 3 Expressive design language.

    Make it personal with richer color schemes using themes

    moving image showing how dynamic color theme updates colors of apps and Tiles

    Dynamic color theme updates colors of apps and Tiles

    The Wear Compose Material 3 and Wear Protolayout Material 3 libraries provide updated and extended color schemes, typography, and shapes to bring both depth and variety to your designs. Additionally, your tiles now align with the system font by default (on Wear OS 6+ devices), offering a more cohesive experience on the watch.

    Both libraries introduce dynamic color theming, which automatically generates a color theme for your app or tile to match the colors of the watch face of Pixel watches.

    Make it more glanceable with new tile components

    Tiles now support a new framework and a set of components that embrace the watch’s circular form factor. These components make tiles more consistent and glanceable, so users can more easily take swift action on the information included in them.

    We’ve introduced a 3-slot tile layout to improve visual consistency in the Tiles carousel. This layout includes a title slot, a main content slot, and a bottom slot, designed to work across a range of different screen sizes:

    moving image showing some examples of Tiles with the 3-slot tile layout

    Some examples of Tiles with the 3-slot tile layout.

    Highlight user actions and key information with components optimized for round screen

    The new Wear OS Material 3 components automatically adapt to larger screen sizes, building on the Large Display support added as part of Wear OS 5. Additionally, components such as Buttons and Lists support shape morphing on apps.

    The following sections highlight some of the most exciting changes to these components.

    Embrace the round screen with the Edge Hugging Button

    We introduced a new EdgeButton for apps and tiles with an iconic design pattern that maximizes the space within the circular form factor, hugs the edge of the screen, and comes in 4 standard sizes.

    moving image of a sreenshot representing an EdgeButton in a scrollable screen.

    Screenshot representing an EdgeButton in a scrollable screen.

    Fluid navigation through lists using new indicators

    The new TransformingLazyColumn from the Foundation library makes expressive motion easy with motion that fluidly traces the edges of the display. Developers can customize the collapsing behavior of the list when scrolling to the top, bottom and both sides of the screen. For example, components like Cards can scale down as they are closer to the top of the screen.

    moving image showing a TransformingLazyColumn with content that collapses and changes in size when approaching the edge of the screens.
.

    TransformingLazyColumn allows content to collapse and change in size when approaching the edge of the screens

    Material 3 Expressive also includes a ScrollIndicator that features a new visual and motion design to make it easier for users to visualize their progress through a list. The ScrollIndicator is displayed by default when you use a TransformingLazyColumn and ScreenScaffold.

    moving image showing side by side examples of ScrollIndicator in action

    ScrollIndicator

    Lastly, you can now use segments with the new ProgressIndicator, which is now available as a full-screen component for apps and as a small-size component for both apps and tiles.

    moving image  showing a full-screen ProgressIndicator

    Example of a full-screen ProgressIndicator

    To learn more about the new features and see the full list of updates, see the release notes of the latest beta release of the Wear Compose and Wear Protolayout libraries. Check out the migration guidance for apps and tiles on how to upgrade your existing apps, or try one of our codelabs if you want to start developing using Material 3 Expressive design.

    Watch Faces

    With Wear OS 6 we are launching updates for watch face developers:

      • New options for customizing the appearance of your watch face using version 4 of Watch Face Format, such as animated state transitions from ambient to interactive and photo watch faces.
      • A new API for building watch face marketplaces.

    Learn more about what’s new in Watch Face updates.

    Look for more information about the general availability of Wear OS 6 later this year.

    Library updates

    ProtoLayout

    Since our last major release, we’ve improved capabilities and the developer experience of the Tiles and ProtoLayout libraries to address feedback we received from developers. Some of these enhancements include:

    The example below shows how to display a layout with a text on a Tile using new enhancements:

    // returns a LayoutElement for use in onTileRequest()
    materialScope(context, requestParams.deviceConfiguration) {
        primaryLayout(
            mainSlot = {
                text(
                    text = "Hello, World!".layoutString,
                    typography = BODY_LARGE,
                )
            }
        )
    }
    

    For more information, see the migration instructions.

    Credential Manager for Wear OS

    The CredentialManager API is now available on Wear OS, starting with Google Pixel Watch devices running Wear OS 5.1. It introduces passkeys to Wear OS with a platform-standard authentication UI that is consistent with the experience on mobile.

    The Credential Manager Jetpack library provides developers with a unified API that simplifies and centralizes their authentication implementation. Developers with an existing implementation on another form factor can use the same CredentialManager code, and most of the same supporting code to fulfill their Wear OS authentication workflow.

    Credential Manager provides integration points for passkeys, passwords, and Sign in With Google, while also allowing you to keep your other authentication solutions as backups.

    Users will benefit from a consistent, platform-standard authentication UI; the introduction of passkeys and other passwordless authentication methods, and the ability to authenticate without their phone nearby.

    Check out the Authentication on Wear OS guidance to learn more.

    Richer Wear Media Controls

    New media controls for a Podcast

    New media controls for a Podcast

    Devices that run Wear OS 5.1 or later support enhanced media controls. Users who listen to media content on phones and watches can now benefit from the following new media control features on their watch:

      • They can fast-forward and rewind while listening to podcasts.
      • They can access the playlist and controls such as shuffle, like, and repeat through a new menu.

    Developers with an existing implementation of action buttons and playlist can benefit from this feature without additional effort. Check out how users will get more controls from your media app on a Google Pixel Watch device.

    Start building for Wear OS 6 now

    With these updates, there’s never been a better time to develop an app on Wear OS. These technical resources are a great place to learn more how to get started:

    Earlier this year, we expanded our smartwatch offerings with Galaxy Watch for Kids, a unique, phone-free experience designed specifically for children. This launch gives families a new way to stay connected, allowing children to explore Wear OS independently with a dedicated smartwatch. Consult our developer guidance to create a Wear OS app for kids.

    We’re looking forward to seeing the experiences that you build on Wear OS!

    Explore this announcement and all Google I/O 2025 updates on io.google starting May 22.

    1 Actual battery performance varies.



    Source link

  • Media3 1.6.0 — what’s new?



    Posted by Andrew Lewis – Software Engineer

    This article is cross-published on Medium

    This release includes a host of bug fixes, performance improvements and new features. Read on to find out more, and as always please check out the full release notes for a comprehensive overview of changes in this release.


    Playback, MediaSession and UI

    ExoPlayer now supports HLS interstitials for ad insertion in HLS streams. To play these ads using ExoPlayer’s built-in playlist support, pass an HlsInterstitialsAdsLoader.AdsMediaSourceFactory as the media source factory when creating the player. For more information see the official documentation.

    This release also includes experimental support for ‘pre-warming’ decoders. Without pre-warming, transitions from one playlist item to the next may not be seamless in some cases, for example, we may need to switch codecs, or decode some video frames to reach the start position of the new media item. With pre-warming enabled, a secondary video renderer can start decoding the new media item earlier, giving near-seamless transitions. You can try this feature out by enabling it on the DefaultRenderersFactory. We’re actively working on further improvements to the way we interact with decoders, including adding a ‘fast seeking mode’ so stay tuned for updates in this area.

    Media3 1.6.0 introduces a new media3-ui-compose module that contains functionality for building Compose UIs for playback. You can find a reference implementation in the Media3 Compose demo and learn more in Getting started with Compose-based UI. At this point we’re providing a first set of foundational state classes that link to the Player, in addition to some basic composable building blocks. You can use these to build your own customized UI widgets. We plan to publish default Material-themed composables in a later release.

    Some other improvements in this release include: moving system calls off the application’s main thread to the background (which should reduce ANRs), a new decoder module wrapping libmpegh (for bundling object-based audio decoding in your app), and a fix for the Cast extension for apps targeting API 34+. There are also fixes across MPEG-TS and WebVTT extraction, DRM, downloading/caching, MediaSession and more.

    Media extraction and frame retrieval

    The new MediaExtractorCompat is a drop-in replacement for the framework MediaExtractor but implemented using Media3’s extractors. If you’re using the Android framework MediaExtractor, consider migrating to get consistent behavior across devices and reduce crashes.

    We’ve also added experimental support for retrieving video frames in a new class ExperimentalFrameExtractor, which can act as a replacement for the MediaMetadataRetriever getFrameAtTime methods. There are a few benefits over the framework implementation: HDR input is supported (by default tonemapping down to SDR, but with the option to produce HLG bitmaps from Android 14 onwards), Media3 effects can be applied (including Presentation to scale the output to a desired size) and it runs faster on some devices due to moving color space conversion to the GPU. Here’s an example of using the new API:

    val bitmap =
        withContext(Dispatchers.IO) {
            val configuration =
                ExperimentalFrameExtractor.Configuration
                    .Builder()
                    .setExtractHdrFrames(true)
                    .build()
            val frameExtractor =
                ExperimentalFrameExtractor(
                    context,
                    configuration,
                )
    
            frameExtractor.setMediaItem(mediaItem, /*effects*/ listOf())
    
            val frame = frameExtractor.getFrame(timestamps).await()
            frameExtractor.release()
            frame.bitmap
        }
    

    Editing, transcoding and export

    Media3 1.6.0 includes performance, stability and functional improvements in Transformer. Highlights include: support for transcoding/transmuxing Dolby Vision streams on devices that support this format and a new MediaProjectionAssetLoader for recording from the screen, which you can try out in the Transformer demo app.

    Check out Common media processing operations with Jetpack Media3 Transformer for some code snippets showing how to process media with Transformer, and tips to reduce latency.

    This release also includes a new Kotlin-based demo app showcasing Media3’s video effects framework. You can select from a variety of video effects and preview them via ExoPlayer.setVideoEffects.

    Media3 video effect animation

    Animation showing contrast adjustment and a confetti effect in the new demo app

    Get started with Media3 1.6.0

    Please get in touch via the Media3 issue Tracker if you run into any bugs, or if you have questions or feature requests. We look forward to hearing from you!



    Source link

  • What’s new in the Jetpack Compose April ’25 release



    Posted by Jolanda Verhoef – Developer Relations Engineer

    Today, as part of the Compose April ‘25 Bill of Materials, we’re releasing version 1.8 of Jetpack Compose, Android’s modern, native UI toolkit, used by many developers. This release contains new features like autofill, various text improvements, visibility tracking, and new ways to animate a composable’s size and location. It also stabilizes many experimental APIs and fixes a number of bugs.

    To use today’s release, upgrade your Compose BOM version to 2025.04.01 :

    implementation(platform("androidx.compose:compose-bom:2025.04.01"))
    

    Note: If you are not using the Bill of Materials, make sure to upgrade Compose Foundation and Compose UI at the same time. Otherwise, autofill will not work correctly.

    Autofill

    Autofill is a service that simplifies data entry. It enables users to fill out forms, login screens, and checkout processes without manually typing in every detail. Now, you can integrate this functionality into your Compose applications.

    Setting up Autofill in your Compose text fields is straightforward:

    TextField(
      state = rememberTextFieldState(),
      modifier = Modifier.semantics {
        contentType = ContentType.Username 
      }
    )
    

    For full details on how to implement autofill in your application, see the Autofill in Compose documentation.

    Text

    When placing text inside a container, you can now use the autoSize parameter in BasicText to let the text size automatically adapt to the container size:

    Box {
        BasicText(
            text = "Hello World",
            maxLines = 1,
            autoSize = TextAutoSize.StepBased()
        )
    }
    

    moving image of Hello World text inside a container

    You can customize sizing by setting a minimum and/or maximum font size and define a step size. Compose Foundation 1.8 contains this new BasicText overload, with Material 1.4 to follow soon with an updated Text overload.

    Furthermore, Compose 1.8 enhances text overflow handling with new TextOverflow.StartEllipsis or TextOverflow.MiddleEllipsis options, which allow you to display ellipses at the beginning or middle of a text line.

    val text = "This is a long text that will overflow"
    Column(Modifier.width(200.dp)) {
      Text(text, maxLines = 1, overflow = TextOverflow.Ellipsis)
      Text(text, maxLines = 1, overflow = TextOverflow.StartEllipsis)
      Text(text, maxLines = 1, overflow = TextOverflow.MiddleEllipsis)
    }
    

    text overflow handling displaying ellipses at the beginning and middle of a text line

    And finally, we’re expanding support for HTML formatting in AnnotatedString, with the addition of bulleted lists:

    Text(
      AnnotatedString.fromHtml(
        """
        <h1>HTML content</h1>
        <ul>
          <li>Hello,</li>
          <li>World</li>
        </ul>
        """.trimIndent()
      )
    )
    

    a bulleted list of two items

    Visibility tracking

    Compose UI 1.8 introduces a new modifier: onLayoutRectChanged. This API solves many use cases that the existing onGloballyPositioned modifier does; however, it does so with much less overhead. The onLayoutRectChanged modifier can debounce and throttle the callback per what the use case demands, which helps with performance when it’s added onto an item in LazyColumn or LazyRow.

    This new API unlocks features that depend on a composable’s visibility on screen. Compose 1.9 will add higher-level abstractions to this low-level API to simplify common use cases.

    Animate composable bounds

    Last year we introduced shared element transitions, which smoothly animate content in your apps. The 1.8 Animation module graduates LookaheadScope to stable, includes numerous performance and stability improvements, and includes a new modifier, animateBounds. When used inside a LookaheadScope, this modifier automatically animates its composable’s size and position on screen, when those change:

    Box(
      Modifier
        .width(if(expanded) 180.dp else 110.dp)
        .offset(x = if (expanded) 0.dp else 100.dp)
        .animateBounds(lookaheadScope = this@LookaheadScope)
        .background(Color.LightGray, shape = RoundedCornerShape(12.dp))
        .height(50.dp)
    ) {
      Text("Layout Content", Modifier.align(Alignment.Center))
    }
    

    a moving image depicting animate composable bounds

    Increased API stability

    Jetpack Compose has utilized @Experimental annotations to mark APIs that are liable to change across releases, for features that require more than a library’s alpha period to stabilize. We have heard your feedback that a number of features have been marked as experimental for some time with no changes, contributing to a sense of instability. We are actively looking at stabilizing existing experimental APIs—in the UI and Foundation modules, we have reduced the experimental APIs from 172 in the 1.7 release to 70 in the 1.8 release. We plan to continue this stabilization trend across modules in future releases.

    Deprecation of contextual flow rows and columns

    As part of the work to reduce experimental annotations, we identified APIs added in recent releases that are less than optimal solutions for their use cases. This has led to the decision to deprecate the experimental ContextualFlowRow and ContextualFlowColumn APIs, added in Foundation 1.7. If you need the deprecated functionality, our recommendation for now is to copy over the implementation and adapt it as needed, while we work on a plan for future components that can cover these functionalities better.

    The related APIs FlowRow and FlowColumn are now stable; however, the new overflow parameter that was added in the last release is now deprecated.

    Improvements and fixes for core features

    In response to developer feedback, we have shipped some particularly in-demand features and bug fixes in our core libraries:

      • Make dialogs go edge to edge: When displayed full screen, dialogs now take into account the full size of the screen and will draw behind system bars.

    Get started!

    We’re grateful for all of the bug reports and feature requests submitted to our issue tracker – they help us to improve Compose and build the APIs you need. Continue providing your feedback, and help us make Compose better.

    Happy composing!



    Source link