diff --git a/drive/activity-v2/quickstart/build.gradle b/drive/activity-v2/quickstart/build.gradle
new file mode 100644
index 00000000..cedfe72f
--- /dev/null
+++ b/drive/activity-v2/quickstart/build.gradle
@@ -0,0 +1,17 @@
+apply plugin: 'java'
+apply plugin: 'application'
+
+mainClassName = 'DriveActivityQuickstart'
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+version = '1.0'
+
+repositories {
+ mavenCentral()
+}
+
+dependencies {
+ compile 'com.google.api-client:google-api-client:1.27.0'
+ compile 'com.google.oauth-client:google-oauth-client-jetty:1.27.0'
+ compile 'com.google.apis:google-api-services-driveactivity:v2-rev20181113-1.27.0'
+}
diff --git a/drive/activity-v2/quickstart/settings.gradle b/drive/activity-v2/quickstart/settings.gradle
new file mode 100644
index 00000000..7bcc727d
--- /dev/null
+++ b/drive/activity-v2/quickstart/settings.gradle
@@ -0,0 +1,18 @@
+/*
+ * This settings file was generated by the Gradle 'init' task.
+ *
+ * The settings file is used to specify which projects to include in your build.
+ * In a single project build this file can be empty or even removed.
+ *
+ * Detailed information about configuring a multi-project build in Gradle can be found
+ * in the user guide at https://docs.gradle.org/3.5/userguide/multi_project_builds.html
+ */
+
+/*
+// To declare projects as part of a multi-project build use the 'include' method
+include 'shared'
+include 'api'
+include 'services:webservice'
+*/
+
+rootProject.name = 'quickstart'
diff --git a/drive/activity-v2/quickstart/src/main/java/DriveActivityQuickstart.java b/drive/activity-v2/quickstart/src/main/java/DriveActivityQuickstart.java
new file mode 100644
index 00000000..eaeb9680
--- /dev/null
+++ b/drive/activity-v2/quickstart/src/main/java/DriveActivityQuickstart.java
@@ -0,0 +1,197 @@
+// Copyright 2018 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// [START drive_activity_v2_quickstart]
+import com.google.api.client.auth.oauth2.Credential;
+import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
+import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
+import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
+import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
+import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
+import com.google.api.client.http.HttpTransport;
+import com.google.api.client.json.JsonFactory;
+import com.google.api.client.json.jackson2.JacksonFactory;
+import com.google.api.client.util.store.FileDataStoreFactory;
+import com.google.api.services.driveactivity.v2.DriveActivityScopes;
+import com.google.api.services.driveactivity.v2.model.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class DriveActivityQuickstart {
+ /** Application name. */
+ private static final String APPLICATION_NAME = "Drive Activity API Java Quickstart";
+
+ /** Directory to store authorization tokens for this application. */
+ private static final java.io.File DATA_STORE_DIR = new java.io.File("tokens");
+
+ /** Global instance of the {@link FileDataStoreFactory}. */
+ private static FileDataStoreFactory DATA_STORE_FACTORY;
+
+ /** Global instance of the JSON factory. */
+ private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
+
+ /** Global instance of the HTTP transport. */
+ private static HttpTransport HTTP_TRANSPORT;
+
+ /**
+ * Global instance of the scopes required by this quickstart.
+ *
+ *
If modifying these scopes, delete your previously saved credentials at
+ * ~/.credentials/driveactivity-java-quickstart
+ */
+ private static final List SCOPES =
+ Arrays.asList(DriveActivityScopes.DRIVE_ACTIVITY_READONLY);
+
+ static {
+ try {
+ HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
+ DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
+ } catch (Throwable t) {
+ t.printStackTrace();
+ System.exit(1);
+ }
+ }
+
+ /**
+ * Creates an authorized Credential object.
+ *
+ * @return an authorized Credential object.
+ * @throws IOException
+ */
+ public static Credential authorize() throws IOException {
+ // Load client secrets.
+ InputStream in = DriveActivityQuickstart.class.getResourceAsStream("/credentials.json");
+ GoogleClientSecrets clientSecrets =
+ GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
+
+ // Build flow and trigger user authorization request.
+ GoogleAuthorizationCodeFlow flow =
+ new GoogleAuthorizationCodeFlow.Builder(
+ HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
+ .setDataStoreFactory(DATA_STORE_FACTORY)
+ .setAccessType("offline")
+ .build();
+ Credential credential =
+ new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver())
+ .authorize("user");
+ System.out.println("Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
+ return credential;
+ }
+
+ /**
+ * Build and return an authorized Drive Activity client service.
+ *
+ * @return an authorized DriveActivity client service
+ * @throws IOException
+ */
+ public static com.google.api.services.driveactivity.v2.DriveActivity getDriveActivityService()
+ throws IOException {
+ Credential credential = authorize();
+ return new com.google.api.services.driveactivity.v2.DriveActivity.Builder(
+ HTTP_TRANSPORT, JSON_FACTORY, credential)
+ .setApplicationName(APPLICATION_NAME)
+ .build();
+ }
+
+ public static void main(String[] args) throws IOException {
+ // Build a new authorized API client service.
+ com.google.api.services.driveactivity.v2.DriveActivity service = getDriveActivityService();
+
+ // Print the recent activity in your Google Drive.
+ QueryDriveActivityResponse result =
+ service.activity().query(new QueryDriveActivityRequest().setPageSize(10)).execute();
+ List activities = result.getActivities();
+ if (activities == null || activities.size() == 0) {
+ System.out.println("No activity.");
+ } else {
+ System.out.println("Recent activity:");
+ for (DriveActivity activity : activities) {
+ String time = getTimeInfo(activity);
+ String action = getActionInfo(activity.getPrimaryActionDetail());
+ List actors =
+ activity.getActors().stream()
+ .map(DriveActivityQuickstart::getActorInfo)
+ .collect(Collectors.toList());
+ List targets =
+ activity.getTargets().stream()
+ .map(DriveActivityQuickstart::getTargetInfo)
+ .collect(Collectors.toList());
+ System.out.printf(
+ "%s: %s, %s, %s\n", time, truncated(actors), action, truncated(targets));
+ }
+ }
+ }
+
+ private static String truncated(List array) {
+ return truncated(array, 2);
+ }
+
+ private static String truncated(List array, int limit) {
+ String contents = array.stream().limit(limit).collect(Collectors.joining(", "));
+ String more = array.size() > limit ? ", ..." : "";
+ return "[" + contents + more + "]";
+ }
+
+ private static String getTimeInfo(DriveActivity activity) {
+ if (activity.getTimestamp() != null) {
+ return activity.getTimestamp();
+ }
+ if (activity.getTimeRange() != null) {
+ return activity.getTimeRange().getEndTime();
+ }
+ return "unknown";
+ }
+
+ private static String getActionInfo(ActionDetail actionDetail) {
+ return actionDetail.keySet().iterator().next();
+ }
+
+ private static String getUserInfo(User user) {
+ if (user.getKnownUser() != null) {
+ KnownUser knownUser = user.getKnownUser();
+ Boolean isMe = knownUser.getIsCurrentUser();
+ return (isMe != null && isMe) ? "people/me" : knownUser.getPersonName();
+ }
+ return user.keySet().iterator().next();
+ }
+
+ private static String getActorInfo(Actor actor) {
+ if (actor.getUser() != null) {
+ return getUserInfo(actor.getUser());
+ }
+ return actor.keySet().iterator().next();
+ }
+
+ private static String getTargetInfo(Target target) {
+ if (target.getDriveItem() != null) {
+ return "driveItem:\"" + target.getDriveItem().getTitle() + "\"";
+ }
+ if (target.getTeamDrive() != null) {
+ return "teamDrive:\"" + target.getTeamDrive().getTitle() + "\"";
+ }
+ if (target.getFileComment() != null) {
+ DriveItem parent = target.getFileComment().getParent();
+ if (parent != null) {
+ return "fileComment:\"" + parent.getTitle() + "\"";
+ }
+ return "fileComment:unknown";
+ }
+ return target.keySet().iterator().next();
+ }
+}
+// [END drive_activity_v2_quickstart]
diff --git a/drive/activity/quickstart/src/main/java/DriveActivityQuickstart.java b/drive/activity/quickstart/src/main/java/DriveActivityQuickstart.java
index 019e26f2..8d445ef8 100644
--- a/drive/activity/quickstart/src/main/java/DriveActivityQuickstart.java
+++ b/drive/activity/quickstart/src/main/java/DriveActivityQuickstart.java
@@ -38,7 +38,7 @@
public class DriveActivityQuickstart {
/** Application name. */
private static final String APPLICATION_NAME =
- "G Suite Activity API Java Quickstart";
+ "Drive Activity API Java Quickstart";
/** Directory to store authorization tokens for this application. */
private static final java.io.File DATA_STORE_DIR = new java.io.File("tokens");