From 9ef0b75c2c587b266f47b3242a4bd83698a33c53 Mon Sep 17 00:00:00 2001 From: Astatin3 <77305074+Astatin3@users.noreply.github.com> Date: Sat, 30 Mar 2024 11:06:59 -0600 Subject: [PATCH] Update --- app/build.gradle.kts | 5 +- .../scoutingapp2025/ui/TBA/TBAFragment.java | 5 - .../scoutingapp2025/ui/home/HomeFragment.java | 118 +++++++++--------- .../notifications/NotificationsFragment.java | 31 ++--- app/src/main/res/layout/fragment_home.xml | 36 +++++- 5 files changed, 109 insertions(+), 86 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4366cda..28f25e0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -51,6 +51,7 @@ dependencies { androidTestImplementation(libs.ext.junit) androidTestImplementation(libs.espresso.core) - implementation("com.github.yuriy-budiyev:code-scanner:2.3.0") - implementation("com.github.kenglxn.QRGen:android:3.0.1") +// implementation("com.github.yuriy-budiyev:code-scanner:2.3.0") +// implementation("com.github.kenglxn.QRGen:android:3.0.1") + implementation("com.journeyapps:zxing-android-embedded:2.3.0") } \ No newline at end of file diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/ui/TBA/TBAFragment.java b/app/src/main/java/com/astatin3/scoutingapp2025/ui/TBA/TBAFragment.java index 0df1f07..67899ec 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/ui/TBA/TBAFragment.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/ui/TBA/TBAFragment.java @@ -7,14 +7,11 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; -import androidx.lifecycle.ViewModelProvider; import com.astatin3.scoutingapp2025.RequestTask; import com.astatin3.scoutingapp2025.databinding.FragmentTbaBinding; @@ -24,11 +21,9 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import java.util.Collections; import java.util.Comparator; import java.util.function.Function; -import kotlin.io.LineReader; public class TBAFragment extends Fragment { diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/ui/home/HomeFragment.java b/app/src/main/java/com/astatin3/scoutingapp2025/ui/home/HomeFragment.java index fa3beaa..4ae8ea2 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/ui/home/HomeFragment.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/ui/home/HomeFragment.java @@ -5,13 +5,10 @@ import android.graphics.Bitmap; import android.graphics.Color; import android.os.Bundle; import android.os.CountDownTimer; -import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; -import android.widget.ImageView; import android.widget.SeekBar; import androidx.annotation.Nullable; @@ -38,7 +35,7 @@ public class HomeFragment extends Fragment { private final int maxQrCount = 256; //The max number that can be stored in a byte private final int maxQrSpeed = 20; - private final int minQrSpeed = 300; + private final int minQrSpeed = 300 + maxQrSpeed - 1; private int minQrSize = 0; private final int maxQrSize = 600; @@ -46,11 +43,14 @@ public class HomeFragment extends Fragment { private int curCodeIndex = 0; - private int qrDelay = 100; + private final int defaultQrDelay = 419; + private int qrDelay = 0; private int qrIndex = 0; + + private CountDownTimer timer; private int qrCount = 0; - private ArrayList qrBitmaps = new ArrayList(); + private ArrayList qrBitmaps; private void alert(String title, String content) { AlertDialog.Builder alert = new AlertDialog.Builder(getContext()); @@ -69,6 +69,7 @@ public class HomeFragment extends Fragment { Map hints = new EnumMap(EncodeHintType.class); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); // H = 30% damage + hints.put(EncodeHintType.QR_COMPACT, true); hints.put(EncodeHintType.MARGIN, 0); /* default = 4 */ int size = 200; @@ -99,58 +100,59 @@ public class HomeFragment extends Fragment { binding = FragmentHomeBinding.inflate(inflater, container, false); View root = binding.getRoot(); - binding.qrSpeedSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { -// qrDelay = progress + minQrSpeed; - } - @Override - public void onStartTrackingTouch(SeekBar seekBar) {} - @Override - public void onStopTrackingTouch(SeekBar seekBar) {} - }); - binding.qrSpeedSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - qrDelay = maxQrSpeed - progress + 1; - } - @Override - public void onStartTrackingTouch(SeekBar seekBar) {} - @Override - public void onStopTrackingTouch(SeekBar seekBar) {} - }); +// binding.qrSizeSlider.setProgress(qrSize); - sendData("Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmenjAWHRJGQWEhugQWHKJEtarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism"); + sendData("Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmenjAWHRJGQWEhugQWHKJEtarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmenjAWHRJGQWEhugQWHKJEtarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmenjAWHRJGQWEhugQWHKJEtarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmenjAWHRJGQWEhugQWHKJEtarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmenjAWHRJGQWEhugQWHKJEtarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism,Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmenjAWHRJGQWEhugQWHKJEtarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmentarianismDisestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmenjAWHRJGQWEhugQWHKJEtarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmentarianismDisestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmenjAWHRJGQWEhugQWHKJEtarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmentarianismDisestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmenjAWHRJGQWEhugQWHKJEtarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmentarianismDisestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmenjAWHRJGQWEhugQWHKJEtarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmentarianismDisestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, DisestablishmenjAWHRJGQWEhugQWHKJEtarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism, Disestablishmentarianism"); return root; } - private void getQr(int index){ - byte[] bytes = ByteBuffer.allocate(1).putInt(index).array(); -// new byte; - } - private void sendData(String data){ - minQrSize = Math.round(data.length()/maxQrCount); + minQrSize = Math.round(maxQrCount/data.length()); - binding.qrSizeSlider.setMax(maxQrSize); - binding.qrSpeedSlider.setMax(maxQrSpeed-minQrSpeed); + binding.qrSizeSlider.setMax(maxQrSize-minQrSize); + binding.qrSpeedSlider.setMax((minQrSpeed-maxQrSpeed)*2); - binding.qrSizeSlider.setProgress(qrSize-minQrSize); - binding.qrSpeedSlider.setProgress(qrDelay-minQrSpeed); + binding.qrSpeedSlider.setProgress(defaultQrDelay); - qrCount = (data.length()/qrSize); + qrCount = (data.length()/qrSize)+1; + binding.qrIndexD.setText(String.valueOf(qrCount)); -// alert("ee", ""+ qrDelay + "\n" + minQrSpeed); +// alert("size", ""+binding.qrSizeSlider.getProgress()+"\n"+binding.qrSizeSlider.getMax()); + binding.qrSpeedSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + qrDelay = -(minQrSpeed - progress - maxQrSpeed + 1); + } + @Override + public void onStartTrackingTouch(SeekBar seekBar) {} + @Override + public void onStopTrackingTouch(SeekBar seekBar) {} + }); + + binding.qrSizeSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {} + @Override + public void onStartTrackingTouch(SeekBar seekBar) {} + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + qrSize = seekBar.getProgress() + minQrSpeed; + qrCount = (data.length()/qrSize)+1; + binding.qrIndexD.setText(String.valueOf(qrCount)); + sendData(data); + } + }); + + qrBitmaps = new ArrayList(); for(int i=0;i<=(data.length()/qrSize);i++){ final int start = i*qrSize; int end = (i+1)*qrSize; if(end > data.length()){ end = data.length()-1; } -// alertstr += "\n" + start + ", " + end; try { qrBitmaps.add(generateQrCode( data.substring(start, end) @@ -160,20 +162,30 @@ public class HomeFragment extends Fragment { } } qrIndex = 0; + if(timer != null){ + timer.cancel(); + } qrLoop(); } private void updateQr(){ -// alert("qr", ""+qrIndex); binding.qrImage.setImageBitmap(qrBitmaps.get(qrIndex)); - this.qrIndex += 1; - if(this.qrIndex >= this.qrCount+1){ - this.qrIndex = 0; + if(qrDelay > 0) { + this.qrIndex += 1; + if (this.qrIndex >= this.qrCount) { + this.qrIndex = 0; + } + }else{ + this.qrIndex -= 1; + if (this.qrIndex < 0) { + this.qrIndex = this.qrCount-1; + } } + binding.qrIndexN.setText(String.valueOf(qrIndex+1)); } private void qrLoop(){ - new CountDownTimer(qrDelay, 1000) { + timer = new CountDownTimer(minQrSpeed-Math.abs(qrDelay)+1, 1000) { public void onTick(long millisUntilFinished) {} public void onFinish() { updateQr(); @@ -183,20 +195,4 @@ public class HomeFragment extends Fragment { } - -// private void setQR(int curIndex){ -// binding.qrImage.setImageBitmap(qrBitmaps.get(curIndex)); -// final Handler handler = new Handler(); -// handler.postDelayed(new Runnable() { -// @Override -// public void run() { -// if(qrIndex+1 > qrCount){ -// qrIndex = 0; -// } -// setQR(curIndex+1); -// } -// }, qrDelay); -// -// -// } } \ No newline at end of file diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/ui/notifications/NotificationsFragment.java b/app/src/main/java/com/astatin3/scoutingapp2025/ui/notifications/NotificationsFragment.java index b26ae3c..b456ece 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/ui/notifications/NotificationsFragment.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/ui/notifications/NotificationsFragment.java @@ -16,8 +16,14 @@ import com.budiyev.android.codescanner.CodeScanner; import com.budiyev.android.codescanner.CodeScannerView; import com.budiyev.android.codescanner.DecodeCallback; import com.budiyev.android.codescanner.ScanMode; +import com.google.zxing.DecodeHintType; +import com.google.zxing.EncodeHintType; import com.google.zxing.Result; +import java.util.EnumMap; +import java.util.Hashtable; +import java.util.Map; + public class NotificationsFragment extends Fragment { private CodeScanner mCodeScanner; @@ -38,21 +44,16 @@ public class NotificationsFragment extends Fragment { final Activity activity = getActivity(); View root = inflater.inflate(R.layout.fragment_notifications, container, false); - CodeScannerView scannerView = root.findViewById(R.id.scanner_view); - mCodeScanner = new CodeScanner(activity, scannerView); - mCodeScanner.setScanMode(ScanMode.CONTINUOUS); - mCodeScanner.setDecodeCallback(new DecodeCallback() { - @Override - public void onDecoded(@NonNull final Result result) { - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - alert("QR", result.getText()); - } - }); - } - }); - mCodeScanner.startPreview(); + IntentIntegrator integrator = IntentIntegrator.forSupportFragment(FragmentQRScan.this); + + integrator.setOrientationLocked(false); + integrator.setPrompt("Scan QR code"); + integrator.setBeepEnabled(false); + integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE); + + + integrator.initiateScan(); + return root; } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index f8375da..29fb527 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -20,18 +20,20 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.971" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/testImg" + app:layout_constraintTop_toBottomOf="@+id/qrImage" app:layout_constraintVertical_bias="0.838" /> + + + + + + \ No newline at end of file