From 547f6eeb73d0495b80eb2e359cd303a21aaa09cc 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 @@ - - - + tools:context=".QRFragment" + android:layout_marginTop="@dimen/fragment_margin"> + \ No newline at end of file diff --git a/client_side/interface/UserData/socket.io b/client_side/interface/UserData/socket.io deleted file mode 160000 index 3020e45..0000000 --- a/client_side/interface/UserData/socket.io +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3020e455ab9a81341722e6c1e6cd8ef6b4b0ea28