diff --git a/app/.gitignore b/app/.gitignore
index 796b96d..3543521 100644
--- a/app/.gitignore
+++ b/app/.gitignore
@@ -1 +1 @@
-/build
+/build
diff --git a/app/build.gradle b/app/build.gradle
index ee87ab2..e2c47b2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,29 +1,30 @@
-apply plugin: 'com.android.application'
-
-android {
- compileSdkVersion 28
- defaultConfig {
- applicationId "michalpawlaczyk.shoplist"
- minSdkVersion 22
- 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:design:28.0.0'
- implementation 'com.android.support.constraint:constraint-layout:1.1.3'
- 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'
-}
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 28
+ defaultConfig {
+ applicationId "michalpawlaczyk.shoplist"
+ minSdkVersion 22
+ 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:design:28.0.0'
+ implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+ implementation 'com.android.volley:volley:1.1.1'
+ 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'
+}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index f1b4245..6e7ffa9 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -1,21 +1,21 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/app/src/androidTest/java/michalpawlaczyk/shoplist/ExampleInstrumentedTest.java b/app/src/androidTest/java/michalpawlaczyk/shoplist/ExampleInstrumentedTest.java
index d8c7513..7b30a49 100644
--- a/app/src/androidTest/java/michalpawlaczyk/shoplist/ExampleInstrumentedTest.java
+++ b/app/src/androidTest/java/michalpawlaczyk/shoplist/ExampleInstrumentedTest.java
@@ -1,26 +1,26 @@
-package michalpawlaczyk.shoplist;
-
-import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * @see Testing documentation
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
- @Test
- public void useAppContext() {
- // Context of the app under test.
- Context appContext = InstrumentationRegistry.getTargetContext();
-
- assertEquals("michalpawlaczyk.shoplist", appContext.getPackageName());
- }
-}
+package michalpawlaczyk.shoplist;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("michalpawlaczyk.shoplist", appContext.getPackageName());
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 082895c..787289b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,27 +1,38 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/michalpawlaczyk/shoplist/AddProductFragment.java b/app/src/main/java/michalpawlaczyk/shoplist/AddProductFragment.java
deleted file mode 100644
index 877f3be..0000000
--- a/app/src/main/java/michalpawlaczyk/shoplist/AddProductFragment.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package michalpawlaczyk.shoplist;
-
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-public class AddProductFragment extends Fragment {
- @Nullable
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- return inflater.inflate(R.layout.product_add, container, false);
- }
-}
diff --git a/app/src/main/java/michalpawlaczyk/shoplist/DatabaseHelper.java b/app/src/main/java/michalpawlaczyk/shoplist/DatabaseHelper.java
deleted file mode 100644
index b17d38e..0000000
--- a/app/src/main/java/michalpawlaczyk/shoplist/DatabaseHelper.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package michalpawlaczyk.shoplist;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-
-public class DatabaseHelper extends SQLiteOpenHelper {
- private static final String DATABASE_NAME = "Products.db";
- private static final String TABLE_NAME = "products_list";
- private static final String COL_1 = "ID";
- private static final String COL_2 = "NAME";
-
- DatabaseHelper(Context context) {
- super(context, DATABASE_NAME, null, 1);
- }
-
- @Override
- public void onCreate(SQLiteDatabase db) {
- db.execSQL("create table " + TABLE_NAME + "(ID INTEGER, NAME TEXT) ");
- }
-
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
- onCreate(db);
- }
-
- boolean insertData(String tableName, String name){
- SQLiteDatabase db = this.getWritableDatabase();
- ContentValues contentValues = new ContentValues();
- contentValues.put(COL_2, name);
- long result = db.insert(tableName, null, contentValues);
- return result != -1;
-
- }
-
- Cursor getChecekData(String tableName){
- SQLiteDatabase db = this.getWritableDatabase();
- return db.rawQuery("select * from " + tableName, null);
- }
- Cursor getAllTableName(){
- SQLiteDatabase db = this.getWritableDatabase();
- return db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);
- }
- boolean updateData (String name, String newName){
- SQLiteDatabase db = this.getWritableDatabase();
- ContentValues contentValues = new ContentValues();
- contentValues.put(COL_2, newName);
- db.update(TABLE_NAME, contentValues, "NAME = ?", new String[]{ name });
- return true;
- }
-
- Integer deleteData (String tableName, String name) {
- SQLiteDatabase db = this.getWritableDatabase();
- return db.delete(tableName, "NAME = ?", new String[] { name });
- }
- void userCreateTable(String tableName){
- SQLiteDatabase db = this.getWritableDatabase();/*
- db.rawQuery("CREATE TABLE IF NOT EXISTS " + tableName +
- " ( ID INTEGER, " +
- "NAME TEXT )", null);*/
- String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + tableName +
- " ( ID INTEGER, " +
- "NAME TEXT )";
- db.execSQL(CREATE_TABLE);
- db.close();
- }
-}
diff --git a/app/src/main/java/michalpawlaczyk/shoplist/EditFragment.java b/app/src/main/java/michalpawlaczyk/shoplist/EditFragment.java
deleted file mode 100644
index c79d943..0000000
--- a/app/src/main/java/michalpawlaczyk/shoplist/EditFragment.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package michalpawlaczyk.shoplist;
-
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.EditText;
-
-public class EditFragment extends Fragment {
- private Button addListBtn;
- EditText listNameText;
- String text;
-
-
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.popup_dialog, container, false);
- addListBtn = view.findViewById(R.id.addListBtn);
- listNameText = view.findViewById(R.id.listNameText);
- btnClick();
- return view;
-
- }
- public void btnClick(){
- addListBtn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- text = listNameText.getText().toString();
- }
- });
- }
- public String getText(){
- return text;
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/michalpawlaczyk/shoplist/FloatingAction.java b/app/src/main/java/michalpawlaczyk/shoplist/FloatingAction.java
index 92fb51a..edc14db 100644
--- a/app/src/main/java/michalpawlaczyk/shoplist/FloatingAction.java
+++ b/app/src/main/java/michalpawlaczyk/shoplist/FloatingAction.java
@@ -1,72 +1,78 @@
-package michalpawlaczyk.shoplist;
-
-import android.database.Cursor;
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v7.app.AppCompatActivity;
-import android.view.View;
-import android.widget.ArrayAdapter;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.ListView;
-import android.widget.Toast;
-
-import java.util.ArrayList;
-
-public class FloatingAction extends AppCompatActivity {
- private Button addListBtn;
- EditText listNameText;
- DatabaseHelper myDb;
- String chosenListID;
- ArrayList productItem;
- ArrayAdapter adapter2;
- ListView listProductView;
-
-
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.popup_dialog);
- addListBtn = findViewById(R.id.addListBtn);
- listNameText = findViewById(R.id.listNameText);
- myDb = new DatabaseHelper(this);
- listProductView = findViewById(R.id.productsListView);
- productItem = new ArrayList<>();
- AddData();
- }
- public void AddData(){
- addListBtn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Bundle extras = getIntent().getExtras();
- if(extras != null) {
- chosenListID = extras.getString("chosenListID");
- boolean isInserted = myDb.insertData(chosenListID, listNameText.getText().toString());
- if (isInserted) {
- Toast.makeText(FloatingAction.this, "Done", Toast.LENGTH_LONG).show();
-
- } else {
- Toast.makeText(FloatingAction.this, "Something goes wrong!", Toast.LENGTH_LONG).show();
- }
- //reloadData();
-
- }
- }
- });
- }
-
- public void reloadData(){
- Cursor res = myDb.getChecekData(chosenListID);
- if(res.getCount() == 0){
- Toast.makeText(this, "No data to show", Toast.LENGTH_SHORT).show();
- }
- else {
- while (res.moveToNext()) {
- productItem.add(res.getString(1));
-
- }
- adapter2 = new ArrayAdapter<>(this, R.layout.product_view, productItem);
- listProductView.setAdapter(adapter2);
- }
- }
-}
+package michalpawlaczyk.shoplist;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ListView;
+import com.android.volley.Request;
+import com.android.volley.RequestQueue;
+import com.android.volley.Response;
+import com.android.volley.toolbox.JsonObjectRequest;
+import com.android.volley.toolbox.Volley;
+import org.json.JSONObject;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+public class FloatingAction extends AppCompatActivity {
+ private Button addListBtn;
+ EditText listNameText;
+ String chosenListID;
+ ArrayList productItem;
+ ListView listProductView;
+ MainActivity mainActivity;
+ private static final String URL = "http://150.254.129.198:8080";
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.popup_dialog);
+ addListBtn = findViewById(R.id.addListBtn);
+ listNameText = findViewById(R.id.listNameText);
+ listProductView = findViewById(R.id.productsListView);
+ productItem = new ArrayList<>();
+ listNameText.setHint("Podaj nazwę produktu");
+ AddData();
+
+
+ }
+ public void AddData(){
+ addListBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Bundle extras = getIntent().getExtras();
+ if(extras != null) {
+ chosenListID = extras.getString("chosenListID");
+ String text = listNameText.getText().toString();
+ final SharedPreferences settings = Objects.requireNonNull(getApplicationContext()).getSharedPreferences("userInfo", Context.MODE_PRIVATE);
+ Map postParam= new HashMap<>();
+ postParam.put("tableName", chosenListID);
+ postParam.put("rowData", text);
+ JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
+ Request.Method.POST,
+ URL + "/addData?"+settings.getString("token",""),
+ new JSONObject(postParam),
+ new Response.Listener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ }
+ }, null
+
+ );
+
+ RequestQueue queue = Volley.newRequestQueue(Objects.requireNonNull(getApplicationContext()));
+ queue.add(jsonObjectRequest);
+ }
+
+ }
+
+ });
+
+ }
+}
diff --git a/app/src/main/java/michalpawlaczyk/shoplist/LoginActivity.java b/app/src/main/java/michalpawlaczyk/shoplist/LoginActivity.java
new file mode 100644
index 0000000..0586fb6
--- /dev/null
+++ b/app/src/main/java/michalpawlaczyk/shoplist/LoginActivity.java
@@ -0,0 +1,127 @@
+package michalpawlaczyk.shoplist;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.volley.AuthFailureError;
+import com.android.volley.NetworkError;
+import com.android.volley.ParseError;
+import com.android.volley.Request;
+import com.android.volley.RequestQueue;
+import com.android.volley.Response;
+import com.android.volley.ServerError;
+import com.android.volley.VolleyError;
+import com.android.volley.toolbox.JsonObjectRequest;
+import com.android.volley.toolbox.Volley;
+import org.json.JSONObject;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class LoginActivity extends AppCompatActivity {
+ private static final String URL = "http://150.254.129.198:8080/login";
+
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.login_activity);
+ final SharedPreferences settings = getApplicationContext().getSharedPreferences("userInfo", MODE_PRIVATE);
+ if(settings.contains("username")){
+ Intent intent = new Intent(LoginActivity.this,MainActivity.class);
+ startActivity(intent);
+ finish();
+ }
+
+ final EditText usernameET = findViewById(R.id.usernameLogin);
+ final EditText passwordET = findViewById(R.id.passwordLogin);
+ final Button signinBtn = findViewById(R.id.signinBtn);
+ final TextView signupTV = findViewById(R.id.signupText);
+
+
+ signupTV.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class);
+ LoginActivity.this.startActivity(registerIntent);
+
+ }
+ });
+
+ signinBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ final String username = usernameET.getText().toString();
+ final String password = passwordET.getText().toString();
+ Map postParam= new HashMap<>();
+ postParam.put("login", username);
+ postParam.put("password", password);
+ JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
+ Request.Method.POST,
+ URL,
+ new JSONObject(postParam),
+ new Response.Listener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ Intent intent = new Intent(LoginActivity.this, MainActivity.class);
+ LoginActivity.this.startActivity(intent);
+
+ SharedPreferences.Editor editor = settings.edit();
+ String token = username+":"+password;
+ token = android.util.Base64.encodeToString(token.getBytes(),0);
+ editor.putString("username", username);
+ editor.putString("password", password);
+ editor.putString("token", token);
+ editor.apply();
+ }
+ },
+ new Response.ErrorListener(){
+ @Override
+ public void onErrorResponse(VolleyError error) {
+
+ if (error instanceof ServerError) {
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ } else if(error instanceof AuthFailureError){
+ AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
+ builder.setMessage("Login Failed. Username or password incorrect")
+ .setNegativeButton("Retry", null)
+ .create()
+ .show();
+ } else if(error instanceof NetworkError){
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ }else if(error instanceof ParseError){
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ Intent intent = new Intent(LoginActivity.this, MainActivity.class);
+ LoginActivity.this.startActivity(intent);
+
+ SharedPreferences.Editor editor = settings.edit();
+ String token = username+":"+password;
+ token = android.util.Base64.encodeToString(token.getBytes(),0);
+ editor.putString("username", username);
+ editor.putString("password", password);
+ editor.putString("token", token);
+ editor.apply();
+ }
+
+ }
+ }
+
+ );
+
+ RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
+ queue.add(jsonObjectRequest);
+
+ }
+ });
+
+ }
+}
diff --git a/app/src/main/java/michalpawlaczyk/shoplist/MainActivity.java b/app/src/main/java/michalpawlaczyk/shoplist/MainActivity.java
index 91c1b6d..075f195 100644
--- a/app/src/main/java/michalpawlaczyk/shoplist/MainActivity.java
+++ b/app/src/main/java/michalpawlaczyk/shoplist/MainActivity.java
@@ -1,234 +1,428 @@
-package michalpawlaczyk.shoplist;
-
-import android.content.Intent;
-import android.database.Cursor;
-import android.support.annotation.NonNull;
-import android.support.design.widget.FloatingActionButton;
-import android.support.design.widget.NavigationView;
-import android.support.v4.view.GravityCompat;
-import android.support.v4.widget.DrawerLayout;
-import android.support.v7.app.ActionBarDrawerToggle;
-import android.support.v7.app.AppCompatActivity;
-import android.os.Bundle;
-import android.view.*;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
-import android.widget.Button;
-import android.widget.CheckedTextView;
-import android.widget.FrameLayout;
-import android.widget.ListView;
-import android.widget.Toast;
-import java.util.ArrayList;
-import java.util.Objects;
-
-
-public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
- private DrawerLayout mDraverLayout;
- private ActionBarDrawerToggle mToggle;
- DatabaseHelper myDb;
- ArrayList listItem;
- ArrayList productItem;
- ArrayAdapter adapter;
- ArrayAdapter adapter2;
- ListView listNameView;
- ListView listProductView;
- CheckedTextView ctvProduct;
- Button editItem;
- FloatingActionButton fab;
- String listProductID;
- String chosenListID;
-
-
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- mDraverLayout = findViewById(R.id.drawer_layout);
- mToggle = new ActionBarDrawerToggle(this, mDraverLayout, R.string.Open, R.string.Close);
- mDraverLayout.addDrawerListener(mToggle);
- mToggle.syncState();
- Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
- NavigationView mNavigationView = findViewById(R.id.navView);
- mNavigationView.setNavigationItemSelectedListener(this);
- myDb = new DatabaseHelper(this);
- listItem = new ArrayList<>();
- listNameView = findViewById(R.id.listView);
- listProductView = findViewById(R.id.productsListView);
- ctvProduct = findViewById(R.id.productCheck);
- productItem = new ArrayList<>();
- viewTableName();
- fab = findViewById(R.id.fab);
- listProductView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
-
- fab.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(MainActivity.this, FloatingAction.class);
- intent.putExtra("chosenListID", chosenListID);
- startActivity(intent);
- }
- });
-
- listProductView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView> parent, View view, int position, long id) {
- listProductID = parent.getItemAtPosition(position).toString();
-/*
- if(listProductView.isItemChecked(position)) {
- ctvProduct.setPaintFlags(ctvProduct.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
- }
- else {
- ctvProduct.setPaintFlags(ctvProduct.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
- }*/
- }
- });
- listNameView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView> parent, View view, int position, long id) {
- chosenListID = parent.getItemAtPosition(position).toString();
- viewCheckData(chosenListID);
- }
- });
-
- registerForContextMenu(listProductView);
- //registerForContextMenu(listNameView);
-
-/*
- ctvProduct.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if(ctvProduct.isChecked()){
- ctvProduct.setChecked(false);
- }
- else
- ctvProduct.setChecked(true);
- }
- }
- );*/
- }
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
- super.onCreateContextMenu(menu, v, menuInfo);
- getMenuInflater().inflate(R.menu.context_menu, menu);
-
-
- }
-
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- switch(item.getItemId()) {
- case R.id.deleteItem:
- Integer result = myDb.deleteData(chosenListID, listProductID);
- System.out.println(listProductID);
- if(result > 0){
- reloadData();
- }
- else {
- reloadData();
- Toast.makeText(MainActivity.this, "Fail", Toast.LENGTH_SHORT).show();
-
- }
-
- return true;
- case R.id.editItem:
- /*
- getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,
- new EditFragment()).commit();
- EditFragment editFragment = new EditFragment();
- String tmp = editFragment.getText();
- boolean result2 = myDb.updateData(chosenListID, tmp);
- if(result2){
- reloadData();
- }
- else {
- reloadData();
- Toast.makeText(MainActivity.this, "Fail", Toast.LENGTH_SHORT).show();
-
- }*/
- Toast.makeText(MainActivity.this, "Not supported yet", Toast.LENGTH_SHORT).show();
- return true;
-
- default:
- return super.onContextItemSelected(item);
- }
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (mToggle.onOptionsItemSelected(item)) {
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-
- //Navigation items
- @Override
- public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
- switch (menuItem.getItemId()){
- case R.id.AddList:
- ((FrameLayout)findViewById(R.id.content_frame)).removeAllViews();
- getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,
- new MenuFragment()).commit();
- break;
- }
- mDraverLayout.closeDrawer(GravityCompat.START);
- return true;
- }
-
- public void viewCheckData(String tableName){
- Cursor res = myDb.getChecekData(tableName);
- adapter2 = new ArrayAdapter<>(this, R.layout.product_view, productItem);
- listProductView.setAdapter(adapter2);
- if(adapter2.getCount() > 0){
- adapter2.clear();
- }
- while (res.moveToNext()) {
- productItem.add(res.getString(1));
-
- }
- adapter2 = new ArrayAdapter<>(this, R.layout.product_view, productItem);
- listProductView.setAdapter(adapter2);
- }
- public void reloadData(){
- Cursor res = myDb.getChecekData(chosenListID);
- adapter2.clear();
- if(res.getCount() == 0){
- Toast.makeText(this, "No data to show", Toast.LENGTH_SHORT).show();
- }
- else {
- while (res.moveToNext()) {
- productItem.add(res.getString(1));
-
- }
- adapter2 = new ArrayAdapter<>(this, R.layout.product_view, productItem);
- listProductView.setAdapter(adapter2);
- }
- }
-
- public void viewTableName(){
- Cursor res = myDb.getAllTableName();
- if (res.moveToFirst()) {
- while ( !res.isAfterLast() ) {
- listItem.add(res.getString(res.getColumnIndex("name")));
- System.out.println(res.getString( res.getColumnIndex("name")));
- res.moveToNext();
- }
- }
- adapter = new ArrayAdapter<>(this, R.layout.list_view, listItem);
- listNameView.setAdapter(adapter);
- }
- public void reloadTableName(){
- Cursor res = myDb.getAllTableName();
- adapter.clear();
- if (res.moveToFirst()) {
- while ( !res.isAfterLast() ) {
- listItem.add( res.getString( res.getColumnIndex("name")) );
- res.moveToNext();
- }
- }
- adapter = new ArrayAdapter<>(this, R.layout.list_view, listItem);
- listNameView.setAdapter(adapter);
- }
-
-}
+package michalpawlaczyk.shoplist;
+
+import android.annotation.SuppressLint;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.support.annotation.NonNull;
+import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.NavigationView;
+import android.support.v4.app.Fragment;
+import android.support.v4.view.GravityCompat;
+import android.support.v4.widget.DrawerLayout;
+import android.support.v7.app.ActionBarDrawerToggle;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.*;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.CheckedTextView;
+import android.widget.EditText;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.Toast;
+import com.android.volley.AuthFailureError;
+import com.android.volley.NetworkError;
+import com.android.volley.ParseError;
+import com.android.volley.Request;
+import com.android.volley.RequestQueue;
+import com.android.volley.Response;
+import com.android.volley.ServerError;
+import com.android.volley.VolleyError;
+import com.android.volley.toolbox.JsonArrayRequest;
+import com.android.volley.toolbox.JsonObjectRequest;
+import com.android.volley.toolbox.Volley;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+
+
+public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
+ private DrawerLayout mDraverLayout;
+ private ActionBarDrawerToggle mToggle;
+ ArrayList listItem;
+ ArrayList productItem;
+ ArrayAdapter adapter;
+ ArrayAdapter adapter2;
+ ListView listNameView;
+ ListView listProductView;
+ CheckedTextView ctvProduct;
+ Button editItem;
+ FloatingActionButton fab;
+ String listProductID;
+ String chosenListID;
+ String chosenTableID;
+ ImageView accountImage;
+ TextView accountHeader;
+ private static final String URL = "http://150.254.129.198:8080";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ mDraverLayout = findViewById(R.id.drawer_layout);
+ mToggle = new ActionBarDrawerToggle(this, mDraverLayout, R.string.Open, R.string.Close);
+ mDraverLayout.addDrawerListener(mToggle);
+ mToggle.syncState();
+ Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
+ NavigationView mNavigationView = findViewById(R.id.navView);
+ mNavigationView.setNavigationItemSelectedListener(this);
+ listNameView = findViewById(R.id.listView);
+ listProductView = findViewById(R.id.productsListView);
+ ctvProduct = findViewById(R.id.productCheck);
+ accountImage = findViewById(R.id.accountImage);
+ productItem = new ArrayList<>();
+ fab = findViewById(R.id.fab);
+ listProductView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+ getTableName();
+
+ accountHeader = findViewById(R.id.accountHeader);
+
+ final SharedPreferences settings = getApplicationContext().getSharedPreferences("userInfo", MODE_PRIVATE);
+ final SharedPreferences lastTable = getApplicationContext().getSharedPreferences("userData", MODE_PRIVATE);
+ chosenTableID = lastTable.getString("lastTable","");
+ if(chosenTableID != null)
+ viewTableData(chosenTableID);
+ if(settings.getString("username","") != null){
+ accountHeader.setText(settings.getString("username",""));
+ }
+
+ fab.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(MainActivity.this, FloatingAction.class);
+ intent.putExtra("chosenListID", chosenListID);
+ startActivity(intent);
+ }
+ });
+
+ accountImage.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(getApplicationContext(), UserAreaActivity.class);
+ getApplicationContext().startActivity(intent);
+
+ }
+ });
+
+ listProductView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ listProductID = parent.getItemAtPosition(position).toString();
+ Boolean isCheck = listProductView.isItemChecked(position);
+ Map postParam= new HashMap<>();
+ postParam.put("tableName", chosenListID);
+ postParam.put("productName", listProductID);
+ postParam.put("isCheck", isCheck.toString());
+ JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
+ Request.Method.POST,
+ URL + "/setItemCheck?" + settings.getString("token", ""),
+ new JSONObject(postParam),
+ new Response.Listener() {
+ @Override
+ public void onResponse(JSONObject response) {
+
+ }
+ },null
+ );
+
+ RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
+ queue.add(jsonObjectRequest);
+ }
+ });
+
+ listProductView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
+ @Override
+ public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
+ listProductID = parent.getItemAtPosition(position).toString();
+ registerForContextMenu(listProductView);
+ openContextMenu(listProductView);
+ return true;
+ }
+ });
+
+
+
+ listNameView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @SuppressLint("RestrictedApi")
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ listProductView.setVisibility(View.VISIBLE);
+ fab.setVisibility(View.VISIBLE);
+ chosenListID = parent.getItemAtPosition(position).toString();
+ for (Fragment fragment:getSupportFragmentManager().getFragments()) {
+
+ getSupportFragmentManager().beginTransaction().remove(fragment).commit();
+ }
+ final SharedPreferences settings = getApplicationContext().getSharedPreferences("userData", MODE_PRIVATE);
+ @SuppressLint("CommitPrefEdits") SharedPreferences.Editor editor = settings.edit();
+ editor.putString("lastTable", chosenListID);
+ viewTableData(chosenListID);
+ }
+ });
+ listNameView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
+ @Override
+ public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
+ final String deleteTableID = parent.getItemAtPosition(position).toString();
+ AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
+ builder.setMessage("Czy na pewno chcesz usunać listę "+deleteTableID+" ?")
+ .setPositiveButton("Tak", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ Map postParam= new HashMap<>();
+ postParam.put("tableName", deleteTableID);
+ JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
+ URL + "/deleteTable?" + settings.getString("token", ""),
+ new JSONObject(postParam),
+ new Response.Listener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ }
+ }, null);
+
+ RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
+ queue.add(jsonObjectRequest);
+ listItem.clear();
+ getTableName();
+ }
+ })
+ .setNegativeButton("Nie", null)
+ .create()
+ .show();
+
+ return true;
+ }
+ });
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
+ super.onCreateContextMenu(menu, v, menuInfo);
+ //getMenuInflater().inflate(R.menu.context_menu, menu);
+ final SharedPreferences settings = getApplicationContext().getSharedPreferences("userInfo", MODE_PRIVATE);
+
+ MenuItem delete = menu.add("Usuń");
+ MenuItem edit = menu.add("Edytuj");
+
+ delete.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ Map postParam= new HashMap<>();
+ postParam.put("tableName", chosenListID);
+ postParam.put("rowData", listProductID);
+ JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
+ Request.Method.POST,
+ URL + "/deleteData?" + settings.getString("token", ""),
+ new JSONObject(postParam),
+ new Response.Listener() {
+ @Override
+ public void onResponse(JSONObject response) {
+
+ }
+ },null
+ );
+
+ RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
+ queue.add(jsonObjectRequest);
+ productItem.clear();
+ viewTableData(chosenListID);
+ return false;
+ }
+ });
+
+ edit.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ final EditText editText = new EditText(MainActivity.this);
+ AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
+ builder.setMessage("Podaj nową nazwę produktu")
+ .setView(editText)
+ .setPositiveButton("Zmień", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ Map postParam= new HashMap<>();
+ postParam.put("tableName", chosenListID);
+ postParam.put("rowData", listProductID);
+ postParam.put("newRow", editText.getText().toString());
+ JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
+ URL + "/editData?" + settings.getString("token", ""),
+ new JSONObject(postParam),
+ new Response.Listener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ }
+ }, null);
+
+ RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
+ queue.add(jsonObjectRequest);
+ productItem.clear();
+ viewTableData(chosenListID);
+ }
+ })
+ .create()
+ .show();
+ return false;
+ }
+ });
+
+
+
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (mToggle.onOptionsItemSelected(item)) {
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ //Navigation items
+ @SuppressLint("RestrictedApi")
+ @Override
+ public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
+ switch (menuItem.getItemId()){
+ case R.id.AddList:
+ listProductView.setVisibility(View.GONE);
+ fab.setVisibility(View.GONE);
+ ((FrameLayout)findViewById(R.id.content_frame)).removeAllViews();
+ getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,
+ new MenuFragment()).commit();
+ break;
+ case R.id.ProductList:
+ listItem.clear();
+ getTableName();
+ break;
+ case R.id.Reminder:
+ listProductView.setVisibility(View.GONE);
+ fab.setVisibility(View.GONE);
+ ((FrameLayout)findViewById(R.id.content_frame)).removeAllViews();
+ getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,
+ new ReminderFragment()).commit();
+ break;
+ }
+ mDraverLayout.closeDrawer(GravityCompat.START);
+ return true;
+ }
+
+ public void viewTableData(String tableName) {
+ productItem = new ArrayList<>();
+ final SharedPreferences settings = getApplicationContext().getSharedPreferences("userInfo", MODE_PRIVATE);
+
+ JsonArrayRequest jsonObjectRequest = new JsonArrayRequest(
+ Request.Method.POST,
+ URL + "/getTableRows?" + settings.getString("token", "")+":"+tableName, null,
+ new Response.Listener() {
+ @Override
+ public void onResponse(JSONArray response) {
+ try {
+
+ for (int i = 0; i < response.length(); i++) {
+ JSONObject object = response.getJSONObject(i);
+ productItem.add(object.getString("product"));
+ String isCheck = object.getString("ischeck");
+ if(isCheck.equals("true")){
+ listProductView.setItemChecked(i, true);
+ } else if(isCheck.equals("false")){
+ listProductView.setItemChecked(i, false);
+ }
+
+ }
+ adapter2 = new ArrayAdapter<>(MainActivity.this, R.layout.product_view, productItem);
+ listProductView.setAdapter(adapter2);
+ for(int i = 0; i < response.length(); i++){
+ JSONObject object = response.getJSONObject(i);
+ String isCheck = object.getString("ischeck");
+ if(isCheck.equals("true")){
+ listProductView.setItemChecked(i, true);
+ } else if(isCheck.equals("false")){
+ listProductView.setItemChecked(i, false);
+ }
+ }
+
+ } catch (JSONException e) {
+ e.printStackTrace();
+ Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
+ }
+
+ }
+ },
+ new Response.ErrorListener() {
+ @Override
+ public void onErrorResponse(VolleyError error) {
+
+ if (error instanceof ServerError) {
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ } else if (error instanceof AuthFailureError) {
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ } else if (error instanceof NetworkError) {
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ } else if (error instanceof ParseError) {
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ }
+
+ }
+ }
+
+ );
+
+ RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
+ queue.add(jsonObjectRequest);
+ }
+
+ public void getTableName() {
+ listItem = new ArrayList<>();
+ final SharedPreferences settings = getApplicationContext().getSharedPreferences("userInfo", MODE_PRIVATE);
+ JsonArrayRequest jsonObjectRequest = new JsonArrayRequest(
+ Request.Method.POST,
+ URL + "/getTableName?"+settings.getString("token",""), null,
+ new Response.Listener() {
+ @Override
+ public void onResponse(JSONArray response) {
+ try {
+
+ for (int i = 0; i < response.length(); i++) {
+ JSONObject object = response.getJSONObject(i);
+ listItem.add(object.getString("name"));
+ }
+ adapter = new ArrayAdapter<>(MainActivity.this, R.layout.list_view, listItem);
+ listNameView.setAdapter(adapter);
+
+ } catch (JSONException e) {
+ e.printStackTrace();
+ Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
+ }
+
+ }
+ },
+ new Response.ErrorListener(){
+ @Override
+ public void onErrorResponse(VolleyError error) {
+
+ if (error instanceof ServerError) {
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ } else if(error instanceof AuthFailureError){
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ } else if(error instanceof NetworkError){
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ }else if(error instanceof ParseError){
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ }
+
+ }
+ }
+
+ );
+
+ RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
+ queue.add(jsonObjectRequest);
+ }
+
+}
diff --git a/app/src/main/java/michalpawlaczyk/shoplist/MenuFragment.java b/app/src/main/java/michalpawlaczyk/shoplist/MenuFragment.java
index 9d0fc9e..083e63d 100644
--- a/app/src/main/java/michalpawlaczyk/shoplist/MenuFragment.java
+++ b/app/src/main/java/michalpawlaczyk/shoplist/MenuFragment.java
@@ -1,42 +1,71 @@
-package michalpawlaczyk.shoplist;
-
-//import android.content.Context;
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.EditText;
-
-import java.util.Objects;
-
-public class MenuFragment extends Fragment{
-
- private Button addListBtn;
- EditText listNameText;
- DatabaseHelper myDb;
-
-
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.popup_dialog, container, false);
- addListBtn = view.findViewById(R.id.addListBtn);
- listNameText = view.findViewById(R.id.listNameText);
- myDb = new DatabaseHelper(getActivity());
- AddTable();
- return view;
-
- }
- public void AddTable(){
- addListBtn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- myDb.userCreateTable(listNameText.getText().toString());
- ((MainActivity)Objects.requireNonNull(getActivity())).reloadTableName();
- }
- });
- }
-}
+package michalpawlaczyk.shoplist;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import com.android.volley.Request;
+import com.android.volley.RequestQueue;
+import com.android.volley.Response;
+import com.android.volley.toolbox.JsonObjectRequest;
+import com.android.volley.toolbox.Volley;
+
+import org.json.JSONObject;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+
+public class MenuFragment extends Fragment{
+
+ private Button addListBtn;
+ EditText listNameText;
+ private static final String URL = "http://150.254.129.198:8080";
+
+
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.popup_dialog, container, false);
+ addListBtn = view.findViewById(R.id.addListBtn);
+ listNameText = view.findViewById(R.id.listNameText);
+ listNameText.setHint("Podaj nazwę listy");
+ AddTable();
+ ((MainActivity) Objects.requireNonNull(getActivity())).getTableName();
+ return view;
+
+ }
+ public void AddTable(){
+ addListBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ final SharedPreferences settings = Objects.requireNonNull(getContext()).getSharedPreferences("userInfo", Context.MODE_PRIVATE);
+ Map postParam= new HashMap<>();
+ String tableName = listNameText.getText().toString();
+ postParam.put("tableName", tableName);
+ JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
+ Request.Method.POST,
+ URL + "/addTable?"+settings.getString("token",""),
+ new JSONObject(postParam),
+ new Response.Listener() {
+ @Override
+ public void onResponse(JSONObject response) {
+
+ }
+ }, null
+
+ );
+
+ RequestQueue queue = Volley.newRequestQueue(Objects.requireNonNull(getContext()));
+ queue.add(jsonObjectRequest);
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/michalpawlaczyk/shoplist/RegisterActivity.java b/app/src/main/java/michalpawlaczyk/shoplist/RegisterActivity.java
new file mode 100644
index 0000000..fe3186d
--- /dev/null
+++ b/app/src/main/java/michalpawlaczyk/shoplist/RegisterActivity.java
@@ -0,0 +1,109 @@
+package michalpawlaczyk.shoplist;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.volley.AuthFailureError;
+import com.android.volley.NetworkError;
+import com.android.volley.ParseError;
+import com.android.volley.Request;
+import com.android.volley.RequestQueue;
+import com.android.volley.Response;
+import com.android.volley.ServerError;
+import com.android.volley.VolleyError;
+import com.android.volley.toolbox.JsonObjectRequest;
+import com.android.volley.toolbox.Volley;
+
+
+import org.json.JSONObject;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class RegisterActivity extends AppCompatActivity {
+
+ private static final String URL = "http://150.254.129.198:8080/register";
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.register_activity);
+
+ final EditText usernameET = findViewById(R.id.usernameRegister);
+ final EditText emailET = findViewById(R.id.emailRegister);
+ final EditText passwordET = findViewById(R.id.passwordRegister);
+ final Button signupBtn = findViewById(R.id.registerBtn);
+ final TextView signinTV = findViewById(R.id.signinText);
+
+ signinTV.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent loginIntent = new Intent(RegisterActivity.this, LoginActivity.class);
+ RegisterActivity.this.startActivity(loginIntent);
+ }
+ });
+
+ signupBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ final String username = usernameET.getText().toString();
+ final String email = emailET.getText().toString();
+ final String password = passwordET.getText().toString();
+
+ Map postParam= new HashMap<>();
+ postParam.put("login", username);
+ postParam.put("email", email);
+ postParam.put("password", password);
+ JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
+ Request.Method.POST,
+ URL,
+ new JSONObject(postParam),
+ new Response.Listener() {
+ @Override
+ public void onResponse(JSONObject response) {
+ Intent loginIntent = new Intent(RegisterActivity.this, LoginActivity.class);
+ RegisterActivity.this.startActivity(loginIntent);
+ }
+ },
+ new Response.ErrorListener(){
+ @Override
+ public void onErrorResponse(VolleyError error) {
+ if (error instanceof ServerError) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
+ builder.setMessage("Enter other username")
+ .setNegativeButton("Retry", null)
+ .create()
+ .show();
+ } else if(error instanceof AuthFailureError){
+ AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
+ builder.setMessage("Enter other username")
+ .setNegativeButton("Retry", null)
+ .create()
+ .show();
+ } else if(error instanceof NetworkError){
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ } else if(error instanceof ParseError){
+ Toast.makeText(getBaseContext(), error.toString(), Toast.LENGTH_LONG).show();
+ Intent loginIntent = new Intent(RegisterActivity.this, LoginActivity.class);
+ RegisterActivity.this.startActivity(loginIntent);
+ }
+ }
+ }
+
+ );
+
+ RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
+ queue.add(jsonObjectRequest);
+ }
+ });
+
+ }
+}
diff --git a/app/src/main/java/michalpawlaczyk/shoplist/ReminderFragment.java b/app/src/main/java/michalpawlaczyk/shoplist/ReminderFragment.java
new file mode 100644
index 0000000..feab7dc
--- /dev/null
+++ b/app/src/main/java/michalpawlaczyk/shoplist/ReminderFragment.java
@@ -0,0 +1,69 @@
+package michalpawlaczyk.shoplist;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.TimePicker;
+import android.widget.Toast;
+
+import java.util.Calendar;
+import java.util.Objects;
+
+public class ReminderFragment extends Fragment implements View.OnClickListener{
+
+ Button setBtn;
+ Button cancelBtn;
+ TimePicker timePicker;
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.reminder_fragment, container, false);
+ view.findViewById(R.id.setBtnReminder).setOnClickListener(this);
+ view.findViewById(R.id.cancelBtnReminder).setOnClickListener(this);
+ timePicker = view.findViewById(R.id.timeReminder);
+
+ return view;
+
+ }
+
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(getContext(), ReminderReciver.class);
+ intent.putExtra("notificationText", "Nie zapomnij o zakupach!");
+
+ PendingIntent alarmIntent = PendingIntent.getBroadcast(getContext(),0,
+ intent,PendingIntent.FLAG_CANCEL_CURRENT);
+ AlarmManager alarmManager = (AlarmManager) Objects.requireNonNull(getActivity()).getSystemService(Context.ALARM_SERVICE);
+
+ switch (Objects.requireNonNull(getView()).getId()){
+ case R.id.setBtnReminder:
+ int hour = timePicker.getCurrentHour();
+ int minute = timePicker.getCurrentMinute();
+
+ Calendar time = Calendar.getInstance();
+ time.set(Calendar.HOUR_OF_DAY, hour);
+ time.set(Calendar.MINUTE,minute);
+ time.set(Calendar.SECOND, 0);
+ long alarmStartTime = time.getTimeInMillis();
+
+ alarmManager.set(AlarmManager.RTC_WAKEUP,alarmStartTime,alarmIntent);
+ Toast.makeText(getContext(),"Done", Toast.LENGTH_SHORT).show();
+ break;
+ case R.id.cancelBtnReminder:
+ alarmManager.cancel(alarmIntent);
+ break;
+ }
+
+
+ }
+}
diff --git a/app/src/main/java/michalpawlaczyk/shoplist/ReminderReciver.java b/app/src/main/java/michalpawlaczyk/shoplist/ReminderReciver.java
new file mode 100644
index 0000000..e85a853
--- /dev/null
+++ b/app/src/main/java/michalpawlaczyk/shoplist/ReminderReciver.java
@@ -0,0 +1,31 @@
+package michalpawlaczyk.shoplist;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+public class ReminderReciver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String notificationText = intent.getStringExtra("notificationText");
+
+ Intent mainIntent = new Intent(context, MainActivity.class);
+ PendingIntent contentIntent = PendingIntent.getActivity(context, 0, mainIntent,0);
+
+ NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+
+ Notification.Builder builder = new Notification.Builder(context);
+ builder.setSmallIcon(android.R.drawable.stat_notify_sync)
+ .setContentTitle(notificationText)
+ .setWhen(System.currentTimeMillis())
+ .setAutoCancel(true)
+ .setContentIntent(contentIntent);
+
+ notificationManager.notify(1,builder.build());
+
+
+ }
+}
diff --git a/app/src/main/java/michalpawlaczyk/shoplist/UserAreaActivity.java b/app/src/main/java/michalpawlaczyk/shoplist/UserAreaActivity.java
new file mode 100644
index 0000000..c232b9b
--- /dev/null
+++ b/app/src/main/java/michalpawlaczyk/shoplist/UserAreaActivity.java
@@ -0,0 +1,46 @@
+package michalpawlaczyk.shoplist;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+public class UserAreaActivity extends AppCompatActivity {
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.account_activity);
+
+ final Button logoutBtn = findViewById(R.id.logoutBtn);
+ final TextView userTV = findViewById(R.id.usernameAccount);
+
+ SharedPreferences settings = getApplicationContext().getSharedPreferences("userInfo", MODE_PRIVATE);
+ userTV.setText(settings.getString("username", ""));
+
+ logoutBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ SharedPreferences settings = getApplicationContext().getSharedPreferences("userInfo", MODE_PRIVATE);
+ SharedPreferences.Editor editor = settings.edit();
+ editor.remove("username");
+ editor.remove("password");
+ editor.remove("token");
+ editor.apply();
+ AlertDialog.Builder builder = new AlertDialog.Builder(UserAreaActivity.this);
+ builder.setMessage("Aby korzystać z aplikacji należy należy być zalogowanym")
+ .setNegativeButton("Ok", null)
+ .create()
+ .show();
+ Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
+ getApplicationContext().startActivity(intent);
+ }
+ });
+
+
+ }
+}
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
index 1f6bb29..971add5 100644
--- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -1,34 +1,34 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_account_circle_24px.xml b/app/src/main/res/drawable/ic_baseline_account_circle_24px.xml
index b845dc3..fcf7a01 100644
--- a/app/src/main/res/drawable/ic_baseline_account_circle_24px.xml
+++ b/app/src/main/res/drawable/ic_baseline_account_circle_24px.xml
@@ -1,9 +1,9 @@
-
-
-
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_add_24px.xml b/app/src/main/res/drawable/ic_baseline_add_24px.xml
index 757f450..e7493e7 100644
--- a/app/src/main/res/drawable/ic_baseline_add_24px.xml
+++ b/app/src/main/res/drawable/ic_baseline_add_24px.xml
@@ -1,9 +1,9 @@
-
-
-
+
+
+
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
index 0d025f9..eed7a42 100644
--- a/app/src/main/res/drawable/ic_launcher_background.xml
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -1,170 +1,170 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/account_activity.xml b/app/src/main/res/layout/account_activity.xml
new file mode 100644
index 0000000..c88c442
--- /dev/null
+++ b/app/src/main/res/layout/account_activity.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index a37b4da..21844da 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,61 +1,66 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/edit_popup.xml b/app/src/main/res/layout/edit_popup.xml
index fbbd3d9..a60c357 100644
--- a/app/src/main/res/layout/edit_popup.xml
+++ b/app/src/main/res/layout/edit_popup.xml
@@ -1,36 +1,35 @@
-
-
-
-
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/header.xml b/app/src/main/res/layout/header.xml
index 98511d5..66b5207 100644
--- a/app/src/main/res/layout/header.xml
+++ b/app/src/main/res/layout/header.xml
@@ -1,26 +1,26 @@
-
-
-
-
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_view.xml b/app/src/main/res/layout/list_view.xml
index baf782d..af64559 100644
--- a/app/src/main/res/layout/list_view.xml
+++ b/app/src/main/res/layout/list_view.xml
@@ -1,10 +1,13 @@
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/login_activity.xml b/app/src/main/res/layout/login_activity.xml
new file mode 100644
index 0000000..1692b3a
--- /dev/null
+++ b/app/src/main/res/layout/login_activity.xml
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/popup_dialog.xml b/app/src/main/res/layout/popup_dialog.xml
index 544fa33..bc7f2ed 100644
--- a/app/src/main/res/layout/popup_dialog.xml
+++ b/app/src/main/res/layout/popup_dialog.xml
@@ -1,28 +1,31 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/product_add.xml b/app/src/main/res/layout/product_add.xml
index 12e405a..0090baf 100644
--- a/app/src/main/res/layout/product_add.xml
+++ b/app/src/main/res/layout/product_add.xml
@@ -1,32 +1,32 @@
-
-
-
-
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/product_listview.xml b/app/src/main/res/layout/product_listview.xml
new file mode 100644
index 0000000..18ec2de
--- /dev/null
+++ b/app/src/main/res/layout/product_listview.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/product_view.xml b/app/src/main/res/layout/product_view.xml
index 8655dfc..98a45f8 100644
--- a/app/src/main/res/layout/product_view.xml
+++ b/app/src/main/res/layout/product_view.xml
@@ -1,13 +1,13 @@
-
-
+
+
diff --git a/app/src/main/res/layout/register_activity.xml b/app/src/main/res/layout/register_activity.xml
new file mode 100644
index 0000000..2a07a0e
--- /dev/null
+++ b/app/src/main/res/layout/register_activity.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/reminder_fragment.xml b/app/src/main/res/layout/reminder_fragment.xml
new file mode 100644
index 0000000..2203f2c
--- /dev/null
+++ b/app/src/main/res/layout/reminder_fragment.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/context_menu.xml b/app/src/main/res/menu/context_menu.xml
index b675cca..b41e96d 100644
--- a/app/src/main/res/menu/context_menu.xml
+++ b/app/src/main/res/menu/context_menu.xml
@@ -1,9 +1,9 @@
-
-