From 0abc70fc36d1dccb3c9b01664fd9b6786881582f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efe=20Ayd=C4=B1n?= <3feaydin@gmail.com> Date: Wed, 24 Apr 2019 16:35:19 +0300 Subject: [PATCH] qr code halfway done --- .../main/java/gq/yigit/mycity/QRFragment.java | 73 +++++++------------ .../yigit/mycity/tools/QRCodeGenerator.java | 31 ++++++++ .../app/src/main/res/layout/fragment_qr.xml | 17 +++-- client_side/interface/UserData/socket.io | 1 - 4 files changed, 66 insertions(+), 56 deletions(-) delete mode 160000 client_side/interface/UserData/socket.io diff --git a/MyCity/app/src/main/java/gq/yigit/mycity/QRFragment.java b/MyCity/app/src/main/java/gq/yigit/mycity/QRFragment.java index af5a481..55e58a1 100644 --- a/MyCity/app/src/main/java/gq/yigit/mycity/QRFragment.java +++ b/MyCity/app/src/main/java/gq/yigit/mycity/QRFragment.java @@ -1,73 +1,62 @@ package gq.yigit.mycity; import android.content.Context; +import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; +import android.support.annotation.RequiresPermission; import android.support.v4.app.Fragment; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; +import com.google.zxing.WriterException; + +import org.json.JSONException; + +import gq.yigit.mycity.tools.QRCodeGenerator; -/** - * A simple {@link Fragment} subclass. - * Activities that contain this fragment must implement the - * {@link QRFragment.OnFragmentInteractionListener} interface - * to handle interaction events. - * Use the {@link QRFragment#newInstance} factory method to - * create an instance of this fragment. - */ public class QRFragment extends Fragment { - // TODO: Rename parameter arguments, choose names that match - // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER - private static final String ARG_PARAM1 = "param1"; - private static final String ARG_PARAM2 = "param2"; - // TODO: Rename and change types of parameters - private String mParam1; - private String mParam2; private OnFragmentInteractionListener mListener; - + private ImageView qr_view; + private Bitmap qr_img; public QRFragment() { - // Required empty public constructor } - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment QRFragment. - */ - // TODO: Rename and change types and number of parameters + + public static QRFragment newInstance(String param1, String param2) { QRFragment fragment = new QRFragment(); - Bundle args = new Bundle(); - args.putString(ARG_PARAM1, param1); - args.putString(ARG_PARAM2, param2); - fragment.setArguments(args); + return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (getArguments() != null) { - mParam1 = getArguments().getString(ARG_PARAM1); - mParam2 = getArguments().getString(ARG_PARAM2); - } + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_qr, container, false); + View rootView = inflater.inflate(R.layout.fragment_qr, container, false); + qr_view = rootView.findViewById(R.id.qr_image); + try { + qr_img = QRCodeGenerator.Generate(MainActivity.userData.getString("id"),429,429); + qr_view.setImageBitmap(qr_img); + }catch(JSONException e){ + Log.e("[ERROR]","JSON error occured while generating qr code!"); + }catch (WriterException e){ + Log.e("[ERROR]","An error occured while generating qr code!"); + } + return rootView; } - // TODO: Rename method, update argument and hook method into UI event public void onButtonPressed(Uri uri) { if (mListener != null) { mListener.onFragmentInteraction(uri); @@ -91,16 +80,6 @@ public class QRFragment extends Fragment { mListener = null; } - /** - * This interface must be implemented by activities that contain this - * fragment to allow an interaction in this fragment to be communicated - * to the activity and potentially other fragments contained in that - * activity. - *
- * See the Android Training lesson Communicating with Other Fragments for more information.
- */
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
diff --git a/MyCity/app/src/main/java/gq/yigit/mycity/tools/QRCodeGenerator.java b/MyCity/app/src/main/java/gq/yigit/mycity/tools/QRCodeGenerator.java
index d1e7430..bdfbae5 100644
--- a/MyCity/app/src/main/java/gq/yigit/mycity/tools/QRCodeGenerator.java
+++ b/MyCity/app/src/main/java/gq/yigit/mycity/tools/QRCodeGenerator.java
@@ -1,4 +1,35 @@
package gq.yigit.mycity.tools;
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.net.Uri;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.MultiFormatWriter;
+import com.google.zxing.WriterException;
+import com.google.zxing.common.BitMatrix;
+
+
+import java.util.Arrays;
+
public class QRCodeGenerator {
+ public static Bitmap Generate(String data, int height,int width) throws WriterException {
+ MultiFormatWriter writer = new MultiFormatWriter();
+ String finalData = Uri.encode(data);
+
+ // Use 1 as the height of the matrix as this is a 1D Barcode.
+ BitMatrix bm = writer.encode(finalData, BarcodeFormat.CODE_128, width, 1);
+ int bmWidth = bm.getWidth();
+
+ Bitmap imageBitmap = Bitmap.createBitmap(bmWidth, height, Bitmap.Config.ARGB_8888);
+
+ for (int i = 0; i < bmWidth; i++) {
+ // Paint columns of width 1
+ int[] column = new int[height];
+ Arrays.fill(column, bm.get(i, 0) ? Color.BLACK : Color.WHITE);
+ imageBitmap.setPixels(column, 0, 1, i, 0, 1, height);
+ }
+
+ return imageBitmap;
+ }
}
diff --git a/MyCity/app/src/main/res/layout/fragment_qr.xml b/MyCity/app/src/main/res/layout/fragment_qr.xml
index 385e6b5..686a5d2 100644
--- a/MyCity/app/src/main/res/layout/fragment_qr.xml
+++ b/MyCity/app/src/main/res/layout/fragment_qr.xml
@@ -1,14 +1,15 @@