123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- package app.mar.activities;
- import android.app.Activity;
- import android.content.pm.PackageManager;
- import android.graphics.Color;
- import android.os.Bundle;
- import android.app.Fragment;
- import android.util.Log;
- import android.util.TypedValue;
- import android.view.KeyEvent;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.Button;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.google.zxing.ResultPoint;
- import com.google.zxing.client.android.BeepManager;
- import com.journeyapps.barcodescanner.BarcodeCallback;
- import com.journeyapps.barcodescanner.BarcodeResult;
- import com.journeyapps.barcodescanner.CaptureManager;
- import com.journeyapps.barcodescanner.DecoratedBarcodeView;
- import java.util.List;
- import app.mar.game.Area;
- import app.mar.game.Game;
- import app.mar.game.challenges.Challenge;
- import app.mar.game.challenges.GeoIndice;
- import app.mar.game.challenges.IGeoTreasure;
- import app.mar.game.challenges.Indice;
- import app.mar.game.challenges.QRCodeGeoTreasure;
- import app.mar.game.challenges.QRCodeTreasure;
- import app.mar.game.challenges.TextIndice;
- /**
- * A simple {@link Fragment} subclass.
- * Activities that contain this fragment must implement the
- * {@link QRCodeFragment.OnFragmentInteractionListener} interface
- * to handle interaction events.
- * Use the {@link QRCodeFragment#newInstance} factory method to
- * create an instance of this fragment.
- */
- public class QRCodeFragment extends ChallengeFragment implements
- DecoratedBarcodeView.TorchListener, BarcodeCallback, View.OnClickListener{
- private CaptureManager capture;
- private DecoratedBarcodeView barcodeScannerView;
- private Button switchFlashlightButton;
- private Button goToScan;
- private BeepManager beepManager;
- private View vPresRoot;
- private View vScanRoot;
- private Game mGame;
- public static final int REQUEST_CODE = 2001;
- private QRCodeTreasure mQr;
- private OnFragmentInteractionListener mListener;
- protected static final int STATE_PRESENTATION=0;
- protected static final int STATE_RA=1;
- protected int state=STATE_PRESENTATION;
- protected LinearLayout mUITextIndices2;
- protected TextView mUIGeoIndice2;
- protected LinearLayout mUIGlobalIndice2;
- public QRCodeFragment() {
- // Required empty public constructor
- }
- /**
- * Use this factory method to create a new instance of
- * this fragment using the provided parameters.
- *
- * @return A new instance of fragment QRCodeFragment.
- */
- public static QRCodeFragment newInstance() {
- QRCodeFragment fragment = new QRCodeFragment();
- Bundle args = new Bundle();
- fragment.setArguments(args);
- return fragment;
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (getArguments() != null) {
- }
- }
- @Override
- protected void onInitChallenge(Challenge c) {
- super.onInitChallenge(c);
- if(c instanceof QRCodeTreasure) {
- mQr = (QRCodeTreasure) c;
- }else
- {
- mQr=null;
- }
- if( (c instanceof QRCodeGeoTreasure) )
- {
- getDriver().startLocalisation();
- }
- getDriver().setVisibilityView(R.id.btn_valid, View.INVISIBLE);
- }
- @Override
- protected void onResetUi() {
- state=STATE_PRESENTATION;
- if(mUIGeoIndice2!=null)
- {
- mUIGeoIndice2.setVisibility(View.GONE);
- }
- if(mUITextIndices2!=null)
- {
- mUITextIndices2.removeAllViews();
- }
- if(mUIGlobalIndice2!=null) {
- mUIGlobalIndice2.setVisibility(View.GONE);
- }
- getDriver().setVisibilityView(R.id.btn_valid, View.INVISIBLE);
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // Inflate the layout for this fragment
- View v = super.onCreateView(inflater, container, R.layout.fragment_qrcode);
- barcodeScannerView = (DecoratedBarcodeView)v.findViewById(R.id.zxing_barcode_scanner);
- barcodeScannerView.setTorchListener(this);
- beepManager=new BeepManager(getActivity());
- switchFlashlightButton = (Button)v.findViewById(R.id.switch_flashlight);
- goToScan = (Button)v.findViewById(R.id.btn_scan);
- goToScan.setOnClickListener(this);
- vPresRoot=v.findViewById(R.id.presentation);
- vScanRoot=v.findViewById(R.id.root_qr);
- mUITextIndices2= (LinearLayout) v.findViewById(R.id.ll_textIndices2);
- mUIGeoIndice2= (TextView) v.findViewById(R.id.tv_geoIndice2);
- mUIGlobalIndice2 = (LinearLayout) v.findViewById(R.id.ll_rootIndices2);
- if (!hasFlash()) {
- switchFlashlightButton.setVisibility(View.GONE);
- }
- capture = new CaptureManager(getActivity(), barcodeScannerView);
- capture.initializeFromIntent(getActivity().getIntent(), savedInstanceState);
- barcodeScannerView.decodeContinuous(this);
- return v;
- }
- @Override
- public void onStart() {
- super.onStart();
- getDriver().resumeLocalisation();
- }
- @Override
- public void onStop() {
- super.onStop();
- getDriver().pauseLocalisation();
- }
- @Override
- public void onResume() {
- super.onResume();
- capture.onResume();
- }
- @Override
- public void onPause() {
- super.onPause();
- capture.onPause();
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- capture.onDestroy();
- }
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- capture.onSaveInstanceState(outState);
- }
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- return barcodeScannerView.onKeyDown(keyCode, event) || getActivity().onKeyDown(keyCode, event);
- }
- /**
- * Check if the device's camera has a Flashlight.
- * @return true if there is Flashlight, otherwise false.
- */
- private boolean hasFlash() {
- return getActivity().getApplicationContext().getPackageManager()
- .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
- }
- public void switchFlashlight(View view) {
- if ("on".equals(switchFlashlightButton.getText())) {
- barcodeScannerView.setTorchOn();
- } else {
- barcodeScannerView.setTorchOff();
- }
- }
- @Override
- public void onTorchOn() {
- switchFlashlightButton.setText("Off");
- }
- @Override
- public void onTorchOff() {
- switchFlashlightButton.setText("On");
- }
- public void barcodeResult(final BarcodeResult result) {
- beepManager.playBeepSoundAndVibrate();
- Toast.makeText(getActivity(),"Text: '"+result.getText()+"'", Toast.LENGTH_LONG).show();
- if(result.getText().compareTo(mQr.getQRValue())==0)
- {
- Log.i("-----", "Challenge '"+mQr.getName()+"' validated !");
- barcodeScannerView.pause();
- Activity act = getActivity();
- getDriver().challengeValidate(mChallenge, mGame, (ChallengeDriver)getActivity());
- stopGeoUpdateTimer();
- }else
- {
- Toast.makeText(getActivity(), mQr.getBadQRMessage(), Toast.LENGTH_LONG).show();
- barcodeScannerView.decodeContinuous(this);
- }
- }
- public boolean onBackPressed(){
- if(state==STATE_PRESENTATION) return true;
- state=STATE_PRESENTATION;
- vScanRoot.setVisibility(View.GONE);
- vPresRoot.setVisibility(View.VISIBLE);
- return false;
- }
- public Indice showIndice()
- {
- Indice indice = super.showIndice();
- int indInd = mChallenge.getIndiceIndex();
- if(indice!=null && getActivity() instanceof ChallengeDriver)
- {
- if(indice instanceof GeoIndice)
- {
- if(mUIGeoIndice2!=null)
- {
- mUIGlobalIndice2.setVisibility(View.VISIBLE);
- mUIGeoIndice2.setVisibility(View.VISIBLE);
- startGeoUpdateTimer();
- }
- }else if(indice instanceof TextIndice)
- {
- if(mUITextIndices2!=null)
- {
- mUIGlobalIndice2.setVisibility(View.VISIBLE);
- TextView tv = new TextView(getActivity());
- tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
- tv.setText(" Indice "+(indInd+1)+" : "+((TextIndice) indice).getText());
- mUITextIndices2.addView(tv);
- }
- }
- }
- return indice;
- }
- @Override
- protected void onGeoUpdateTimer()
- {
- super.onGeoUpdateTimer();
- mUIGeoIndice2.setText(mUIGeoIndice.getText());
- }
- @Override
- public void possibleResultPoints(List<ResultPoint> resultPoints) {
- }
- @Override
- public boolean check() {
- return false;
- }
- @Override
- public void onClick(View v) {
- if(v==goToScan && state==STATE_PRESENTATION)
- {
- vScanRoot.setVisibility(View.VISIBLE);
- vPresRoot.setVisibility(View.GONE);
- state=STATE_RA;
- }
- }
- }
|