diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml
index b600225..0f9fbd3 100644
--- a/.idea/assetWizardSettings.xml
+++ b/.idea/assetWizardSettings.xml
@@ -147,7 +147,7 @@
@@ -157,8 +157,7 @@
diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser
index 7b67983..6f94508 100644
Binary files a/.idea/caches/gradle_models.ser and b/.idea/caches/gradle_models.ser differ
diff --git a/app/build.gradle b/app/build.gradle
index dffabc9..373dcf7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -6,8 +6,8 @@ android {
applicationId "ru.volgorobot.vrcatalog"
minSdkVersion 19
targetSdkVersion 27
- versionCode 5
- versionName "0.3.1"
+ versionCode 7
+ versionName "0.5.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
compileOptions {
@@ -35,4 +35,4 @@ dependencies {
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.github.chrisbanes:PhotoView:2.1.4'
-}
\ No newline at end of file
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ac11670..c48cb8e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,6 +1,5 @@
-
@@ -12,10 +11,11 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
+
+ android:theme="@style/MainActivity">
@@ -26,26 +26,31 @@
+ android:theme="@style/AppTheme.Fullscreen" />
+ android:name=".view.ItemActivity"
+ android:theme="@style/ItemActivityTheme" />
+ android:parentActivityName=".view.MainActivity">
+
-
+
-
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/MainContract.java b/app/src/main/java/ru/volgorobot/vrcatalog/MainContract.java
index 62247c0..991ebef 100644
--- a/app/src/main/java/ru/volgorobot/vrcatalog/MainContract.java
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/MainContract.java
@@ -27,12 +27,21 @@ public interface MainContract {
CoreModel getCoreModel();
}
- interface ViewBinderPresenter {
+ interface LevelLoaderPresenter {
void fetchSecondLevel(FirstLevelModel firstLevelModel, TreeNode treeNode);
void fetchThirdLevel(SecondLevelModel secondLevelModel, TreeNode treeNode);
void fetchDetail(ThirdLevelModel thirdLevelModel);
}
+ interface FavoritesPresenter {
+ void fetchItem(int itemID);
+ }
+
+ interface FavoritesActivityView {
+ void onFailruleAnswer(int errorCode);
+ void startActivityByIntent(Intent intent);
+ }
+
interface ViewBinder {
void rotateImageView();
}
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/DatabaseProperties.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/DatabaseProperties.java
new file mode 100644
index 0000000..b5165df
--- /dev/null
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/DatabaseProperties.java
@@ -0,0 +1,11 @@
+package ru.volgorobot.vrcatalog.additional;
+
+public class DatabaseProperties {
+ public final static String DATABASE_NAME = "database";
+ public final static String FAVORITES_TABLE_NAME = "favorites";
+ public final static int DATABASE_VERSION = 1;
+
+ public final static String FAVORITES_COLUMN_ID = "_id";
+ public final static String FAVORITES_COLUMN_ITEM_ID = "itemID";
+ public final static String FAVORITES_COLUMN_ITEM_NAME = "itemName";
+}
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/SqliteHelper.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/SqliteHelper.java
new file mode 100644
index 0000000..02148f2
--- /dev/null
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/SqliteHelper.java
@@ -0,0 +1,27 @@
+package ru.volgorobot.vrcatalog.additional;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+public class SqliteHelper extends SQLiteOpenHelper {
+ public SqliteHelper(Context context) {
+ super(context, DatabaseProperties.DATABASE_NAME, null, DatabaseProperties.DATABASE_VERSION);
+ }
+
+ @Override
+ public void onCreate(SQLiteDatabase sqLiteDatabase) {
+ String query = "CREATE TABLE " +
+ DatabaseProperties.FAVORITES_TABLE_NAME + "(" +
+ DatabaseProperties.FAVORITES_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
+ DatabaseProperties.FAVORITES_COLUMN_ITEM_ID + " INTEGER," +
+ DatabaseProperties.FAVORITES_COLUMN_ITEM_NAME + " TEXT);";
+ sqLiteDatabase.execSQL(query);
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
+ sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + DatabaseProperties.FAVORITES_TABLE_NAME);
+ onCreate(sqLiteDatabase);
+ }
+}
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/FavoritesListAdapter.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/FavoritesListAdapter.java
new file mode 100644
index 0000000..9216b1d
--- /dev/null
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/FavoritesListAdapter.java
@@ -0,0 +1,27 @@
+package ru.volgorobot.vrcatalog.additional.adapters;
+
+import android.content.Context;
+import android.widget.ArrayAdapter;
+
+import java.util.List;
+
+import ru.volgorobot.vrcatalog.model.FavoritesListModel;
+import ru.volgorobot.vrcatalog.presenters.FavoritesDBPresenter;
+
+public class FavoritesListAdapter extends ArrayAdapter {
+ private FavoritesDBPresenter db;
+
+ public FavoritesListAdapter(Context context, int resource, List objects) {
+ super(context, resource, objects);
+ db = new FavoritesDBPresenter(context);
+ }
+
+ public void updateData() {
+ super.clear();
+ super.addAll(db.selectAll());
+ }
+
+ public int getArraySize() {
+ return db.selectAll().size();
+ }
+}
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/FullscreenImagePagerAdapter.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/FullscreenImagePagerAdapter.java
similarity index 94%
rename from app/src/main/java/ru/volgorobot/vrcatalog/additional/FullscreenImagePagerAdapter.java
rename to app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/FullscreenImagePagerAdapter.java
index b237edf..49e5aac 100644
--- a/app/src/main/java/ru/volgorobot/vrcatalog/additional/FullscreenImagePagerAdapter.java
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/FullscreenImagePagerAdapter.java
@@ -1,4 +1,4 @@
-package ru.volgorobot.vrcatalog.additional;
+package ru.volgorobot.vrcatalog.additional.adapters;
import android.content.Context;
import android.support.annotation.NonNull;
@@ -16,7 +16,7 @@ import com.squareup.picasso.Picasso;
public class FullscreenImagePagerAdapter extends PagerAdapter {
/**
- * This class is designed to control the ViewPager (images of item) in the activity of viewing details of items (DetailActivity).
+ * This class is designed to control the ViewPager (images of item) in FullscreenImageActivity.
*/
private Context context;
@@ -64,6 +64,9 @@ public class FullscreenImagePagerAdapter extends PagerAdapter {
container.removeView((View) object);
}
+ /**
+ * Listener for hiding the actionbar when you click on the picture
+ */
private class PhotoTapListener implements OnPhotoTapListener, View.OnSystemUiVisibilityChangeListener {
@Override
public void onPhotoTap(ImageView view, float x, float y) {
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/ImagePagerAdapter.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/ImagePagerAdapter.java
similarity index 92%
rename from app/src/main/java/ru/volgorobot/vrcatalog/additional/ImagePagerAdapter.java
rename to app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/ImagePagerAdapter.java
index befb9fb..2f182f9 100644
--- a/app/src/main/java/ru/volgorobot/vrcatalog/additional/ImagePagerAdapter.java
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/ImagePagerAdapter.java
@@ -1,4 +1,4 @@
-package ru.volgorobot.vrcatalog.additional;
+package ru.volgorobot.vrcatalog.additional.adapters;
import android.content.Context;
import android.content.Intent;
@@ -13,16 +13,14 @@ import android.widget.ImageView;
import com.squareup.picasso.Picasso;
-import java.io.FileNotFoundException;
import java.io.IOException;
import ru.volgorobot.vrcatalog.R;
-import ru.volgorobot.vrcatalog.view.DetailActivity;
import ru.volgorobot.vrcatalog.view.FullScreenImageActivity;
public class ImagePagerAdapter extends PagerAdapter {
/**
- * This class is designed to control the ViewPager (images of item) in the activity of viewing details of items (DetailActivity).
+ * This class is designed to control the ViewPager (images of item) in the activity of viewing details of items (ItemActivity).
*/
private Context context;
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/PropertiesListAdapter.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/PropertiesListAdapter.java
similarity index 96%
rename from app/src/main/java/ru/volgorobot/vrcatalog/additional/PropertiesListAdapter.java
rename to app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/PropertiesListAdapter.java
index 15941d7..d4dcb8e 100644
--- a/app/src/main/java/ru/volgorobot/vrcatalog/additional/PropertiesListAdapter.java
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/PropertiesListAdapter.java
@@ -1,4 +1,4 @@
-package ru.volgorobot.vrcatalog.additional;
+package ru.volgorobot.vrcatalog.additional.adapters;
import android.view.LayoutInflater;
import android.view.View;
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/model/FavoritesListModel.java b/app/src/main/java/ru/volgorobot/vrcatalog/model/FavoritesListModel.java
new file mode 100644
index 0000000..75cfb7b
--- /dev/null
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/model/FavoritesListModel.java
@@ -0,0 +1,35 @@
+package ru.volgorobot.vrcatalog.model;
+
+public class FavoritesListModel {
+ private int id;
+ private int itemID;
+ private String itemName;
+
+ public FavoritesListModel(int itemID, String itemName) {
+ this.itemID = itemID;
+ this.itemName = itemName;
+ }
+
+ public FavoritesListModel(int id, int itemID, String itemName) {
+ this.id = id;
+ this.itemID = itemID;
+ this.itemName = itemName;
+ }
+
+ public int getItemID() {
+ return itemID;
+ }
+
+ public String getItemName() {
+ return itemName;
+ }
+
+ public int getID() {
+ return id;
+ }
+
+ @Override
+ public String toString() {
+ return getItemName();
+ }
+}
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/SecondLevelNodeViewBinder.java b/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/SecondLevelNodeViewBinder.java
index c42b182..9dacb60 100644
--- a/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/SecondLevelNodeViewBinder.java
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/SecondLevelNodeViewBinder.java
@@ -15,7 +15,7 @@ import ru.volgorobot.vrcatalog.model.SecondLevelModel;
public class SecondLevelNodeViewBinder extends BaseNodeViewBinder implements MainContract.ViewBinder {
TextView textView;
ImageView imageView;
- MainContract.ViewBinderPresenter viewBinderPresenter;
+ MainContract.LevelLoaderPresenter viewBinderPresenter;
public SecondLevelNodeViewBinder(View itemView, MainContract.MainActivityView mView, Context context) {
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/ThirdLevelNodeViewBinder.java b/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/ThirdLevelNodeViewBinder.java
index 036fac0..f18c3e6 100644
--- a/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/ThirdLevelNodeViewBinder.java
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/ThirdLevelNodeViewBinder.java
@@ -13,7 +13,7 @@ import ru.volgorobot.vrcatalog.model.ThirdLevelModel;
public class ThirdLevelNodeViewBinder extends BaseNodeViewBinder implements MainContract.ViewBinder {
TextView textView;
- MainContract.ViewBinderPresenter viewBinderPresenter;
+ MainContract.LevelLoaderPresenter viewBinderPresenter;
public ThirdLevelNodeViewBinder(View itemView, Context context, MainContract.MainActivityView mView) {
super(itemView);
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/presenters/FavoritesDBPresenter.java b/app/src/main/java/ru/volgorobot/vrcatalog/presenters/FavoritesDBPresenter.java
new file mode 100644
index 0000000..ba5e70c
--- /dev/null
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/presenters/FavoritesDBPresenter.java
@@ -0,0 +1,83 @@
+package ru.volgorobot.vrcatalog.presenters;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+
+import java.util.ArrayList;
+
+import ru.volgorobot.vrcatalog.additional.DatabaseProperties;
+import ru.volgorobot.vrcatalog.additional.SqliteHelper;
+import ru.volgorobot.vrcatalog.model.FavoritesListModel;
+
+public class FavoritesDBPresenter {
+ private SqliteHelper mHelper;
+ private SQLiteDatabase mDB;
+
+ public FavoritesDBPresenter(Context context) {
+ this.mHelper = new SqliteHelper(context);
+ this.mDB = mHelper.getWritableDatabase();
+ }
+
+ public ArrayList selectAll() {
+ ArrayList models = new ArrayList<>();
+
+ String[] columns = {
+ DatabaseProperties.FAVORITES_COLUMN_ID,
+ DatabaseProperties.FAVORITES_COLUMN_ITEM_ID,
+ DatabaseProperties.FAVORITES_COLUMN_ITEM_NAME
+ };
+
+ Cursor cursor = mDB.query(DatabaseProperties.FAVORITES_TABLE_NAME, columns, null, null, null, null, null);
+
+ if(cursor == null)
+ return new ArrayList<>();
+
+ while(cursor.moveToNext()) {
+ models.add(new FavoritesListModel(
+ cursor.getInt(cursor.getColumnIndex(DatabaseProperties.FAVORITES_COLUMN_ID)),
+ cursor.getInt(cursor.getColumnIndex(DatabaseProperties.FAVORITES_COLUMN_ITEM_ID)),
+ cursor.getString(cursor.getColumnIndex(DatabaseProperties.FAVORITES_COLUMN_ITEM_NAME))));
+ }
+
+ cursor.close();
+
+ return models;
+ }
+
+ public void add(FavoritesListModel model) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(DatabaseProperties.FAVORITES_COLUMN_ITEM_ID, model.getItemID());
+ contentValues.put(DatabaseProperties.FAVORITES_COLUMN_ITEM_NAME, model.getItemName());
+ mDB.insert(DatabaseProperties.FAVORITES_TABLE_NAME, null, contentValues);
+ }
+
+ public void removeItem(int id) {
+ mDB.delete(DatabaseProperties.FAVORITES_TABLE_NAME, "_id = " + id, null);
+ }
+
+ public boolean inFavoritesList(int itemID) {
+ String[] columns = { DatabaseProperties.FAVORITES_COLUMN_ITEM_ID };
+ String[] selectionArgs = { Integer.toString(itemID) };
+ Cursor cursor = mDB.query(DatabaseProperties.FAVORITES_TABLE_NAME, columns, DatabaseProperties.FAVORITES_COLUMN_ITEM_ID + " = ?", selectionArgs, null, null, null);
+ while(cursor.moveToNext()) {
+ if(cursor.getInt(cursor.getColumnIndex(DatabaseProperties.FAVORITES_COLUMN_ITEM_ID)) == itemID)
+ return true;
+ }
+ cursor.close();
+
+ return false;
+ }
+
+ public int getFavoriteID(int itemID) {
+ String[] columns = { DatabaseProperties.FAVORITES_COLUMN_ID, DatabaseProperties.FAVORITES_COLUMN_ITEM_ID };
+ Cursor cursor = mDB.query(DatabaseProperties.FAVORITES_TABLE_NAME, columns, DatabaseProperties.FAVORITES_COLUMN_ITEM_ID + " = " + Integer.toString(itemID), null, null, null, null);
+ int id = 0;
+ if( cursor != null && cursor.moveToFirst() ){
+ id = cursor.getInt(cursor.getColumnIndex(DatabaseProperties.FAVORITES_COLUMN_ID));
+ cursor.close();
+ }
+ return id;
+ }
+}
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/presenters/FavoritesPresenter.java b/app/src/main/java/ru/volgorobot/vrcatalog/presenters/FavoritesPresenter.java
new file mode 100644
index 0000000..d61fb58
--- /dev/null
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/presenters/FavoritesPresenter.java
@@ -0,0 +1,77 @@
+package ru.volgorobot.vrcatalog.presenters;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.AsyncTask;
+
+import java.util.ArrayList;
+
+import ru.volgorobot.vrcatalog.MainContract;
+import ru.volgorobot.vrcatalog.additional.NetworkErrorException;
+import ru.volgorobot.vrcatalog.additional.ResultWithErrorCode;
+import ru.volgorobot.vrcatalog.model.CoreModel;
+import ru.volgorobot.vrcatalog.model.DetailModel;
+import ru.volgorobot.vrcatalog.view.FavoritesActivity;
+import ru.volgorobot.vrcatalog.view.ItemActivity;
+
+public class FavoritesPresenter implements MainContract.FavoritesPresenter {
+ private Context mContext;
+ private MainContract.MainModel mainModel;
+ private MainContract.FavoritesActivityView mView;
+
+ public FavoritesPresenter(Context context, FavoritesActivity view) {
+ this.mContext = context;
+ this.mainModel = new CoreModel(context);
+ this.mView = view;
+ }
+
+ @Override
+ public void fetchItem(int itemID) {
+ new AsyncTask>() {
+ @Override
+ protected ResultWithErrorCode doInBackground(Integer... integers) {
+ ArrayList detail = null;
+ try {
+ detail = mainModel.fetchDetailByID(integers[0]);
+ } catch (NetworkErrorException networkErrorException) {
+ return new ResultWithErrorCode<>(detail.get(0), networkErrorException.getErrorCode());
+ } catch (NullPointerException nullPointerException) {
+ return new ResultWithErrorCode<>(detail.get(0), 3);
+ }
+ return new ResultWithErrorCode<>(detail.get(0), 0);
+ }
+
+ @Override
+ protected void onPostExecute(ResultWithErrorCode result) {
+ super.onPostExecute(result);
+ switch (result.getErrorCode()) {
+ case 0: {
+ Intent intent = new Intent(mContext, ItemActivity.class);
+ intent.putExtra("itemID", result.getData().getID().toString());
+ intent.putExtra("detailName", result.getData().getName());
+ intent.putExtra("detailQuantity", result.getData().getNumber().toString());
+ intent.putExtra("detailPrice", result.getData().getPrice());
+ intent.putExtra("detailCountry", result.getData().getCountry());
+ intent.putExtra("detailAnalogue", result.getData().getAnalogue());
+ intent.putExtra("detailDatasheet", result.getData().getDocURL());
+ intent.putExtra("detailNotes", result.getData().getNotes());
+ mView.startActivityByIntent(intent);
+ break;
+ }
+ case 1: {
+ mView.onFailruleAnswer(1);
+ break;
+ }
+ case 2: {
+ mView.onFailruleAnswer(2);
+ break;
+ }
+ case 3: {
+ mView.onFailruleAnswer(3);
+ break;
+ }
+ }
+ }
+ }.execute(itemID);
+ }
+}
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/presenters/ItemPresenter.java b/app/src/main/java/ru/volgorobot/vrcatalog/presenters/ItemPresenter.java
index 0c898b6..8bcdb04 100644
--- a/app/src/main/java/ru/volgorobot/vrcatalog/presenters/ItemPresenter.java
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/presenters/ItemPresenter.java
@@ -22,9 +22,6 @@ import ru.volgorobot.vrcatalog.model.CoreModel;
import ru.volgorobot.vrcatalog.model.ImageItemModel;
public class ItemPresenter implements MainContract.ItemPresenter {
-
- // TODO
-
private MainContract.ItemView mView;
private Context context;
private MainContract.MainModel coreModel;
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/presenters/ViewBinderPresenter.java b/app/src/main/java/ru/volgorobot/vrcatalog/presenters/ViewBinderPresenter.java
index fd5f3a8..0c26546 100644
--- a/app/src/main/java/ru/volgorobot/vrcatalog/presenters/ViewBinderPresenter.java
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/presenters/ViewBinderPresenter.java
@@ -15,9 +15,9 @@ import ru.volgorobot.vrcatalog.model.DetailModel;
import ru.volgorobot.vrcatalog.model.FirstLevelModel;
import ru.volgorobot.vrcatalog.model.SecondLevelModel;
import ru.volgorobot.vrcatalog.model.ThirdLevelModel;
-import ru.volgorobot.vrcatalog.view.DetailActivity;
+import ru.volgorobot.vrcatalog.view.ItemActivity;
-public class ViewBinderPresenter implements MainContract.ViewBinderPresenter {
+public class ViewBinderPresenter implements MainContract.LevelLoaderPresenter {
private MainContract.MainActivityView mView;
private MainContract.MainModel coreModel;
private MainContract.ViewBinder viewBinder;
@@ -170,7 +170,7 @@ public class ViewBinderPresenter implements MainContract.ViewBinderPresenter {
super.onPostExecute(result);
switch (result.getErrorCode()) {
case 0: {
- Intent intent = new Intent(context, DetailActivity.class);
+ Intent intent = new Intent(context, ItemActivity.class);
intent.putExtra("itemID", result.getData().getID().toString());
intent.putExtra("detailName", result.getData().getName());
intent.putExtra("detailQuantity", result.getData().getNumber().toString());
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/view/FavoritesActivity.java b/app/src/main/java/ru/volgorobot/vrcatalog/view/FavoritesActivity.java
new file mode 100644
index 0000000..290b069
--- /dev/null
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/FavoritesActivity.java
@@ -0,0 +1,149 @@
+package ru.volgorobot.vrcatalog.view;
+
+import android.content.Intent;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.ContextMenu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+
+import ru.volgorobot.vrcatalog.MainContract;
+import ru.volgorobot.vrcatalog.R;
+import ru.volgorobot.vrcatalog.additional.adapters.FavoritesListAdapter;
+import ru.volgorobot.vrcatalog.model.FavoritesListModel;
+import ru.volgorobot.vrcatalog.presenters.FavoritesDBPresenter;
+import ru.volgorobot.vrcatalog.presenters.FavoritesPresenter;
+
+public class FavoritesActivity extends AppCompatActivity implements MainContract.FavoritesActivityView {
+ private FavoritesDBPresenter db;
+ private FavoritesListAdapter adapter;
+ private MainContract.FavoritesPresenter mPresenter;
+
+ private ListView listView;
+ private ImageView favoritesEmptyImage;
+ private TextView favoritesEmptyText;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_favorites);
+
+ mPresenter = new FavoritesPresenter(FavoritesActivity.this, this);
+
+ ActionBar actionBar = getSupportActionBar();
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setHomeButtonEnabled(true);
+ actionBar.setTitle("Избранное");
+
+ db = new FavoritesDBPresenter(FavoritesActivity.this);
+
+ initViews();
+ }
+
+ public void initViews() {
+ listView = findViewById(R.id.favorites_list_view);
+ registerForContextMenu(listView);
+ listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
+ FavoritesListModel model = (FavoritesListModel) listView.getItemAtPosition(i);
+ mPresenter.fetchItem(model.getItemID());
+ }
+ });
+ favoritesEmptyImage = findViewById(R.id.favorites_empty_image);
+ favoritesEmptyText = findViewById(R.id.favorites_empty_text);
+ ArrayList models = db.selectAll();
+ adapter = new FavoritesListAdapter(FavoritesActivity.this, android.R.layout.simple_list_item_1, models);
+ listView.setAdapter(adapter);
+ checkForEmptyContent();
+ }
+
+ public void checkForEmptyContent() {
+ if(adapter.getArraySize() == 0) {
+ listView.setVisibility(View.GONE);
+ favoritesEmptyImage.setVisibility(View.VISIBLE);
+ favoritesEmptyText.setVisibility(View.VISIBLE);
+ } else {
+ listView.setVisibility(View.VISIBLE);
+ favoritesEmptyImage.setVisibility(View.INVISIBLE);
+ favoritesEmptyText.setVisibility(View.INVISIBLE);
+ }
+ }
+
+ @Override
+ public boolean onContextItemSelected(MenuItem item) {
+ AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
+ switch (item.getItemId()) {
+ case 0: {
+ FavoritesListModel model = (FavoritesListModel) listView.getItemAtPosition(info.position);
+ db.removeItem(model.getID());
+ updateListView();
+ }
+ }
+ return true;
+ }
+
+ private void updateListView() {
+ adapter.updateData();
+ adapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
+ if (v.getId() == R.id.favorites_list_view) {
+ menu.add(0, 0, 0,"Удалить");
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch(item.getItemId()) {
+ case android.R.id.home:
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public void onFailruleAnswer(int errorCode) {
+ switch (errorCode) {
+ case 1: {
+ Toast.makeText(FavoritesActivity.this, "Ошибка сети. Проверьте подключение к сети или данные подключения к API!", Toast.LENGTH_LONG).show();
+ Log.e("FavoritesActivity", "Network Error! Re-check your connection credentials or network settings!");
+ break;
+ }
+ case 2: {
+ Toast.makeText(FavoritesActivity.this, "Ответ от сервера неверен! Перепроверьте данные подключения!", Toast.LENGTH_LONG).show();
+ Log.e("FavoritesActivity", "Answer of server is wrong! Re-check your connection credentials!");
+ break;
+ }
+ case 3: {
+ Toast.makeText(FavoritesActivity.this, "Вы ввели неверный URL. Пример: http://example.ru", Toast.LENGTH_LONG).show();
+ Log.e("MainActivity", "Invalid-formatted URL. Please, check URL (change his if it need) and try again.");
+ break;
+ }
+ }
+ }
+
+ @Override
+ public void startActivityByIntent(Intent intent) {
+ startActivity(intent);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ updateListView();
+ checkForEmptyContent();
+ }
+}
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/view/FullScreenImageActivity.java b/app/src/main/java/ru/volgorobot/vrcatalog/view/FullScreenImageActivity.java
index ff9cacd..a897e65 100644
--- a/app/src/main/java/ru/volgorobot/vrcatalog/view/FullScreenImageActivity.java
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/FullScreenImageActivity.java
@@ -15,7 +15,7 @@ import android.view.Window;
import android.view.WindowManager;
import ru.volgorobot.vrcatalog.R;
-import ru.volgorobot.vrcatalog.additional.FullscreenImagePagerAdapter;
+import ru.volgorobot.vrcatalog.additional.adapters.FullscreenImagePagerAdapter;
public class FullScreenImageActivity extends AppCompatActivity {
private Toolbar mToolbar;
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/view/DetailActivity.java b/app/src/main/java/ru/volgorobot/vrcatalog/view/ItemActivity.java
similarity index 67%
rename from app/src/main/java/ru/volgorobot/vrcatalog/view/DetailActivity.java
rename to app/src/main/java/ru/volgorobot/vrcatalog/view/ItemActivity.java
index 8a007d0..c9154e5 100644
--- a/app/src/main/java/ru/volgorobot/vrcatalog/view/DetailActivity.java
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/ItemActivity.java
@@ -9,27 +9,33 @@ import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
+import android.view.Menu;
+import android.view.MenuInflater;
import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.LinkedHashMap;
+import java.util.Map;
+import ru.volgorobot.vrcatalog.model.FavoritesListModel;
+import ru.volgorobot.vrcatalog.presenters.FavoritesDBPresenter;
import ru.volgorobot.vrcatalog.presenters.ItemPresenter;
import ru.volgorobot.vrcatalog.MainContract;
import ru.volgorobot.vrcatalog.R;
-import ru.volgorobot.vrcatalog.additional.ImagePagerAdapter;
-import ru.volgorobot.vrcatalog.additional.PropertiesListAdapter;
+import ru.volgorobot.vrcatalog.additional.adapters.ImagePagerAdapter;
+import ru.volgorobot.vrcatalog.additional.adapters.PropertiesListAdapter;
-public class DetailActivity extends AppCompatActivity implements MainContract.ItemView {
+public class ItemActivity extends AppCompatActivity implements MainContract.ItemView {
private MainContract.ItemPresenter mPresenter;
private ViewPager viewPager;
private ListView propertiesList;
private ImagePagerAdapter imagePagerAdapter;
+ private boolean inFavorites;
+ private FavoritesDBPresenter db;
+ private int itemID;
+ private String itemName;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -41,10 +47,11 @@ public class DetailActivity extends AppCompatActivity implements MainContract.It
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
initializeViews();
- mPresenter = new ItemPresenter(DetailActivity.this, this);
+ mPresenter = new ItemPresenter(ItemActivity.this, this);
Intent intent = getIntent();
- ((TextView) findViewById(R.id.itemName)).setText(intent.getStringExtra("detailName"));
+ itemName = intent.getStringExtra("detailName");
+ ((TextView) findViewById(R.id.itemName)).setText(itemName);
String tmp = intent.getStringExtra("detailPrice");
if(tmp.equals("0")) {
tmp = "Уточните у продавца";
@@ -53,13 +60,18 @@ public class DetailActivity extends AppCompatActivity implements MainContract.It
}
((TextView) findViewById(R.id.itemPrice)).setText(tmp);
- LinkedHashMap extrasMap = getIntentExtras(intent);
+ LinkedHashMap intentDataForListView = getIntentExtras(intent);
+ itemID = Integer.parseInt(intent.getStringExtra("itemID"));
+ intentDataForListView.get("detailName");
+ db = new FavoritesDBPresenter(ItemActivity.this);
propertiesList = findViewById(R.id.propertiesList);
- PropertiesListAdapter propertiesListAdapter = new PropertiesListAdapter(extrasMap);
+ PropertiesListAdapter propertiesListAdapter = new PropertiesListAdapter(intentDataForListView);
propertiesList.setAdapter(propertiesListAdapter);
mPresenter.getImagesByItemID(Integer.parseInt(intent.getStringExtra("itemID")));
+
+ inFavorites = db.inFavoritesList(itemID);
}
void initializeViews() {
@@ -119,18 +131,18 @@ public class DetailActivity extends AppCompatActivity implements MainContract.It
public void onFailureAnswer(int errorCode) {
switch (errorCode) {
case 1: {
- Toast.makeText(DetailActivity.this, "Ошибка сети. Проверьте подключение к сети или данные подключения к API!", Toast.LENGTH_LONG).show();
- Log.e("DetailActivity", "Network Error! Re-check your connection credentials or network settings!");
+ Toast.makeText(ItemActivity.this, "Ошибка сети. Проверьте подключение к сети или данные подключения к API!", Toast.LENGTH_LONG).show();
+ Log.e("ItemActivity", "Network Error! Re-check your connection credentials or network settings!");
break;
}
case 2: {
- Toast.makeText(DetailActivity.this, "Ответ от сервера неверен! Перепроверьте данные подключения!", Toast.LENGTH_LONG).show();
- Log.e("DetailActivity", "Answer of server is wrong! Re-check your connection credentials!");
+ Toast.makeText(ItemActivity.this, "Ответ от сервера неверен! Перепроверьте данные подключения!", Toast.LENGTH_LONG).show();
+ Log.e("ItemActivity", "Answer of server is wrong! Re-check your connection credentials!");
break;
}
case 3: {
- Toast.makeText(DetailActivity.this, "Вы ввели неверный URL. Пример: http://example.ru", Toast.LENGTH_LONG).show();
- Log.e("DetailActivity", "Invalid-formatted URL. Please, check URL (change his if it need) and try again.");
+ Toast.makeText(ItemActivity.this, "Вы ввели неверный URL. Пример: http://example.ru", Toast.LENGTH_LONG).show();
+ Log.e("ItemActivity", "Invalid-formatted URL. Please, check URL (change his if it need) and try again.");
break;
}
}
@@ -138,7 +150,7 @@ public class DetailActivity extends AppCompatActivity implements MainContract.It
@Override
public void setViewPagerContent(String[] uris) {
- imagePagerAdapter = new ImagePagerAdapter(DetailActivity.this, uris);
+ imagePagerAdapter = new ImagePagerAdapter(ItemActivity.this, uris);
TabLayout tabLayout = findViewById(R.id.tabDots);
viewPager.setAdapter(imagePagerAdapter);
setViewPagerScrollListener();
@@ -203,4 +215,34 @@ public class DetailActivity extends AppCompatActivity implements MainContract.It
};
viewPager.setOnPageChangeListener(listener);
}
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.item_activity_menu, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareOptionsMenu(Menu menu) {
+ MenuItem addToFavorites = menu.findItem(R.id.action_favorite);
+ MenuItem deleteFromFavorites = menu.findItem(R.id.action_unfavorite);
+
+ addToFavorites.setOnMenuItemClickListener((MenuItem menuItem) -> {
+ db.add(new FavoritesListModel(0, itemID, itemName));
+ inFavorites = true;
+ this.invalidateOptionsMenu();
+ return true;
+ });
+ deleteFromFavorites.setOnMenuItemClickListener((MenuItem menuItem) -> {
+ db.removeItem(db.getFavoriteID(itemID));
+ inFavorites = false;
+ this.invalidateOptionsMenu();
+ return true;
+ });
+
+ addToFavorites.setVisible(!inFavorites);
+ deleteFromFavorites.setVisible(inFavorites);
+ return true;
+ }
}
diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/view/MainActivity.java b/app/src/main/java/ru/volgorobot/vrcatalog/view/MainActivity.java
index 71a2ea2..3be56e8 100644
--- a/app/src/main/java/ru/volgorobot/vrcatalog/view/MainActivity.java
+++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/MainActivity.java
@@ -101,7 +101,6 @@ public class MainActivity extends AppCompatActivity
return super.onOptionsItemSelected(item);
}
- @SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
@@ -113,6 +112,8 @@ public class MainActivity extends AppCompatActivity
} else if (id == R.id.nav_about) {
startActivity(new Intent(this, AboutActivity.class));
+ } else if(id == R.id.nav_favorites) {
+ startActivity(new Intent(this, FavoritesActivity.class));
}
DrawerLayout drawer = findViewById(R.id.drawer_layout);
diff --git a/app/src/main/res/drawable/ic_favorite_black_24dp.xml b/app/src/main/res/drawable/ic_favorite_black_24dp.xml
new file mode 100644
index 0000000..cfba5d8
--- /dev/null
+++ b/app/src/main/res/drawable/ic_favorite_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_favorite_border_black_24dp.xml b/app/src/main/res/drawable/ic_favorite_border_black_24dp.xml
new file mode 100644
index 0000000..445b826
--- /dev/null
+++ b/app/src/main/res/drawable/ic_favorite_border_black_24dp.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_favorite_border_grey_24dp.xml b/app/src/main/res/drawable/ic_favorite_border_grey_24dp.xml
new file mode 100644
index 0000000..628eb96
--- /dev/null
+++ b/app/src/main/res/drawable/ic_favorite_border_grey_24dp.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_favorite_red_24dp.xml b/app/src/main/res/drawable/ic_favorite_red_24dp.xml
new file mode 100644
index 0000000..6ab8ad7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_favorite_red_24dp.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml
index 0309d04..43e12d5 100644
--- a/app/src/main/res/layout/activity_about.xml
+++ b/app/src/main/res/layout/activity_about.xml
@@ -17,7 +17,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
- android:text="VRCatalog"
+ android:text="uCatalog"
android:textAppearance="@android:style/TextAppearance.Large" />
+ android:gravity="center"
+ android:text="Программа для просмотра каталогов" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_favorites.xml b/app/src/main/res/layout/activity_favorites.xml
new file mode 100644
index 0000000..798f0e0
--- /dev/null
+++ b/app/src/main/res/layout/activity_favorites.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml
index 1916f82..45fe46a 100644
--- a/app/src/main/res/layout/app_bar_main.xml
+++ b/app/src/main/res/layout/app_bar_main.xml
@@ -16,6 +16,8 @@
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
+ android:theme="@style/CustomSearchStyle"
+ app:titleTextColor="@android:color/white"
app:popupTheme="@style/AppTheme.PopupOverlay" />
diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml
index e3e2877..fb7d24c 100644
--- a/app/src/main/res/layout/content_main.xml
+++ b/app/src/main/res/layout/content_main.xml
@@ -52,6 +52,8 @@
android:text=""
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:visibility="invisible"
+ android:textSize="18sp"
+ android:gravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
diff --git a/app/src/main/res/layout/light_suggestion_hint.xml b/app/src/main/res/layout/light_suggestion_hint.xml
new file mode 100644
index 0000000..97a7726
--- /dev/null
+++ b/app/src/main/res/layout/light_suggestion_hint.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml
index 0bf6303..d0aa46a 100644
--- a/app/src/main/res/menu/activity_main_drawer.xml
+++ b/app/src/main/res/menu/activity_main_drawer.xml
@@ -8,6 +8,10 @@
android:icon="@drawable/ic_home"
android:title="Главная"
android:checked="true" />
+
-
diff --git a/app/src/main/res/menu/item_activity_menu.xml b/app/src/main/res/menu/item_activity_menu.xml
new file mode 100644
index 0000000..f6ae2f0
--- /dev/null
+++ b/app/src/main/res/menu/item_activity_menu.xml
@@ -0,0 +1,16 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
index 40a0aa5..259986b 100644
--- a/app/src/main/res/values-v21/styles.xml
+++ b/app/src/main/res/values-v21/styles.xml
@@ -22,7 +22,12 @@
- @android:color/transparent
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bf5947c..7b2619f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,5 +1,6 @@
- VRCatalog
+ uCatalog
Open navigation drawer
Close navigation drawer
+ Ваш список избранного пуст
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 78f61cf..c4c7268 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,13 +1,20 @@
-
-
+
+
+
+
+
+
+
-