diff --git a/Lookify/app/src/main/AndroidManifest.xml b/Lookify/app/src/main/AndroidManifest.xml index 8638220..36b798f 100644 --- a/Lookify/app/src/main/AndroidManifest.xml +++ b/Lookify/app/src/main/AndroidManifest.xml @@ -8,23 +8,32 @@ - + + + android:label="Rekomendacje"/> - - + + - - - + + + diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/Decode.java b/Lookify/app/src/main/java/com/example/lookifyv2/Decode.java index 9a92403..7caf170 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/Decode.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/Decode.java @@ -133,10 +133,16 @@ public class Decode extends AppCompatActivity { finish(); } if(reminder == 0) { + + Toast.makeText(this, contents, + Toast.LENGTH_SHORT).show(); + Intent intent_Results = new Intent(this, Results.class); intent_Results.putExtra("decodedcode", contents); startActivity(intent_Results); finish(); + + } } diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/DecodeFail.java b/Lookify/app/src/main/java/com/example/lookifyv2/DecodeFail.java index 8c1c7fa..0df8c2c 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/DecodeFail.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/DecodeFail.java @@ -3,6 +3,7 @@ package com.example.lookifyv2; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; +import android.graphics.PorterDuff; import android.os.Bundle; import android.view.View; import android.widget.Button; @@ -18,7 +19,9 @@ public class DecodeFail extends AppCompatActivity { setContentView(R.layout.activity_decode_fail); button_tryagain = findViewById(R.id.try_again_button); + button_tryagain.getBackground().setColorFilter(0xFF67BAFF, PorterDuff.Mode.MULTIPLY); button_backtomain = findViewById(R.id.backto_main_button); + button_backtomain.getBackground().setColorFilter(0xFF67BAFF, PorterDuff.Mode.MULTIPLY); button_tryagain.setOnClickListener(new View.OnClickListener() { @Override diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/Favourites.java b/Lookify/app/src/main/java/com/example/lookifyv2/Favourites.java new file mode 100644 index 0000000..d4835a9 --- /dev/null +++ b/Lookify/app/src/main/java/com/example/lookifyv2/Favourites.java @@ -0,0 +1,123 @@ +package com.example.lookifyv2; + +import android.annotation.SuppressLint; +import android.content.SharedPreferences; +import android.os.AsyncTask; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.common.collect.Lists; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class Favourites extends AppCompatActivity { + + private List products; + private List favourites; + private RecyclerView recyclerView; + private GridLayoutManager gridLayout; + private FavouritesAdapter adapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_favourites); + + recyclerView = findViewById(R.id.favouriterecyclerview); + products = new ArrayList<>(); + favourites = new ArrayList<>(); + getProductsFromDB(); + + gridLayout = new GridLayoutManager(this, 2); + recyclerView.setLayoutManager(gridLayout); + + adapter = new FavouritesAdapter(this, favourites); + recyclerView.setAdapter(adapter); + } + + private void getProductsFromDB() { + + @SuppressLint("StaticFieldLeak") AsyncTask asyncTask = new AsyncTask() { + @Override + protected Void doInBackground(Void... Void) { + + OkHttpClient client = new OkHttpClient(); + Request request = new Request.Builder().url("http://192.168.8.101/products.php?id=0").build(); + try { + Response response = client.newCall(request).execute(); + + JSONArray array = new JSONArray(response.body().string()); + + for (int i = 0; i < array.length(); i++) { + + JSONObject object = array.getJSONObject(i); + + Product product = new Product(object.getInt("id"), object.getString("product_code"), + object.getString("product_name"), object.getString("product_image"), + object.getString("product_price"), object.getString("product_retailer"), + object.getString("product_colour"), object.getString("product_style"), + object.getString("product_collection"), + object.getString("product_type"), object.getString("product_sex")); + + Favourites.this.products.add(product); + } + + } catch (IOException e) { + e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + adapter.notifyDataSetChanged(); + + getFavourites();//funkcja + } + }; + asyncTask.execute(); + } + + private void getFavourites() { + SharedPreferences pref = MyApplication.getInstance().getSharedPreferences("Favourites", 0); + Map codes = pref.getAll(); + ArrayList codeslist = Lists.newArrayList(codes.keySet()); + if (codeslist.size() == 0) { + TextView noproductsmessage = findViewById(R.id.nofavouritesmessage); + noproductsmessage.setVisibility(View.VISIBLE); + } else { + for (int i = 0; i < products.size(); i++) { + if (codeslist.size() != 0) { + for (int j = 0; j < codeslist.size(); j++) { + if (products.get(i).getproductCode().equals(codeslist.get(j))) { + favourites.add(products.get(i)); + codeslist.remove(j); + break; + } + } + } + else{ + break; + } + } + } + } +} diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/FavouritesAdapter.java b/Lookify/app/src/main/java/com/example/lookifyv2/FavouritesAdapter.java new file mode 100644 index 0000000..aa0a04a --- /dev/null +++ b/Lookify/app/src/main/java/com/example/lookifyv2/FavouritesAdapter.java @@ -0,0 +1,134 @@ +package com.example.lookifyv2; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.PopupMenu; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.google.common.collect.Lists; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class FavouritesAdapter extends RecyclerView.Adapter{ + + private Context context; + private List products; + + public FavouritesAdapter(Context context, List products) { + this.context = context; + this.products = products; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card,parent,false); + + return new ViewHolder(itemView); + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + + Glide.with(context).load(products.get(position).getImageLink()).into(holder.imageView); + holder.productName.setText(products.get(position).getproductName()); + holder.productPrice.setText(products.get(position).getproductPrice()); + holder.productRetailer.setText(products.get(position).getproductRetailer()); + } + + @Override + public int getItemCount() { + return products.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ + + private ImageView imageView; + private TextView productName; + private TextView productPrice; + private TextView productRetailer; + + private ViewHolder(View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.productimage); + imageView.setOnClickListener(this); + productName = itemView.findViewById(R.id.productname); + productPrice = itemView.findViewById(R.id.productprice); + productRetailer = itemView.findViewById(R.id.productretailer); + } + + @Override + public void onClick(View v) { + int position = getAdapterPosition(); + showPopupMenu(v,position); + } + } + + private void showPopupMenu(View view, int position) { + PopupMenu popup = new PopupMenu(context, view); + MenuInflater inflater = popup.getMenuInflater(); + inflater.inflate(R.menu.menu_favourites, popup.getMenu()); + popup.setOnMenuItemClickListener(new MenuClickListener(position)); + popup.show(); + } + + class MenuClickListener implements PopupMenu.OnMenuItemClickListener { + Integer pos; + private MenuClickListener(int pos) { + this.pos=pos; + } + + @Override + public boolean onMenuItemClick(MenuItem menuItem) { + switch (menuItem.getItemId()) { + case R.id.action_remove: + SharedPreferences pref = MyApplication.getInstance().getSharedPreferences("Favourites", 0); + SharedPreferences.Editor editor = pref.edit(); + editor.remove(products.get(pos).getproductCode()); + editor.apply(); + + Intent intent_Favourites = new Intent(context, Favourites.class); + intent_Favourites.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + context.startActivity(intent_Favourites); + + Toast.makeText(context, "Produkt \"" + products.get(pos).getproductName() + "\" został usunięty z Obserwowanych.", + Toast.LENGTH_SHORT).show(); + return true; + case R.id.action_favourite_details: + Intent intent_Popup = new Intent(context, Popup.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + Bundle bundle = new Bundle(); + + bundle.putSerializable("productimage", products.get(pos).getImageLink()); + bundle.putSerializable("productcode", products.get(pos).getproductCode()); + bundle.putSerializable("productname", products.get(pos).getproductName()); + bundle.putSerializable("productprice", products.get(pos).getproductPrice()); + bundle.putSerializable("productretailer", products.get(pos).getproductRetailer()); + bundle.putSerializable("productcolour", products.get(pos).getproductColour()); + bundle.putSerializable("productstyle", products.get(pos).getproductStyle()); + bundle.putSerializable("productcollection", products.get(pos).getproductCollection()); + + intent_Popup.putExtras(bundle); + + context.startActivity(intent_Popup); + return true; + default: + } + return false; + } + } +} diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/MainActivity.java b/Lookify/app/src/main/java/com/example/lookifyv2/MainActivity.java index d009694..fddd9f4 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/MainActivity.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/MainActivity.java @@ -2,6 +2,7 @@ package com.example.lookifyv2; import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; +import android.graphics.PorterDuff; import android.os.Bundle; import android.view.View; import android.widget.Button; @@ -14,8 +15,7 @@ public class MainActivity extends AppCompatActivity { Button button_scan; Button button_help; Button button_about; - - Button button_results; + Button button_favourites; @Override protected void onCreate(Bundle savedInstanceState) { @@ -23,10 +23,13 @@ public class MainActivity extends AppCompatActivity { setContentView(R.layout.activity_main); button_scan = findViewById(R.id.scan_start_button); + button_scan.getBackground().setColorFilter(0xFF67BAFF, PorterDuff.Mode.MULTIPLY); button_help = findViewById(R.id.help_start_button); + button_help.getBackground().setColorFilter(0xFF67BAFF, PorterDuff.Mode.MULTIPLY); button_about = findViewById(R.id.about_start_button); - - button_results = findViewById(R.id.results_start_button); + button_about.getBackground().setColorFilter(0xFF67BAFF, PorterDuff.Mode.MULTIPLY); + button_favourites = findViewById(R.id.favourites_start_button); + button_favourites.getBackground().setColorFilter(0xFF67BAFF, PorterDuff.Mode.MULTIPLY); button_scan.setOnClickListener(new View.OnClickListener() { @Override @@ -46,11 +49,10 @@ public class MainActivity extends AppCompatActivity { openAbout(); } }); - - button_results.setOnClickListener(new View.OnClickListener() { + button_favourites.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - openResults(); + openFavourites(); } }); @@ -87,10 +89,8 @@ public class MainActivity extends AppCompatActivity { startActivity(intent_Scan); } - public void openResults(){ - Intent intent_Results = new Intent(this, Results.class); - startActivity(intent_Results); + public void openFavourites(){ + Intent intent_Favourites = new Intent(this, Favourites.class); + startActivity(intent_Favourites); } - - } diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/MyApplication.java b/Lookify/app/src/main/java/com/example/lookifyv2/MyApplication.java new file mode 100644 index 0000000..ea86bca --- /dev/null +++ b/Lookify/app/src/main/java/com/example/lookifyv2/MyApplication.java @@ -0,0 +1,19 @@ +package com.example.lookifyv2; + +import android.app.Application; + +//https://stackoverflow.com/a/12405879/12566206 +public class MyApplication extends Application { + private static MyApplication instance; + + @Override + public void onCreate() { + super.onCreate(); + instance = this; + } + + public static MyApplication getInstance() { + return instance; + } +} + diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/Popup.java b/Lookify/app/src/main/java/com/example/lookifyv2/Popup.java index 3298d78..3d08800 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/Popup.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/Popup.java @@ -1,6 +1,8 @@ package com.example.lookifyv2; import androidx.appcompat.app.AppCompatActivity; + +import android.graphics.PorterDuff; import android.os.Bundle; import android.text.Html; import android.view.View; @@ -40,6 +42,7 @@ public class Popup extends AppCompatActivity { productCollection.setText(Html.fromHtml("" + "Kolekcja:" + " " + bundle.getSerializable("productcollection"))); button_back = findViewById(R.id.back_button); + button_back.getBackground().setColorFilter(0xFF67BAFF, PorterDuff.Mode.MULTIPLY); button_back.setOnClickListener(new View.OnClickListener() { @Override diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/ProductsAdapter.java b/Lookify/app/src/main/java/com/example/lookifyv2/ProductsAdapter.java index ad16d4d..e9c27d7 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/ProductsAdapter.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/ProductsAdapter.java @@ -3,6 +3,7 @@ package com.example.lookifyv2; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.content.Context; import androidx.recyclerview.widget.RecyclerView; @@ -18,8 +19,11 @@ import android.widget.TextView; import android.widget.Toast; import com.bumptech.glide.Glide; +import com.google.common.collect.Lists; +import java.util.ArrayList; import java.util.List; +import java.util.Map; public class ProductsAdapter extends RecyclerView.Adapter{ @@ -94,8 +98,25 @@ public class ProductsAdapter extends RecyclerView.Adapter codes = pref.getAll(); + ArrayList codeslist = Lists.newArrayList(codes.keySet()); + int checker = 0; + for(int i = 0; i < codeslist.size(); i++){ + if(products.get(pos).getproductCode().equals(codeslist.get(i))){ + checker = -1; + Toast.makeText(context, "Ten produkt jest już obserwowany!", + Toast.LENGTH_SHORT).show(); + break; + } + } + if(checker == 0){ + editor.putBoolean(products.get(pos).getproductCode(), true); + editor.apply(); //commit? + Toast.makeText(context, "Produkt \"" + products.get(pos).getproductName() + "\" został dodany do Obserwowanych.", + Toast.LENGTH_SHORT).show(); + } return true; case R.id.action_details: Intent intent_Popup = new Intent(context, Popup.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/Results.java b/Lookify/app/src/main/java/com/example/lookifyv2/Results.java index c1bf979..13934cd 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/Results.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/Results.java @@ -5,6 +5,8 @@ import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.PorterDuff; import android.os.Bundle; import android.os.AsyncTask; @@ -108,7 +110,7 @@ public class Results extends AppCompatActivity { protected void onPostExecute(Void aVoid) { adapter.notifyDataSetChanged(); - /* + Bundle extras = getIntent().getExtras(); decodedCode = extras.getString("decodedcode"); @@ -124,8 +126,8 @@ public class Results extends AppCompatActivity { startActivity(intent_DecodeFail); finish(); } -*/ - int foundPosition = 2; //TESTESTSRETSTETSTETT + + //int foundPosition = 2; //TESTESTSRETSTETSTETT ImageView imageView = findViewById(R.id.foundproductimage); TextView foundProductPrice = findViewById(R.id.foundproductprice); @@ -138,7 +140,9 @@ public class Results extends AppCompatActivity { getFoundProductRetailer.setText(products.get(foundPosition).getproductRetailer()); button_favourite = findViewById(R.id.favourite_button); + button_favourite.getBackground().setColorFilter(0xFF67BAFF, PorterDuff.Mode.MULTIPLY); button_details = findViewById(R.id.details_button); + button_details.getBackground().setColorFilter(0xFF67BAFF, PorterDuff.Mode.MULTIPLY); final int finalFoundPosition = foundPosition; button_favourite.setOnClickListener(new View.OnClickListener() { @@ -180,11 +184,28 @@ public class Results extends AppCompatActivity { } public void addFavourite(Context context, int position){ - Toast.makeText(context, "Produkt \"" + products.get(position).getproductName() + "\" został dodany do obserwowanych", - Toast.LENGTH_SHORT).show(); + SharedPreferences pref = MyApplication.getInstance().getSharedPreferences("Favourites", 0); + SharedPreferences.Editor editor = pref.edit(); + Map codes = pref.getAll(); + ArrayList codeslist = Lists.newArrayList(codes.keySet()); + int checker = 0; + for(int i = 0; i < codeslist.size(); i++){ + if(products.get(position).getproductCode().equals(codeslist.get(i))){ + checker = -1; + Toast.makeText(context, "Ten produkt jest już obserwowany!", + Toast.LENGTH_SHORT).show(); + break; + } + } + if(checker == 0){ + editor.putBoolean(products.get(position).getproductCode(), true); + editor.apply(); //commit? + Toast.makeText(context, "Produkt \"" + products.get(position).getproductName() + "\" został dodany do Obserwowanych.", + Toast.LENGTH_SHORT).show(); + } } - public void getRecommendedProducts(int foundpos){ + private void getRecommendedProducts(int foundpos){ HashMap ranking = new HashMap<>(); for(int i = 0; i < products.size(); i++) { if (products.get(foundpos).getId() != products.get(i).getId() @@ -221,8 +242,6 @@ public class Results extends AppCompatActivity { List> rankinglist = Lists.newArrayList(ranking.entrySet()); Collections.sort(rankinglist, byMapValues.reverse()); - - for(int i = 0; i < 6; i++) { productstop6.add(products.get(rankinglist.get(i).getKey())); } diff --git a/Lookify/app/src/main/res/layout/activity_about.xml b/Lookify/app/src/main/res/layout/activity_about.xml index bf1466c..1211539 100644 --- a/Lookify/app/src/main/res/layout/activity_about.xml +++ b/Lookify/app/src/main/res/layout/activity_about.xml @@ -15,6 +15,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + android:textColor="#000000"/> \ No newline at end of file diff --git a/Lookify/app/src/main/res/layout/activity_decode.xml b/Lookify/app/src/main/res/layout/activity_decode.xml index ea9b055..0b09738 100644 --- a/Lookify/app/src/main/res/layout/activity_decode.xml +++ b/Lookify/app/src/main/res/layout/activity_decode.xml @@ -15,6 +15,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + android:textColor="#000000"/> \ No newline at end of file diff --git a/Lookify/app/src/main/res/layout/activity_decode_fail.xml b/Lookify/app/src/main/res/layout/activity_decode_fail.xml index abaf127..42f5335 100644 --- a/Lookify/app/src/main/res/layout/activity_decode_fail.xml +++ b/Lookify/app/src/main/res/layout/activity_decode_fail.xml @@ -28,7 +28,8 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + android:textColor="#FFFFFF"/>