diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml new file mode 100644 index 0000000..2d46eba --- /dev/null +++ b/.idea/assetWizardSettings.xml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="WizardSettings"> + <option name="children"> + <map> + <entry key="imageWizard"> + <value> + <PersistentState> + <option name="children"> + <map> + <entry key="imageAssetPanel"> + <value> + <PersistentState> + <option name="children"> + <map> + <entry key="actionbar"> + <value> + <PersistentState> + <option name="values"> + <map> + <entry key="assetType" value="IMAGE" /> + <entry key="imageAsset" value="C:\Users\georg\Downloads\2x\baseline_add_circle_outline_black_18dp.png" /> + <entry key="outputName" value="logo" /> + <entry key="theme" value="CUSTOM" /> + <entry key="themeColor" value="000000" /> + </map> + </option> + </PersistentState> + </value> + </entry> + <entry key="launcher"> + <value> + <PersistentState> + <option name="children"> + <map> + <entry key="foregroundImage"> + <value> + <PersistentState> + <option name="values"> + <map> + <entry key="scalingPercent" value="66" /> + </map> + </option> + </PersistentState> + </value> + </entry> + </map> + </option> + <option name="values"> + <map> + <entry key="backgroundAssetType" value="COLOR" /> + <entry key="backgroundColor" value="353535" /> + <entry key="foregroundImage" value="G:\Teamablagen\SmartShopper\Design\Logo\logo.png" /> + </map> + </option> + </PersistentState> + </value> + </entry> + </map> + </option> + </PersistentState> + </value> + </entry> + </map> + </option> + </PersistentState> + </value> + </entry> + <entry key="vectorWizard"> + <value> + <PersistentState /> + </value> + </entry> + </map> + </option> + </component> +</project> \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d22dc95..7a7adac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,6 +28,8 @@ dependencies { androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation 'com.google.firebase:firebase-auth:16.1.0' + implementation 'com.google.firebase:firebase-messaging:17.3.4' + implementation 'com.firebase:firebase-jobdispatcher:0.8.5' implementation 'com.google.android.gms:play-services-auth:16.0.1' implementation 'com.firebaseui:firebase-ui-auth:4.1.0' // http://mvnrepository.com/artifact/postgresql/postgresql diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2961219..235453a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="at.smartshopper.smartshopper"> + <uses-permission android:name="android.permission.INTERNET" /> + <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" @@ -10,7 +12,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true"> - <activity android:name=".LoginActivity"> + <activity android:name=".activitys.LoginActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -18,9 +20,33 @@ </intent-filter> </activity> <activity - android:name=".Dash" + android:name=".activitys.Dash" android:label="SmartShopper" - android:theme="@style/AppTheme"></activity> + android:theme="@style/AppTheme" /> + <!-- + Set custom default icon. This is used when no icon is set for incoming notification messages. + See README(https://goo.gl/l4GJaQ) for more. + --> + <meta-data + android:name="com.google.firebase.messaging.default_notification_icon" + android:resource="@drawable/ic_launcher_foreground" /> + <!-- + Set color used with incoming notification messages. This is used when no color is set for the incoming + notification message. See README(https://goo.gl/6BKBk7) for more. + --> + <meta-data + android:name="com.google.firebase.messaging.default_notification_color" + android:resource="@color/colorAccent" /> + <!-- [START firebase_service] --> + <service android:name=".messaging.MyFirebaseMessagingService"> + <intent-filter> + <action android:name="com.google.firebase.MESSAGING_EVENT" /> + </intent-filter> + </service> + <!-- [END firebase_service] --> + <activity + android:name=".activitys.ShoppinglistDetails" + android:label="@string/title_activity_shoppinglist_details"></activity> </application> </manifest> \ No newline at end of file diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png new file mode 100644 index 0000000..4037ea3 Binary files /dev/null and b/app/src/main/ic_launcher-web.png differ diff --git a/app/src/main/java/at/smartshopper/smartshopper/Database.java b/app/src/main/java/at/smartshopper/smartshopper/Database.java deleted file mode 100644 index fda8775..0000000 --- a/app/src/main/java/at/smartshopper/smartshopper/Database.java +++ /dev/null @@ -1,67 +0,0 @@ -package at.smartshopper.smartshopper; - -import android.os.StrictMode; -import android.util.Log; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.List; - -public class Database { - - private Connection conect; - final String HOST = "188.166.124.80"; - final String DB_NAME = "smartshopperdb"; - final String USERNAME = "smartshopper-user"; - final String PASSWORD = "jW^v#&LjNY_b3-k*jYj!U4Xz?T??m_D6249XAeWZ#7C^FRbKm!c_Dt+qj@4&a-Hs"; - final int PORT = 5432; - - - public Database(){}; - public void connectDatabase() throws SQLException { - StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); - StrictMode.setThreadPolicy(policy); - DriverManager.registerDriver(new org.postgresql.Driver()); - conect = DriverManager.getConnection("jdbc:postgresql://" + HOST + ":" + PORT + "/" + DB_NAME, USERNAME, PASSWORD); - - System.out.println("Database connected!"); - } - - public List<Shoppinglist> getMyShoppinglists(String uid) throws JSONException { - try { - connectDatabase(); - } catch (SQLException e) { - e.printStackTrace(); - } - String SQL = "SELECT row_to_json(\"Shoppinglist\") AS obj FROM \"Shoppinglist\" JOIN \"Shoppinglist_admin\" USING (sl_id) WHERE username = ?"; - ArrayList<Shoppinglist> shoppinglistsList = null; - try ( - Statement stmt = conect.createStatement(); - PreparedStatement pstmt = conect.prepareStatement(SQL)) { - pstmt.setString(1, uid); - ResultSet rs = pstmt.executeQuery(); - System.out.println(uid); - shoppinglistsList = new ArrayList<Shoppinglist>(); - while (rs.next()) { - String shoppinglist = rs.getString(1); - JSONObject jsonObject = new JSONObject(shoppinglist); - - shoppinglistsList.add(new Shoppinglist(jsonObject.getString("sl_id"), jsonObject.getString("name"), jsonObject.getString("description"), jsonObject.getString("invitelink"), jsonObject.getString("color"))); - } - Log.d("DATABASE SHOPPINGLISTS", shoppinglistsList.toString()); - - } catch (SQLException ex) { - System.out.println(ex.getMessage()); - } - return (List<Shoppinglist>) shoppinglistsList; - - } -} diff --git a/app/src/main/java/at/smartshopper/smartshopper/Shoppinglists.java b/app/src/main/java/at/smartshopper/smartshopper/Shoppinglists.java deleted file mode 100644 index 842f78f..0000000 --- a/app/src/main/java/at/smartshopper/smartshopper/Shoppinglists.java +++ /dev/null @@ -1,13 +0,0 @@ -package at.smartshopper.smartshopper; - -import at.smartshopper.smartshopper.Shoppinglist; - -public class Shoppinglists { - - - - - public Shoppinglists(){ - - } -} diff --git a/app/src/main/java/at/smartshopper/smartshopper/Dash.java b/app/src/main/java/at/smartshopper/smartshopper/activitys/Dash.java similarity index 71% rename from app/src/main/java/at/smartshopper/smartshopper/Dash.java rename to app/src/main/java/at/smartshopper/smartshopper/activitys/Dash.java index 02a5354..b3ddaff 100644 --- a/app/src/main/java/at/smartshopper/smartshopper/Dash.java +++ b/app/src/main/java/at/smartshopper/smartshopper/activitys/Dash.java @@ -1,34 +1,30 @@ -package at.smartshopper.smartshopper; +package at.smartshopper.smartshopper.activitys; -import android.app.ActionBar; import android.content.Intent; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; +import android.os.Handler; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; -import android.view.View; -import android.widget.Button; import android.widget.TabHost; +import android.widget.Toast; -import com.google.android.gms.tasks.OnCompleteListener; -import com.google.android.gms.tasks.Task; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; -import com.google.firebase.auth.GetTokenResult; import org.json.JSONException; +import java.sql.SQLException; import java.util.List; -import java.util.jar.JarInputStream; + +import at.smartshopper.smartshopper.R; +import at.smartshopper.smartshopper.db.Database; +import at.smartshopper.smartshopper.shoppinglist.Shoppinglist; +import at.smartshopper.smartshopper.shoppinglist.ShoppinglistAdapter; public class Dash extends AppCompatActivity { @@ -70,7 +66,11 @@ public class Dash extends AppCompatActivity { try { - showOwnShoppingList(uid); + try { + showOwnShoppingList(uid); + } catch (SQLException e) { + e.printStackTrace(); + } } catch (JSONException e) { e.printStackTrace(); } @@ -79,7 +79,11 @@ public class Dash extends AppCompatActivity { ownswiperefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { - refreshOwnShoppinglist(uid); + try { + refreshOwnShoppinglist(uid); + } catch (SQLException e) { + e.printStackTrace(); + } } }); @@ -92,6 +96,7 @@ public class Dash extends AppCompatActivity { * Logt den User aus und geht zur Login Activity */ private void logout(){ + finish(); FirebaseAuth.getInstance().signOut(); Intent intent = new Intent(this, LoginActivity.class); startActivity(intent); @@ -102,7 +107,7 @@ public class Dash extends AppCompatActivity { * * @param uid Von dem benutzer von welchem die Shoppinglists angezeigt werden sollen */ - private void refreshOwnShoppinglist(String uid) { + private void refreshOwnShoppinglist(String uid) throws SQLException { try { showOwnShoppingList(uid); } catch (JSONException e) { @@ -128,7 +133,7 @@ public class Dash extends AppCompatActivity { * * @param uid Die UserId damit von diesem user die shoppinglisten angezeigt werden */ - private void showOwnShoppingList(String uid) throws JSONException { + private void showOwnShoppingList(String uid) throws JSONException, SQLException { RecyclerView ownRecycleView = (RecyclerView) findViewById(R.id.ownrecycler); ownRecycleView.setHasFixedSize(true); ownRecycleView.setLayoutManager(new LinearLayoutManager(this)); @@ -158,6 +163,16 @@ public class Dash extends AppCompatActivity { host.addTab(spec); } + /** + * Schickt an die Login Activity einen intend mit dem extra EXIT. Um die app zu schließen + */ + private void exit(){ + Intent intent = new Intent(Dash.this, LoginActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("EXIT", true); + startActivity(intent); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { @@ -167,6 +182,11 @@ public class Dash extends AppCompatActivity { } + /** + * Menu item Action listener + * @param item Action Item + * @return True wenn erfolgreich + */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { @@ -174,7 +194,6 @@ public class Dash extends AppCompatActivity { logout(); return true; - default: // If we got here, the user's action was not recognized. // Invoke the superclass to handle it. @@ -184,4 +203,31 @@ public class Dash extends AppCompatActivity { } + //Für Double Back press to exit + private boolean doubleBackToExitPressedOnce = false; + + /** + * 2 Mal Zurück Drücken um die App zu schließen + */ + @Override + public void onBackPressed() { + if (doubleBackToExitPressedOnce) { + super.onBackPressed(); + exit(); + + return; + } + + this.doubleBackToExitPressedOnce = true; + Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show(); + + new Handler().postDelayed(new Runnable() { + + @Override + public void run() { + doubleBackToExitPressedOnce=false; + } + }, 2000); + } + } diff --git a/app/src/main/java/at/smartshopper/smartshopper/LoginActivity.java b/app/src/main/java/at/smartshopper/smartshopper/activitys/LoginActivity.java similarity index 82% rename from app/src/main/java/at/smartshopper/smartshopper/LoginActivity.java rename to app/src/main/java/at/smartshopper/smartshopper/activitys/LoginActivity.java index 5593cfe..0529d0f 100644 --- a/app/src/main/java/at/smartshopper/smartshopper/LoginActivity.java +++ b/app/src/main/java/at/smartshopper/smartshopper/activitys/LoginActivity.java @@ -1,6 +1,7 @@ -package at.smartshopper.smartshopper; +package at.smartshopper.smartshopper.activitys; import android.content.Intent; +import android.os.Handler; import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; @@ -25,6 +26,8 @@ import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.GoogleAuthProvider; +import at.smartshopper.smartshopper.R; + public class LoginActivity extends AppCompatActivity { private static final String TAG = "SMASH"; @@ -58,11 +61,20 @@ public class LoginActivity extends AppCompatActivity { startActivityForResult(signInIntent, RC_SIGN_IN); } + /** + * Wechselt zu der Dash Activity + */ private void goDash() { Intent intent = new Intent(this, Dash.class); + finish(); startActivity(intent); } + /** + * Loggt den User per Email ein + * @param email Email des Users + * @param password Passwort des Users + */ private void signInEmail(String email, String password) { mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @@ -85,6 +97,12 @@ public class LoginActivity extends AppCompatActivity { }); } + + /** + * Erstellt einen Account mit Email und Passwort + * @param email Email des neuen Users + * @param password Passwort des neuen Users + */ private void createAccount(String email, String password) { mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @@ -106,10 +124,15 @@ public class LoginActivity extends AppCompatActivity { }); } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); + if (getIntent().getBooleanExtra("EXIT", false)) + { + finish(); + } mAuth = FirebaseAuth.getInstance(); Button loginEmailBtn = (Button) findViewById(R.id.loginEmailBtn); @@ -146,6 +169,10 @@ public class LoginActivity extends AppCompatActivity { } + /** + * Loggt den User ein. Bei erfolg wird der Aufruf zur Dash Activity getätigt + * @param acct Der Google Account, welcher eingelogt werden soll + */ private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId()); @@ -171,6 +198,10 @@ public class LoginActivity extends AppCompatActivity { }); } + + /** + * Prüft ob der User bereits eingelogt ist. Wenn ja, wird er auf die Dash Activity weitergeleitet + */ @Override public void onStart() { super.onStart(); @@ -181,4 +212,31 @@ public class LoginActivity extends AppCompatActivity { } } + + //Für Double Back press to exit + private boolean doubleBackToExitPressedOnce = false; + + /** + * 2 Mal Zurück Drücken um die App zu schließen + */ + @Override + public void onBackPressed() { + if (doubleBackToExitPressedOnce) { + super.onBackPressed(); + finish(); + + return; + } + + this.doubleBackToExitPressedOnce = true; + Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show(); + + new Handler().postDelayed(new Runnable() { + + @Override + public void run() { + doubleBackToExitPressedOnce=false; + } + }, 2000); + } } diff --git a/app/src/main/java/at/smartshopper/smartshopper/activitys/ShoppinglistDetails.java b/app/src/main/java/at/smartshopper/smartshopper/activitys/ShoppinglistDetails.java new file mode 100644 index 0000000..0bfd429 --- /dev/null +++ b/app/src/main/java/at/smartshopper/smartshopper/activitys/ShoppinglistDetails.java @@ -0,0 +1,77 @@ +package at.smartshopper.smartshopper.activitys; + +import android.os.Bundle; +import android.app.Activity; +import android.support.design.widget.Snackbar; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.widget.Toast; + +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; + +import org.json.JSONException; + +import java.sql.SQLException; +import java.util.List; + +import at.smartshopper.smartshopper.R; +import at.smartshopper.smartshopper.db.Database; +import at.smartshopper.smartshopper.shoppinglist.Shoppinglist; +import at.smartshopper.smartshopper.shoppinglist.ShoppinglistAdapter; +import at.smartshopper.smartshopper.shoppinglist.details.Details; +import at.smartshopper.smartshopper.shoppinglist.details.DetailsAdapter; + +public class ShoppinglistDetails extends Activity { + + private Database db = new Database(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_shoppinglist_details); + + Bundle bundle = getIntent().getExtras(); + int position = -1; // or other values + if (bundle != null) + position = bundle.getInt("pos"); + + Toast.makeText(this, "Click detected on item " + position, Toast.LENGTH_LONG).show(); + + List<Shoppinglist> shoppinglists = null; + try { + shoppinglists = db.getMyShoppinglists(FirebaseAuth.getInstance().getCurrentUser().getUid()); + } catch (JSONException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } + + Shoppinglist aktuelleShopinglist = shoppinglists.get(position); + + try { + showDetails(aktuelleShopinglist.getSlId()); + } catch (SQLException e) { + e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } + + } + + /** + * Zeigt das Card View der Shoppinglist Details an + * @param sl_id Shoppinglist welche angezeigt werden soll + * @throws SQLException + * @throws JSONException + */ + private void showDetails(String sl_id) throws SQLException, JSONException { + RecyclerView detailsRecycleView = (RecyclerView) findViewById(R.id.groupRecycle); + detailsRecycleView.setHasFixedSize(true); + detailsRecycleView.setLayoutManager(new LinearLayoutManager(this)); + List<Details> detailsList = db.getListDetails(sl_id); + DetailsAdapter detailsAdapter = new DetailsAdapter(detailsList); + detailsRecycleView.setAdapter(detailsAdapter); + } + +} diff --git a/app/src/main/java/at/smartshopper/smartshopper/RoundCornersTransformation.java b/app/src/main/java/at/smartshopper/smartshopper/customViews/RoundCornersTransformation.java similarity index 99% rename from app/src/main/java/at/smartshopper/smartshopper/RoundCornersTransformation.java rename to app/src/main/java/at/smartshopper/smartshopper/customViews/RoundCornersTransformation.java index 5ef900f..71632ec 100644 --- a/app/src/main/java/at/smartshopper/smartshopper/RoundCornersTransformation.java +++ b/app/src/main/java/at/smartshopper/smartshopper/customViews/RoundCornersTransformation.java @@ -1,4 +1,4 @@ -package at.smartshopper.smartshopper; +package at.smartshopper.smartshopper.customViews; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; diff --git a/app/src/main/java/at/smartshopper/smartshopper/db/Database.java b/app/src/main/java/at/smartshopper/smartshopper/db/Database.java new file mode 100644 index 0000000..d23d2aa --- /dev/null +++ b/app/src/main/java/at/smartshopper/smartshopper/db/Database.java @@ -0,0 +1,224 @@ +package at.smartshopper.smartshopper.db; + +import android.os.StrictMode; +import android.util.Log; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import at.smartshopper.smartshopper.shoppinglist.Shoppinglist; +import at.smartshopper.smartshopper.shoppinglist.details.Details; +import at.smartshopper.smartshopper.shoppinglist.details.group.Group; +import at.smartshopper.smartshopper.shoppinglist.details.item.Item; + +public class Database { + + private Connection conect; + final String HOST = "188.166.124.80"; + final String DB_NAME = "smartshopperdb"; + final String USERNAME = "smartshopper-user"; + final String PASSWORD = "jW^v#&LjNY_b3-k*jYj!U4Xz?T??m_D6249XAeWZ#7C^FRbKm!c_Dt+qj@4&a-Hs"; + final int PORT = 5432; + + + /** + * Macht nix + */ + public Database() { + } + + + /** + * Verbindet Sich mit der Datenbank. Auf der Konsole wird "Database connected!" angezeigt, bei erfolgreicher verbindung + * + * @throws SQLException Bei einem error bei der Verbindung, können details über diese Exception abgerufen werden + */ + private void connectDatabase() throws SQLException { + StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); + StrictMode.setThreadPolicy(policy); + DriverManager.registerDriver(new org.postgresql.Driver()); + conect = DriverManager.getConnection("jdbc:postgresql://" + HOST + ":" + PORT + "/" + DB_NAME, USERNAME, PASSWORD); + + System.out.println("Database connected!"); + } + + /** + * Verbindet sich mit dem Server + * Holt die eigenen Shoppinglisten vom Server. Und speichert diese in eine List mit Shoppinglist Objekten + * + * @param uid Die UID auf welche die Abfrage ausgeführt werden soll + * @return Das Ergebnis der eigenen Shoppinglisten in einer List gefüllt mit Shoppinglist Objekten + * @throws JSONException Ein JSON Umwandlungsfehler + * @throws SQLException Ein PostgreSQL Fehler + */ + public List<Shoppinglist> getMyShoppinglists(String uid) throws JSONException, SQLException { + String SQL = "SELECT row_to_json(\"Shoppinglist\") AS obj FROM \"Shoppinglist\" JOIN \"Shoppinglist_admin\" USING (sl_id) WHERE username = ?"; + + connectDatabase(); + + ArrayList<Shoppinglist> shoppinglistsList = new ArrayList<Shoppinglist>(); + + ResultSet rs = null; + try (PreparedStatement pstmt = conect.prepareStatement(SQL)) { + pstmt.setString(1, uid); + rs = pstmt.executeQuery(); + System.out.println(uid); + + + while (rs.next()) { + String shoppinglist = rs.getString(1); + JSONObject jsonObject = new JSONObject(shoppinglist); + + shoppinglistsList.add(new Shoppinglist(jsonObject.getString("sl_id"), jsonObject.getString("name"), jsonObject.getString("description"), jsonObject.getString("invitelink"), jsonObject.getString("color"))); + } + + } catch (SQLException ex) { + System.out.println(ex.getMessage()); + } + + + Log.d("DATABASE SHOPPINGLISTS", shoppinglistsList.toString()); + + return (List<Shoppinglist>) shoppinglistsList; + + } + + + /** + * Hoolt alle groups und items der list und erstelt ein Detail objekt von jeder group. Die detail objekte kommen in eine List + * @param sl_id Shoppinglist Id mit der gearbeitet wird + * @return Eine List mit Details über jede Shoppinglist + * @throws SQLException + * @throws JSONException + */ + public List<Details> getListDetails(String sl_id) throws SQLException, JSONException { + + List<Group> groups = getGroups(sl_id); + + List<Item> items = getItems(sl_id); + + ArrayList<Details> detailsArrayList = new ArrayList<Details>(); + for (Group group : groups) { + Details detailsTmp = new Details(group); + for (Item item : items) { + if (group.getGroup_id().equals(item.getGroup_id())) { + detailsTmp.addItem(item); + } + } + detailsArrayList.add(detailsTmp); + } + + return (List<Details>) detailsArrayList; + + + } + + /** + * Holt alle Items einer bestimmten shoppingliste, angegeben durch die shoppinglist id + * + * @param sl_id + * @return + * @throws SQLException + * @throws JSONException + */ + private List<Item> getItems(String sl_id) throws SQLException, JSONException { + String SQL = "SELECT row_to_json(\"Item\") AS obj FROM \"Item\" JOIN \"Group\" USING (group_id) WHERE \"Group\".sl_id = ?"; + connectDatabase(); + + ArrayList<Item> listItems = new ArrayList<Item>(); + ResultSet rsitems = null; + try (PreparedStatement pstmt = conect.prepareStatement(SQL)) { + pstmt.setString(1, sl_id); + rsitems = pstmt.executeQuery(); + System.out.println(sl_id); + while (rsitems.next()) { + String itemsString = rsitems.getString(1); + JSONObject jsonObject = new JSONObject(itemsString); + + listItems.add(new Item(jsonObject.getString("item_id"), jsonObject.getString("group_id"), jsonObject.getString("sl_id"), jsonObject.getString("name"), jsonObject.getString("count"))); + } + + } catch (SQLException ex) { + System.out.println(ex.getMessage()); + } + + return (List<Item>) listItems; + + } + + /** + * Holt alle gruppen einer bestimmten Shoppinglist id + * + * @param sl_id Holt alle goups dieser Shoppinglist id + * @return Gibt alle groups der Abgefragten Shoppinglist id zurück + * @throws SQLException + * @throws JSONException + */ + private List<Group> getGroups(String sl_id) throws SQLException, JSONException { + String SQLGroups = "SELECT row_to_json(\"Group\") AS obj FROM \"Group\" JOIN \"Shoppinglist\" USING (sl_id) WHERE sl_id = ?"; + connectDatabase(); + + ResultSet rsgroups = null; + ArrayList<Group> listGroup = new ArrayList<Group>(); + try (PreparedStatement pstmt = conect.prepareStatement(SQLGroups)) { + pstmt.setString(1, sl_id); + rsgroups = pstmt.executeQuery(); + System.out.println(sl_id); + while (rsgroups.next()) { + String groupString = rsgroups.getString(1); + JSONObject jsonObject = new JSONObject(groupString); + + + listGroup.add(new Group(jsonObject.getString("group_id"), jsonObject.getString("sl_id"), jsonObject.getString("name"), jsonObject.getString("color"), jsonObject.getString("hidden"))); + + } + + } catch (SQLException ex) { + System.out.println(ex.getMessage()); + } + + return (List<Group>) listGroup; + + + } + + + /** + * NICHT VERWENDEN FUNKTIONIERT NICHT!! + * <p> + * <p> + * NUR EIN KOPIE SAMPLE + * <p> + * Beim Start wird die Verbindung zum Server hergesetellt. Dann wird das resultSet von dem SQL reqest zurückgegeben + * + * @param SQL Der zumachende SQL Request + * @param uid Die UID des Benutzers, für den die Abfrage gemacht wird + * @return Das entstandene Result set, mit der Antwort des Servers + */ + private ResultSet databaseRequest(String SQL, String uid) throws SQLException { + connectDatabase(); + + ResultSet rs = null; + try (PreparedStatement pstmt = conect.prepareStatement(SQL)) { + pstmt.setString(1, uid); + rs = pstmt.executeQuery(); + System.out.println(uid); + + //HIER + //WEITER + //PROGRAMMIEREN + + } catch (SQLException ex) { + System.out.println(ex.getMessage()); + } + return rs; + } +} diff --git a/app/src/main/java/at/smartshopper/smartshopper/messaging/MyFirebaseMessagingService.java b/app/src/main/java/at/smartshopper/smartshopper/messaging/MyFirebaseMessagingService.java new file mode 100644 index 0000000..e4f00b5 --- /dev/null +++ b/app/src/main/java/at/smartshopper/smartshopper/messaging/MyFirebaseMessagingService.java @@ -0,0 +1,136 @@ +package at.smartshopper.smartshopper.messaging; + +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.media.RingtoneManager; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; +import android.util.Log; +import com.google.firebase.messaging.FirebaseMessagingService; +import com.google.firebase.messaging.RemoteMessage; + + +import at.smartshopper.smartshopper.activitys.Dash; +import at.smartshopper.smartshopper.R; + +public class MyFirebaseMessagingService extends FirebaseMessagingService { + + private static final String TAG = "MyFirebaseMsgService"; + + /** + * Called when message is received. + * + * @param remoteMessage Object representing the message received from Firebase Cloud Messaging. + */ + // [START receive_message] + @Override + public void onMessageReceived(RemoteMessage remoteMessage) { + // [START_EXCLUDE] + // There are two types of messages data messages and notification messages. Data messages + // are handled + // here in onMessageReceived whether the app is in the foreground or background. Data + // messages are the type + // traditionally used with GCM. Notification messages are only received here in + // onMessageReceived when the app + // is in the foreground. When the app is in the background an automatically generated + // notification is displayed. + // When the user taps on the notification they are returned to the app. Messages + // containing both notification + // and data payloads are treated as notification messages. The Firebase console always + // sends notification + // messages. For more see: https://firebase.google.com/docs/cloud-messaging/concept-options + // [END_EXCLUDE] + + // TODO(developer): Handle FCM messages here. + // Not getting messages here? See why this may be: https://goo.gl/39bRNJ + Log.d(TAG, "From: " + remoteMessage.getFrom()); + + // Check if message contains a data payload. + if (remoteMessage.getData().size() > 0) { + Log.d(TAG, "Message data payload: " + remoteMessage.getData()); + sendNotification(remoteMessage.getData() + ""); + + } + + // Check if message contains a notification payload. + if (remoteMessage.getNotification() != null) { + Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); + sendNotification(remoteMessage.getNotification().getBody()); + } + + // Also if you intend on generating your own notifications as a result of a received FCM + // message, here is where that should be initiated. See sendNotification method below. + } + // [END receive_message] + + + // [START on_new_token] + + /** + * Called if InstanceID token is updated. This may occur if the security of + * the previous token had been compromised. Note that this is called when the InstanceID token + * is initially generated so this is where you would retrieve the token. + */ + @Override + public void onNewToken(String token) { + Log.d(TAG, "Refreshed token: " + token); + + // If you want to send messages to this application instance or + // manage this apps subscriptions on the server side, send the + // Instance ID token to your app server. + sendRegistrationToServer(token); + } + // [END on_new_token] + + + /** + * Persist token to third-party servers. + * + * Modify this method to associate the user's FCM InstanceID token with any server-side account + * maintained by your application. + * + * @param token The new token. + */ + private void sendRegistrationToServer(String token) { + // TODO: Implement this method to send token to your app server. + } + + /** + * Create and show a simple notification containing the received FCM message. + * + * @param messageBody FCM message body received. + */ + private void sendNotification(String messageBody) { + Intent intent = new Intent(this, Dash.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, + PendingIntent.FLAG_ONE_SHOT); + + // String channelId = getString(R.string.default_notification_channel_id); + Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + NotificationCompat.Builder notificationBuilder = + //new NotificationCompat.Builder(this, channelId) + new NotificationCompat.Builder(this) + .setSmallIcon(R.drawable.ic_launcher_foreground) + .setContentTitle("SmartShopper") + .setContentText(messageBody) + .setAutoCancel(true) + .setSound(defaultSoundUri) + .setContentIntent(pendingIntent); + + NotificationManager notificationManager = + (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + + // Since android Oreo notification channel is needed. + //if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + // NotificationChannel channel = new NotificationChannel(channelId, + // "Channel human readable title", + // NotificationManager.IMPORTANCE_DEFAULT); + // notificationManager.createNotificationChannel(channel); + //} + + notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); + } +} \ No newline at end of file diff --git a/app/src/main/java/at/smartshopper/smartshopper/Shoppinglist.java b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/Shoppinglist.java similarity index 79% rename from app/src/main/java/at/smartshopper/smartshopper/Shoppinglist.java rename to app/src/main/java/at/smartshopper/smartshopper/shoppinglist/Shoppinglist.java index b3ea0be..b8f680e 100644 --- a/app/src/main/java/at/smartshopper/smartshopper/Shoppinglist.java +++ b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/Shoppinglist.java @@ -1,4 +1,4 @@ -package at.smartshopper.smartshopper; +package at.smartshopper.smartshopper.shoppinglist; public class Shoppinglist { @@ -36,4 +36,9 @@ public class Shoppinglist { public String getcolor(){ return this.color;} + @Override + public String toString(){ + return "SL_ID: " + sl_id + " name: " + name + " description: " + description + " invitelink: " + invitelink + " color: "+ color; + } + } diff --git a/app/src/main/java/at/smartshopper/smartshopper/ShoppinglistAdapter.java b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/ShoppinglistAdapter.java similarity index 69% rename from app/src/main/java/at/smartshopper/smartshopper/ShoppinglistAdapter.java rename to app/src/main/java/at/smartshopper/smartshopper/shoppinglist/ShoppinglistAdapter.java index a26915b..d93f45b 100644 --- a/app/src/main/java/at/smartshopper/smartshopper/ShoppinglistAdapter.java +++ b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/ShoppinglistAdapter.java @@ -1,8 +1,9 @@ -package at.smartshopper.smartshopper; +package at.smartshopper.smartshopper.shoppinglist; import android.content.Context; -import android.graphics.drawable.Drawable; +import android.content.Intent; import android.net.Uri; +import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -16,6 +17,10 @@ import com.squareup.picasso.Picasso; import java.util.List; +import at.smartshopper.smartshopper.R; +import at.smartshopper.smartshopper.activitys.ShoppinglistDetails; +import at.smartshopper.smartshopper.customViews.RoundCornersTransformation; + public class ShoppinglistAdapter extends RecyclerView.Adapter<ShoppinglistAdapter.ShoppinglistViewHolder> { @@ -31,14 +36,25 @@ public class ShoppinglistAdapter extends RecyclerView.Adapter<ShoppinglistAdapte this.shoppinglist = shoppinglist; } + /** + * Erstellt einen Neuen view holder mit aktueller view + * @param parent + * @param viewType + * @return + */ @Override public ShoppinglistViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //inflating and returning our view holder LayoutInflater inflater = LayoutInflater.from(mCtx); - View view = inflater.inflate(R.layout.cardview, parent, false); + View view = inflater.inflate(R.layout.cardviewshoppinglist, parent, false); return new ShoppinglistViewHolder(view); } + /** + * Setzt alle Daten in die View elemente + * @param holder Das View Holder Objekt mit allen elementen + * @param position Der Index welcher aus der data list genommen werden soll + */ @Override public void onBindViewHolder(ShoppinglistViewHolder holder, int position) { //getting the product of the specified position, @@ -69,12 +85,17 @@ public class ShoppinglistAdapter extends RecyclerView.Adapter<ShoppinglistAdapte } + + @Override public int getItemCount() { return shoppinglist.size(); } + /** + * Haltet alle elemente. Durch ein Objekt von dem kann jedes Element welches hier drinnen angeführt ist verwendet werden + */ class ShoppinglistViewHolder extends RecyclerView.ViewHolder { TextView textViewTitle, textViewBeschreibung, ownerName; @@ -87,6 +108,25 @@ public class ShoppinglistAdapter extends RecyclerView.Adapter<ShoppinglistAdapte textViewBeschreibung = itemView.findViewById(R.id.shoppinglistBeschreibung); imageView = itemView.findViewById(R.id.shoppinglistOwner); ownerName = itemView.findViewById(R.id.ownerName); + + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int position = getAdapterPosition(); + + Intent intent = new Intent(v.getContext(), ShoppinglistDetails.class); + Bundle bundle = new Bundle(); + bundle.putInt("pos", position); + intent.putExtras(bundle); + v.getContext().startActivity(intent); + + + + } + }); } + + + } } \ No newline at end of file diff --git a/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/Details.java b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/Details.java new file mode 100644 index 0000000..e185bb3 --- /dev/null +++ b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/Details.java @@ -0,0 +1,37 @@ +package at.smartshopper.smartshopper.shoppinglist.details; + +import java.util.ArrayList; + +import at.smartshopper.smartshopper.shoppinglist.details.group.Group; +import at.smartshopper.smartshopper.shoppinglist.details.item.Item; + +public class Details { + + private Group group; + private ArrayList<Item> items; + + public Details(Group group) { + this.group = group; + this.items = new ArrayList<Item>(); + } + + public Group getGroup() { + return group; + } + + public ArrayList<Item> getItems() { + return items; + } + + public void addItem(Item item){ + this.items.add(item); + } + + @Override + public String toString() { + return "Details{" + + "group=" + group.toString() + + ", items=" + items.toString() + + '}'; + } +} diff --git a/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/DetailsAdapter.java b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/DetailsAdapter.java new file mode 100644 index 0000000..11fe511 --- /dev/null +++ b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/DetailsAdapter.java @@ -0,0 +1,104 @@ +package at.smartshopper.smartshopper.shoppinglist.details; + +import android.app.Activity; +import android.graphics.Color; +import android.support.annotation.NonNull; +import android.support.v7.widget.CardView; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.TextView; +import com.squareup.picasso.Picasso; +import java.util.List; +import at.smartshopper.smartshopper.R; +import at.smartshopper.smartshopper.customViews.RoundCornersTransformation; +import at.smartshopper.smartshopper.db.Database; +import at.smartshopper.smartshopper.shoppinglist.details.item.ItemAdapter; + +public class DetailsAdapter extends RecyclerView.Adapter<DetailsAdapter.MyViewHolder> { + + private List<Details> details; + + public DetailsAdapter(List<Details> details) { + this.details = details; + } + + /** + * Erstellt einen Neuen view holder mit aktueller view + * @param viewGroup + * @param i + * @return + */ + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { + View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardviewgroup, viewGroup, false); + + MyViewHolder myViewHolder = new MyViewHolder(view); + return myViewHolder; + } + + + /** + * Setzt alle Daten in die View elemente + * @param viewHolder Das View Holder Objekt mit allen elementen + * @param i Der Index welcher aus der data list genommen werden soll + */ + @Override + public void onBindViewHolder(@NonNull MyViewHolder viewHolder, int i) { + TextView groupName = viewHolder.groupName; + ImageButton deleteGroup = viewHolder.deleteGroup; + RecyclerView itemsrecycle = viewHolder.itemsrecycle; + TextView ownerName = viewHolder.ownerName; + ImageView ownerImage = viewHolder.ownerImage; + CardView cardViewGroup = viewHolder.cardViewGroups; + + Database db = new Database(); + + groupName.setText(details.get(i).getGroup().getName()); + ownerName.setText("Kein SQL"); + cardViewGroup.setCardBackgroundColor(Color.parseColor("#" + details.get(i).getGroup().getColor())); + Picasso.get().load(R.drawable.delete).into(deleteGroup); + Picasso.get().load(R.drawable.user).resize(250,250).transform(new RoundCornersTransformation(30, 30, true, true)).into(ownerImage); + + itemsrecycle.setHasFixedSize(true); + itemsrecycle.setLayoutManager(new LinearLayoutManager(new Activity())); + List<at.smartshopper.smartshopper.shoppinglist.details.item.Item> itemsList = details.get(i).getItems(); + ItemAdapter itemAdapter = new ItemAdapter(itemsList); + + itemsrecycle.setAdapter(itemAdapter); + } + + @Override + public int getItemCount() { + return details.size(); + } + + /** + * Haltet alle elemente. Durch ein Objekt von dem kann jedes Element welches hier drinnen angeführt ist verwendet werden + */ + public static class MyViewHolder extends RecyclerView.ViewHolder { + + TextView groupName, ownerName; + ImageButton deleteGroup; + RecyclerView itemsrecycle; + ImageView ownerImage; + CardView cardViewGroups; + + public MyViewHolder(@NonNull View itemView) { + super(itemView); + this.groupName = (TextView) itemView.findViewById(R.id.groupName); + this.deleteGroup = (ImageButton) itemView.findViewById(R.id.deleteGroup); + this.itemsrecycle = (RecyclerView) itemView.findViewById(R.id.itemsRecycle); + this.ownerName = (TextView)itemView.findViewById(R.id.ownerName); + this.ownerImage = (ImageView)itemView.findViewById(R.id.ownerImage); + this.cardViewGroups = (CardView)itemView.findViewById(R.id.cardViewGroup); + + } + + } +} diff --git a/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/group/Group.java b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/group/Group.java new file mode 100644 index 0000000..276d07f --- /dev/null +++ b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/group/Group.java @@ -0,0 +1,50 @@ +package at.smartshopper.smartshopper.shoppinglist.details.group; + +public class Group { + + private String group_id; + private String sl_id; + private String name; + private String color; + private String hidden; + + + public Group(String group_id, String sl_id, String name, String color, String hidden) { + this.group_id = group_id; + this.sl_id = sl_id; + this.name = name; + this.color = color; + this.hidden = hidden; + } + + public String getGroup_id() { + return this.group_id; + } + + public String getSl_idd() { + return this.sl_id; + } + + public String getName() { + return this.name; + } + + public String getColor() { + return this.color; + } + + public String getHidden() { + return this.hidden; + } + + @Override + public String toString() { + return "Group{" + + "group_id='" + group_id + '\'' + + ", sl_id='" + sl_id + '\'' + + ", name='" + name + '\'' + + ", color='" + color + '\'' + + ", hidden='" + hidden + '\'' + + '}'; + } +} diff --git a/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/item/Item.java b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/item/Item.java new file mode 100644 index 0000000..c8413b1 --- /dev/null +++ b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/item/Item.java @@ -0,0 +1,49 @@ +package at.smartshopper.smartshopper.shoppinglist.details.item; + +public class Item { + + private String item_id; + private String group_id; + private String sl_id; + private String name; + private String count; + + public Item(String item_id, String group_id, String sl_id, String name, String count){ + this.item_id = item_id; + this.group_id = group_id; + this.sl_id = sl_id; + this.name = name; + this.count = count; + } + + public String getItem_id() { + return item_id; + } + + public String getGroup_id() { + return group_id; + } + + public String getSl_id() { + return sl_id; + } + + public String getName() { + return name; + } + + public String getCount() { + return count; + } + + @Override + public String toString() { + return "Item{" + + "item_id='" + item_id + '\'' + + ", group_id='" + group_id + '\'' + + ", sl_id='" + sl_id + '\'' + + ", name='" + name + '\'' + + ", count='" + count + '\'' + + '}'; + } +} diff --git a/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/item/ItemAdapter.java b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/item/ItemAdapter.java new file mode 100644 index 0000000..905980c --- /dev/null +++ b/app/src/main/java/at/smartshopper/smartshopper/shoppinglist/details/item/ItemAdapter.java @@ -0,0 +1,81 @@ +package at.smartshopper.smartshopper.shoppinglist.details.item; + +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import com.squareup.picasso.Picasso; +import java.util.List; + + + +import at.smartshopper.smartshopper.R; + +public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.MyViewHolder> { + + private List<at.smartshopper.smartshopper.shoppinglist.details.item.Item> data; + + public ItemAdapter(List<at.smartshopper.smartshopper.shoppinglist.details.item.Item> data){ + this.data = data; + } + + + /** + * Erstellt einen Neuen view holder mit aktueller view + * @param viewGroup + * @param i + * @return + */ + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { + View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardviewitem, viewGroup, false); + + MyViewHolder myViewHolder = new MyViewHolder(view); + return myViewHolder; + } + + /** + * Setzt alle Daten in die View elemente + * @param myViewHolder Das View Holder Objekt mit allen elementen + * @param i Der Index welcher aus der data list genommen werden soll + */ + @Override + public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) { + TextView itemName = myViewHolder.itemName; + TextView itemAnzahl = myViewHolder.itemAnzahl; + ImageView itemBearbeiten = myViewHolder.itemBearbeiten; + ImageView itemDel = myViewHolder.itemDel; + + itemName.setText(data.get(i).getName()); + itemAnzahl.setText(data.get(i).getCount()); + Picasso.get().load(R.drawable.bearbeiten).into(itemBearbeiten); + Picasso.get().load(R.drawable.delete).into(itemDel); + } + + @Override + public int getItemCount() { + return data.size(); + } + + /** + * Haltet alle elemente. Durch ein Objekt von dem kann jedes Element welches hier drinnen angeführt ist verwendet werden + */ + public static class MyViewHolder extends RecyclerView.ViewHolder{ + + TextView itemName, itemAnzahl; + ImageView itemBearbeiten, itemDel; + + public MyViewHolder(View itemView){ + super(itemView); + + this.itemName = (TextView)itemView.findViewById(R.id.nameItem); + this.itemAnzahl = (TextView)itemView.findViewById(R.id.anzahlItem); + this.itemBearbeiten = (ImageView)itemView.findViewById(R.id.itemBearbeiten); + this.itemDel = (ImageView)itemView.findViewById(R.id.itemDel); + } + } +} diff --git a/app/src/main/res/drawable-hdpi/add.png b/app/src/main/res/drawable-hdpi/add.png new file mode 100644 index 0000000..d377914 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/add.png differ diff --git a/app/src/main/res/drawable-hdpi/addoutline.png b/app/src/main/res/drawable-hdpi/addoutline.png new file mode 100644 index 0000000..69b1eb9 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/addoutline.png differ diff --git a/app/src/main/res/drawable-hdpi/bearbeiten.png b/app/src/main/res/drawable-hdpi/bearbeiten.png new file mode 100644 index 0000000..152b5b9 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/bearbeiten.png differ diff --git a/app/src/main/res/drawable-hdpi/delete.png b/app/src/main/res/drawable-hdpi/delete.png new file mode 100644 index 0000000..b1036b8 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/delete.png differ diff --git a/app/src/main/res/drawable-hdpi/user.png b/app/src/main/res/drawable-hdpi/user.png new file mode 100644 index 0000000..136b982 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/user.png differ diff --git a/app/src/main/res/drawable-mdpi/add.png b/app/src/main/res/drawable-mdpi/add.png new file mode 100644 index 0000000..9f57099 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/add.png differ diff --git a/app/src/main/res/drawable-mdpi/addoutline.png b/app/src/main/res/drawable-mdpi/addoutline.png new file mode 100644 index 0000000..8db68ac Binary files /dev/null and b/app/src/main/res/drawable-mdpi/addoutline.png differ diff --git a/app/src/main/res/drawable-mdpi/bearbeiten.png b/app/src/main/res/drawable-mdpi/bearbeiten.png new file mode 100644 index 0000000..d49726c Binary files /dev/null and b/app/src/main/res/drawable-mdpi/bearbeiten.png differ diff --git a/app/src/main/res/drawable-mdpi/delete.png b/app/src/main/res/drawable-mdpi/delete.png new file mode 100644 index 0000000..0b509d1 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/delete.png differ diff --git a/app/src/main/res/drawable-mdpi/user.png b/app/src/main/res/drawable-mdpi/user.png new file mode 100644 index 0000000..07a2e19 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/user.png differ diff --git a/app/src/main/res/drawable-xhdpi/add.png b/app/src/main/res/drawable-xhdpi/add.png new file mode 100644 index 0000000..372e767 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/add.png differ diff --git a/app/src/main/res/drawable-xhdpi/addoutline.png b/app/src/main/res/drawable-xhdpi/addoutline.png new file mode 100644 index 0000000..e8caa21 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/addoutline.png differ diff --git a/app/src/main/res/drawable-xhdpi/bearbeiten.png b/app/src/main/res/drawable-xhdpi/bearbeiten.png new file mode 100644 index 0000000..d76a755 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/bearbeiten.png differ diff --git a/app/src/main/res/drawable-xhdpi/delete.png b/app/src/main/res/drawable-xhdpi/delete.png new file mode 100644 index 0000000..6b3f52c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/delete.png differ diff --git a/app/src/main/res/drawable-xhdpi/user.png b/app/src/main/res/drawable-xhdpi/user.png new file mode 100644 index 0000000..508a52f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/user.png differ diff --git a/app/src/main/res/drawable-xxhdpi/add.png b/app/src/main/res/drawable-xxhdpi/add.png new file mode 100644 index 0000000..a7b72a6 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/add.png differ diff --git a/app/src/main/res/drawable-xxhdpi/addoutline.png b/app/src/main/res/drawable-xxhdpi/addoutline.png new file mode 100644 index 0000000..fd19e5b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/addoutline.png differ diff --git a/app/src/main/res/drawable-xxhdpi/bearbeiten.png b/app/src/main/res/drawable-xxhdpi/bearbeiten.png new file mode 100644 index 0000000..7b85a87 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/bearbeiten.png differ diff --git a/app/src/main/res/drawable-xxhdpi/delete.png b/app/src/main/res/drawable-xxhdpi/delete.png new file mode 100644 index 0000000..0ce4dee Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/delete.png differ diff --git a/app/src/main/res/drawable-xxhdpi/user.png b/app/src/main/res/drawable-xxhdpi/user.png new file mode 100644 index 0000000..974449e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/user.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/add.png b/app/src/main/res/drawable-xxxhdpi/add.png new file mode 100644 index 0000000..3cc4690 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/add.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/addoutline.png b/app/src/main/res/drawable-xxxhdpi/addoutline.png new file mode 100644 index 0000000..1fd9d92 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/addoutline.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/bearbeiten.png b/app/src/main/res/drawable-xxxhdpi/bearbeiten.png new file mode 100644 index 0000000..7aa7a82 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/bearbeiten.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/delete.png b/app/src/main/res/drawable-xxxhdpi/delete.png new file mode 100644 index 0000000..00fd1c8 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/delete.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/user.png b/app/src/main/res/drawable-xxxhdpi/user.png new file mode 100644 index 0000000..77436f9 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/user.png differ diff --git a/app/src/main/res/layout/activity_dash.xml b/app/src/main/res/layout/activity_dash.xml index 68a497f..b957ffa 100644 --- a/app/src/main/res/layout/activity_dash.xml +++ b/app/src/main/res/layout/activity_dash.xml @@ -1,15 +1,19 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" +<android.support.constraint.ConstraintLayout + xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent" - tools:context=".Dash"> + android:layout_height="match_parent"> <TabHost android:id="@+id/tabHost1" android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_height="wrap_content" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> <LinearLayout android:layout_width="match_parent" @@ -40,6 +44,7 @@ android:layout_height="match_parent" android:orientation="vertical"> + <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ownSwipe" android:layout_width="match_parent" @@ -48,7 +53,9 @@ <android.support.v7.widget.RecyclerView android:id="@+id/ownrecycler" android:layout_width="match_parent" - android:layout_height="match_parent" /> + android:layout_height="match_parent"> + + </android.support.v7.widget.RecyclerView> </android.support.v4.widget.SwipeRefreshLayout> @@ -82,4 +89,15 @@ </LinearLayout> </TabHost> -</LinearLayout> \ No newline at end of file + <android.support.design.widget.FloatingActionButton + android:id="@+id/floatingActionButton4" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="8dp" + android:layout_marginBottom="8dp" + android:clickable="true" + app:backgroundTint="@color/fui_linkColor" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="@+id/tabHost1" + app:srcCompat="@drawable/addoutline" /> +</android.support.constraint.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index e880fc3..94b2c5c 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".LoginActivity"> + tools:context=".activitys.LoginActivity"> <TableLayout android:layout_width="match_parent" diff --git a/app/src/main/res/layout/activity_shoppinglist_details.xml b/app/src/main/res/layout/activity_shoppinglist_details.xml new file mode 100644 index 0000000..d865077 --- /dev/null +++ b/app/src/main/res/layout/activity_shoppinglist_details.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".activitys.ShoppinglistDetails"> + + <android.support.v7.widget.RecyclerView + android:id="@+id/groupRecycle" + android:layout_width="match_parent" + android:layout_height="match_parent" > + + </android.support.v7.widget.RecyclerView> + + <android.support.design.widget.FloatingActionButton + android:id="@+id/floatingActionButton" + style="@style/Widget.MaterialComponents.FloatingActionButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="8dp" + android:layout_marginBottom="8dp" + android:clickable="true" + android:src="@drawable/addoutline" + app:backgroundTint="@color/fui_linkColor" + app:layout_constraintBottom_toBottomOf="@+id/groupRecycle" + app:layout_constraintEnd_toEndOf="parent" /> +</android.support.constraint.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/cardviewgroup.xml b/app/src/main/res/layout/cardviewgroup.xml new file mode 100644 index 0000000..867b76e --- /dev/null +++ b/app/src/main/res/layout/cardviewgroup.xml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="utf-8"?> + + +<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/cardViewGroup" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:cardCornerRadius="8dp" + app:cardPreventCornerOverlap="true" + app:cardUseCompatPadding="true"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <android.support.constraint.ConstraintLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <TextView + android:id="@+id/groupName" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginTop="12dp" + android:layout_marginEnd="8dp" + android:text="Name" + android:textSize="18sp" + app:layout_constraintEnd_toStartOf="@+id/deleteGroup" + app:layout_constraintStart_toEndOf="@+id/ownerImage" + app:layout_constraintTop_toTopOf="parent" /> + + <ImageButton + android:id="@+id/deleteGroup" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:layout_marginEnd="8dp" + android:background="@android:color/transparent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:srcCompat="@drawable/delete" /> + + <ImageView + android:id="@+id/ownerImage" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:srcCompat="@color/colorAccent" /> + + <TextView + android:id="@+id/ownerName" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="15dp" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" + android:text="OwnerName" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/ownerImage" /> + + </android.support.constraint.ConstraintLayout> + + <android.support.v7.widget.RecyclerView + android:id="@+id/itemsRecycle" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + + </LinearLayout> + +</android.support.v7.widget.CardView> diff --git a/app/src/main/res/layout/cardviewitem.xml b/app/src/main/res/layout/cardviewitem.xml new file mode 100644 index 0000000..8892c33 --- /dev/null +++ b/app/src/main/res/layout/cardviewitem.xml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/itemCardView" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@android:color/darker_gray" + android:orientation="horizontal" + android:padding="8dp"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_weight="1" + android:orientation="horizontal"> + + <TextView + android:id="@+id/nameItem" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="ItemName" /> + + <TextView + android:id="@+id/anzahlItem" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="Anzahl" /> + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_weight="1" + android:orientation="horizontal"> + + <ImageView + android:id="@+id/itemBearbeiten" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + app:srcCompat="@drawable/bearbeiten" /> + + <ImageView + android:id="@+id/itemDel" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + app:srcCompat="@drawable/delete" /> + </LinearLayout> + </LinearLayout> +</android.support.v7.widget.CardView> + diff --git a/app/src/main/res/layout/cardview.xml b/app/src/main/res/layout/cardviewshoppinglist.xml similarity index 99% rename from app/src/main/res/layout/cardview.xml rename to app/src/main/res/layout/cardviewshoppinglist.xml index af934fd..d306b27 100644 --- a/app/src/main/res/layout/cardview.xml +++ b/app/src/main/res/layout/cardviewshoppinglist.xml @@ -61,6 +61,7 @@ card_view:layout_constraintBottom_toBottomOf="parent" card_view:layout_constraintStart_toStartOf="parent" card_view:layout_constraintTop_toBottomOf="@+id/shoppinglistOwner" /> + </android.support.constraint.ConstraintLayout> </android.support.v7.widget.CardView> \ No newline at end of file diff --git a/app/src/main/res/menu/dash_menu.xml b/app/src/main/res/menu/dash_menu.xml index 0a3c72e..ed9219b 100644 --- a/app/src/main/res/menu/dash_menu.xml +++ b/app/src/main/res/menu/dash_menu.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<menu xmlns:android="http://schemas.android.com/apk/res/android"> +<menu xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/logoutBtn" android:title="Logout" diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index eca70cf..036d09b 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> - <background android:drawable="@drawable/ic_launcher_background" /> - <foreground android:drawable="@drawable/ic_launcher_foreground" /> + <background android:drawable="@color/ic_launcher_background"/> + <foreground android:drawable="@mipmap/ic_launcher_foreground"/> </adaptive-icon> \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index eca70cf..036d09b 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> - <background android:drawable="@drawable/ic_launcher_background" /> - <foreground android:drawable="@drawable/ic_launcher_foreground" /> + <background android:drawable="@color/ic_launcher_background"/> + <foreground android:drawable="@mipmap/ic_launcher_foreground"/> </adaptive-icon> \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 898f3ed..6125900 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..6e15137 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png index dffca36..7970df7 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 64ba76f..b32cf1e 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..5dba3a5 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png index dae5e08..2335154 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index e5ed465..7a7a55f 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..44cbf7a Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png index 14ed0af..3328fca 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index b0907ca..941cebd 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..67e0b28 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png index d8ae031..781d2d9 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 2c18de9..51d0c25 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..ce3d294 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png index beed3cd..dc3fe08 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..80d7b54 --- /dev/null +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <color name="ic_launcher_background">#353535</color> +</resources> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e86118c..8b9f805 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,6 @@ <resources> <string name="app_name">SmartShopper</string> <string name="title_activity_dash">Dash</string> + <string name="title_activity_shoppinglist_detail">ShoppinglistDetail</string> + <string name="title_activity_shoppinglist_details">ShoppinglistDetails</string> </resources> diff --git a/app/src/release/res/drawable-hdpi/bearbeiten.png b/app/src/release/res/drawable-hdpi/bearbeiten.png new file mode 100644 index 0000000..152b5b9 Binary files /dev/null and b/app/src/release/res/drawable-hdpi/bearbeiten.png differ diff --git a/app/src/release/res/drawable-hdpi/ic_action_name.png b/app/src/release/res/drawable-hdpi/ic_action_name.png new file mode 100644 index 0000000..b1036b8 Binary files /dev/null and b/app/src/release/res/drawable-hdpi/ic_action_name.png differ diff --git a/app/src/release/res/drawable-hdpi/user.png b/app/src/release/res/drawable-hdpi/user.png new file mode 100644 index 0000000..136b982 Binary files /dev/null and b/app/src/release/res/drawable-hdpi/user.png differ diff --git a/app/src/release/res/drawable-mdpi/bearbeiten.png b/app/src/release/res/drawable-mdpi/bearbeiten.png new file mode 100644 index 0000000..d49726c Binary files /dev/null and b/app/src/release/res/drawable-mdpi/bearbeiten.png differ diff --git a/app/src/release/res/drawable-mdpi/ic_action_name.png b/app/src/release/res/drawable-mdpi/ic_action_name.png new file mode 100644 index 0000000..0b509d1 Binary files /dev/null and b/app/src/release/res/drawable-mdpi/ic_action_name.png differ diff --git a/app/src/release/res/drawable-mdpi/user.png b/app/src/release/res/drawable-mdpi/user.png new file mode 100644 index 0000000..07a2e19 Binary files /dev/null and b/app/src/release/res/drawable-mdpi/user.png differ diff --git a/app/src/release/res/drawable-xhdpi/bearbeiten.png b/app/src/release/res/drawable-xhdpi/bearbeiten.png new file mode 100644 index 0000000..d76a755 Binary files /dev/null and b/app/src/release/res/drawable-xhdpi/bearbeiten.png differ diff --git a/app/src/release/res/drawable-xhdpi/ic_action_name.png b/app/src/release/res/drawable-xhdpi/ic_action_name.png new file mode 100644 index 0000000..6b3f52c Binary files /dev/null and b/app/src/release/res/drawable-xhdpi/ic_action_name.png differ diff --git a/app/src/release/res/drawable-xhdpi/user.png b/app/src/release/res/drawable-xhdpi/user.png new file mode 100644 index 0000000..508a52f Binary files /dev/null and b/app/src/release/res/drawable-xhdpi/user.png differ diff --git a/app/src/release/res/drawable-xxhdpi/bearbeiten.png b/app/src/release/res/drawable-xxhdpi/bearbeiten.png new file mode 100644 index 0000000..7b85a87 Binary files /dev/null and b/app/src/release/res/drawable-xxhdpi/bearbeiten.png differ diff --git a/app/src/release/res/drawable-xxhdpi/ic_action_name.png b/app/src/release/res/drawable-xxhdpi/ic_action_name.png new file mode 100644 index 0000000..0ce4dee Binary files /dev/null and b/app/src/release/res/drawable-xxhdpi/ic_action_name.png differ diff --git a/app/src/release/res/drawable-xxhdpi/user.png b/app/src/release/res/drawable-xxhdpi/user.png new file mode 100644 index 0000000..974449e Binary files /dev/null and b/app/src/release/res/drawable-xxhdpi/user.png differ diff --git a/app/src/release/res/drawable-xxxhdpi/bearbeiten.png b/app/src/release/res/drawable-xxxhdpi/bearbeiten.png new file mode 100644 index 0000000..7aa7a82 Binary files /dev/null and b/app/src/release/res/drawable-xxxhdpi/bearbeiten.png differ diff --git a/app/src/release/res/drawable-xxxhdpi/ic_action_name.png b/app/src/release/res/drawable-xxxhdpi/ic_action_name.png new file mode 100644 index 0000000..00fd1c8 Binary files /dev/null and b/app/src/release/res/drawable-xxxhdpi/ic_action_name.png differ diff --git a/app/src/release/res/drawable-xxxhdpi/user.png b/app/src/release/res/drawable-xxxhdpi/user.png new file mode 100644 index 0000000..77436f9 Binary files /dev/null and b/app/src/release/res/drawable-xxxhdpi/user.png differ