From 692dd90ca8b8a2ab8606d4eb67a726ea1c226107 Mon Sep 17 00:00:00 2001 From: Tariel Hlontsi Date: Wed, 20 Jul 2016 11:02:01 +0300 Subject: [PATCH] Added swipe func to the item details frag --- .idea/misc.xml | 2 +- .../com/hikapro/backpack/MainActivity.java | 8 +- .../hikapro/backpack/model/DetailModel.java | 9 +- .../com/hikapro/backpack/model/Model.java | 3 +- .../com/hikapro/backpack/model/dao/DAO.java | 4 +- .../model/dao/ImageDownloadHelper.java | 102 +++++++++++++----- .../backpack/presenter/AddPresenter.java | 15 ++- .../presenter/ItemDetailPresenter.java | 102 ++++++++++++++---- .../backpack/presenter/ItemListPresenter.java | 17 ++- .../hikapro/backpack/presenter/Presenter.java | 2 +- .../presenter/adapters/ItemDetailAdapter.java | 6 +- .../presenter/adapters/ItemListAdapter.java | 9 +- .../presenter/adapters/PackedListAdapter.java | 2 +- .../adapters/helper}/FlowLayout.java | 14 +-- .../adapters/helper/OnSwipeTouchListener.java | 53 +++++++++ .../helper/items/DividerDecoration.java | 2 + .../helper/items/DividerDecoration2.java | 60 +++++++++++ .../helper/items/swipe2/SwipableRecycler.java | 10 ++ .../java/com/hikapro/backpack/view/View.java | 6 +- .../view/fragments/ItemDetailFragment.java | 11 +- .../view/fragments/ItemListFragment.java | 8 +- .../view/recycler/DetailViewHolder.java | 29 ----- .../view/recycler/ItemViewHolderCopy.java | 38 ------- app/src/main/res/drawable/cat_btn_bg.xml | 7 ++ app/src/main/res/drawable/divider.xml | 6 ++ app/src/main/res/drawable/nice_btn_bg.xml | 9 ++ .../main/res/layout/add_cust_actionbar.xml | 6 +- app/src/main/res/layout/category_button.xml | 11 +- app/src/main/res/layout/divider.xml | 4 +- app/src/main/res/layout/footer.xml | 13 +-- app/src/main/res/layout/fragment_add.xml | 92 +++++++++------- .../main/res/layout/fragment_item_detail.xml | 21 +++- .../main/res/layout/fragment_item_list.xml | 8 +- .../main/res/layout/fragment_packed_list.xml | 14 +-- app/src/main/res/layout/fragment_set_list.xml | 5 +- app/src/main/res/layout/fragment_share.xml | 2 +- app/src/main/res/layout/header_element.xml | 30 ++++++ app/src/main/res/layout/item_add.xml | 6 +- app/src/main/res/layout/item_detail.xml | 5 +- app/src/main/res/layout/item_detail_copy.xml | 37 ------- app/src/main/res/layout/item_element.xml | 4 +- .../main/res/layout/sticky_header_layout.xml | 5 +- app/src/main/res/layout/test.xml | 8 +- app/src/main/res/layout/test_actionbar.xml | 31 ------ app/src/main/res/layout/test_actionbar2.xml | 25 ----- app/src/main/res/layout/view_header.xml | 15 --- app/src/main/res/layout/view_item.xml | 64 ----------- app/src/main/res/values-v21/styles.xml | 3 + app/src/main/res/values/colors_background.xml | 17 +++ app/src/main/res/values/dimens_text.xml | 12 +++ app/src/main/res/values/strings.xml | 2 +- app/src/main/res/values/styles.xml | 14 ++- 52 files changed, 560 insertions(+), 428 deletions(-) rename app/src/main/java/com/hikapro/backpack/{ => presenter/adapters/helper}/FlowLayout.java (91%) create mode 100644 app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/OnSwipeTouchListener.java create mode 100644 app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/items/DividerDecoration2.java delete mode 100644 app/src/main/java/com/hikapro/backpack/view/recycler/DetailViewHolder.java delete mode 100644 app/src/main/java/com/hikapro/backpack/view/recycler/ItemViewHolderCopy.java create mode 100644 app/src/main/res/drawable/cat_btn_bg.xml create mode 100644 app/src/main/res/drawable/divider.xml create mode 100644 app/src/main/res/drawable/nice_btn_bg.xml create mode 100644 app/src/main/res/layout/header_element.xml delete mode 100644 app/src/main/res/layout/item_detail_copy.xml delete mode 100644 app/src/main/res/layout/test_actionbar.xml delete mode 100644 app/src/main/res/layout/test_actionbar2.xml delete mode 100644 app/src/main/res/layout/view_header.xml delete mode 100644 app/src/main/res/layout/view_item.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index 5d19981..fbb6828 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/app/src/main/java/com/hikapro/backpack/MainActivity.java b/app/src/main/java/com/hikapro/backpack/MainActivity.java index 09db3d8..a30de4c 100644 --- a/app/src/main/java/com/hikapro/backpack/MainActivity.java +++ b/app/src/main/java/com/hikapro/backpack/MainActivity.java @@ -11,6 +11,7 @@ import android.view.MenuItem; import com.hikapro.backpack.model.AddModel; import com.hikapro.backpack.model.DetailModel; import com.hikapro.backpack.model.ItemModel; +import com.hikapro.backpack.model.Model; import com.hikapro.backpack.model.PackedModel; import com.hikapro.backpack.model.SetModel; import com.hikapro.backpack.model.ShareModel; @@ -244,10 +245,10 @@ public class MainActivity extends Activity implements View.ActivityCallback { } @Override - public void startItemDetailFragment(Item item, int setId) { + public void startItemDetailFragment(int setId, Model.Item baseModel, int position) { - ItemDetailFragment view = ItemDetailFragment.newInstance(item, setId); - ItemDetailPresenter presenter = new ItemDetailPresenter(); + ItemDetailFragment view = ItemDetailFragment.newInstance(setId); + ItemDetailPresenter presenter = new ItemDetailPresenter(baseModel, position); DetailModel model = new DetailModel(); view.setPresenter(presenter); @@ -260,6 +261,7 @@ public class MainActivity extends Activity implements View.ActivityCallback { stateMaintainer.put(presenter); stateMaintainer.put(model); + } @Override diff --git a/app/src/main/java/com/hikapro/backpack/model/DetailModel.java b/app/src/main/java/com/hikapro/backpack/model/DetailModel.java index 12d9532..d3a8437 100644 --- a/app/src/main/java/com/hikapro/backpack/model/DetailModel.java +++ b/app/src/main/java/com/hikapro/backpack/model/DetailModel.java @@ -34,11 +34,17 @@ public class DetailModel implements Model.Detail { public int getCount() { return 1; } + @Override - public Item findItem(int id) { + public Item getCurrentItem() { return item; } + @Override + public void setCurrentItem(Item item) { + this.item = item; + } + @Override public Bitmap getPicture() { return pic; @@ -129,7 +135,6 @@ public class DetailModel implements Model.Detail { @Override public void setPresenter(Presenter.ItemDetail presenter) { this.presenter = presenter; - this.item = presenter.getCurrentItem(); this.currentSet = presenter.getSetId(); } diff --git a/app/src/main/java/com/hikapro/backpack/model/Model.java b/app/src/main/java/com/hikapro/backpack/model/Model.java index 292847e..c61dcaf 100644 --- a/app/src/main/java/com/hikapro/backpack/model/Model.java +++ b/app/src/main/java/com/hikapro/backpack/model/Model.java @@ -60,7 +60,8 @@ public interface Model { interface Detail extends Base { int getCount(); - com.hikapro.backpack.model.entities.Item findItem(int id); + com.hikapro.backpack.model.entities.Item getCurrentItem(); + void setCurrentItem(com.hikapro.backpack.model.entities.Item item); Bitmap getPicture(); void setPresenter(Presenter.ItemDetail presenter); Presenter.ItemDetail getPresenter(); diff --git a/app/src/main/java/com/hikapro/backpack/model/dao/DAO.java b/app/src/main/java/com/hikapro/backpack/model/dao/DAO.java index 2fbce45..8207094 100644 --- a/app/src/main/java/com/hikapro/backpack/model/dao/DAO.java +++ b/app/src/main/java/com/hikapro/backpack/model/dao/DAO.java @@ -11,6 +11,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.Process; +import android.text.TextUtils; import java.io.IOException; import java.util.ArrayList; @@ -1628,7 +1629,8 @@ public class DAO { String filename = null; if (item != null) { - bitmap = BitmapFactory.decodeFile(item.getPhotoLocal()); + if (!TextUtils.isEmpty(item.getPhotoLocal())) + bitmap = BitmapFactory.decodeFile(item.getPhotoLocal()); // cannot retrieve, download and save then if (bitmap == null) { // return it bitmap = downloadHelper.loadImage(item.getPhotoUrl()); diff --git a/app/src/main/java/com/hikapro/backpack/model/dao/ImageDownloadHelper.java b/app/src/main/java/com/hikapro/backpack/model/dao/ImageDownloadHelper.java index 8b18706..5a7c075 100644 --- a/app/src/main/java/com/hikapro/backpack/model/dao/ImageDownloadHelper.java +++ b/app/src/main/java/com/hikapro/backpack/model/dao/ImageDownloadHelper.java @@ -5,11 +5,13 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Environment; +import android.support.v4.content.ContextCompat; import android.util.Log; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.net.SocketTimeoutException; import java.net.URL; import java.net.URLConnection; @@ -20,7 +22,8 @@ import com.hikapro.backpack.App; */ public class ImageDownloadHelper { - public static final String ITEMS_TAG = "items"; + public static final String IMAGE_DOWNLOAD_TAG = "Image download"; + public static final String IMAGE_DIRECTORY_NAME = "items"; private Context context; public ImageDownloadHelper() { @@ -32,10 +35,15 @@ public class ImageDownloadHelper { try { URL url = new URL(netPath); URLConnection conn = url.openConnection(); + conn.setReadTimeout(4000); bitmap = BitmapFactory.decodeStream(conn.getInputStream()); + } catch (SocketTimeoutException ex) { + bitmap = null; + Log.e(IMAGE_DOWNLOAD_TAG, " Timeout elapsed."); } catch (Exception ex) { - Log.e(ITEMS_TAG, " File cannot be downloaded"); + Log.e(IMAGE_DOWNLOAD_TAG, " File cannot be downloaded due to exception."); } + return bitmap; } @@ -62,8 +70,9 @@ public class ImageDownloadHelper { try { file = File.createTempFile(fileName, null, context.getCacheDir()); } catch (IOException e) { - Log.e(ITEMS_TAG, " Cannot obtain temp file"); + Log.e(IMAGE_DOWNLOAD_TAG, " Cannot obtain temp file"); } + return file; } @@ -77,17 +86,25 @@ public class ImageDownloadHelper { public String saveImageInternal(String filename, Bitmap bitmap) { File file = null; - FileOutputStream outputStream; + FileOutputStream outputStream = null; if (bitmap != null && !filename.isEmpty()) { file = createTempFile(filename); if (file != null) { try { outputStream = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream); - outputStream.flush(); - outputStream.close(); } catch (Exception e) { - Log.e(ITEMS_TAG, " File cannot be saved"); + Log.e(IMAGE_DOWNLOAD_TAG, "File cannot be saved (Internal): " + e); + } finally { + + if (outputStream != null) { + try { + outputStream.flush(); + outputStream.close(); + } catch (IOException e) { + // do nothing here + } + } } } } @@ -96,18 +113,32 @@ public class ImageDownloadHelper { public String saveImageExternal(String filename, Bitmap bitmap) { File file = null; - FileOutputStream outputStream; + FileOutputStream outputStream = null; if (isExternalStorageWritable()) { if (bitmap != null && !filename.isEmpty()) { - File directory = getDir(); - file = new File(directory.getAbsoluteFile(), filename); try { - outputStream = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream); - outputStream.flush(); - outputStream.close(); + File directory = getDir(); + if (directory != null) { + file = new File(directory.getAbsoluteFile(), filename); + outputStream = new FileOutputStream(file); + bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream); + } else { + Log.e(IMAGE_DOWNLOAD_TAG, "Saving failed (External): directory unavailable."); + } } catch (Exception e) { - Log.e(ITEMS_TAG, " File cannot be saved"); + Log.e(IMAGE_DOWNLOAD_TAG, "File cannot be saved (External): " + e); + + } finally { + + if (outputStream != null) { + try { + outputStream.flush(); + outputStream.close(); + + } catch (IOException e) { + // do nothing here + } + } } } } @@ -116,30 +147,47 @@ public class ImageDownloadHelper { /* Checks if external storage is available for read and write */ public boolean isExternalStorageWritable() { + boolean ret; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { - return true; - } - return false; + ret = true; + } else + ret = false; + + return ret; } /* Checks if external storage is available to at least read */ public boolean isExternalStorageReadable() { + boolean ret; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { - return true; - } - return false; + ret = true; + } else + ret = false; + + return ret; } private File getDir() { - // Get the directory for the app's private pictures directory. - File file = new File(context.getExternalFilesDir( - Environment.DIRECTORY_PICTURES), ITEMS_TAG); - if (!file.mkdirs()) { - Log.e(ITEMS_TAG, " Directory not created"); + File ret = null; + // Get available SD cards + File[] dirs = ContextCompat.getExternalFilesDirs(context, Environment.DIRECTORY_PICTURES); + if (dirs != null) { + switch (dirs.length) { + case 1: + ret = new File(dirs[0], IMAGE_DIRECTORY_NAME); // can be emulated SD card + break; + case 2: + ret = new File(dirs[1], IMAGE_DIRECTORY_NAME);// real SD card + break; + } } - return file; + + if (!ret.mkdirs()) { + Log.e(IMAGE_DOWNLOAD_TAG, "Directory was not created or already exists."); + } + return ret; } } diff --git a/app/src/main/java/com/hikapro/backpack/presenter/AddPresenter.java b/app/src/main/java/com/hikapro/backpack/presenter/AddPresenter.java index 0db093d..ce5f535 100644 --- a/app/src/main/java/com/hikapro/backpack/presenter/AddPresenter.java +++ b/app/src/main/java/com/hikapro/backpack/presenter/AddPresenter.java @@ -28,7 +28,10 @@ import com.hikapro.backpack.model.Model; import com.hikapro.backpack.model.entities.Category; import com.hikapro.backpack.model.entities.Item; import com.hikapro.backpack.presenter.adapters.AddListAdapter; +import com.hikapro.backpack.presenter.adapters.helper.FlowLayout; +import com.hikapro.backpack.presenter.adapters.helper.Util; import com.hikapro.backpack.presenter.adapters.helper.items.DividerDecoration; +import com.hikapro.backpack.presenter.adapters.helper.items.DividerDecoration2; import com.hikapro.backpack.view.View; import java.lang.ref.WeakReference; @@ -43,7 +46,7 @@ public class AddPresenter implements Presenter.Add { private AddListAdapter adapter; private RecyclerView recycler; - private ViewGroup categoryContainer; + private FlowLayout categoryContainer; private ViewGroup categoryContainerMain; private boolean isContainerAlreadyInitialised; private Item newItem; @@ -94,8 +97,10 @@ public class AddPresenter implements Presenter.Add { recycler.setLayoutManager(llm); recycler.setAdapter(adapter); recycler.setItemAnimator(new DefaultItemAnimator()); - recycler.addItemDecoration(new DividerDecoration(getActivityContext())); - categoryContainer = (ViewGroup) view.findViewById(R.id.add_item_category_flow); + //recycler.addItemDecoration(new DividerDecoration(getActivityContext())); + recycler.addItemDecoration(new DividerDecoration2(getActivityContext(), R.drawable.divider, Util.dp2px(getAppContext(), 16))); + categoryContainer = (FlowLayout) view.findViewById(R.id.add_item_category_flow); + //categoryContainer.setPaddings(Util.dp2px(getAppContext(), 15), Util.dp2px(getAppContext(), 15)); // TODO check here categoryContainerMain = (ViewGroup) view.findViewById(R.id.add_item_category_container); categoryContainerMain.setVisibility(android.view.View.GONE); recycler.setVisibility(android.view.View.GONE); @@ -222,7 +227,9 @@ public class AddPresenter implements Presenter.Add { button = (Button) LayoutInflater.from(getActivityContext()).inflate( R.layout.category_button, null); button.setId(category.getId()); - button.setText(category.getName()); + String txt = category.getName(); + + button.setText(txt); button.setOnClickListener(new CategoryButtonClickListener()); categoryContainer.addView(button); diff --git a/app/src/main/java/com/hikapro/backpack/presenter/ItemDetailPresenter.java b/app/src/main/java/com/hikapro/backpack/presenter/ItemDetailPresenter.java index b34d6cf..5281430 100644 --- a/app/src/main/java/com/hikapro/backpack/presenter/ItemDetailPresenter.java +++ b/app/src/main/java/com/hikapro/backpack/presenter/ItemDetailPresenter.java @@ -4,18 +4,17 @@ import android.app.ActionBar; import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.ViewGroup; import android.webkit.URLUtil; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; import java.lang.ref.WeakReference; @@ -23,7 +22,10 @@ import com.hikapro.backpack.R; import com.hikapro.backpack.model.Model; import com.hikapro.backpack.model.entities.Item; import com.hikapro.backpack.presenter.adapters.ItemDetailAdapter; +import com.hikapro.backpack.presenter.adapters.helper.OnSwipeTouchListener; +import com.hikapro.backpack.presenter.adapters.helper.Util; import com.hikapro.backpack.presenter.adapters.helper.items.DividerDecoration; +import com.hikapro.backpack.presenter.adapters.helper.items.DividerDecoration2; import com.hikapro.backpack.view.View; /** @@ -33,19 +35,23 @@ public class ItemDetailPresenter implements Presenter.ItemDetail { private WeakReference view; private Model.Detail model; + private Model.Item exModel; private ItemDetailAdapter adapter; private Item item; private int setId; private ImageView itemPhoto; private TextView itemDescription; private TextView itemLink; + private int position; + private ViewGroup progress; + private OnSwipeTouchListener swipeTouchListener; - public ItemDetailPresenter() { - this.adapter = new ItemDetailAdapter(this); + public ItemDetailPresenter(Model.Item itemModel, int startPosition) { + this.adapter = new ItemDetailAdapter(this); + this.exModel = itemModel; + this.position = startPosition; } - // life cycle --> - @Override public void onDestroy(boolean isChangingConfiguration) { view = null; @@ -54,6 +60,7 @@ public class ItemDetailPresenter implements Presenter.ItemDetail { model = null; } } + @Override public android.view.View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -62,14 +69,32 @@ public class ItemDetailPresenter implements Presenter.ItemDetail { itemPhoto = (ImageView) view.findViewById(R.id.item_photo); itemDescription = (TextView) view.findViewById(R.id.item_description); itemLink = (TextView) view.findViewById(R.id.item_link); + progress = (ViewGroup) view.findViewById(R.id.detail_progress_container); + progress.setVisibility(android.view.View.VISIBLE); + swipeTouchListener = new OnSwipeTouchListener(getActivityContext()) { + @Override + public void onSwipeLeft() { + swipeLeft(); + } + + @Override + public void onSwipeRight() { + swipeRight(); + } + }; + progress.setOnTouchListener(swipeTouchListener); + itemDescription.setOnTouchListener(swipeTouchListener); LinearLayoutManager llm = new LinearLayoutManager(getActivityContext()); RecyclerView detailRecycler = (RecyclerView) view.findViewById(R.id.item_detail_recycler); detailRecycler.setLayoutManager(llm); detailRecycler.setAdapter(adapter); detailRecycler.setItemAnimator(new DefaultItemAnimator()); - detailRecycler.addItemDecoration(new DividerDecoration(getActivityContext())); + //detailRecycler.addItemDecoration(new DividerDecoration(getActivityContext())); + detailRecycler.addItemDecoration(new DividerDecoration2(getActivityContext(), R.drawable.divider, Util.dp2px(getAppContext(), 16))); + detailRecycler.setHasFixedSize(true); + model.setCurrentItem(exModel.getItemByPosition(position)); model.executeQuery(); Activity activity = (Activity) getActivityContext(); @@ -87,19 +112,24 @@ public class ItemDetailPresenter implements Presenter.ItemDetail { } return view; } + @Override public void onSaveInstanceState(Bundle outState) { } - // life cycle <-- - - // process --> @Override public void notifyDataSetChanged() { adapter.notifyDataSetChanged(); - item = model.findItem(0); - itemDescription.setText(item.getDescription()); + item = model.getCurrentItem(); + + if (!TextUtils.isEmpty(item.getDescription())) { + itemDescription.setText(item.getDescription()); + itemDescription.setVisibility(android.view.View.VISIBLE); + } else { + itemDescription.setVisibility(android.view.View.GONE); + } + if (item.getBuyUrls() != null && !item.getBuyUrls().isEmpty()) { itemLink.setVisibility(android.view.View.VISIBLE); itemLink.setOnClickListener(new android.view.View.OnClickListener() { @@ -122,16 +152,12 @@ public class ItemDetailPresenter implements Presenter.ItemDetail { } } - // process <-- - - // other impl --> - @Override public void setView(View.ItemDetail view) { this.view = new WeakReference<>(view); - this.item = getView().getItem(); this.setId = view.getSetId(); } + @Override public void setModel(Model.Detail model) { this.model = model; @@ -166,9 +192,17 @@ public class ItemDetailPresenter implements Presenter.ItemDetail { @Override public void notifyPictureChanged() { - itemPhoto.setImageBitmap(model.getPicture()); + progress.setVisibility(android.view.View.GONE); + if (model.getPicture() != null) { + itemPhoto.setImageBitmap(model.getPicture()); + itemPhoto.setVisibility(android.view.View.VISIBLE); + itemPhoto.setOnTouchListener(swipeTouchListener); + } else { + itemPhoto.setImageBitmap(null); + itemPhoto.setVisibility(android.view.View.GONE); + } + } - // other impl <-- private View.ItemDetail getView() throws NullPointerException { if ( view != null ) @@ -180,4 +214,34 @@ public class ItemDetailPresenter implements Presenter.ItemDetail { public int getSetId() { return setId; } + + private boolean isValidPosition(int position) { + boolean ret; + ret = position > -1 && position < exModel.getItemsCount(); + return ret; + } + + private void swipeLeft() { + if (isValidPosition(position + 1)) { + // start progress + progress.setVisibility(android.view.View.VISIBLE); + itemPhoto.setVisibility(android.view.View.GONE); + // load data + model.setCurrentItem(exModel.getItemByPosition(++position)); + model.executeQuery(); + itemPhoto.setImageBitmap(null); + } + } + + private void swipeRight() { + if (isValidPosition(position - 1)) { + // start progress + progress.setVisibility(android.view.View.VISIBLE); + itemPhoto.setVisibility(android.view.View.GONE); + // load data + model.setCurrentItem(exModel.getItemByPosition(--position)); + model.executeQuery(); + itemPhoto.setImageBitmap(null); + } + } } diff --git a/app/src/main/java/com/hikapro/backpack/presenter/ItemListPresenter.java b/app/src/main/java/com/hikapro/backpack/presenter/ItemListPresenter.java index 3cf6e37..90f43a3 100644 --- a/app/src/main/java/com/hikapro/backpack/presenter/ItemListPresenter.java +++ b/app/src/main/java/com/hikapro/backpack/presenter/ItemListPresenter.java @@ -21,8 +21,10 @@ import com.hikapro.backpack.R; import com.hikapro.backpack.model.Model; import com.hikapro.backpack.model.entities.Item; import com.hikapro.backpack.model.entities.Set; +import com.hikapro.backpack.presenter.adapters.helper.Util; import com.hikapro.backpack.presenter.adapters.helper.items.DividerDecoration; import com.hikapro.backpack.presenter.adapters.ItemListAdapter; +import com.hikapro.backpack.presenter.adapters.helper.items.DividerDecoration2; import com.hikapro.backpack.presenter.adapters.helper.items.ItemSwipeCallback; import com.hikapro.backpack.presenter.adapters.helper.items.StickyHeaderDecoration; import com.hikapro.backpack.view.View; @@ -75,7 +77,9 @@ public class ItemListPresenter implements Presenter.ItemList { final StickyHeaderDecoration decoration = new StickyHeaderDecoration(adapter); recycler.addItemDecoration(decoration); - recycler.addItemDecoration(new DividerDecoration(getActivityContext())); + //recycler.addItemDecoration(new DividerDecoration(getActivityContext())); + recycler.addItemDecoration(new DividerDecoration2(getActivityContext(), R.drawable.divider, Util.dp2px(getAppContext(), 16))); + adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override public void onChanged() { @@ -141,7 +145,7 @@ public class ItemListPresenter implements Presenter.ItemList { @Override public void setVisibility() { - if (model.getPackedQty() == model.getActiveItemsCount()) { + if (model.getPackedQty() > 0 && model.getPackedQty() == model.getActiveItemsCount()) { footer.setVisibility(android.view.View.VISIBLE); } else if ( model.getPackedQty() > 0) { footer.setVisibility(android.view.View.VISIBLE); @@ -157,13 +161,8 @@ public class ItemListPresenter implements Presenter.ItemList { } @Override - public void showDetails(int itemId) { - Item item = model.findItem(itemId); - if (item != null) - getView().showItemDetail(item, set.getId()); - else - showMessage(String.format("Item with Id %d is not found.", itemId)); - + public void showDetails(int position) { + getView().showItemDetail(getCurrentSet().getId(), model, position); } // process <-- diff --git a/app/src/main/java/com/hikapro/backpack/presenter/Presenter.java b/app/src/main/java/com/hikapro/backpack/presenter/Presenter.java index d83871b..8790d13 100644 --- a/app/src/main/java/com/hikapro/backpack/presenter/Presenter.java +++ b/app/src/main/java/com/hikapro/backpack/presenter/Presenter.java @@ -56,7 +56,7 @@ public interface Presenter { Set getCurrentSet(); void showMessage(String message); void onSaveInstanceState(Bundle outState); - void showDetails(int itemId); + void showDetails(int position); void filter(String query); void unpack(int setId); void restore(int setId); diff --git a/app/src/main/java/com/hikapro/backpack/presenter/adapters/ItemDetailAdapter.java b/app/src/main/java/com/hikapro/backpack/presenter/adapters/ItemDetailAdapter.java index 7166541..7db6003 100644 --- a/app/src/main/java/com/hikapro/backpack/presenter/adapters/ItemDetailAdapter.java +++ b/app/src/main/java/com/hikapro/backpack/presenter/adapters/ItemDetailAdapter.java @@ -1,15 +1,12 @@ package com.hikapro.backpack.presenter.adapters; -import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Paint; -import android.graphics.Typeface; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; -import android.widget.Toast; import com.hikapro.backpack.R; import com.hikapro.backpack.model.entities.Item; @@ -19,7 +16,6 @@ import com.hikapro.backpack.presenter.adapters.helper.items.swipe2.SwipableEleme import com.hikapro.backpack.presenter.adapters.helper.items.swipe2.SwipeMenu; import com.hikapro.backpack.presenter.adapters.helper.items.swipe2.SwipeMenuItem; import com.hikapro.backpack.presenter.adapters.helper.items.swipe2.SwipeMenuLayout; -import com.hikapro.backpack.view.recycler.DetailViewHolder; import com.hikapro.backpack.view.recycler.ItemViewHolder; /** @@ -41,7 +37,7 @@ public class ItemDetailAdapter extends RecyclerView.Adapter { @Override public void onBindViewHolder(final ItemViewHolder holder, final int position) { - final Item item = presenter.getModel().findItem(position); + final Item item = presenter.getModel().getCurrentItem(); holder.cb_item.setChecked(item.isPacked()); holder.tv_text.setText(item.getName() + " " + item.getId() + " pos " + position); holder.im_info.setVisibility(View.GONE); diff --git a/app/src/main/java/com/hikapro/backpack/presenter/adapters/ItemListAdapter.java b/app/src/main/java/com/hikapro/backpack/presenter/adapters/ItemListAdapter.java index 1599e99..03b9d1f 100644 --- a/app/src/main/java/com/hikapro/backpack/presenter/adapters/ItemListAdapter.java +++ b/app/src/main/java/com/hikapro/backpack/presenter/adapters/ItemListAdapter.java @@ -3,16 +3,11 @@ package com.hikapro.backpack.presenter.adapters; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Typeface; -import android.graphics.drawable.ColorDrawable; -import android.os.Handler; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; -import android.widget.Toast; - -import java.util.HashMap; import com.hikapro.backpack.R; import com.hikapro.backpack.model.entities.Category; @@ -85,7 +80,7 @@ public class ItemListAdapter extends RecyclerView.Adapter implem holder.im_info.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - presenter.showDetails(item.getId()); + presenter.showDetails(position); } }); @@ -224,7 +219,7 @@ public class ItemListAdapter extends RecyclerView.Adapter implem public HeaderViewHolder onCreateHeaderViewHolder(ViewGroup parent) { HeaderViewHolder viewHolder; View v = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.view_header, parent, false); + .inflate(R.layout.header_element, parent, false); viewHolder = new HeaderViewHolder(v); return viewHolder; } diff --git a/app/src/main/java/com/hikapro/backpack/presenter/adapters/PackedListAdapter.java b/app/src/main/java/com/hikapro/backpack/presenter/adapters/PackedListAdapter.java index 41d2cac..bbf7d21 100644 --- a/app/src/main/java/com/hikapro/backpack/presenter/adapters/PackedListAdapter.java +++ b/app/src/main/java/com/hikapro/backpack/presenter/adapters/PackedListAdapter.java @@ -50,7 +50,7 @@ public class PackedListAdapter extends ItemListAdapter { holder.im_info.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - presenter.showDetails(item.getId()); + presenter.showDetails(position); } }); diff --git a/app/src/main/java/com/hikapro/backpack/FlowLayout.java b/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/FlowLayout.java similarity index 91% rename from app/src/main/java/com/hikapro/backpack/FlowLayout.java rename to app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/FlowLayout.java index 7846c87..a09fe61 100644 --- a/app/src/main/java/com/hikapro/backpack/FlowLayout.java +++ b/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/FlowLayout.java @@ -1,4 +1,4 @@ -package com.hikapro.backpack; +package com.hikapro.backpack.presenter.adapters.helper; import android.content.Context; import android.content.res.TypedArray; @@ -6,6 +6,8 @@ import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; +import com.hikapro.backpack.R; + /** * Created by tariel on 22/05/16. */ @@ -20,7 +22,7 @@ public class FlowLayout extends ViewGroup { setPaddings(0,0); } - protected void setPaddings(int V, int H){ + public void setPaddings(int V, int H){ PADDING_X = H; PADDING_Y = V; } @@ -62,20 +64,20 @@ public class FlowLayout extends ViewGroup { else childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); mHeight = 0; - for(int i = 0; i < count; i++) { + for (int i = 0; i < count; i++) { final View child = getChildAt(i); - if(child.getVisibility() != GONE) { + if (child.getVisibility() != GONE) { child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST), childHeightMeasureSpec); final int childw = child.getMeasuredWidth(); mHeight = Math.max(mHeight, child.getMeasuredHeight() + PADDING_Y); - if(xpos + childw > width) { + if (xpos + childw > width) { xpos = getPaddingLeft(); ypos += mHeight; } xpos += childw + PADDING_X; } } - if(MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.UNSPECIFIED) { + if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.UNSPECIFIED) { height = ypos + mHeight; } else if(MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) { if(ypos + mHeight < height) { diff --git a/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/OnSwipeTouchListener.java b/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/OnSwipeTouchListener.java new file mode 100644 index 0000000..8ac3585 --- /dev/null +++ b/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/OnSwipeTouchListener.java @@ -0,0 +1,53 @@ +package com.hikapro.backpack.presenter.adapters.helper; + +import android.content.Context; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; + +/** + * Created by tariel on 16/07/16. + */ +public class OnSwipeTouchListener implements View.OnTouchListener { + + private final GestureDetector gestureDetector; + + public OnSwipeTouchListener(Context context) { + gestureDetector = new GestureDetector(context, new GestureListener()); + } + + public void onSwipeLeft() { + } + + public void onSwipeRight() { + } + + public boolean onTouch(View v, MotionEvent event) { + return gestureDetector.onTouchEvent(event); + } + + private final class GestureListener extends GestureDetector.SimpleOnGestureListener { + + private static final int SWIPE_DISTANCE_THRESHOLD = 100; + private static final int SWIPE_VELOCITY_THRESHOLD = 100; + + @Override + public boolean onDown(MotionEvent e) { + return true; + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + float distanceX = e2.getX() - e1.getX(); + float distanceY = e2.getY() - e1.getY(); + if (Math.abs(distanceX) > Math.abs(distanceY) && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { + if (distanceX > 0) + onSwipeRight(); + else + onSwipeLeft(); + return true; + } + return false; + } + } +} diff --git a/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/items/DividerDecoration.java b/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/items/DividerDecoration.java index 4f66cf5..a290c5d 100644 --- a/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/items/DividerDecoration.java +++ b/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/items/DividerDecoration.java @@ -9,6 +9,8 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; +import com.hikapro.backpack.presenter.adapters.helper.Util; + public class DividerDecoration extends RecyclerView.ItemDecoration { diff --git a/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/items/DividerDecoration2.java b/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/items/DividerDecoration2.java new file mode 100644 index 0000000..4240077 --- /dev/null +++ b/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/items/DividerDecoration2.java @@ -0,0 +1,60 @@ +package com.hikapro.backpack.presenter.adapters.helper.items; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.RecyclerView; +import android.view.View; + +/** + * Created by tariel on 19/07/16. + */ +public class DividerDecoration2 extends RecyclerView.ItemDecoration { + + private static final int[] ATTRS = new int[]{android.R.attr.listDivider}; + private int paddingX; + + private Drawable mDivider; + + /** + * Default divider will be used + */ + public DividerDecoration2(Context context) { + final TypedArray styledAttributes = context.obtainStyledAttributes(ATTRS); + mDivider = styledAttributes.getDrawable(0); + styledAttributes.recycle(); + } + + /** + * Custom divider will be used + */ + public DividerDecoration2(Context context, int resId) { + mDivider = ContextCompat.getDrawable(context, resId); + } + + public DividerDecoration2(Context context, int resId, int paddingX) { + mDivider = ContextCompat.getDrawable(context, resId); + this.paddingX = paddingX; + } + + @Override + public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { + int left = parent.getPaddingLeft(); + int right = parent.getWidth() - parent.getPaddingRight(); + + int childCount = parent.getChildCount(); + for (int i = 0; i < childCount; i++) { + View child = parent.getChildAt(i); + + RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); + + int top = child.getBottom() + params.bottomMargin; + int bottom = top + mDivider.getIntrinsicHeight(); + + mDivider.setBounds(left + paddingX, top, right - paddingX, bottom); + mDivider.draw(c); + } + } +} diff --git a/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/items/swipe2/SwipableRecycler.java b/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/items/swipe2/SwipableRecycler.java index 77a2339..5e8c8eb 100644 --- a/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/items/swipe2/SwipableRecycler.java +++ b/app/src/main/java/com/hikapro/backpack/presenter/adapters/helper/items/swipe2/SwipableRecycler.java @@ -67,9 +67,12 @@ public class SwipableRecycler extends RecyclerView { if (lastTouchedElement != null && lastTouchedElement.isOpen() && lastTouchedElement != buf) { handled = true; } + // on click + /* if (lastTouchedElement != null && lastTouchedElement.isOpen() && inRangeOfView(lastTouchedElement.getMenuView(), e)) { lastTouchedElement.getMenuView().notifyOnClick(e.getRawX(), e.getRawY()); } + */ if (lastTouchedElement != null) lastTouchedElement.onSwipe(e); return handled; @@ -88,6 +91,13 @@ public class SwipableRecycler extends RecyclerView { } return true; } + // TODO del + case MotionEvent.ACTION_UP: + // on click + if (lastTouchedElement != null && lastTouchedElement.isOpen() && inRangeOfView(lastTouchedElement.getMenuView(), e)) { + lastTouchedElement.getMenuView().notifyOnClick(e.getRawX(), e.getRawY()); + } + return super.onInterceptTouchEvent(e); } return super.onInterceptTouchEvent(e); } diff --git a/app/src/main/java/com/hikapro/backpack/view/View.java b/app/src/main/java/com/hikapro/backpack/view/View.java index fb6cf53..1bb35d5 100644 --- a/app/src/main/java/com/hikapro/backpack/view/View.java +++ b/app/src/main/java/com/hikapro/backpack/view/View.java @@ -2,6 +2,7 @@ package com.hikapro.backpack.view; import android.content.Context; +import com.hikapro.backpack.model.Model; import com.hikapro.backpack.model.entities.Item; import com.hikapro.backpack.model.entities.Set; import com.hikapro.backpack.presenter.Presenter; @@ -25,14 +26,13 @@ public interface View { } interface ItemList extends Base { - void showItemDetail(Item item, int setId); + void showItemDetail(int setId, Model.Item baseModel, int position); void showPackedItems(Set set); void setPresenter(Presenter.ItemList presenter); Set getSet(); } interface ItemDetail extends Base { void setPresenter(Presenter.ItemDetail presenter); - Item getItem(); int getSetId(); } @@ -50,7 +50,7 @@ public interface View { void startSetListFragment(); void startItemListFragment(Set set); void startPackedListFragment(Set set); - void startItemDetailFragment(Item item, int setId); + void startItemDetailFragment(int setId, Model.Item baseModel, int position); void startShareFragment(int setId); void startAddFragment(Set set); diff --git a/app/src/main/java/com/hikapro/backpack/view/fragments/ItemDetailFragment.java b/app/src/main/java/com/hikapro/backpack/view/fragments/ItemDetailFragment.java index 87800b7..71bccb6 100644 --- a/app/src/main/java/com/hikapro/backpack/view/fragments/ItemDetailFragment.java +++ b/app/src/main/java/com/hikapro/backpack/view/fragments/ItemDetailFragment.java @@ -22,7 +22,6 @@ import com.hikapro.backpack.presenter.Presenter; */ public class ItemDetailFragment extends Fragment implements com.hikapro.backpack.view.View.ItemDetail { - private static final String BUNDLE_ITEM_KEY = "BUNDLE_ITEM_KEY"; private static final String BUNDLE_SET_KEY = "BUNDLE_SET_KEY"; private Presenter.ItemDetail presenter; @@ -37,10 +36,9 @@ public class ItemDetailFragment extends Fragment implements com.hikapro.backpack return new ItemDetailFragment(); } - public static ItemDetailFragment newInstance(Item item, int setId) { + public static ItemDetailFragment newInstance(int setId) { ItemDetailFragment ret = ItemDetailFragment.construct(); Bundle args = new Bundle(); - args.putSerializable(BUNDLE_ITEM_KEY, item); args.putInt(BUNDLE_SET_KEY, setId); ret.setArguments(args); return ret; @@ -142,13 +140,6 @@ public class ItemDetailFragment extends Fragment implements com.hikapro.backpack return this.getActivity(); } - @Override - public Item getItem() { - Bundle args = getArguments(); - Item item = (Item) args.getSerializable(BUNDLE_ITEM_KEY); - return item; - } - @Override public int getSetId() { Bundle args = getArguments(); diff --git a/app/src/main/java/com/hikapro/backpack/view/fragments/ItemListFragment.java b/app/src/main/java/com/hikapro/backpack/view/fragments/ItemListFragment.java index 004c146..d2fe483 100644 --- a/app/src/main/java/com/hikapro/backpack/view/fragments/ItemListFragment.java +++ b/app/src/main/java/com/hikapro/backpack/view/fragments/ItemListFragment.java @@ -17,6 +17,7 @@ import android.widget.SearchView; import android.widget.Toast; import com.hikapro.backpack.R; +import com.hikapro.backpack.model.Model; import com.hikapro.backpack.model.entities.Item; import com.hikapro.backpack.model.entities.Set; import com.hikapro.backpack.presenter.Presenter; @@ -178,10 +179,11 @@ public class ItemListFragment extends Fragment implements com.hikapro.backpack.v // life cycle <-- + @Override - public void showItemDetail(Item item, int setId) { - activityCallback.startItemDetailFragment(item, setId); - }//TODO del? + public void showItemDetail(int setId, Model.Item baseModel, int position) { + activityCallback.startItemDetailFragment(setId, baseModel, position); + } @Override public void showPackedItems(Set set) { diff --git a/app/src/main/java/com/hikapro/backpack/view/recycler/DetailViewHolder.java b/app/src/main/java/com/hikapro/backpack/view/recycler/DetailViewHolder.java deleted file mode 100644 index ca6d2a5..0000000 --- a/app/src/main/java/com/hikapro/backpack/view/recycler/DetailViewHolder.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.hikapro.backpack.view.recycler; - -import android.support.v7.widget.RecyclerView; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.hikapro.backpack.R; - -/** - * Created by tariel on 23/04/16. - */ -public class DetailViewHolder extends RecyclerView.ViewHolder { - - public TextView title; - public TextView description; - public ImageView photo; - - public DetailViewHolder(View v) { - super(v); - setupViews(v); - } - - private void setupViews(View view) { - title = (TextView) view.findViewById(R.id.item_title); - description = (TextView) view.findViewById(R.id.item_description); - photo = (ImageView) view.findViewById(R.id.item_photo); - } -} diff --git a/app/src/main/java/com/hikapro/backpack/view/recycler/ItemViewHolderCopy.java b/app/src/main/java/com/hikapro/backpack/view/recycler/ItemViewHolderCopy.java deleted file mode 100644 index 929d95d..0000000 --- a/app/src/main/java/com/hikapro/backpack/view/recycler/ItemViewHolderCopy.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.hikapro.backpack.view.recycler; - -import android.support.v7.widget.RecyclerView; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.ImageButton; - -import com.hikapro.backpack.R; - - -/** - * Created by tariel on 01/05/16. - */ -public class ItemViewHolderCopy extends RecyclerView.ViewHolder { - - public int id; - public CheckBox checkBox; - public Button leaveAtHomeButton; - public Button deleteButton; - public ImageButton infoButton; - public ViewGroup swipeGroup; - - public ItemViewHolderCopy(View v) { - super(v); - setupViews(v); - } - - private void setupViews(View view) { - infoButton = (ImageButton) view.findViewById(R.id.info_button); - checkBox = (CheckBox) view.findViewById(R.id.item_checkbox); - leaveAtHomeButton = (Button) view.findViewById(R.id.leave_at_home_button); - deleteButton = (Button) view.findViewById(R.id.delete_button); - swipeGroup = (ViewGroup) view.findViewById((R.id.swipe_container)); - } - -} diff --git a/app/src/main/res/drawable/cat_btn_bg.xml b/app/src/main/res/drawable/cat_btn_bg.xml new file mode 100644 index 0000000..33d2523 --- /dev/null +++ b/app/src/main/res/drawable/cat_btn_bg.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/divider.xml b/app/src/main/res/drawable/divider.xml new file mode 100644 index 0000000..c285233 --- /dev/null +++ b/app/src/main/res/drawable/divider.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/nice_btn_bg.xml b/app/src/main/res/drawable/nice_btn_bg.xml new file mode 100644 index 0000000..000d9f3 --- /dev/null +++ b/app/src/main/res/drawable/nice_btn_bg.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/add_cust_actionbar.xml b/app/src/main/res/layout/add_cust_actionbar.xml index 2f6a61e..a1b7ebd 100644 --- a/app/src/main/res/layout/add_cust_actionbar.xml +++ b/app/src/main/res/layout/add_cust_actionbar.xml @@ -9,14 +9,14 @@ \ No newline at end of file diff --git a/app/src/main/res/layout/divider.xml b/app/src/main/res/layout/divider.xml index 3509b84..dc17d06 100644 --- a/app/src/main/res/layout/divider.xml +++ b/app/src/main/res/layout/divider.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/app/src/main/res/layout/footer.xml b/app/src/main/res/layout/footer.xml index 24b5c5a..7245009 100644 --- a/app/src/main/res/layout/footer.xml +++ b/app/src/main/res/layout/footer.xml @@ -2,22 +2,23 @@ + android:background="@color/colorFooterBackground" + android:layout_gravity="bottom"> diff --git a/app/src/main/res/layout/fragment_add.xml b/app/src/main/res/layout/fragment_add.xml index 93cd3a5..770709d 100644 --- a/app/src/main/res/layout/fragment_add.xml +++ b/app/src/main/res/layout/fragment_add.xml @@ -1,48 +1,58 @@ - + android:layout_height="wrap_content" + android:background="@color/colorListBackground"> - + android:layout_height="wrap_content" + android:orientation="vertical"> - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + diff --git a/app/src/main/res/layout/fragment_item_detail.xml b/app/src/main/res/layout/fragment_item_detail.xml index ce063c5..c987dc9 100644 --- a/app/src/main/res/layout/fragment_item_detail.xml +++ b/app/src/main/res/layout/fragment_item_detail.xml @@ -35,6 +35,25 @@ android:layout_gravity="center_horizontal" android:contentDescription="@string/cd_item_image"/> + + + + diff --git a/app/src/main/res/layout/fragment_item_list.xml b/app/src/main/res/layout/fragment_item_list.xml index 093b85b..dd80d01 100644 --- a/app/src/main/res/layout/fragment_item_list.xml +++ b/app/src/main/res/layout/fragment_item_list.xml @@ -31,17 +31,17 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:textAlignment="center" - android:textSize="@dimen/size_item_packed" + android:textSize="@dimen/text_footer" android:textStyle="bold" - android:textColor="@color/colorUiSecondaryFont" + android:textColor="@color/colorFooterTextWhite" android:id="@+id/footer_packed_count"/> diff --git a/app/src/main/res/layout/fragment_packed_list.xml b/app/src/main/res/layout/fragment_packed_list.xml index 987d461..e03bcc7 100644 --- a/app/src/main/res/layout/fragment_packed_list.xml +++ b/app/src/main/res/layout/fragment_packed_list.xml @@ -18,18 +18,18 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:textAlignment="center" - android:textSize="@dimen/size_item_packed" + android:textSize="@dimen/text_footer" android:textStyle="bold" - android:textColor="@color/colorUiSecondaryFont" + android:textColor="@color/colorFooterTextWhite" android:id="@+id/header_packed_count"/>