AndroidPublisher service = AndroidPublisherHelper.init(
publisherExtension.getApplicationName(),
publisherExtension.getServiceAccountEmail(),
publisherExtension.getServiceAccountKeyFile()
);
final Edits edits = service.edits();
// Create a new edit to make changes to your listing
Insert editRequest = edits
.insert(publisherExtension.getPackageName(), null /** no content */);
AppEdit edit = editRequest.execute();
final String editId = edit.getId();
getLogger().info(String.format("Created edit with id: %s", editId));
// List all tracks
Tracks.List list = edits.tracks().list(publisherExtension.getPackageName(), editId);
List<Track> tracks = list.execute().getTracks();
// Identify the source and destination tracks
Track sourceTrack = null;
Track destinationTrack = null;
for (Track track : tracks) {
if (track.getTrack().equals(publisherExtension.getTrack()))
sourceTrack = track;
else if (track.getTrack().equals(publisherExtension.getPromotionTrack()))
destinationTrack = track;
}
// Error checking
if (sourceTrack==null || destinationTrack==null) {
throw new InvalidUserDataException(String.format(
"Cannot find the %s or %s track on Google Play, invalid track name?",
publisherExtension.getTrack(), publisherExtension.getPromotionTrack()
));
}
if (sourceTrack.getVersionCodes().size()==0) {
throw new InvalidUserDataException(String.format(
"Cannot find a valid APK version code for the %s track, does it have at least one APK already uploaded?",
sourceTrack.getVersionCodes()
));
}
getLogger().info("Using source track {} with version codes {}",
sourceTrack.getTrack(), sourceTrack.getVersionCodes());
getLogger().info("Using destination track {} with version codes {}",
destinationTrack.getTrack(), destinationTrack.getVersionCodes());
// Find version code to promote, remove from source track and add to destination track
Integer versionCode = Collections.max(sourceTrack.getVersionCodes());
List<Integer> sourceVersionCodes = sourceTrack.getVersionCodes();
sourceVersionCodes.remove(versionCode);
sourceTrack.setVersionCodes(sourceVersionCodes);
List<Integer> destinationVersionCodes = new ArrayList<Integer>();
destinationVersionCodes.add(versionCode);
destinationTrack.setVersionCodes(destinationVersionCodes);
getLogger().info("Promoting version code {}", versionCode);
Update sourceUpdateRequest = edits
.tracks()
.update(publisherExtension.getPackageName(),
editId,
sourceTrack.getTrack(), sourceTrack);
sourceUpdateRequest.execute();
getLogger().info(String.format("Source track %s has been updated", sourceTrack.getTrack()));
Update destinationUpdateRequest = edits
.tracks()
.update(publisherExtension.getPackageName(),
editId,
destinationTrack.getTrack(), destinationTrack);
getLogger().info(String.format("Destination track %s has been updated",
destinationTrack.getTrack()));
destinationUpdateRequest.execute();
// Commit changes for edit.
Commit commitRequest = edits.commit(publisherExtension.getPackageName(), editId);
AppEdit appEdit = commitRequest.execute();
getLogger().info(String.format("App edit with id %s has been committed", appEdit.getId()));
getLogger().lifecycle("Version code {} has been promoted from the {} to the {} track",
versionCode, sourceTrack.getTrack(), destinationTrack.getTrack());
} catch (IOException e) {