rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java
Go to the documentation of this file.
1 /*
2  Copyright 2018-2021 Picovoice Inc.
3 
4  You may not use this file except in compliance with the license. A copy of the license is
5  located in the "LICENSE" file accompanying this source.
6 
7  Unless required by applicable law or agreed to in writing, software distributed under the
8  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
9  express or implied. See the License for the specific language governing permissions and
10  limitations under the License.
11 */
12 
13 package ai.picovoice.rhinodemo;
14 
15 import android.Manifest;
16 import android.content.pm.PackageManager;
17 import android.os.Bundle;
18 import android.util.Log;
19 import android.view.LayoutInflater;
20 import android.view.View;
21 import android.view.ViewGroup;
22 import android.widget.Button;
23 import android.widget.TextView;
24 import android.widget.ToggleButton;
25 
26 import androidx.annotation.NonNull;
27 import androidx.appcompat.app.AlertDialog;
28 import androidx.appcompat.app.AppCompatActivity;
29 import androidx.constraintlayout.widget.ConstraintLayout;
30 import androidx.constraintlayout.widget.Guideline;
31 import androidx.core.app.ActivityCompat;
32 import androidx.core.content.ContextCompat;
33 
34 import java.util.Map;
35 
36 import ai.picovoice.rhino.*;
37 
38 
39 public class MainActivity extends AppCompatActivity {
40  private final String ACCESS_KEY = "${YOUR_ACCESS_KEY_HERE}"; // AccessKey obtained from Picovoice Console (https://picovoice.ai/console/)
41 
42  private ToggleButton recordButton;
43  private Button cheatSheetButton;
44  private TextView intentTextView;
45  private TextView errorTextView;
46  private Guideline errorGuideline;
48 
49  private void initRhino() {
50  try {
53  .setContextPath("smart_lighting_android.rhn")
54  .setSensitivity(0.25f)
55  .setErrorCallback(rhinoManagerErrorCallback)
56  .build(getApplicationContext(), rhinoManagerCallback);
57 
58  Log.i("RhinoManager", rhinoManager.getContextInformation());
59  } catch (RhinoInvalidArgumentException e) {
61  String.format(
62  "%s\nMake sure your AccessKey '%s' is a valid access key.",
63  e.getMessage(),
64  ACCESS_KEY));
65  } catch (RhinoActivationException e) {
66  onRhinoError("AccessKey activation error");
67  } catch (RhinoActivationLimitException e) {
68  onRhinoError("AccessKey reached its device limit");
70  onRhinoError("AccessKey refused");
72  onRhinoError("AccessKey has been throttled");
73  } catch (RhinoException e) {
74  onRhinoError("Failed to initialize Porcupine " + e.getMessage());
75  }
76  }
77 
79  @Override
80  public void invoke(final RhinoInference inference) {
81  runOnUiThread(new Runnable() {
82  @Override
83  public void run() {
84  recordButton.setEnabled(true);
85  recordButton.setText("START");
86  recordButton.toggle();
87  intentTextView.setText("\n {\n");
88  intentTextView.append(String.format(" \"isUnderstood\" : \"%b\",\n", inference.getIsUnderstood()));
89  if (inference.getIsUnderstood()) {
90  intentTextView.append(String.format(" \"intent\" : \"%s\",\n", inference.getIntent()));
91  final Map<String, String> slots = inference.getSlots();
92  if (slots.size() > 0) {
93  intentTextView.append(" \"slots\" : {\n");
94  for (String key : slots.keySet()) {
95  intentTextView.append(String.format(" \"%s\" : \"%s\",\n", key, slots.get(key)));
96  }
97  intentTextView.append(" }\n");
98  }
99  }
100  intentTextView.append(" }\n");
101  }
102  });
103  }
104  };
105 
107  @Override
108  public void invoke(final RhinoException error) {
109  runOnUiThread(new Runnable() {
110  @Override
111  public void run() {
112  onRhinoError(error.getMessage());
113  }
114  });
115  }
116  };
117 
118  private void onRhinoError(String errorMessage) {
119  recordButton.setEnabled(false);
120  recordButton.setBackground(ContextCompat.getDrawable(
121  getApplicationContext(),
122  R.drawable.button_disabled));
123 
124  cheatSheetButton.setEnabled(false);
125 
126  errorTextView.setText(errorMessage);
127  errorTextView.setVisibility(View.VISIBLE);
128 
129  ConstraintLayout.LayoutParams intentParam = (ConstraintLayout.LayoutParams) intentTextView.getLayoutParams();
130  intentParam.bottomToTop = errorGuideline.getId();
131  intentTextView.requestLayout();
132  }
133 
134  @Override
135  protected void onCreate(Bundle savedInstanceState) {
136  super.onCreate(savedInstanceState);
137  setContentView(R.layout.activity_rhino_demo);
138 
139  recordButton = findViewById(R.id.startButton);
140  cheatSheetButton = findViewById(R.id.cheatSheetButton);
141  intentTextView = findViewById(R.id.intentView);
142  errorTextView = findViewById(R.id.errorView);
143  errorGuideline = findViewById(R.id.errorGuideLine);
144 
145  initRhino();
146  }
147 
148  @Override
149  protected void onDestroy() {
150  super.onDestroy();
151 
153  }
154 
155  private boolean hasRecordPermission() {
156  return ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED;
157  }
158 
159  private void requestRecordPermission() {
160  ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, 0);
161  }
162 
163  @Override
164  public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
165  super.onRequestPermissionsResult(requestCode, permissions, grantResults);
166  if (grantResults.length == 0 || grantResults[0] == PackageManager.PERMISSION_DENIED) {
167  recordButton.setEnabled(true);
168  recordButton.setText("START");
169  recordButton.toggle();
170  } else {
171  recordButton.setEnabled(false);
172  recordButton.setText("...");
174  }
175  }
176 
177  public void onClick(View view) {
178  if (recordButton.isChecked()) {
179  recordButton.setEnabled(false);
180  recordButton.setText("...");
181  intentTextView.setText("");
182 
183  if (hasRecordPermission()) {
185  } else {
187  }
188  }
189  }
190 
191  public void showContextCheatSheet(View view) {
192  AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
193  ViewGroup viewGroup = findViewById(R.id.content);
194  View dialogView = LayoutInflater.from(view.getContext()).inflate(R.layout.context_cheat_sheet, viewGroup, false);
195  builder.setView(dialogView);
196 
197  TextView contextField = (TextView) dialogView.findViewById(R.id.contextField);
198  contextField.setText(rhinoManager.getContextInformation());
199 
200  AlertDialog dialog = builder.create();
201  dialog.show();
202  }
203 }
R
#define R
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/extras/stb_vorbis.c:5104
ai.picovoice.rhino.RhinoException
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/exception/RhinoException.java:14
ai.picovoice.rhino.RhinoManagerCallback
Definition: RhinoManagerCallback.java:13
run
void run(class_loader::ClassLoader *loader)
ai.picovoice.rhino.RhinoManager.Builder.setAccessKey
RhinoManager.Builder setAccessKey(String accessKey)
Definition: RhinoManager.java:170
ai.picovoice.rhino.RhinoInference.getIntent
String getIntent()
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/RhinoInference.java:30
ai.picovoice.rhinodemo.MainActivity.onRequestPermissionsResult
void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:164
ai.picovoice.rhinodemo.MainActivity.initRhino
void initRhino()
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:49
ai.picovoice.rhinodemo.MainActivity.onRhinoError
void onRhinoError(String errorMessage)
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:118
ai.picovoice.rhino.RhinoInvalidArgumentException
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/exception/RhinoInvalidArgumentException.java:13
ai.picovoice.rhino.RhinoManager.process
void process()
Definition: RhinoManager.java:58
ai.picovoice.rhino.RhinoActivationException
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/exception/RhinoActivationException.java:13
ai.picovoice.rhinodemo.MainActivity.errorGuideline
Guideline errorGuideline
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:46
ai.picovoice.rhino.RhinoActivationRefusedException
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/exception/RhinoActivationRefusedException.java:13
ai.picovoice.rhino.RhinoActivationThrottledException
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/exception/RhinoActivationThrottledException.java:13
ai.picovoice.rhino.RhinoManager.getContextInformation
String getContextInformation()
Definition: RhinoManager.java:154
f
f
ai.picovoice.rhinodemo.MainActivity.errorTextView
TextView errorTextView
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:45
ai.picovoice.rhino.RhinoManager
Definition: RhinoManager.java:30
ai.picovoice.rhinodemo.MainActivity.showContextCheatSheet
void showContextCheatSheet(View view)
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:191
ai.picovoice.rhino.RhinoManager.Builder
Definition: RhinoManager.java:161
ai.picovoice.rhinodemo.MainActivity.onCreate
void onCreate(Bundle savedInstanceState)
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:135
ai.picovoice.rhinodemo.MainActivity.ACCESS_KEY
final String ACCESS_KEY
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:40
ai.picovoice.rhinodemo.MainActivity.hasRecordPermission
boolean hasRecordPermission()
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:155
ai.picovoice.rhinodemo.MainActivity.onClick
void onClick(View view)
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:177
ai.picovoice.rhino.RhinoInference
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/RhinoInference.java:15
ai.picovoice.rhinodemo.MainActivity
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:39
ai
ai.picovoice.rhino
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/exception/RhinoActivationException.java:11
ai.picovoice.rhinodemo.MainActivity.onDestroy
void onDestroy()
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:149
ai.picovoice
ai.picovoice.rhinodemo.MainActivity.rhinoManager
RhinoManager rhinoManager
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:47
ai.picovoice.rhino.RhinoManagerErrorCallback
Definition: RhinoManagerErrorCallback.java:15
ai.picovoice.rhinodemo.MainActivity.intentTextView
TextView intentTextView
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:44
ai.picovoice.rhinodemo.MainActivity.rhinoManagerCallback
final RhinoManagerCallback rhinoManagerCallback
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:78
ai.picovoice.rhinodemo.MainActivity.requestRecordPermission
void requestRecordPermission()
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:159
ai.picovoice.rhinodemo.MainActivity.recordButton
ToggleButton recordButton
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:42
ai.picovoice.rhino.RhinoManager.delete
void delete()
Definition: RhinoManager.java:136
ai.picovoice.rhino.RhinoInference.getIsUnderstood
boolean getIsUnderstood()
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/RhinoInference.java:26
error
static int error(vorb *f, enum STBVorbisError e)
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/extras/stb_vorbis.c:896
ai.picovoice.rhinodemo.MainActivity.rhinoManagerErrorCallback
final RhinoManagerErrorCallback rhinoManagerErrorCallback
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:106
ai.picovoice.rhinodemo.MainActivity.cheatSheetButton
Button cheatSheetButton
Definition: rhino/demo/android/Activity/rhino-activity-demo-app/src/main/java/ai/picovoice/rhinodemo/MainActivity.java:43
ai.picovoice.rhino.RhinoInference.getSlots
Map< String, String > getSlots()
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/RhinoInference.java:34
ai.picovoice.rhino.RhinoActivationLimitException
Definition: android/Rhino/rhino/src/main/java/ai/picovoice/rhino/exception/RhinoActivationLimitException.java:13


picovoice_driver
Author(s):
autogenerated on Fri Apr 1 2022 02:13:56