Tag Archives: Android

Google Workspace Updates Weekly Recap – November 29, 2024

2 New updates

Unless otherwise indicated, the features below are available to all Google Workspace customers, and are fully launched or in the process of rolling out. Rollouts should take no more than 15 business days to complete if launching to both Rapid and Scheduled Release at the same time. If not, each stage of rollout should take no more than 15 business days to complete.


Drag and drop contacts in the addressee fields when composing an email on your Android device 
When writing an email in the Gmail app on your Android device, you can now drag and drop contacts in the addressee fields. This makes it easier for you to move an email address between the "to," "cc," and “bcc” fields. | Rollout to Rapid Release domains and Scheduled Release domains is complete. | Available to all Google Workspace customers, Workspace Individual Subscribers, and users with personal Google accounts.
Drag and drop contacts in the addressee fields when composing an email on your Android device

Expanding row limits in Connected Sheets for Looker 
Earlier this year, we increased the maximum number of rows of results returned from BigQuery to 100,000 for pivot tables. This week, we’re expanding this to Connected Sheets for Looker by increasing the maximum number of rows of results returned from Looker to 100,000 for pivot tables. With this update, users can analyze even more results in Sheets from the petabytes of data in Looker. | Rolling out to Rapid Release and Scheduled Release domains now. | Available to all Google Workspace customers, Workspace Individual Subscribers, and users with personal Google accounts. | Visit the Help Center to learn more about Connected Sheets for Looker.


Previous announcements

The announcements below were published on the Workspace Updates blog earlier this week. Please refer to the original blog posts for complete details.


The Gemini mobile app is now available for Google Workspace users
The Gemini mobile app for Android and iOS devices is now available for Google Workspace users accessing Gemini as a core service. | Learn more about the Gemini mobile app.

Introducing huddles: instant-on, audio-first meetings in Google Chat
In continuing our effort to make Google Chat your home for team collaboration, we’re excited to introduce a fast and flexible way to connect: huddles. Powered by Google Meet, huddles let you start an audio-first meeting, making real-time collaboration easier than ever. Once the huddle has started, you can resize or drag the window, add video, or share your screen for a fuller meeting experience while multitasking in Chat. | Learn more about huddles in Chat.



The Gemini mobile app is now available for Google Workspace users

What’s changing

Beginning today, the Gemini mobile app for Android and iOS devices is now available for Google Workspace users accessing Gemini as a core service. With the Gemini mobile app, users will be able to do research or find quick answers while on the go. They can also leverage the camera of the phone to take pictures of handwritten notes and export them into Google Docs or Gmail, or create presentation-ready visualizations of a chart that was drawn on a whiteboard; All of this comes with the enterprise data protections Google Workspace customers are accustomed to. 

As part of this roll out, we’re also extending access to the Gemini mobile app for all Education users, both as a core service with a qualifying edition and as an additional service.


Access the Gemini mobile app on Android and iOS



Additional details

  • Refer to this article in our Help Center, Gemini mobile app availability, for a list of supported languages, countries, and age requirements for the Gemini mobile app.
  • Currently, some Gemini app features available on the web aren’t available to Google Workspace users in the mobile app. This includes Workspace extensions, file upload, and Gems. Refer to this article in our Help Center for more details: Use Gemini Apps with a work or school Google Account.
  • Currently, the Gemini app on Android does not support Work Profile.
  • The Google mobile app on iOS, which includes Gemini, will not support authenticating with your Google Workspace account. iOS users hoping to authenticate with their Google Workspace account must install the Gemini mobile app.
  • There is no impact to Google Workspace users accessing the Gemini app as an additional service. These users will continue to be able to access the Gemini mobile app.

Getting started

Rollout pace


Availability

Available for Google Workspace:
  • Business Starter, Business Standard, Business Plus
  • Enterprise Starter, Enterprise Standard, Enterprise Plus
  • Frontline Starter, Frontline Standard
  • Essentials, Enterprise Essentials, Enterprise Essentials Plus
  • Google Workspace for Nonprofits edition
  • Education Fundamentals, Education Standard, Education Plus 

Also available for Google Workspace customers with these add-ons:
  • Gemini Business
  • Gemini Enterprise
  • Gemini Education
  • Gemini Education Premium

Resources


Google Workspace Updates Weekly Recap – November 22, 2024

2 New updates

Unless otherwise indicated, the features below are available to all Google Workspace customers, and are fully launched or in the process of rolling out. Rollouts should take no more than 15 business days to complete if launching to both Rapid and Scheduled Release at the same time. If not, each stage of rollout should take no more than 15 business days to complete.


Find files more easily with the Drive Android file picker
In 2023, we introduced a streamlined file organization with the new Google Drive location picker on web. Now, we’re rolling out similar improvements to the Drive app on Android devices. This update will make it easier to find recently viewed Drive items and clearly see what other storage locations besides "My Drive" are available to you, such as items you have access to within shared drives. | Rollout to Rapid Release domains is complete; launch to Scheduled Release domains planned for December 2, 2024. | Available to all Google Workspace customers, Google Workspace Individual subscribers, and users with personal Google accounts. | Visit the Help Center to learn more about how to use Google Drive. 
Drive files on Android

View tasks lists on the Google Calendar Android app 
Last year, we introduced full screen tasks lists for Google Calendar on web, enabling users to see all their tasks and task lists in a single full screen view. This week, we’re excited to announce that this same functionality is now available on Android devices. This update makes it easier for users to stay on top of and organize their tasks, especially while on-the-go. | Rolling out to Rapid Release and Scheduled Release domains now. | Available to Google Workspace customers, Google Workspace Individual subscribers, and users with personal Google accounts. | Visit the Help Center to learn more about Google Tasks.
tasks lists on the Google Calendar Android app


Previous announcements

The announcements below were published on the Workspace Updates blog earlier this week. Please refer to the original blog posts for complete details.


Easily respond to comments and access requests without leaving Google Chat with the auto-installed Google Drive Chat app 
Starting this week, the previously introduced Google Drive Chat app will be automatically installed and send you notifications about recent activity in Google Drive documents, such as new comments and share requests. | Learn more about the auto-installed Google Drive Chat app.

Table reference improvements in Google Sheets
This week, we introduced updates to table references that enhance discoverability and usability. | Learn more about table references in Sheets.

Educators can now request access to third-party apps for their students 
We’ve introduced a new workflow that allows educators to request access to unconfigured third-party apps on behalf of their students. | Learn more about requesting access to third-party apps for students.

Automatic framing is now available to everyone in Google Meet video calls, plus an improved experience when using virtual backgrounds 
We’re expanding automatic framing to all users, as well as introducing an improved experience while using a virtual background. | Learn more about automatic framing in Meet.

Add multiple multimedia files to a single message in Google Chat 
Users can now upload and send up to 20 multimedia files (photos and videos) in one Chat message. | Learn more about sending multimedia files in Chat.

More ways to get started quickly with building blocks in Google Docs 
This week, we introduced a new collection of building blocks designed to help you manage important business workflows in Docs, including team task management, project tracking, hiring, and more. | Learn more about new building blocks in Google Docs.

New file picker method for pre-selecting Google Drive files coming soon 
Today, Google Drive developers rely on the drive.file scope and the Google Picker API to optimize user experience and safety when creating their applications. To make it faster and easier for users to provide applications access to specific Drive files, the Google Picker API will introduce a new method to the Class view called setFileIds(fileIds) in January 2025. | Learn more about the new file picker method for pre-selecting Google Drive files.

Easily find and navigate your Google Chat conversations by organizing them into custom sections
As we continue to enhance the user experience in Google Chat over the last year, we’re excited to announce that users can now organize Chat conversations into custom sections. | Learn more about custom sections in Chat.

New Asus hardware kits for Google Meet
Asus is launching new hardware room kits certified for Google Meet that now offer daisy chain capabilities. Developed with AVer, this refreshed room kit portfolio will work in video conferencing rooms and spaces of just about any size. | Learn more about Asus hardware kits for Google Meet.



Completed rollouts

The features below completed their rollouts to Rapid Release domains, Scheduled Release domains, or both. Please refer to the original blog posts for additional details.


Rapid Release Domains: 
Scheduled Release Domains: 
Rapid and Scheduled Release Domains: 


    Gaze Link Wins Best Android App in Gemini API Developer Competition

    Posted by Thomas Ezan – Sr Developer Relation Engineer (@lethargicpanda)

    We're excited to announce Gaze Link as the winner of the Best Android App for our Gemini API Developer Competition!

    This innovative app demonstrates the potential of the Gemini API in providing a communication system for individuals with Amyotrophic lateral sclerosis (ALS) who develop severe motor and verbal disabilities, enabling them to type sentences with only their eyes.

    About Gaze Link

    Gaze Link uses Google’s Gemini 1.5 Flash model to predict the user’s intended sentence based on a few key words and the context of the conversation.

    For example if the context is “Is the room temperature ok?” and the user replies “hot AC two” the app will leverage Gemini to generate the full sentence “I am hot, can you turn the AC down by two degrees?”.

    The Gaze Link team took advantage of Gemini 1.5 Flash multilingual capabilities to let the app generate sentences in English, Spanish and Chinese, the three languages currently supported by the app.

    We were truly impressed by the Gaze Link app. The team used the Gemini API combined with ML Kit Face Detection to empower individuals with ALS providing them with a powerful communication system that is both accessible and affordable.

    With Gemini 1.5 Flash currently supporting 38 languages, it is possible for Gaze Link to add support for more languages in the future. In addition, the model’s multimodal abilities could enable the team to enhance the user experience by integrating image, audio and video to augment the context of the conversation.

    Build with the Gemini API

    The result of the integration of the Gemini API in Gaze Link is inspiring. If you are working on an Android app today, we encourage you to learn about the Gemini API capabilities to see how you can successfully add generative AI to your app and delight your users.

    To get started, go to the Android AI documentation!

    X improved login success rate by 2x after adopting passkeys

    Posted by Niharika Arora – Developer Relations Engineer

    From breaking news and entertainment to sports and politics, X is a social media app that aims to help nearly 500 million users worldwide get the full story with all the live commentary. Recently, X developers revamped the Android app’s login process so users never miss out on the conversations they’re interested in. Using the Credential Manager API, the team implemented new passkey authentication for quicker, easier, and safer access to the app.

    Simplifying login with passkeys

    Today, traditional password-based authentication systems are less secure and more prone to cyber attacks. Many users often choose easy-to-guess passwords, which bad actors can easily crack using brute force attacks. They also reuse the same passwords across multiple accounts, meaning if one password is hacked, all accounts are compromised.

    Passkeys address the growing concern of account security from weak passwords and phishing attacks by eliminating the need for passwords entirely. The feature provides a safer, more seamless sign-in experience, freeing users from having to remember their usernames or passwords.

    “Passkeys are a simpler, more secure way to log in, replacing passwords with pins or biometric data like fingerprints or facial recognition,” said Kylie McRoberts, head of safety at X. “We explored using passkeys to make signing in easier and safer for users, helping protect their accounts without the hassle of remembering passwords.”

    Since implementing passkeys, the X team has seen a substantial reduction in login times and metrics showing improved login flow. With passkeys, the app’s successful login rate has doubled compared to when it only relied on passwords. The team has also seen a decline in password reset requests from users who have enabled passkeys.

    According to X developers, adopting passkeys even came with benefits beyond enhanced security and a simplified login experience, like lower costs and improved UX.

    “Passkeys allowed us to cut down on expenses related to SMS-based two-factor authentication because they offer strong, inherent authentication,” said Kylie. “And with the ease of login, users are more likely to engage with our platform since there’s less friction to remember or reset passwords.”

    Passkeys rely on public-key cryptography to authenticate users and provide them with private keys. That means websites and apps can see and store the public key, but never the private key, which is encrypted and stored by the user’s credential provider. As keys are unique and tied to the website or app, they cannot be phished, further enhancing their security.

    We achieved an 80% code reduction in the authentication module, a 90% resolution of legacy edge case bugs, and an 85% decrease in GIS, One Tap, and Smart Lock code using passkeys.” — Saurabh Arora, Staff Engineer at X.

    Seamless integration using the Credential Manager API

    To integrate passkeys, X developers used Android’s Credential Manager API, which made the process “extremely smooth,” according to Kylie. The API unifies Smart Lock, One Tap, and Google Sign-In into a single, streamlined workflow. This also allowed developers to remove hundreds of lines of code, boosting implementation and reducing maintenance overhead.

    In the end, the migration to Credential Manager took X developers only two weeks to complete, followed by an additional two weeks to fully support passkeys. This was a “very fast migration” and the team “didn’t expect it to be that simple and straightforward,” said Saurabh Arora, a staff engineer at X. Thanks to Credential Manager’s simple, coroutine-powered API, the complexities of handling multiple authentication options were essentially removed, reducing code, the likelihood of bugs, and overall developer efforts.

    X developers saw a significant improvement in developer velocity by integrating the Credential Manager API. With their shift to passkey adoption through Credential Manager API, they achieved an:

      • 80% code reduction in the authentication module
      • 90% resolution of legacy edge case bugs
      • 85% decrease in GIS, One Tap, and Smart Lock handling code

    Using the Credential Manager API's top-level methods, like createCredential and getCredential, simplified integration by removing custom logic complexities surrounding individual protocols. This uniform approach also meant X developers could use a single, consistent interface to handle various authentication types, such as passkeys, passwords, and federated sign-ins like Sign in with Google.

    “With Credential Manager’s simple API methods, we could retrieve passkeys, passwords, and federated tokens with a single call, cutting down on branching logic and making response handling cleaner,” said Saurabh. “Using different API methods, like createCredential() and getCredential(), also simplified credential storage, letting us handle passwords and passkeys in one place.”

    X developers didn’t face many challenges when adopting Sign in With Google using the Credential Manager API. Replacing X’s previous Google Sign In, One Tap, and Smart Lock code with a simpler Credential Manager implementation meant developers no longer had to handle connection or disconnection statuses and activity results, reducing the margin of error.

    A UI example of passkeys on X

    A future with passkeys

    X's integration of passkeys shows that achieving a more secure and user-friendly authentication experience can be achieved. By leveraging Credential Manager API, X developers simplified the integration process, reduced potential bugs, and improved both security and developer velocity—all while sharpening the user experience.

    “Our advice for developers considering passkey integration would be to take advantage of the Credential Manager API,” said Saurabh. “It really simplifies the process and reduces code you need to write and maintain, making implementation better for developers.”

    Looking ahead, X plans to further enhance the user experience by allowing sign-ups with passkeys alone and providing a dedicated passkey management screen.

    Get started

    Learn how to improve your app’s login UX using passkeys and the Credential Manager API.

    Introducing Restore Credentials: Effortless account restoration for Android apps

    Posted by Neelansh Sahai - Developer Relations Engineer

    Did you know that, on average, 40% of the people in the US reset or replace their smartphones every year? This frequent device turnover presents a challenge – and an opportunity – for maintaining strong user relationships. When users get a new phone, the friction of re-entering login credentials can lead to frustration, app abandonment, and churn.

    To address this issue, we're introducing Restore Credentials, a new feature of Android’s Credential Manager API. With Restore Credentials, apps can seamlessly onboard users to their accounts on a new device after they restore their apps and data from their previous device. This makes the transition to a new device effortless and fosters loyalty and long term relationships.

    On top of all this, there's no developer effort required for the transfer of a restore key from one device to the other, as this process is tied together with the android system’s backup and restore mechanism. However, if you want to login your users silently as soon as the restore is completed, you might want to implement BackupAgent and add your logic in the onRestore callback. The experience is delightful - users will continue being signed in as they were on their previous device, and they will be able to get notifications to easily access their content without even needing to open the app on the new device.

    An illustration the process of restoring app data and keys to a new device, highlighting automated steps and user interactions.  The top row shows a user signing into an app and a restore key being saved locally, while the bottom row shows the restore process on a new device.
    click to enlarge

    Some of the benefits of the Restore Credentials feature include:

      • Seamless user experience: Users can easily transition to a new Android device.
      • Immediate engagement: Engage users with notifications or other prompts as soon as they start using their new device.
      • Silent login with backup agent integration: If you're using a backup agent, users can be automatically logged back in after data restoration is complete.
      • Restore key checks without backup agent integration: If a backup agent isn't being used, the app can check for a restore key upon first launch and then log the user in automatically.

    How does Restore Credentials work?

    The Restore Credentials feature enables seamless user account restoration on a new device. This process occurs automatically in the background during device setup when a user restores apps and data from a previous device. By restoring app credentials, the feature allows the app to sign the user back in without requiring any additional interaction.

    The credential type that’s supported for this feature is called restore key, which is a public key compatible with passkey / FIDO2 backends.

    A diagram shows the device-to-device and cloud backup restore processes for app data and restore keys between old and new devices.  Steps are numbered and explained within the diagram.
    Diagram that depicts restoring an app data to a new device using a restore credential, including creating the credential, initiating a restore flow, and automatic user sign-in.

    User flow

    On the old device:

      1. If the current signed-in user is trusted, you can generate a restore key at any point after they've authenticated in your app. For instance, this could be immediately after login or during a routine check for an existing restore key.
      2. The restore key is stored locally and backed up to the cloud. Apps can opt-out of backing it up to the cloud.

    On the new device:

      1. When setting up a new device, the user can select one of the two options to restore data. Either they can restore data from a cloud backup, or can locally transfer the data. If the user transfers locally, the restore key is transferred locally from the old to the new device. Otherwise, if the user restores using the cloud backup, the restore key gets downloaded along with the app data from cloud backup to the new device.
      2. Once this restore key is available on the new device, the app can use it to log in the user on the new device silently in the background.
    Note: You should delete the restore key as soon as the user signs out. You don’t want your user to get stuck in a cycle of signing out intentionally and then automatically getting logged back in.

    How to implement Restore Credentials

    Using the Jetpack Credential Manager let you create, get, and clear the relevant Restore Credentials:

      • Create a Restore Credential: When the user signs in to your app, create a Restore Credential associated with their account. This credential is stored locally and synced to the cloud if the user has enabled Google Backup and end to end encryption is available. Apps can opt out of syncing to the cloud.
      • Get the Restore Credential: When the user sets up a new device, your app requests the Restore Credential from Credential Manager. This allows your user to sign in automatically.
      • Clear the Restore Credential: When the user signs out of your app, delete the associated Restore Credential.

    Restore Credentials is available through the Credential Manager Jetpack library. The minimum version of the Jetpack Library is 1.5.0-beta01, and the minimum GMS version is 242200000. For more on this, refer to the Restore Credentials DAC page. To get started, follow these steps:

      1. Add the Credential Manager dependency to your project.

    // build.gradle.kts
    implementation("androidx.credentials:credentials:1.5.0-beta01")
    

      2. Create a CreateRestoreCredentialRequest object.

    // Fetch Registration JSON from server
    // Same as the registrationJson created at the time of creating a Passkey
    // See documentation for more info
    val registrationJson = ... 
    
    // Create the CreateRestoreCredentialRequest object
    // Pass in the registrationJSON 
    val createRequest = CreateRestoreCredentialRequest(
      registrationJson,
      /* isCloudBackupEnabled = */ true
    )
    
        NOTE: Set the isCloudBackupEnabled flag to false if you want the restoreKey to be stored locally and not in the cloud. It’s set as true by default

      3. Call the createCredential() method on the CredentialManager object.

    val credentialManager = CredentialManager.create(context)
    
    // On a successful authentication create a Restore Key
    // Pass in the context and CreateRestoreCredentialRequest object
    val response = credentialManager.createCredential(
        context,
        createRestoreRequest
    )
    

      4. When the user sets up a new device, call the getCredential() method on the CredentialManager object.

    // Fetch the Authentication JSON from server
    val authenticationJson = ...
    
    // Create the GetRestoreCredentialRequest object
    val options = GetRestoreCredentialOption(authenticationJson)
    val getRequest = GetCredentialRequest(Immutablelist.of(options))
    
    // The restore key can be fetched in two scenarios to 
    // 1. On the first launch of app on the device, fetch the Restore Key
    // 2. In the onRestore callback (if the app implements the Backup Agent)
    val response = credentialManager.getCredential(context, getRequest)
    

    If you're using a backup agent, perform the getCredential part within the onRestore callback. This ensures that the app's credentials are restored immediately after the app data is restored.

      5. When the user signs out of your app, call the clearCredentialState() method on the CredentialManager object.

    // Create a ClearCredentialStateRequest object
    val clearRequest = ClearCredentialStateRequest(/* requestType = */ 1)
    
    // On user log-out, clear the restore key
    val response = credentialManager.clearCredentialState(clearRequest)
    

    Conclusion

    The Restore Credentials feature provides significant benefits, ensuring users experience a smooth transition between devices, and allowing them to log in quickly and easily through backup agents or restore key checks. For developers, the feature is straightforward to integrate and leverages existing passkey server-side infrastructure. Overall, Restore Credentials is a valuable tool that delivers a practical and user-friendly authentication solution.


    This blog post is a part of our series: Spotlight Week: Passkeys. We're providing you with a wealth of resources through the week. Think informative blog posts, engaging videos, practical sample code, and more—all carefully designed to help you leverage the latest advancements in seamless sign-up and sign-in experiences.

    With these cutting-edge solutions, you can enhance security, reduce friction for your users, and stay ahead of the curve in the rapidly evolving landscape of digital identity. To get a complete overview of what Spotlight Week has to offer and how it can benefit you, be sure to read our overview blog post.

    #WeArePlay | Meet more people creating apps and games in Japan

    Posted by Robbie McLachlan, Developer Marketing

    Earlier this year #WeArePlay went on a virtual tour of Australia and the U.S. to spotlight the stories of app and game founders. Today, we’re rounding up our tour across the world with the last stop for 2024: Japan. From an app that uses AI to promote early health intervention to one that’s turning litter picking into a social movement, meet the 49 apps and games founders building growing businesses on Google Play.

    Let’s take a quick road trip across Japan by reading some of my favorite stories.



    Fujio, founder of Pirika 
    Tokoyo, Tokyo

    Fujio’s app is turning litter collection into a global movement

    When Fujio was a child, his love for environmental books ignited his passion for protecting nature. Later, while traveling through different countries, he was shocked to find litter everywhere, even in remote jungles. This experience inspired him to create Pirika – named after the Ainu word for “beautiful” – a social platform that encourages people to pick up litter, document it with photos, and geotag locations to track problem areas. With over over 360 million pieces of trash collected globally, Pirika is fostering a nationwide movement towards cleaner communities. Fujio plans on expanding the app’s reach worldwide, mobilizing communities to fight pollution collectively.


    CHARROOM with short, dark hair, wearing a mask and a light-colored blouse and gray skirt, holds a small, white, long-haired dog. They are standing in front of a floral arch with text partially visible, including the words 'BE' and 'COMING'.
    CHARROOM, founder of CHARROOM 
    Osaka, Kinki

    Self-taught game developer and illustrator CHARROOM turned her passion for mini-games into a full-time career. Her latest project, Sushi Food Cart, combines two of her favorite things: sushi and cats. In this fun cooking game, players manage a sushi food cart, preparing and serving sushi to customers quickly and accurately. The game features quirky cat characters, time-management challenges, and colorful art. As players progress, they unlock new recipes, upgrades, and meet new cat characters. For Char, creating apps is her ‘ikigai’—her purpose in life. She’s currently working on a new restaurant game to continue spreading her playful approach to gaming.


    Kota and Yoshinori, co-founders of Ubie, wearing suits and white shirts, smile and talk in front of a white wall.
    Kota and Yoshinori, co-founders founders of Ubie 
    Tokyo, Tokyo

    Kota and Yoshinori’s app uses AI to help people research their health concerns and connect with medical specialists

    When entrepreneur Kota decided to create a healthcare app, he partnered with his high school friend and roommate, Dr. Yoshinori. Combining Kota’s tech expertise with Yoshinori’s medical knowledge, they developed Ubie, an AI-powered symptom checker that allows people to research their symptoms and connect with medical specialists. The app promotes early detection and intervention by offering them tailored information on potential health concerns and guidance on finding care. Ubie's goal is not just limited to symptom checking; the founders plan to expand its services to include tracking treatments and managing day-to-day healthcare needs alongside transforming Ubie into a global brand.

     Takuji, co-founders of IzumiArtisan, sits in a folding chair at a campsite. He is wearing a brown sweater, khaki pants, and black shoes. A car and tent are visible in the background.
    Takuji and Shohei, co-founders of IzumiArtisan 
    Osaka, Kinki

    Takuji has always been passionate about travel and music, but when he learned programming 15 years ago, he discovered a new creative outlet. Together with his brother, Shohei, he launched IzumiArtisan from their parents' house in Osaka. The duo specializes in creating escape room games, heavily influenced by the detective stories Takuji loves. Their popular game, Rime, is filled with mysterious puzzles and plot twists and has been translated into 18 languages, capturing a global audience. The brothers are now working on a new title inspired by the American Underground Railroad.


    Discover more #WeArePlay stories from Japan, and stories from across the globe.



    How useful did you find this blog post?