When creating a notebook in Powerschool Schoology, Gemini LTI users can now add content directly from their course as sources. This integration allows educators and students to seamlessly bridge their course materials with AI-powered research and analysis, and generate Studio artifacts like Audio and Video Overviews, infographics, slide decks, and more based on their Schoology resources. By automating the import of Schoology course materials, users can quickly ground their notebooks in specific curriculum content without the need for manual file uploads.
For educators and students to use Schoology content as a source in NotebookLM, users must be in a group or OU with NotebookLM set to On. Visit the Help Center to learn more about turning NotebookLM on or off for users.
End users:
To add Schoology content notebook sources, open the Schoology homepage and select Google Gemini > Manage notebooks > Create new > Enter a title > Files > Select file(s) > Create notebook.
Visit the Help Center to learn more about Gemini LTI™.
Posted by Jingyu Shi, Staff Developer Relations Engineer
At Google I/O 2026, we introduced Android’s shift from an operating system to an intelligence system. We also demonstrated how you can build intelligent experiences natively with the system and bring the power of Google’s AI into your apps. If you missed these updates, check out our quick recap video here:
1. Putting your apps at the center of the intelligence system
The Android OS already enables agents like Gemini to complete task automation, where it can navigate an app on the users behalf.
AppFunctions (Android MCP) provides you with more control over how your app integrates with the intelligence system. This new platform API and Jetpack library are currently available in experimental preview.
Android MCP: AppFunctions allows your application to act as an on-device Model Context Protocol (MCP) server. It means you seamlessly share your app's tools, services and data to the system and agents.
Streamlined Development: You can leverage the new skill to easily generate AppFunctions within your codebase.
Exploration and Testing: We’ve released a new test agent that allows you to experiment and debug your AppFunctions in a simulated agent environment.
Early Access Program: Want to be among the first apps to deploy app functions in production? Join our early access program today!
To see it in action, check out the live demo showcased during the What’s New in Android presentation.
2. On-Device Power with Gemini Nano 4 Preview
Last month, we launched Gemma 4, our state-of-the-art open models. You can already preview and prototype with the next generation of Gemini Nano (Nano 4) models with the AIcore developer preview. To make productionizing with Gemini Nano more reliable and performant, we are adding a few new features in ML Kit GenAI APIs:
Prototype to Production: Transition from prototyping in the AICore Developer Preview to building production-ready apps using the ML Kit GenAI Prompt API to leverage Gemini Nano 4 that’s launching in flagship devices later this year.
Structured Output: The upcoming Structured Output API will allow you to define object classes to be returned as outputs from Prompt API, ensuring reliable outputs in productionizing your intelligent features.
Prefix Caching: It optimizes your on-device inference performance with the prompt API. The new Prefix caching reduces inference time by storing and reusing the intermediate LLM state of processing a shared and recurring part of the prompt.
For highly customized or niche use cases, you can also use LiteRT-LM to bring your own fine-tuned small language model to Android.
3. Hybrid Inference & Agents
To help you build more advanced AI features like hybrid inference and explore building in-app agents, we’ve released new APIs, framework and guidances:
Firebase AI Logic Hybrid Inference: This new API provides the simple routing capability between on-device models and powerful cloud infrastructure. You can set explicit orchestration modes, such as PREFER_ON_DEVICE, PREFER_CLOUD, ONLY_ON_DEVICE, or ONLY_CLOUD, based on your need.
A2UI Jetpack Compose Renderer: The new A2UI library allows your agents to "speak UI". With the upcoming Jetpack Compose Renderer, you can automatically render these A2UI messages as native UI components.
ADK for Android: The first version of ADK for Android is available for experimentation. It allows you to build multi-agent workflows across both on-device and Cloud models while managing orchestration, context handling and sessions between agents.
From building with on-device models, exploring hybrid inference to building agents, you can see them in action in this talk:
Start Building Today
Whether you are experimenting with AppFunctions to prepare for the intelligence system, or looking to bring the power of Google’s AI within your own app, we’ve got you covered. Dive deeper into the code snippets, samples and comprehensive developer guides on the Android AI hub. For the full breakdown of what’s new, check out the official AI on Android at Google I/O 2026playlist.
We’re making it easier to keep your sources and insights current in NotebookLM by enabling automatic syncing with Google Drive. Previously, if you uploaded a file in Google Docs, Sheets, or Slides, you’d have to manually update it in NotebookLM to see the changes. With this update, as the content in your Drive files evolves, the information within the notebook updates automatically to match. This update ensures that you're always working with the most accurate and up-to-date information without the manual effort of re-syncing files.
NotebookLM will also strictly respect file deletions and permissions. If a user’s access to a Drive file is revoked, they will no longer be able to use that file as a source in their notebook. The source will appear in the sources list with a link to the source for the user to request access. Additionally, if a file is deleted from Drive, it will be removed from the notebook as well, ensuring your research environment stays organized and secure.
Today, we’re announcing improvements to our Out-of-Domain file-level warnings. First launched in April 2025, these badges alert users to documents and users outside of their Workspace organization, helping to prevent accidental data exfiltration and potential phishing attacks that spoof internal content. We’ve expanded support across devices and sharing types in the following ways:
Files in the Android and iOS apps for Drive, Docs, Sheets, and Slides now include external indicators
Chat Spaces and Google Groups can be configured to allow external users; if they’re given access to a document, that document now shows the external badge
If a service account has access to a document, and that service account is owned by an external Google Cloud organization, it now triggers the external badge in documents
Comment email notifications now include badges for external documents and users
File sharing email notifications now include badges for external documents and users
How Out-of-Domain warnings work
This feature helps users identify potentially risky files and avoid phishing scams when working with files shared from outside your organization.
Notification in comments
Notification in file sharing email
Image of "External" badge displayed in Google Docs
Making decisions in a fast-paced environment often leads to long, messy threads and lost consensus. Polly helps teams solve this by enabling the creation of interactive polls within existing Chat conversations. By keeping the feedback loop inside the "flow of work," Polly helps eliminate the friction of switching between apps, leading to faster responses and clearer team alignment.
Effortless authoring and participation
Creating a poll is as simple as mentioning @Polly in any Google Chat space. Whether you need a quick pulse on a project direction or a simple vote on a meeting time, you can author a poll in seconds. For end users, participation is just as easy: team members can cast their votes with a single click directly within the chat stream.
Real-time results
Results are updated as votes come in, providing immediate visual feedback to the entire space. This transparency ensures that everyone is on the same page and can move forward with confidence as soon as a decision is reached.
Use cases for Polly in Google Chat:
Driving consensus: Rapidly narrow down options for project names, design directions, or strategy shifts.
Meeting logistics: Quickly vote on the best time for a sync or gather topics for an upcoming agenda.
Team preferences: Streamline simple office or team logistics, from lunch orders to preferred collaboration hours.
Admins can easily enable the Polly integration to empower their teams with a more structured way to collaborate without leaving the Google Workspace ecosystem.
Getting started
Admins: Admins can install the Polly Chat app on their users’ behalf. Visit the Help Center to learn more about installing Marketplace apps for your organization. If you’ve already deployed Polly for Google Meet, then the Polly Chat app will automatically be available as well.
End users: End users can search for the Polly add-on in Google Chat under Apps > Find apps. Visit the Google Workspace Marketplace to learn more and install Polly. If you’ve already installed Polly for Google Meet, then the Polly Chat app will automatically be available as well.
We’re updating icons across Google Workspace to introduce a modern visual design that gives every app a more distinct identity. Over the next several weeks, users will see new icons for Gmail, Calendar, Chat, Meet, Drive, Docs, Slides, Sheets, Vids, Keep, Forms, Voice, Sites, and Tasks.
These changes drive consistency and cohesion across our product suite, while ensuring each individual application remains modern and recognizable on your screen. These design updates do not alter any core functionality or administrative controls.
Getting started
Admins: There is no admin control for this update; changes will roll out automatically according to the schedule below. If you need to update internal documentation, visit the Help Center to find the new icon designs.
End users: There is no end user control for this update; changes will roll out automatically according to the schedule below.
In March 2021, we announced the open source release of TestParameterInjector: a simple but powerful parameterized test runner for JUnit4. In September 2022, we followed up with JUnit5 support, bringing our framework to developers who had moved on to the Jupiter API.
We're excited to announce our biggest update yet for our Kotlin users: KotlinTestParameters.
The de facto standard for parameterized testing
When we first introduced TestParameterInjector, we shared a graph showing its rapid adoption within Google. Over the past few years, that trajectory has continued to a point where TestParameterInjector is the de facto parameterized test framework.
Usage of all other alternative frameworks continues to steadily decline, while TestParameterInjector's adoption keeps growing rapidly. It has fundamentally lowered the barrier to writing data-driven unit tests, empowering Googlers and open source developers alike to maximize test coverage with minimal boilerplate. We believe its ubiquity internally is a strong testament to its reliability and utility for the broader developer communities.
The Kotlin challenge
As Kotlin's popularity has surged, developers have naturally been writing more of their TestParameterInjector tests in Kotlin. However, specifying explicit test values in Kotlin historically meant falling back to Java-centric paradigms.
If you wanted to provide specific values to a test, you typically had three options, none of which felt truly idiomatic in Kotlin:
@TestParameter({"123", "456"}): This relies on string arrays, limiting you to a subset of types that the string parsing supports.
@TestParameters: This allows for more complex sets of data, but relies on YAML strings (e.g.,"{age: 17, expectIsAdult: false}"). These strings however are not type-safe, and are completely ignored by IDE refactoring tools.
Provider classes: For complex types that couldn't be easily represented in strings, you have to write Provider classes, adding a bit of boilerplate code and indirection.
Enter KotlinTestParameters
To bring a seamless experience to Kotlin, we are introducing a significant new Kotlin-only feature: KotlinTestParameters.
By leveraging Kotlin's default function arguments, you can now define parameterized tests in a fully type-safe, concise, and refactor-friendly way using the testValues() function (and friends).
Here is what it looks like in practice:
import com.google.testing.junit.testparameterinjector.TestParameterInjector
import com.google.testing.junit.testparameterinjector.TestParameter
import com.google.testing.junit.testparameterinjector.KotlinTestParameters.testValues
import com.google.testing.junit.testparameterinjector.KotlinTestParameters.namedTestValues
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(TestParameterInjector::class)
class MyTest {
// Testing simple types directly
@Test
fun simpleTest(@TestParameter limit: Int = testValues(20, 100)) {
// This test method is run twice: once for limit=20 and once for limit=100
}
// Testing complex types without YAML strings or Provider classes!
data class TestCase(val age: Int, val expectIsAdult: Boolean)
@Test
fun complexTest(
@TestParameter testCase: TestCase = namedTestValues(
"teenager" to TestCase(age = 17, expectIsAdult = false),
"young adult" to TestCase(age = 22, expectIsAdult = true)
)
) {
// This test method is run twice with fully typed data class instances
}
}
Why we recommend making the switch
Because testValues() seamlessly integrates with Kotlin's language features, any type is supported. This completely eliminates the need for stringly-typed YAML maps or verbose Provider classes.
We firmly believe that KotlinTestParameters is a massive leap forward in readability and maintainability. Moving forward, this should be the default way of specifying test values for all new Kotlin tests, replacing the older @TestParameters, @TestParameter({"..."}), and Provider class patterns.
Try it out!
You can read more and start using KotlinTestParameters today over on our GitHub repository.
Let us know what you think on GitHub if you have any questions, comments, or feature requests!