diff --git a/Lookify/app/src/main/AndroidManifest.xml b/Lookify/app/src/main/AndroidManifest.xml index 607901c..fe7855d 100644 --- a/Lookify/app/src/main/AndroidManifest.xml +++ b/Lookify/app/src/main/AndroidManifest.xml @@ -40,5 +40,4 @@ - \ No newline at end of file diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/About.java b/Lookify/app/src/main/java/com/example/lookifyv2/About.java index 5a2ba5b..fa311be 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/About.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/About.java @@ -1,7 +1,6 @@ package com.example.lookifyv2; import androidx.appcompat.app.AppCompatActivity; - import android.os.Bundle; public class About extends AppCompatActivity { @@ -11,10 +10,12 @@ public class About extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); + //Do strzałki powrotu w górnej części ekranu. assert getSupportActionBar() != null; getSupportActionBar().setDisplayHomeAsUpEnabled(true); } + //Kliknięcie strzałki powrotu kończy activity. @Override public boolean onSupportNavigateUp(){ finish(); diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/CheckInternet.java b/Lookify/app/src/main/java/com/example/lookifyv2/CheckInternet.java index 5e6c128..27aecfc 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/CheckInternet.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/CheckInternet.java @@ -2,13 +2,13 @@ package com.example.lookifyv2; import java.io.IOException; -public class CheckInternet { +class CheckInternet { - //rozwiązanie zaczerpnięte z https://stackoverflow.com/a/27312494/12566206 - public boolean isOnline() { + //Rozwiązanie zaczerpnięte z https://stackoverflow.com/a/27312494/12566206. + boolean isOnline() { Runtime runtime = Runtime.getRuntime(); try { - Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); + Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); //pinguje DNS Google int exitValue = ipProcess.waitFor(); return (exitValue == 0); } 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 b272cc6..147c4d1 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/Decode.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/Decode.java @@ -35,21 +35,22 @@ import static org.opencv.imgproc.Imgproc.THRESH_BINARY; public class Decode extends AppCompatActivity { - //inicjacja logów OpenCV - private static final String TAG = "OCVSample::Activity"; + //Inicjalizacja logów OpenCV. + static final String TAG = "OCVSample::Activity"; String filePath; Mat matPic; //OpenCV domyślnie uruchamia się po onCreate co powoduje problemy - zapobiegamy więc temu, zapewniając, by metoda wykorzystująca OpenCV - //uruchamiała się dopiero po jego pomyślnym załadowaniu + //uruchamiała się dopiero po jego pomyślnym załadowaniu. + //https://docs.opencv.org/2.4/platforms/android/service/doc/BaseLoaderCallback.html private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: { Log.i(TAG, "OpenCV loaded successfully"); - decodePic(); + decodePic(); //w praktyce tu się uruchamia cała reszta klasy } break; default: { @@ -66,13 +67,15 @@ public class Decode extends AppCompatActivity { setContentView(R.layout.activity_decode); } - public void decodePic() { + private void decodePic() { + //Pobieranie adresu pliku przekazanego przez poprzednie activity. + Bundle extras = getIntent().getExtras(); + filePath = extras.getString("takenPic"); - //Obsługa sytuacji, w której nie ma dostępu do internetu + //Obsługa sytuacji, w której nie ma dostępu do internetu - zrobione zdjęcie zostaje usunięte i następuje przejście do klasy + //odpowiedzialnej za błędy tej części aplikacji. CheckInternet check = new CheckInternet(); if(!check.isOnline()){ - Bundle extras = getIntent().getExtras(); - filePath = extras.getString("takenPic"); File filefordeletion = new File(filePath); filefordeletion.delete(); @@ -82,9 +85,7 @@ public class Decode extends AppCompatActivity { finish(); } - //Pobieranie adresu pliku przekazanego przez poprzednie activity, tworzenie mata ze zdjęcia i usuwanie zdjęcia - Bundle extras = getIntent().getExtras(); - filePath = extras.getString("takenPic"); + //Tworzenie mata ze zdjęcia i usuwanie zdjęcia. matPic = Imgcodecs.imread(filePath); File filefordeletion = new File(filePath); filefordeletion.delete(); @@ -92,24 +93,30 @@ public class Decode extends AppCompatActivity { Mat matPicGB = new Mat(); Mat matPicGBT = new Mat(); - //Zdjęcie zamieniane jest na czarno-biały odpowiednik + //Zdjęcie zamieniane jest na czarno-biały odpowiednik. + //Na podstawie: Amgad Muhammad - OpenCV Android Programming By Example (43% e-booka). Imgproc.cvtColor(matPic, matPicG, Imgproc.COLOR_RGB2GRAY); - //Usuwanie "noise'u" przy jednoczesnym zachowywaniu ostrych krawędzi za pomocą bilateralnego filtru + //Usuwanie "noise'u" przy jednoczesnym zachowywaniu ostrych krawędzi za pomocą bilateralnego filtru. + //Na podstawie: Daniel Lelis Baggio - OpenCV 3.0 Computer Vision with Java (s. 52). Imgproc.bilateralFilter(matPicG, matPicGB, 5, 75, 75); - //Zwiększanie kontrastu za pomocą thresholdu + //Zwiększanie kontrastu za pomocą thresholdu. + //Na podstawie: Salil Kapur, Nisarg Thakkar - Mastering OpenCV Android Application Programming (s. 19). Imgproc.threshold(matPicGB, matPicGBT, 100, 255, THRESH_BINARY); - //przygotowywanie mapy bitowej, którą przeskanuje ZXing w poszukiwaniu kodu - Bitmap bMap = Bitmap.createBitmap(matPicGBT.width(), matPicGBT.height(), Bitmap.Config.ARGB_8888); //zwykła mapa wbudowana w jave/android studio + //Przygotowywanie mapy bitowej, którą przeskanuje ZXing w poszukiwaniu kodu. + Bitmap bMap = Bitmap.createBitmap(matPicGBT.width(), matPicGBT.height(), Bitmap.Config.ARGB_8888); //Zwykła mapa wbudowana w + //Javę/Android Studio. Utils.matToBitmap(matPicGBT, bMap); int[] intArray = new int[bMap.getWidth() * bMap.getHeight()]; - bMap.getPixels(intArray, 0, bMap.getWidth(), 0, 0, bMap.getWidth(), bMap.getHeight()); - LuminanceSource source = new RGBLuminanceSource(bMap.getWidth(), bMap.getHeight(), intArray); //zamienia różne formaty map na jedną spójną postać; pozwala wykonać nastepny krok + bMap.getPixels(intArray, 0, bMap.getWidth(), 0, 0, bMap.getWidth(), bMap.getHeight()); //intArray otrzymuje dane o kolorach + //pikseli. + LuminanceSource source = new RGBLuminanceSource(bMap.getWidth(), bMap.getHeight(), intArray); //Zamienia różne formaty map na jedną + //spójną postać; pozwala wykonać nastepny krok. BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); - //Zwiększanie efektywności wykrywania kodów + //Zwiększanie efektywności wykrywania kodów. Hashtable hints = new Hashtable<>(); List formats = new ArrayList<>(); @@ -132,8 +139,10 @@ public class Decode extends AppCompatActivity { hints.put(DecodeHintType.POSSIBLE_FORMATS, formats); hints.put(DecodeHintType.TRY_HARDER, true); - int reminder = 0; - //Szukanie kodu na wczytanym zdjęciu i podejmowanie odpowiednich działań w zależności od tego, czy został znaleziony, czy nie + int reminder = 0; //Aplikacja zawsze jest trochę w przód z wykonywaniem kodu nawet po wywołaniu finish(), więc ta zmienna gwarantuje + //brak wyświetlania kodu, jeśli nie został on znaleziony. + + //Szukanie kodu na wczytanym zdjęciu i podejmowanie odpowiednich działań w zależności od tego, czy został znaleziony, czy nie. MultiFormatReader reader = new MultiFormatReader(); String contents = null; try { @@ -157,7 +166,8 @@ public class Decode extends AppCompatActivity { } } - //Druga część potrzebna do ładowania OpenCV w odpowiednim momencie, czyli gdy aplikacja była zminimalizowana, a teraz zostaje z powrotem zmaksymalizowana + //Druga część potrzebna do ładowania OpenCV w odpowiednim momencie, czyli gdy aplikacja była zminimalizowana, a teraz zostaje z powrotem + //zmaksymalizowana. @Override protected void onResume() { super.onResume(); 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 ca11e34..65e6b46 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/DecodeFail.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/DecodeFail.java @@ -18,10 +18,11 @@ public class DecodeFail extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_decode_fail); + //Do strzałki powrotu w górnej części ekranu. assert getSupportActionBar() != null; getSupportActionBar().setDisplayHomeAsUpEnabled(true); - //Pobieranie informacji o rodzaju błędu od Decode i wyświetlanie odpowiedniego komunikatu w zależności od tego rodzaju + //Pobieranie informacji o rodzaju błędu od Decode i wyświetlanie odpowiedniego komunikatu w zależności od tego rodzaju. Bundle extras = getIntent().getExtras(); status = extras.getString("status"); showMessage(status); @@ -36,13 +37,13 @@ public class DecodeFail extends AppCompatActivity { }); } - public void openScan(){ + private void openScan(){ Intent intent_Scan = new Intent(this, TakePhoto.class); startActivity(intent_Scan); finish(); } - public void showMessage(String status){ + private void showMessage(String status){ if(status.equals("notfound")){ TextView message = findViewById(R.id.text_notfound); message.setVisibility(View.VISIBLE); @@ -57,6 +58,7 @@ public class DecodeFail extends AppCompatActivity { } } + //Kliknięcie strzałki powrotu kończy activity. @Override public boolean onSupportNavigateUp(){ finish(); diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/Favourites.java b/Lookify/app/src/main/java/com/example/lookifyv2/Favourites.java index 58f3e61..f202f90 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/Favourites.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/Favourites.java @@ -30,17 +30,18 @@ import okhttp3.Response; public class Favourites extends AppCompatActivity { - private List products; - private List favourites; - private RecyclerView recyclerView; - private GridLayoutManager gridLayout; - private FavouritesAdapter adapter; + List products; + List favourites; + RecyclerView recyclerView; + GridLayoutManager gridLayout; + FavouritesAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_favourites); + //Do strzałki powrotu w górnej części ekranu. assert getSupportActionBar() != null; getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -80,7 +81,7 @@ public class Favourites extends AppCompatActivity { protected Void doInBackground(Void... Void) { OkHttpClient client = new OkHttpClient(); - Request request = new Request.Builder().url("http://192.168.0.87/products.php?id=0").build(); + Request request = new Request.Builder().url("http://192.168.0.88/products.php?id=0").build(); try { Response response = client.newCall(request).execute(); @@ -118,8 +119,8 @@ public class Favourites extends AppCompatActivity { asyncTask.execute(); } - //z preferencji odczytywane są kody obserwowanych produktów, jeśli nie ma żadnego wyświetlana jest odpowiednia wiadomość - //następnie pozycje kodów na liscie products są ustalane i za ich pomocą odpowiednie elementy tej listy kopiowane są do nowej listy z obserwowanymi + //Z preferencji odczytywane są kody obserwowanych produktów, jeśli nie ma żadnego wyświetlana jest odpowiednia wiadomość. + //Następnie pozycje kodów na liscie products są ustalane i za ich pomocą odpowiednie elementy tej listy kopiowane są do nowej listy z obserwowanymi. private void getFavourites() { SharedPreferences pref = MyApplication.getInstance().getSharedPreferences("Favourites", 0); Map codes = pref.getAll(); @@ -144,6 +145,8 @@ public class Favourites extends AppCompatActivity { } } } + + //Kliknięcie strzałki powrotu kończy activity. @Override public boolean onSupportNavigateUp(){ finish(); diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/FavouritesAdapter.java b/Lookify/app/src/main/java/com/example/lookifyv2/FavouritesAdapter.java index 8f9d8e8..6950cf5 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/FavouritesAdapter.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/FavouritesAdapter.java @@ -20,6 +20,7 @@ import com.bumptech.glide.Glide; import java.util.List; +//klasa napisana z pomocą tutorialu z http://androidbash.com/connecting-android-app-to-a-database-using-php-and-mysql/ public class FavouritesAdapter extends RecyclerView.Adapter{ private Context context; @@ -52,12 +53,12 @@ public class FavouritesAdapter extends RecyclerView.Adapter" + "Kod produktu:" + " " + bundle.getSerializable("productcode"))); @@ -42,6 +43,7 @@ public class Popup extends AppCompatActivity { productCollection.setText(Html.fromHtml("" + "Kolekcja:" + " " + bundle.getSerializable("productcollection"))); } + //Kliknięcie strzałki powrotu kończy Activity. @Override public boolean onSupportNavigateUp(){ finish(); diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/Product.java b/Lookify/app/src/main/java/com/example/lookifyv2/Product.java index 31f8371..0a556eb 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/Product.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/Product.java @@ -1,7 +1,7 @@ package com.example.lookifyv2; -//klasa stworzona na podstawie podobnej z http://androidbash.com/connecting-android-app-to-a-database-using-php-and-mysql/ -//jest po prostu obiektem produktu ze wszystkimi jego danymi i metodami te dane zwracającymi +//Klasa stworzona na podstawie podobnej z http://androidbash.com/connecting-android-app-to-a-database-using-php-and-mysql/. +//Jest po prostu obiektem produktu ze wszystkimi jego danymi i metodami te dane zwracającymi. public class Product{ private int id; @@ -31,7 +31,7 @@ public class Product{ this.productSex = productSex; } - public int getId() { + int getId() { return id; } String getImageLink() { return imageLink; } 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 6ae6ad5..2d2b2f3 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/ProductsAdapter.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/ProductsAdapter.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +//Klasa napisana z pomocą tutorialu z http://androidbash.com/connecting-android-app-to-a-database-using-php-and-mysql/. public class ProductsAdapter extends RecyclerView.Adapter{ private Context context; @@ -33,7 +34,7 @@ public class ProductsAdapter extends RecyclerView.Adapter products; - private List productstop6; - private ProductsAdapter adapter; + List products; + List productstop6; + ProductsAdapter adapter; String decodedCode; Button button_favourite; Button button_details; @@ -51,29 +51,29 @@ public class Results extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_results); + //Do strzałki powrotu w górnej części ekranu. assert getSupportActionBar() != null; getSupportActionBar().setDisplayHomeAsUpEnabled(true); RecyclerView recyclerView = findViewById(R.id.recyclerview); products = new ArrayList<>(); productstop6 = new ArrayList<>(); - getProductsFromDB(); //ładuje wszystkie produktu z bazy do listy products, a następnie najbardziej podobne 6 do productstop6 + getProductsFromDB(); //Ładuje wszystkie produkty z bazy do listy products, a następnie najbardziej podobne 6 do productstop6. - GridLayoutManager gridLayout = new GridLayoutManager(this, 2); //recyclerview do implementacji potrzebuje managera, spancount to w praktyce wielkość kafelków + GridLayoutManager gridLayout = new GridLayoutManager(this, 2); //Recyclerview do implementacji potrzebuje managera, + //spancount to w praktyce wielkość kafelków. recyclerView.setLayoutManager(gridLayout); - adapter = new ProductsAdapter(this, productstop6); //adapter ładuje dane z jakiegoś datasetu aplikacji do kafelków + adapter = new ProductsAdapter(this, productstop6); //Adapter ładuje dane z jakiegoś datasetu aplikacji do kafelków. recyclerView.setAdapter(adapter); } private void getProductsFromDB() { - @SuppressLint("StaticFieldLeak") AsyncTask asyncTask = new AsyncTask() { @Override protected Void doInBackground(Void... Void) { - - OkHttpClient client = new OkHttpClient(); //zewnętrzna biblioteka wykorzystana do nawiązania połączenia - Request request = new Request.Builder().url("http://192.168.0.87/products.php?id=0").build(); + OkHttpClient client = new OkHttpClient(); //Zewnętrzna biblioteka wykorzystana do nawiązania połączenia. + Request request = new Request.Builder().url("http://192.168.0.88/products.php?id=0").build(); try { Response response = client.newCall(request).execute(); @@ -101,15 +101,15 @@ public class Results extends AppCompatActivity { return null; } - //dopiero po utworzeniu listy wszystkich produktów po stronie aplikacji wykonywane są dalsze operacje, stąd onPostExecute + //Dopiero po utworzeniu listy wszystkich produktów po stronie aplikacji wykonywane są dalsze operacje, stąd onPostExecute. @Override protected void onPostExecute(Void aVoid) { - adapter.notifyDataSetChanged(); //w praktyce informuje adapter, by odświeżył view którym zarząda, bo zmieniły się dane + adapter.notifyDataSetChanged(); //W praktyce informuje adapter, by odświeżył View którym zarząda, bo zmieniły się dane. Bundle extras = getIntent().getExtras(); decodedCode = extras.getString("decodedcode"); - //ustalana jest lokacja zeskanowanego kodu w bazie; jeśli go tam nie ma to następuje przeniesienie do ekranu błędu + //Ustalana jest lokacja zeskanowanego kodu w bazie; jeśli go tam nie ma, to następuje przeniesienie do ekranu błędu. int foundPosition = -1; for(int i = 0; i < products.size(); i++){ if(decodedCode.equals(products.get(i).getproductCode())){ @@ -129,7 +129,9 @@ public class Results extends AppCompatActivity { TextView foundProductName = findViewById(R.id.foundproductname); TextView getFoundProductRetailer = findViewById(R.id.foundproductretailer); + //Do załadowania obrazka używana jest zewnętrzna biblioteka Glide. Glide.with(Results.this).load(products.get(foundPosition).getImageLink()).into(imageView); + foundProductPrice.setText(products.get(foundPosition).getproductPrice()); foundProductName.setText(products.get(foundPosition).getproductName()); getFoundProductRetailer.setText(products.get(foundPosition).getproductRetailer()); @@ -139,7 +141,8 @@ public class Results extends AppCompatActivity { button_details = findViewById(R.id.details_button); button_details.getBackground().setColorFilter(0xFF67BAFF, PorterDuff.Mode.MULTIPLY); - final int finalFoundPosition = foundPosition; + final int finalFoundPosition = foundPosition; //Constant, jej wartości nie da się zmienić, tutaj wykorzystana bo były błędy + //ze zwykłym intem. button_favourite.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -159,7 +162,7 @@ public class Results extends AppCompatActivity { asyncTask.execute(); } - public void openDetails(int position){ + private void openDetails(int position){ Intent intent_Details = new Intent(this, Popup.class); Bundle bundle = new Bundle(); @@ -178,9 +181,10 @@ public class Results extends AppCompatActivity { startActivity(intent_Details); } - //do zapisywania obserwowanych produktów wykorzystany został niekonwencjonalnie depozyt preferencji użytkownika - //sprawdzana jest obecność kodu w depozycie i podejmowana odpowiednia akcja: albo dodanie go, albo wyświetlenie informacji, że już jest dodany - public void addFavourite(Context context, int position){ + //Do zapisywania obserwowanych produktów wykorzystany został niekonwencjonalnie depozyt preferencji użytkownika. + //Sprawdzana jest obecność kodu w depozycie i podejmowana odpowiednia akcja: albo dodanie go, albo wyświetlenie informacji, + //że już jest dodany. + private void addFavourite(Context context, int position){ SharedPreferences pref = MyApplication.getInstance().getSharedPreferences("Favourites", 0); SharedPreferences.Editor editor = pref.edit(); Map codes = pref.getAll(); @@ -202,7 +206,7 @@ public class Results extends AppCompatActivity { } } - //Prostu algorytm jest wykorzystywany, by stworzyć ranking produktów podobne do tego zeskanowanego. Można znacznie rozbudować. + //Prostu algorytm jest wykorzystywany, by stworzyć ranking produktów podobnych do tego zeskanowanego. Można znacznie rozbudować! private void getRecommendedProducts(int foundpos){ HashMap ranking = new HashMap<>(); for(int i = 0; i < products.size(); i++) { @@ -234,21 +238,23 @@ public class Results extends AppCompatActivity { else{ Ordering> byMapValues = new Ordering>() { @Override - public int compare(Map.Entry left, Map.Entry right) { //ustalany jest sposób sortowania + public int compare(Map.Entry left, Map.Entry right) { //Ustalany jest sposób sortowania. return left.getValue().compareTo(right.getValue()); } }; - List> rankinglist = Lists.newArrayList(ranking.entrySet()); //tworzona jest lista z zawartością mapy, - //by móc użyć metody sort (ze zdefiniowanym sposobem sortowania) + List> rankinglist = Lists.newArrayList(ranking.entrySet()); //Tworzona jest lista z zawartością mapy, + //by móc użyć metody sort (ze zdefiniowanym sposobem sortowania). Collections.sort(rankinglist, byMapValues.reverse()); - for(int i = 0; i < 6; i++) { + int i = 0; + while(i < 6 && i < ranking.size()) { productstop6.add(products.get(rankinglist.get(i).getKey())); + i++; } } - } + //Kliknięcie strzałki powrotu kończy activity. @Override public boolean onSupportNavigateUp(){ finish(); diff --git a/Lookify/app/src/main/java/com/example/lookifyv2/TakePhoto.java b/Lookify/app/src/main/java/com/example/lookifyv2/TakePhoto.java index 239cb24..b44a972 100644 --- a/Lookify/app/src/main/java/com/example/lookifyv2/TakePhoto.java +++ b/Lookify/app/src/main/java/com/example/lookifyv2/TakePhoto.java @@ -5,15 +5,13 @@ import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; - import androidx.appcompat.app.AppCompatActivity; - import java.io.File; -//klasa napisana z pomocą tutorialu dostępnego na https://androidkennel.org/android-camera-access-tutorial/ +//Klasa napisana z pomocą tutorialu dostępnego na https://androidkennel.org/android-camera-access-tutorial/. public class TakePhoto extends AppCompatActivity { - public File photoFile; + File photoFile; String path; @Override @@ -23,21 +21,26 @@ public class TakePhoto extends AppCompatActivity { openCamera(); } - //Uruchomienie androidowego modułu kamery - public void openCamera() { + //Uruchomienie androidowego modułu kamery. + private void openCamera() { Intent intent_Camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); photoFile = getOutputMediaFile(); - Uri photoFileUri = Uri.fromFile(photoFile); - intent_Camera.putExtra(MediaStore.EXTRA_OUTPUT, photoFileUri); - startActivityForResult(intent_Camera, 100); //w przeciwieństwie do startActivity zwraca wynik w postaci Intentu odbieranego poniżej + Uri photoFileUri = Uri.fromFile(photoFile); //Zgodny z pewnym standardem łańcuch znaków. + intent_Camera.putExtra(MediaStore.EXTRA_OUTPUT, photoFileUri); //Kamera "wypełnia" przekazany jej pusty plik. + startActivityForResult(intent_Camera, 100); //W przeciwieństwie do startActivity zwraca wynik w postaci Intentu odbieranego + //poniżej. } - //Jeśli moduł kamery zostanie zamknięty zanim zrobione zostanie zdjęcie to activity skanowania się kończy, w innym razie przechodzi dalej + //Jeśli moduł kamery zostanie zamknięty zanim zrobione zostanie zdjęcie to activity skanowania się kończy i "puste" zdjęcie zostaje usunięte, + //w innym razie przechodzi dalej. @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); + path = photoFile.getAbsolutePath(); if (requestCode == 100) { if (resultCode == RESULT_CANCELED) { + File filefordeletion = new File(path); + filefordeletion.delete(); finish(); } else { goDecode(); @@ -45,13 +48,14 @@ public class TakePhoto extends AppCompatActivity { } } - //Tworzenie katalogu dla danych aplikacji jesli nie istnieje; umieszczanie w nim tymczasowego pliku zdjecia w formacie .jpg + //Tworzenie katalogu dla danych aplikacji jesli nie istnieje; umieszczanie w nim tymczasowego pliku zdjecia w formacie .jpg. private static File getOutputMediaFile() { File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory( - Environment.DIRECTORY_PICTURES), "Lookify"); + Environment.DIRECTORY_PICTURES), "Lookify"); //Pozyskiwanie ścieżki do publicznego katalogu z obrazami z podkatalogiem + //dla naszej aplikacji. - if (!mediaStorageDir.exists()) { - if (!mediaStorageDir.mkdirs()) { + if (!mediaStorageDir.exists()) { //Jeśli katalog z powyższej ścieżki nie istnieje... + if (!mediaStorageDir.mkdirs()) { //...stwórz go; jeśli to niemożliwe, zwróć null. return null; } } @@ -60,9 +64,8 @@ public class TakePhoto extends AppCompatActivity { "TEMP" + ".jpg"); } - //Przejście do activity odpowiedzialnego za odczytywanie kodu wraz z przekazaniem jej ścieżki zdjęcia - public void goDecode(){ - path = photoFile.getAbsolutePath(); + //Przejście do activity odpowiedzialnego za odczytywanie kodu wraz z przekazaniem jej ścieżki zdjęcia. + private void goDecode(){ Intent intent_Decode = new Intent(this, Decode.class); intent_Decode.putExtra("takenPic", path); startActivity(intent_Decode); diff --git a/Lookify/app/src/main/res/layout/activity_favourites.xml b/Lookify/app/src/main/res/layout/activity_favourites.xml index e5e7e48..9263493 100644 --- a/Lookify/app/src/main/res/layout/activity_favourites.xml +++ b/Lookify/app/src/main/res/layout/activity_favourites.xml @@ -44,13 +44,12 @@ - + android:layout_marginTop="6dp" + android:layout_marginRight="5dp" + android:scrollbars="vertical" + card_view:cardCornerRadius="4dp" + card_view:cardElevation="4dp" + card_view:cardUseCompatPadding="true" /> \ No newline at end of file diff --git a/Lookify/openCVLibrary348/build/.transforms/dbc54c4faab0b212579f7bdaf107017b.bin b/Lookify/openCVLibrary348/build/.transforms/dbc54c4faab0b212579f7bdaf107017b.bin new file mode 100644 index 0000000..0d259dd --- /dev/null +++ b/Lookify/openCVLibrary348/build/.transforms/dbc54c4faab0b212579f7bdaf107017b.bin @@ -0,0 +1 @@ +o/classes diff --git a/Lookify/openCVLibrary348/build/.transforms/dbc54c4faab0b212579f7bdaf107017b/classes/classes.dex b/Lookify/openCVLibrary348/build/.transforms/dbc54c4faab0b212579f7bdaf107017b/classes/classes.dex new file mode 100644 index 0000000..d460fb1 Binary files /dev/null and b/Lookify/openCVLibrary348/build/.transforms/dbc54c4faab0b212579f7bdaf107017b/classes/classes.dex differ diff --git a/Lookify/openCVLibrary348/build/intermediates/incremental/debug-mergeNativeLibs/merge-state b/Lookify/openCVLibrary348/build/intermediates/incremental/debug-mergeNativeLibs/merge-state index 0323466..1482461 100644 Binary files a/Lookify/openCVLibrary348/build/intermediates/incremental/debug-mergeNativeLibs/merge-state and b/Lookify/openCVLibrary348/build/intermediates/incremental/debug-mergeNativeLibs/merge-state differ diff --git a/Lookify/openCVLibrary348/build/intermediates/incremental/packageDebugResources/compile-file-map.properties b/Lookify/openCVLibrary348/build/intermediates/incremental/packageDebugResources/compile-file-map.properties index f27d9fc..ddb0df5 100644 --- a/Lookify/openCVLibrary348/build/intermediates/incremental/packageDebugResources/compile-file-map.properties +++ b/Lookify/openCVLibrary348/build/intermediates/incremental/packageDebugResources/compile-file-map.properties @@ -1 +1 @@ -#Tue Feb 25 23:39:16 CET 2020 +#Sat Jun 20 00:20:56 CEST 2020