Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.softbankrobotics.dialog_adjust_volume;
- import android.content.Context;
- import android.support.annotation.NonNull;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import com.aldebaran.qi.Consumer;
- import com.aldebaran.qi.Function;
- import com.aldebaran.qi.Future;
- import com.aldebaran.qi.sdk.Qi;
- import com.aldebaran.qi.sdk.QiContext;
- import com.aldebaran.qi.sdk.QiSDK;
- import com.aldebaran.qi.sdk.RobotLifecycleCallbacks;
- import com.aldebaran.qi.sdk.builder.AnimateBuilder;
- import com.aldebaran.qi.sdk.builder.AnimationBuilder;
- import com.aldebaran.qi.sdk.builder.DiscussBuilder;
- import com.aldebaran.qi.sdk.builder.TopicBuilder;
- import com.aldebaran.qi.sdk.object.actuation.Animate;
- import com.aldebaran.qi.sdk.object.actuation.Animation;
- import com.aldebaran.qi.sdk.object.conversation.BaseQiChatExecutor;
- import com.aldebaran.qi.sdk.object.conversation.Bookmark;
- import com.aldebaran.qi.sdk.object.conversation.BookmarkStatus;
- import com.aldebaran.qi.sdk.object.conversation.Chat;
- import com.aldebaran.qi.sdk.object.conversation.Chatbot;
- import com.aldebaran.qi.sdk.object.conversation.Conversation;
- import com.aldebaran.qi.sdk.object.conversation.Discuss;
- import com.aldebaran.qi.sdk.object.conversation.EditablePhraseSet;
- import com.aldebaran.qi.sdk.object.conversation.Phrase;
- import com.aldebaran.qi.sdk.object.conversation.QiChatExecutor;
- import com.aldebaran.qi.sdk.object.conversation.QiChatVariable;
- import com.aldebaran.qi.sdk.object.conversation.QiChatbot;
- import com.aldebaran.qi.sdk.object.conversation.Topic;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.ListIterator;
- import java.util.Map;
- import java.util.Timer;
- import java.util.TimerTask;
- import android.media.MediaPlayer;
- import android.media.AudioManager;
- import android.util.Log;
- public class MainActivity extends AppCompatActivity implements RobotLifecycleCallbacks {
- private Future<String> discussFuture;
- private Chat chat;
- private QiChatbot qichatbot;
- private AudioManager myAudioManager;
- //FUTURES//
- private Future<Void> chatFuture;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- QiSDK.register(this, this);
- }
- @Override
- protected void onDestroy() {
- QiSDK.unregister(this);
- super.onDestroy();
- }
- ///////////////////////////EXECUTOR////////////////////////////////////
- class MyQiChatExecutor extends BaseQiChatExecutor {
- private final QiContext qiContext;
- MyQiChatExecutor(QiContext context) {
- super(context);
- this.qiContext = context;
- }
- @Override
- public void runWith(List<String> params) {
- if (params.size() > 0) {
- if (params.get(0).equals("getVolume")) {
- getStreamVolume();
- }
- else if (params.get(0).equals("setMaxVolume")) {
- setMaxVolume();
- }
- else if (params.get(0).equals("setMinVolume")) {
- setMinVolume();
- }
- else if (params.get(0).equals("setMinVolume")) {
- setMinVolume();
- }
- else if (params.get(0).equals("setVolume")) {
- setVolume(params.get(1));
- }
- else if (params.get(0).equals("calculateVolume")) {
- calculateVolume(params.get(1));
- }
- else if (params.get(0).equals("setPercentVolume")) {
- setPercentVolume(params.get(1));
- }
- else if (params.get(0).equals("raiseVolume")) {
- raiseVolume(params.get(1));
- }
- else if (params.get(0).equals("lowerVolume")) {
- lowerVolume();
- }
- }
- }
- @Override
- public void stop() {
- }
- //GET CURRENT VOLUME, MAX VOLUME AND MIN VOLUME//
- private void getStreamVolume() {
- myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- int volume = myAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
- int maxVolume = myAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
- int minVolume = (int) ((double) maxVolume * 20 / 100);
- int volumeInPercent = (int) ((double) volume / maxVolume * 100);
- int androidVolumePlus = (int) ((double) maxVolume * (volumeInPercent + 10) / 100);
- int androidVolumeMinus = (int) ((double) maxVolume * (volumeInPercent - 10) / 100);
- try{
- qichatbot.variable("maxVolume").setValue(String.valueOf(maxVolume));
- qichatbot.variable("minVolume").setValue(String.valueOf(minVolume));
- qichatbot.variable("currentVolume").setValue(String.valueOf(volume));
- qichatbot.variable("currentVolumePlus").setValue(String.valueOf(androidVolumePlus));
- qichatbot.variable("currentVolumeMinus").setValue(String.valueOf(androidVolumeMinus));
- }catch (Exception e){}
- }
- //SET VOLUME TO THE MAXIMUM LEVEL//
- private void setMaxVolume() {
- myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- int maxVolume = myAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
- int volume = myAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
- if (volume == maxVolume) {
- try{
- qichatbot.variable("volumeIsMax").setValue("true");
- }catch (Exception e){}
- } else {
- try{
- qichatbot.variable("volumeIsMax").setValue("false");
- }catch (Exception e){}
- myAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume, 0);
- }
- }
- //SET VOLUME TO THE MINIMUM LEVEL//
- private void setMinVolume() {
- myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- int maxVolume = myAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
- int minVolume = (int) ((double) maxVolume * 20 / 100);
- int volume = myAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
- if (volume == minVolume) {
- try{
- qichatbot.variable("volumeIsMin").setValue("true");
- }catch (Exception e){}
- }
- else {
- try{
- qichatbot.variable("volumeIsMin").setValue("false");
- }catch (Exception e){}
- myAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, minVolume, 0);
- }
- }
- //ADD OR SUBSTRATE CERTAIN AMOUNT FROM CURRENT VOLUME EG: "RAISE BY 2"//
- private void calculateVolume(String num) {
- myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- int maxVolume = myAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
- int minVolume = (int) ((double) maxVolume * 20 / 100);
- int currentVolume = myAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
- int Num = Integer.parseInt(num);
- int volumeToSet = currentVolume + Num;
- if (currentVolume == minVolume && volumeToSet < minVolume) {
- try {
- qichatbot.variable("volumeIsMin").setValue("true");
- qichatbot.variable("volumeIsMax").setValue("false");
- }catch (Exception e){}
- } else if (currentVolume == maxVolume && volumeToSet > maxVolume) {
- try {
- qichatbot.variable("volumeIsMax").setValue("true");
- qichatbot.variable("volumeIsMin").setValue("false");
- }catch (Exception e){}
- } else if (volumeToSet > maxVolume) {
- volumeToSet = maxVolume;
- try{
- qichatbot.variable("exceedMaxValue").setValue("true");
- qichatbot.variable("exceedMinValue").setValue("false");
- qichatbot.variable("setVolume").setValue(String.valueOf(volumeToSet));
- }catch (Exception e){}
- myAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volumeToSet, 0);
- } else if (volumeToSet < minVolume) {
- volumeToSet = minVolume;
- try{
- qichatbot.variable("exceedMinValue").setValue("true");
- qichatbot.variable("exceedMaxValue").setValue("false");
- qichatbot.variable("setVolume").setValue(String.valueOf(volumeToSet));
- }catch (Exception e){}
- myAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volumeToSet, 0);
- } else {
- try{
- qichatbot.variable("setVolume").setValue(String.valueOf(volumeToSet));
- qichatbot.variable("volumeIsMax").setValue("false");
- qichatbot.variable("volumeIsMin").setValue("false");
- qichatbot.variable("exceedMinValue").setValue("false");
- qichatbot.variable("exceedMaxValue").setValue("false");
- }catch (Exception e){}
- myAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volumeToSet, 0);
- }
- }
- //SET REQUESTED VOLUME EG. "SET THE VOLUME TO 5"//
- private void setVolume(String askedVolume) {
- myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- int currentVolume = myAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
- int volume = Integer.parseInt(askedVolume);
- if (currentVolume == volume) {
- try{
- qichatbot.variable("volumeIsSame").setValue("true");
- }catch (Exception e){}
- } else {
- try {
- qichatbot.variable("volumeIsSame").setValue("false");
- }catch (Exception e){}
- myAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0);
- }
- }
- //SET REQUESTED PERCENT OF VOLUME EG. "SET THE VOLUME TO 50%" //
- private void setPercentVolume(String askedPercent) {
- myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- //get max volume
- int maxVolume = myAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
- //get current volume
- int currentVolume = myAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
- //get asked volume
- int percentage = Integer.parseInt(askedPercent);
- //convert percent in android volume level
- double percentInAndroidVolume = ((double) maxVolume * percentage / 100);
- int androidVolumeConverted = (int) percentInAndroidVolume;
- //if asked volume == min volume and current volume == min volume, robot will say that he
- // is already at his min volume
- if (androidVolumeConverted == currentVolume) {
- try {
- qichatbot.variable("volumeIsSame").setValue("true");
- }catch (Exception e){}
- }
- //else, robot will set the asked volume.
- else {
- try{
- qichatbot.variable("volumeIsSame").setValue("false");
- qichatbot.variable("setVolume").setValue(String.valueOf(androidVolumeConverted));
- }catch (Exception e){}
- myAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, androidVolumeConverted, 0);
- }
- }
- //RAISE THE VOLUME//
- private void raiseVolume(String amount) {
- int Amount = Integer.parseInt(amount);
- myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- int volumeLevel = myAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
- int maxVolume = myAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
- if (volumeLevel == maxVolume) {
- try {
- qichatbot.variable("volumeIsMax").setValue("true");
- }catch (Exception e){}
- } else {
- int volumeToSet = (int) ((double) volumeLevel + (((double) maxVolume * Amount) / 100));
- if (volumeToSet > maxVolume) {
- volumeToSet = maxVolume;
- }
- try {
- qichatbot.variable("volumeIsMax").setValue("false");
- }catch (Exception e){}
- myAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volumeToSet, 0);
- }
- }
- //LOWER THE VOLUME//
- private void lowerVolume() {
- myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- int volumeLevel = myAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
- int maxVolume = myAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
- int minVolume = (int) ((double) maxVolume * 20 / 100);
- if (volumeLevel == minVolume) {
- try {
- qichatbot.variable("volumeIsMin").setValue("true");
- }catch (Exception e){}
- } else {
- int volumeToSet = (int) ((double) volumeLevel - (((double) maxVolume * 10) / 100));
- if (volumeToSet < minVolume) {
- volumeToSet = minVolume;
- }try{
- qichatbot.variable("volumeIsMin").setValue("false");
- }catch (Exception e){}
- myAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volumeToSet, 0);
- }
- }
- }
- @Override
- public void onRobotFocusGained(final QiContext qiContext) {
- //BUILD PHASE: TO EXECUTE ONCE!//
- // Get the conversation service.
- Conversation conversationService = qiContext.getConversation();
- final Topic dlg_adjust_volume = TopicBuilder.with(qiContext)
- .withResource(R.raw.dlg_adjust_volume)
- .build();
- final Topic lexicon = TopicBuilder.with(qiContext)
- .withResource(R.raw.lexicon)
- .build();
- final Topic dlg_adjust_volume_minimal = TopicBuilder.with(qiContext)
- .withResource(R.raw.dlg_adjust_volume_minimal)
- .build();
- final Topic dlg_adjust_volume_fallback = TopicBuilder.with(qiContext)
- .withResource(R.raw.dlg_adjust_volume_fallback)
- .build();
- // Create a list of topics to pass it to qiChatbot
- List<Topic> topics = new ArrayList<>();
- topics.add(dlg_adjust_volume);
- topics.add(lexicon);
- topics.add(dlg_adjust_volume_minimal);
- topics.add(dlg_adjust_volume_fallback);
- // Create qiChatbot
- qichatbot = conversationService.makeQiChatbot(qiContext.getRobotContext(), topics);
- Map<String, QiChatExecutor> executors = new HashMap<>();
- // Map the executor name from the topic to our qiChatbotExecutor
- executors.put("dlg_volume", new MyQiChatExecutor(qiContext));
- //////////////RUN PHASE//////////////////
- // Set the executors to the qiChatbot
- try {
- qichatbot.setExecutors(executors);
- List<Chatbot> chatbots = new ArrayList<>();
- chatbots.add(qichatbot);
- myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- int maxVolume = myAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
- int minVolume = (int) ((double) maxVolume * 20 / 100);
- qichatbot.variable("minVolume").setValue(String.valueOf(minVolume));
- qichatbot.variable("maxVolume").setValue(String.valueOf(maxVolume));
- EditablePhraseSet my_concept = qichatbot.dynamicConcept("minimum_volume");
- ArrayList<Phrase> myPhrases = new ArrayList<>();
- String minimumVol = String.valueOf(minVolume);
- Phrase ph = new Phrase(minimumVol);
- myPhrases.add(ph);
- my_concept.addPhrases(myPhrases);
- EditablePhraseSet my_concept2 = qichatbot.dynamicConcept("maximum_volume");
- ArrayList<Phrase> myPhrases2 = new ArrayList<>();
- String maximumVol = String.valueOf(maxVolume);
- Phrase ph2 = new Phrase(maximumVol);
- myPhrases2.add(ph2);
- my_concept2.addPhrases(myPhrases2);
- // make chat with the chatbots
- chat = conversationService.makeChat(qiContext.getRobotContext(), chatbots);
- chatFuture = chat.async().run();
- }catch (Exception e){}
- }
- @Override
- public void onRobotFocusLost() {
- }
- @Override
- public void onRobotFocusRefused(String reason) {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement