diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..eead6f3cad0175698c24d8709da70a46808f9b38 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,34 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId "com.ireallydontcare.viet.posseidon" + minSdkVersion 15 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.android.support:design:28.0.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + def room_version = "1.1.1" + implementation "android.arch.persistence.room:runtime:$room_version" + annotationProcessor "android.arch.persistence.room:compiler:$room_version" + implementation 'com.android.support:recyclerview-v7:28.0.0' + api 'com.github.kenglxn.QRGen:android:2.5.0' +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 673e2f641730126820e560cf1c8490a37fdf7c86..ce63283de2a6ac293efadf273fa6472019d2bc5c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,7 +22,8 @@ <activity android:name=".SubjectActivity" android:label="@string/title_activity_subject" - android:theme="@style/AppTheme.NoActionBar"></activity> + android:theme="@style/AppTheme.NoActionBar" /> + <activity android:name=".QRActivity"></activity> </application> </manifest> \ No newline at end of file diff --git a/app/src/main/java/com/ireallydontcare/viet/posseidon/QRActivity.java b/app/src/main/java/com/ireallydontcare/viet/posseidon/QRActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..bd4e63d6a21633f0d3eeaa620f52d597f0847239 --- /dev/null +++ b/app/src/main/java/com/ireallydontcare/viet/posseidon/QRActivity.java @@ -0,0 +1,23 @@ +package com.ireallydontcare.viet.posseidon; + + +import android.graphics.Bitmap; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.widget.ImageView; + +import net.glxn.qrgen.android.QRCode; +import net.glxn.qrgen.core.image.ImageType; +public class QRActivity extends AppCompatActivity { + + ImageView imageView; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_qr); + + Bitmap myBitmap = QRCode.from("www.example.org").bitmap(); + imageView = findViewById(R.id.QRimage); + imageView.setImageBitmap(myBitmap); + } +} diff --git a/app/src/main/java/com/ireallydontcare/viet/posseidon/SubjectActivity.java b/app/src/main/java/com/ireallydontcare/viet/posseidon/SubjectActivity.java index 69fb00dd8597f4a7959d57fcfee45a0383903554..3f5b769cbe8f29de9376fc6cbf951d9ae59aadba 100644 --- a/app/src/main/java/com/ireallydontcare/viet/posseidon/SubjectActivity.java +++ b/app/src/main/java/com/ireallydontcare/viet/posseidon/SubjectActivity.java @@ -2,6 +2,8 @@ package com.ireallydontcare.viet.posseidon; import android.app.DatePickerDialog; import android.arch.persistence.room.Room; +import android.content.ClipData; +import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; @@ -10,6 +12,8 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import com.ireallydontcare.viet.posseidon.adapter.EventAdapter; @@ -33,9 +37,7 @@ public class SubjectActivity extends AppCompatActivity private EventAdapter eventAdapter; private RecyclerView.LayoutManager eventLayoutManager; private EventDatabase database; - - - + private MenuItem qrButton; @Override protected void onCreate(Bundle savedInstanceState) { @@ -54,6 +56,8 @@ public class SubjectActivity extends AppCompatActivity } }); + qrButton = (MenuItem) findViewById(R.id.genQR); + eventRecyclerView = (RecyclerView) findViewById(R.id.EventRecyclerView); eventRecyclerView.setHasFixedSize(true); @@ -108,4 +112,24 @@ public class SubjectActivity extends AppCompatActivity } }.execute(); } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.menu_subject, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle item selection + switch (item.getItemId()) { + case R.id.genQR: + Intent showDetailsIntent = new Intent(); + showDetailsIntent.setClass(SubjectActivity.this, QRActivity.class); + startActivity(showDetailsIntent); + return true; + default: + return true; + } + } } diff --git a/app/src/main/java/com/ireallydontcare/viet/posseidon/outsource/QRCodeUtil.java b/app/src/main/java/com/ireallydontcare/viet/posseidon/outsource/QRCodeUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..1b54ef2dd542bee183650aea9fe8924e64570366 --- /dev/null +++ b/app/src/main/java/com/ireallydontcare/viet/posseidon/outsource/QRCodeUtil.java @@ -0,0 +1,42 @@ +package com.ireallydontcare.viet.posseidon.outsource; + +import android.graphics.Bitmap; +import android.graphics.Color; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.MultiFormatWriter; +import com.google.zxing.WriterException; +import com.google.zxing.common.BitMatrix; + +public class QRCodeUtil { + + private QRCodeUtil() {} + + public static Bitmap encodeAsBitmap(String source, int width, int height) { + BitMatrix result; + + try { + result = new MultiFormatWriter().encode(source, BarcodeFormat.QR_CODE, width, height, null); + } catch (IllegalArgumentException | WriterException e) { + // Unsupported format + return null; + } + + final int w = result.getWidth(); + final int h = result.getHeight(); + final int[] pixels = new int[w * h]; + + for (int y = 0; y < h; y++) { + final int offset = y * w; + for (int x = 0; x < w; x++) { + pixels[offset + x] = result.get(x, y) ? Color.BLACK : Color.WHITE; + } + } + + final Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); + bitmap.setPixels(pixels, 0, width, 0, 0, w, h); + + return bitmap; + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_qr.xml b/app/src/main/res/layout/activity_qr.xml new file mode 100644 index 0000000000000000000000000000000000000000..695195b8f5e8ddea70f4dd57949fee46ed142ae8 --- /dev/null +++ b/app/src/main/res/layout/activity_qr.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".QRActivity"> + + <ImageView + android:id="@+id/QRimage" + android:layout_width="match_parent" + android:layout_height="match_parent" /> + +</android.support.constraint.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/content_subject.xml b/app/src/main/res/layout/content_subject.xml index 1672efadc740750fe00ef03d4d56a709468dd28b..7efff0ae8e48a7b535fc36e37b52feb649c8744f 100644 --- a/app/src/main/res/layout/content_subject.xml +++ b/app/src/main/res/layout/content_subject.xml @@ -7,8 +7,30 @@ app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context=".SubjectActivity" tools:showIn="@layout/activity_subject"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="targykod"/> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="leiras"/> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="kredit"/> + + </LinearLayout> - <android.support.v7.widget.RecyclerView + <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/EventRecyclerView" @@ -16,4 +38,5 @@ android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + </LinearLayout> </android.support.constraint.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/menu/menu_subject.xml b/app/src/main/res/menu/menu_subject.xml index a5248eb179252a7daedbefbe514e297fac911a0f..3b3896cf314ee97e242b4d41b42b76946017caec 100644 --- a/app/src/main/res/menu/menu_subject.xml +++ b/app/src/main/res/menu/menu_subject.xml @@ -3,8 +3,13 @@ xmlns:tools="http://schemas.android.com/tools" tools:context="com.ireallydontcare.viet.posseidon.MainActivity"> <item - android:id="@+id/action_settings" + android:id="@+id/deleteSubject" android:orderInCategory="100" - android:title="@string/action_settings" + android:title="Delete" + app:showAsAction="never" /> + <item + android:id="@+id/genQR" + android:orderInCategory="100" + android:title="Generate QR" app:showAsAction="never" /> </menu> diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..7c2a65a478932231d2441580077063c12b826b15 --- /dev/null +++ b/build.gradle @@ -0,0 +1,31 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + + repositories { + google() + jcenter() + + } + dependencies { + classpath 'com.android.tools.build:gradle:3.2.1' + + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + maven { + url "https://jitpack.io" + } + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +}