Skip to content

Commit 61fdcbb

Browse files
committed
added room name QR code scanning and custom resolution/fps
1 parent eb32ddf commit 61fdcbb

10 files changed

Lines changed: 286 additions & 316 deletions

app/build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ android {
2525
applicationId "org.ossdc.visionai"
2626
minSdkVersion 16
2727
targetSdkVersion 30
28-
versionCode 2
29-
versionName "1.1"
28+
versionCode 3
29+
versionName "1.3"
3030
}
3131
buildTypes {
3232
release {
@@ -58,4 +58,6 @@ dependencies {
5858
implementation files('libs/libjingle_peerconnection.jar')
5959

6060
implementation project(':usbserial')
61+
62+
implementation 'me.dm7.barcodescanner:zxing:1.9.13'
6163
}

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,13 @@
8181
<meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" android:resource="@xml/usb_device_filter" />
8282

8383
</activity>
84-
84+
<activity android:name=".QRCodeScanningActivity"
85+
android:label="@string/qr_code_scanner_activity">
86+
</activity>
8587
<service
8688
android:name="org.ossdc.visionai.usb.UsbService"
8789
android:enabled="true">
8890
</service>
8991
</application>
9092

91-
</manifest>
93+
</manifest>

app/src/main/java/org/ossdc/visionai/LauncherActivity.java

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,15 @@
1515
*/
1616
package org.ossdc.visionai;
1717

18+
import android.Manifest;
19+
import android.app.Activity;
1820
import android.content.Context;
1921
import android.content.Intent;
2022
import android.content.SharedPreferences;
23+
import android.content.pm.PackageManager;
2124
import android.os.Bundle;
25+
import android.support.v4.app.ActivityCompat;
26+
import android.support.v4.content.ContextCompat;
2227
import android.support.v7.app.AppCompatActivity;
2328
import android.support.v7.widget.Toolbar;
2429
import android.view.View;
@@ -36,6 +41,9 @@
3641

3742
public class LauncherActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
3843

44+
private static final int ROOM_NAME_FROM_QR_CODE = 1;
45+
public static final String QRCODE_RESULT = "QRCODE_RESULT";
46+
3947
SharedPreferences sp;
4048

4149
private String roomName;
@@ -45,6 +53,7 @@ public class LauncherActivity extends AppCompatActivity implements AdapterView.O
4553
boolean hideLocalCamera = true;
4654
private String robotMode = "OpenBot";
4755
String[] ROBOT_MODES = { "OpenBot", "Neato", "SPARK Assistant"};
56+
private String resFPS;
4857

4958
private static final String CHAR_LIST =
5059
"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
@@ -85,6 +94,7 @@ protected void onCreate(Bundle savedInstanceState) {
8594
useDisplayArea = savedInstanceState.getBoolean("useDisplayArea",false);
8695
hideLocalCamera = savedInstanceState.getBoolean("hideLocalCamera",false);
8796
robotMode = savedInstanceState.getString("robotMode","OpenBot");
97+
resFPS = savedInstanceState.getString("resFPS","2560,1440,30");
8898
}
8999
else
90100
{
@@ -94,6 +104,7 @@ protected void onCreate(Bundle savedInstanceState) {
94104
useDisplayArea = sp.getBoolean("useDisplayArea",false);
95105
hideLocalCamera = sp.getBoolean("hideLocalCamera",false);
96106
robotMode = sp.getString("robotMode","OpenBot");
107+
resFPS = sp.getString("resFPS","2560,1440,30");
97108
}
98109

99110
EditText roomNameField = findViewById(R.id.editTextTextPersonName);
@@ -102,13 +113,17 @@ protected void onCreate(Bundle savedInstanceState) {
102113
Switch displayAreaSwitchField = findViewById(R.id.displayAreaSwitch);
103114
Switch hideLocalCameraSwitchField = findViewById(R.id.hideLocalCameraSwitch);
104115
Spinner robotModeField = findViewById(R.id.robotMode);
116+
EditText resFPSField = findViewById(R.id.editTextResFPS);
105117

106118
backCameraSwitchField.setChecked(useBackCamera);
107119
roomNameField.setText(roomName);
108120
roomPasswordField.setText(roomPassword);
109121
displayAreaSwitchField.setChecked(useDisplayArea);
110122
hideLocalCameraSwitchField.setChecked(hideLocalCamera);
111123
robotModeField.setSelection(Arrays.asList(ROBOT_MODES).indexOf(robotMode));
124+
resFPSField.setText(resFPS);
125+
126+
112127
}
113128

114129
@Override
@@ -120,20 +135,72 @@ public void onNothingSelected(AdapterView<?> arg0) {
120135
// TODO - Custom Code
121136
}
122137

138+
@Override
139+
public void onActivityResult(int requestCode, int resultCode, Intent data) {
140+
super.onActivityResult(requestCode, resultCode, data);
141+
switch(requestCode) {
142+
case (ROOM_NAME_FROM_QR_CODE) : {
143+
if (resultCode == Activity.RESULT_OK) {
144+
roomName = data.getStringExtra(QRCODE_RESULT);
145+
146+
EditText roomNameField = findViewById(R.id.editTextTextPersonName);
147+
roomNameField.setText(roomName);
148+
}
149+
break;
150+
}
151+
}
152+
}
153+
154+
public void scanRoomQRCode(View view) {
155+
launchActivity(QRCodeScanningActivity.class);
156+
}
157+
158+
public void launchActivity(Class<?> clss) {
159+
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
160+
!= PackageManager.PERMISSION_GRANTED) {
161+
mClss = clss;
162+
ActivityCompat.requestPermissions(this,
163+
new String[]{Manifest.permission.CAMERA}, ZBAR_CAMERA_PERMISSION);
164+
} else {
165+
Intent intent = new Intent(this,clss);
166+
startActivityForResult(intent, ROOM_NAME_FROM_QR_CODE);
167+
168+
}
169+
}
170+
private static final int ZBAR_CAMERA_PERMISSION = 1;
171+
private Class<?> mClss;
172+
173+
@Override
174+
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
175+
switch (requestCode) {
176+
case ZBAR_CAMERA_PERMISSION:
177+
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
178+
if(mClss != null) {
179+
Intent intent = new Intent(this, mClss);
180+
startActivity(intent);
181+
}
182+
} else {
183+
Toast.makeText(this, "Please grant camera permission to use the QR Scanner", Toast.LENGTH_SHORT).show();
184+
}
185+
return;
186+
}
187+
}
123188
public void openRaceOSSDCActivity(View view) {
124189
EditText roomNameField = findViewById(R.id.editTextTextPersonName);
125190
EditText roomPasswordField = findViewById(R.id.editTextTextPassword);
126191
Switch backCameraSwitchField = findViewById(R.id.backCameraSwitch);
127192
Switch displayAreaSwitchField = findViewById(R.id.displayAreaSwitch);
128193
Switch hideLocalCameraSwitchField = findViewById(R.id.hideLocalCameraSwitch);
129194
Spinner robotModeField = findViewById(R.id.robotMode);
195+
EditText resFPSField = findViewById(R.id.editTextResFPS);
130196

131197
useBackCamera = backCameraSwitchField.isChecked();
132198
roomName = roomNameField.getText().toString();
133199
roomPassword = roomPasswordField.getText().toString();
134200
useDisplayArea = displayAreaSwitchField.isChecked();
135201
hideLocalCamera = hideLocalCameraSwitchField.isChecked();
136202
robotMode = ROBOT_MODES[robotModeField.getSelectedItemPosition()];
203+
resFPS = resFPSField.getText().toString();
137204

138205
Intent intent = new Intent(this, RaceOSSDCActivity.class);
139206
intent.putExtra("roomName", roomName);
@@ -142,6 +209,7 @@ public void openRaceOSSDCActivity(View view) {
142209
intent.putExtra("useDisplayArea", useDisplayArea);
143210
intent.putExtra("hideLocalCamera", hideLocalCamera);
144211
intent.putExtra("robotMode", robotMode);
212+
intent.putExtra("resFPS", resFPS);
145213

146214
sp=getSharedPreferences("SD", Context.MODE_PRIVATE);
147215
SharedPreferences.Editor ed=sp.edit();
@@ -151,6 +219,7 @@ public void openRaceOSSDCActivity(View view) {
151219
ed.putBoolean("useDisplayArea",useDisplayArea);
152220
ed.putBoolean("hideLocalCamera",hideLocalCamera);
153221
ed.putString("robotMode",robotMode);
222+
ed.putString("resFPS",resFPS);
154223

155224
ed.commit();
156225

@@ -166,6 +235,7 @@ public void onSaveInstanceState(Bundle savedInstanceState) {
166235
savedInstanceState.putBoolean("useDisplayArea", useDisplayArea);
167236
savedInstanceState.putBoolean("hideLocalCamera", hideLocalCamera);
168237
savedInstanceState.putString("robotMode", robotMode);
238+
savedInstanceState.putString("resFPS", resFPS);
169239
}
170240

171241
@Override
@@ -177,5 +247,6 @@ public void onRestoreInstanceState(Bundle savedInstanceState) {
177247
useDisplayArea = savedInstanceState.getBoolean("useDisplayArea");
178248
hideLocalCamera = savedInstanceState.getBoolean("hideLocalCamera");
179249
robotMode = savedInstanceState.getString("robotMode");
250+
resFPS = savedInstanceState.getString("resFPS");
180251
}
181252
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright (C) 2021 Marius Slavescu - OSSDC.org. All rights reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.ossdc.visionai;
17+
18+
import android.app.Activity;
19+
import android.content.Intent;
20+
import android.os.Bundle;
21+
22+
import com.google.zxing.Result;
23+
24+
import me.dm7.barcodescanner.zxing.ZXingScannerView;
25+
26+
public class QRCodeScanningActivity extends Activity implements ZXingScannerView.ResultHandler {
27+
private ZXingScannerView mScannerView;
28+
29+
@Override
30+
public void onCreate(Bundle state) {
31+
super.onCreate(state);
32+
mScannerView = new ZXingScannerView(this); // Programmatically initialize the scanner view
33+
setContentView(mScannerView); // Set the scanner view as the content view
34+
}
35+
36+
@Override
37+
public void onResume() {
38+
super.onResume();
39+
mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results.
40+
mScannerView.startCamera(); // Start camera on resume
41+
}
42+
43+
@Override
44+
public void onPause() {
45+
super.onPause();
46+
mScannerView.stopCamera(); // Stop camera on pause
47+
}
48+
49+
@Override
50+
public void handleResult(Result rawResult) {
51+
Intent resultIntent = new Intent();
52+
resultIntent.putExtra(LauncherActivity.QRCODE_RESULT, rawResult.getText());
53+
setResult(Activity.RESULT_OK, resultIntent);
54+
finish();
55+
56+
}
57+
}

0 commit comments

Comments
 (0)