From 5d618504578ed16091c8c528498b1fb4d0c32e2a Mon Sep 17 00:00:00 2001 From: s439459 Date: Sun, 6 Jan 2019 23:31:35 +0100 Subject: [PATCH] Dodano mozliwosc logowania, zmiana sposobu przechowywania danych, poprawki bledow --- app/.gitignore | 2 +- app/build.gradle | 59 +- app/proguard-rules.pro | 42 +- .../shoplist/ExampleInstrumentedTest.java | 52 +- app/src/main/AndroidManifest.xml | 60 +- .../shoplist/AddProductFragment.java | 17 - .../shoplist/DatabaseHelper.java | 70 -- .../shoplist/EditFragment.java | 76 +- .../shoplist/FloatingAction.java | 148 ++-- .../shoplist/LoginActivity.java | 127 ++++ .../shoplist/MainActivity.java | 660 +++++++++++------- .../shoplist/MenuFragment.java | 111 +-- .../shoplist/RegisterActivity.java | 109 +++ .../shoplist/ReminderFragment.java | 69 ++ .../shoplist/ReminderReciver.java | 31 + .../shoplist/UserAreaActivity.java | 46 ++ .../drawable-v24/ic_launcher_foreground.xml | 68 +- .../ic_baseline_account_circle_24px.xml | 18 +- .../res/drawable/ic_baseline_add_24px.xml | 18 +- .../res/drawable/ic_launcher_background.xml | 340 ++++----- app/src/main/res/layout/account_activity.xml | 42 ++ app/src/main/res/layout/activity_main.xml | 120 ++-- app/src/main/res/layout/edit_popup.xml | 69 +- app/src/main/res/layout/header.xml | 50 +- app/src/main/res/layout/list_view.xml | 21 +- app/src/main/res/layout/login_activity.xml | 87 +++ app/src/main/res/layout/popup_dialog.xml | 57 +- app/src/main/res/layout/product_add.xml | 62 +- app/src/main/res/layout/product_view.xml | 26 +- app/src/main/res/layout/register_activity.xml | 111 +++ app/src/main/res/layout/reminder_fragment.xml | 38 + app/src/main/res/menu/context_menu.xml | 16 +- app/src/main/res/menu/list_menu.xml | 24 +- app/src/main/res/menu/table_menu.xml | 5 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 8 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 8 +- app/src/main/res/values/colors.xml | 16 +- app/src/main/res/values/strings.xml | 47 +- app/src/main/res/values/styles.xml | 22 +- .../shoplist/ExampleUnitTest.java | 32 +- build.gradle | 54 +- gradle.properties | 30 +- gradlew.bat | 168 ++--- settings.gradle | 2 +- 44 files changed, 2032 insertions(+), 1206 deletions(-) delete mode 100644 app/src/main/java/michalpawlaczyk/shoplist/AddProductFragment.java delete mode 100644 app/src/main/java/michalpawlaczyk/shoplist/DatabaseHelper.java create mode 100644 app/src/main/java/michalpawlaczyk/shoplist/LoginActivity.java create mode 100644 app/src/main/java/michalpawlaczyk/shoplist/RegisterActivity.java create mode 100644 app/src/main/java/michalpawlaczyk/shoplist/ReminderFragment.java create mode 100644 app/src/main/java/michalpawlaczyk/shoplist/ReminderReciver.java create mode 100644 app/src/main/java/michalpawlaczyk/shoplist/UserAreaActivity.java create mode 100644 app/src/main/res/layout/account_activity.xml create mode 100644 app/src/main/res/layout/login_activity.xml create mode 100644 app/src/main/res/layout/register_activity.xml create mode 100644 app/src/main/res/layout/reminder_fragment.xml create mode 100644 app/src/main/res/menu/table_menu.xml 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..816fc98 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,27 +1,35 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + \ 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 index c79d943..c75f725 100644 --- a/app/src/main/java/michalpawlaczyk/shoplist/EditFragment.java +++ b/app/src/main/java/michalpawlaczyk/shoplist/EditFragment.java @@ -1,39 +1,39 @@ -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; - } +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..ef9bacb 100644 --- a/app/src/main/java/michalpawlaczyk/shoplist/FloatingAction.java +++ b/app/src/main/java/michalpawlaczyk/shoplist/FloatingAction.java @@ -1,72 +1,76 @@ -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; + + @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<>(); + mainActivity = new MainActivity(); + 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, + "http://192.168.0.115:8080/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..a836e96 --- /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 LOGIN_REQUEST_URL = "http://192.168.0.115: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, + LOGIN_REQUEST_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..8b93100 100644 --- a/app/src/main/java/michalpawlaczyk/shoplist/MainActivity.java +++ b/app/src/main/java/michalpawlaczyk/shoplist/MainActivity.java @@ -1,234 +1,426 @@ -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.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; + + @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",""); + Toast.makeText(getBaseContext(), chosenListID, Toast.LENGTH_LONG).show(); + if(chosenTableID != null) + viewTableData(chosenTableID); + if(settings.getString("username","") != null){ + accountHeader.setText(settings.getString("username","")); + 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) { + final SharedPreferences settings = getApplicationContext().getSharedPreferences("userInfo", MODE_PRIVATE); + if(settings.getString("username","") == null) { + Intent intent = new Intent(getApplicationContext(), LoginActivity.class); + getApplicationContext().startActivity(intent); + } else { + 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, + "http://192.168.0.115:8080/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() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + chosenListID = parent.getItemAtPosition(position).toString(); + //((FrameLayout)findViewById(R.id.content_frame)).removeAllViews(); + 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, + "http://192.168.0.115:8080/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, + "http://192.168.0.115:8080/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, + "http://192.168.0.115:8080/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 + @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; + case R.id.ProductList: + listItem.clear(); + getTableName(); + break; + case R.id.Reminder: + ((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, + "http://192.168.0.115:8080/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); + } + + private void getTableName() { + listItem = new ArrayList<>(); + final SharedPreferences settings = getApplicationContext().getSharedPreferences("userInfo", MODE_PRIVATE); + JsonArrayRequest jsonObjectRequest = new JsonArrayRequest( + Request.Method.POST, + "http://192.168.0.115:8080/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..3aac45d 100644 --- a/app/src/main/java/michalpawlaczyk/shoplist/MenuFragment.java +++ b/app/src/main/java/michalpawlaczyk/shoplist/MenuFragment.java @@ -1,42 +1,69 @@ -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; + + + @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(); + 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, + "http://192.168.0.115:8080/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..719e00c --- /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 REGISTER_REQUEST_URL = "http://192.168.0.115: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, + REGISTER_REQUEST_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 @@ + + + + + + + +