diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index 6f94508..e7dee58 100644 Binary files a/.idea/caches/gradle_models.ser and b/.idea/caches/gradle_models.ser differ diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 8306744..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,6 +2,5 @@ - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 373dcf7..6d65097 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,14 +1,18 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 27 + compileSdkVersion 28 defaultConfig { applicationId "ru.volgorobot.vrcatalog" minSdkVersion 19 targetSdkVersion 27 versionCode 7 versionName "0.5.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + javaCompileOptions { + annotationProcessorOptions { + arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] + } + } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -24,15 +28,19 @@ android { } dependencies { + def room_version = "2.1.0-alpha04" implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'com.android.support:appcompat-v7:27.1.1' - implementation 'com.android.support:design:27.1.1' - implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'com.google.android.material:material:1.0.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.2' implementation 'me.texy.treeview:treeview_lib:1.0.4' implementation 'com.google.code.gson:gson:2.8.2' implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:converter-gson:2.4.0' - implementation 'com.android.support:recyclerview-v7:27.1.1' + implementation 'androidx.recyclerview:recyclerview:1.0.0-beta01' implementation 'com.squareup.picasso:picasso:2.71828' implementation 'com.github.chrisbanes:PhotoView:2.1.4' + + implementation "androidx.room:room-runtime:$room_version" + annotationProcessor "androidx.room:room-compiler:$room_version" } diff --git a/app/schemas/ru.volgorobot.vrcatalog.additional.AppDatabase/1.json b/app/schemas/ru.volgorobot.vrcatalog.additional.AppDatabase/1.json new file mode 100644 index 0000000..ef6580c --- /dev/null +++ b/app/schemas/ru.volgorobot.vrcatalog.additional.AppDatabase/1.json @@ -0,0 +1,46 @@ +{ + "formatVersion": 1, + "database": { + "version": 1, + "identityHash": "b484b5731c959dea19f42d92a1fccfcd", + "entities": [ + { + "tableName": "favorites", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `itemID` INTEGER NOT NULL, `itemName` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "itemID", + "columnName": "itemID", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "itemName", + "columnName": "itemName", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"b484b5731c959dea19f42d92a1fccfcd\")" + ] + } +} \ No newline at end of file diff --git a/app/schemas/ru.volgorobot.vrcatalog.additional.DatabaseHelper/1.json b/app/schemas/ru.volgorobot.vrcatalog.additional.DatabaseHelper/1.json new file mode 100644 index 0000000..ef6580c --- /dev/null +++ b/app/schemas/ru.volgorobot.vrcatalog.additional.DatabaseHelper/1.json @@ -0,0 +1,46 @@ +{ + "formatVersion": 1, + "database": { + "version": 1, + "identityHash": "b484b5731c959dea19f42d92a1fccfcd", + "entities": [ + { + "tableName": "favorites", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `itemID` INTEGER NOT NULL, `itemName` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "itemID", + "columnName": "itemID", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "itemName", + "columnName": "itemName", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"b484b5731c959dea19f42d92a1fccfcd\")" + ] + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c48cb8e..fabb0e8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,7 @@ - @@ -10,7 +12,8 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme"> + android:theme="@style/AppTheme" + android:name=".App"> data); } interface ViewBinder { @@ -71,6 +76,10 @@ public interface MainContract { interface ItemPresenter { void getImagesByItemID(int id); + boolean checkFavoriteListed(int itemID); + int getFavoriteID(int itemID); + void addToFavorites(int itemID, String itemName); + void removeFromFavorites(int favID); } interface ItemView { diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/AppCompatPreferenceActivity.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/AppCompatPreferenceActivity.java index cfd5368..9410cb3 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/additional/AppCompatPreferenceActivity.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/AppCompatPreferenceActivity.java @@ -17,11 +17,11 @@ package ru.volgorobot.vrcatalog.additional; import android.content.res.Configuration; import android.os.Bundle; import android.preference.PreferenceActivity; -import android.support.annotation.LayoutRes; -import android.support.annotation.Nullable; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatDelegate; -import android.support.v7.widget.Toolbar; +import androidx.annotation.LayoutRes; +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.appcompat.widget.Toolbar; import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/DatabaseHelper.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/DatabaseHelper.java new file mode 100644 index 0000000..3f78ecc --- /dev/null +++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/DatabaseHelper.java @@ -0,0 +1,11 @@ +package ru.volgorobot.vrcatalog.additional; + +import androidx.room.Database; +import androidx.room.RoomDatabase; +import ru.volgorobot.vrcatalog.model.FavoritesDaoModel; +import ru.volgorobot.vrcatalog.model.FavoritesModel; + +@Database(entities = {FavoritesModel.class}, version = 1) +public abstract class DatabaseHelper extends RoomDatabase { + public abstract FavoritesDaoModel getFavoritesDaoModel(); +} \ No newline at end of file diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/HackyViewPager.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/HackyViewPager.java index b68f824..dd32227 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/additional/HackyViewPager.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/HackyViewPager.java @@ -4,11 +4,13 @@ import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; +import androidx.viewpager.widget.ViewPager; + /** * ViewPager fixer class (which fix bug with zooming) */ -public class HackyViewPager extends android.support.v4.view.ViewPager { +public class HackyViewPager extends ViewPager { public HackyViewPager(Context context) { super(context); 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 index 9216b1d..b2287fc 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/FavoritesListAdapter.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/FavoritesListAdapter.java @@ -3,25 +3,22 @@ package ru.volgorobot.vrcatalog.additional.adapters; import android.content.Context; import android.widget.ArrayAdapter; +import java.util.ArrayList; import java.util.List; -import ru.volgorobot.vrcatalog.model.FavoritesListModel; -import ru.volgorobot.vrcatalog.presenters.FavoritesDBPresenter; +import ru.volgorobot.vrcatalog.model.FavoritesModel; -public class FavoritesListAdapter extends ArrayAdapter { - private FavoritesDBPresenter db; - - public FavoritesListAdapter(Context context, int resource, List objects) { +public class FavoritesListAdapter extends ArrayAdapter { + public FavoritesListAdapter(Context context, int resource, List objects) { super(context, resource, objects); - db = new FavoritesDBPresenter(context); } - public void updateData() { + public void updateData(ArrayList data) { super.clear(); - super.addAll(db.selectAll()); + super.addAll(data); } public int getArraySize() { - return db.selectAll().size(); + return super.getCount(); } } diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/FullscreenImagePagerAdapter.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/FullscreenImagePagerAdapter.java index 49e5aac..954f341 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/FullscreenImagePagerAdapter.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/FullscreenImagePagerAdapter.java @@ -1,9 +1,9 @@ package ru.volgorobot.vrcatalog.additional.adapters; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v4.view.PagerAdapter; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.viewpager.widget.PagerAdapter; +import androidx.appcompat.widget.Toolbar; import android.view.View; import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/ImagePagerAdapter.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/ImagePagerAdapter.java index 2f182f9..c38c275 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/ImagePagerAdapter.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/adapters/ImagePagerAdapter.java @@ -5,8 +5,8 @@ import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.provider.MediaStore; -import android.support.annotation.NonNull; -import android.support.v4.view.PagerAdapter; +import androidx.annotation.NonNull; +import androidx.viewpager.widget.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/model/FavoritesDaoModel.java b/app/src/main/java/ru/volgorobot/vrcatalog/model/FavoritesDaoModel.java new file mode 100644 index 0000000..7f1ef46 --- /dev/null +++ b/app/src/main/java/ru/volgorobot/vrcatalog/model/FavoritesDaoModel.java @@ -0,0 +1,22 @@ +package ru.volgorobot.vrcatalog.model; + +import java.util.List; + +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.Query; + +@Dao +public interface FavoritesDaoModel { + @Query("SELECT * FROM favorites") + List getAll(); + + @Query("SELECT * FROM favorites WHERE itemID = :itemID") + List getFavoriteByItemID(int itemID); + + @Insert + void add(FavoritesModel model); + + @Query("DELETE FROM favorites WHERE id = :id") + void remove(int id); +} diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/model/FavoritesListModel.java b/app/src/main/java/ru/volgorobot/vrcatalog/model/FavoritesModel.java similarity index 51% rename from app/src/main/java/ru/volgorobot/vrcatalog/model/FavoritesListModel.java rename to app/src/main/java/ru/volgorobot/vrcatalog/model/FavoritesModel.java index 75cfb7b..8f1daa9 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/model/FavoritesListModel.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/model/FavoritesModel.java @@ -1,17 +1,21 @@ package ru.volgorobot.vrcatalog.model; -public class FavoritesListModel { - private int id; - private int itemID; - private String itemName; +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.PrimaryKey; - public FavoritesListModel(int itemID, String itemName) { - this.itemID = itemID; - this.itemName = itemName; - } +@Entity(tableName = "favorites") +public class FavoritesModel { + @PrimaryKey(autoGenerate = true) + public int id; - public FavoritesListModel(int id, int itemID, String itemName) { - this.id = id; + @ColumnInfo + public int itemID; + + @ColumnInfo + public String itemName; + + public FavoritesModel(int itemID, String itemName) { this.itemID = itemID; this.itemName = itemName; } diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/FirstLevelNodeViewBinder.java b/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/FirstLevelNodeViewBinder.java index acad9cb..b275c2e 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/FirstLevelNodeViewBinder.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/FirstLevelNodeViewBinder.java @@ -1,11 +1,8 @@ package ru.volgorobot.vrcatalog.nodeViewBinders; import android.content.Context; -import android.graphics.Color; -import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ImageView; -import android.widget.RelativeLayout; import android.widget.TextView; import me.texy.treeview.TreeNode; diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/presenters/FavoritesDBPresenter.java b/app/src/main/java/ru/volgorobot/vrcatalog/presenters/FavoritesDBPresenter.java deleted file mode 100644 index ba5e70c..0000000 --- a/app/src/main/java/ru/volgorobot/vrcatalog/presenters/FavoritesDBPresenter.java +++ /dev/null @@ -1,83 +0,0 @@ -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 index d61fb58..dd98fab 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/presenters/FavoritesPresenter.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/presenters/FavoritesPresenter.java @@ -1,16 +1,21 @@ package ru.volgorobot.vrcatalog.presenters; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import java.util.ArrayList; +import androidx.room.Room; +import ru.volgorobot.vrcatalog.App; import ru.volgorobot.vrcatalog.MainContract; +import ru.volgorobot.vrcatalog.additional.DatabaseHelper; 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.model.FavoritesModel; import ru.volgorobot.vrcatalog.view.FavoritesActivity; import ru.volgorobot.vrcatalog.view.ItemActivity; @@ -18,13 +23,16 @@ public class FavoritesPresenter implements MainContract.FavoritesPresenter { private Context mContext; private MainContract.MainModel mainModel; private MainContract.FavoritesActivityView mView; + private DatabaseHelper db; - public FavoritesPresenter(Context context, FavoritesActivity view) { - this.mContext = context; - this.mainModel = new CoreModel(context); + public FavoritesPresenter(FavoritesActivity view) { + this.mContext = App.getContext(); + this.mainModel = new CoreModel(mContext); this.mView = view; + this.db = App.getDatabaseInstance(); } + @SuppressLint("StaticFieldLeak") @Override public void fetchItem(int itemID) { new AsyncTask>() { @@ -59,19 +67,30 @@ public class FavoritesPresenter implements MainContract.FavoritesPresenter { break; } case 1: { - mView.onFailruleAnswer(1); + mView.onFailureAnswer(1); break; } case 2: { - mView.onFailruleAnswer(2); + mView.onFailureAnswer(2); break; } case 3: { - mView.onFailruleAnswer(3); + mView.onFailureAnswer(3); break; } } } }.execute(itemID); } + + @Override + public void getAllItems() { + mView.updateListView((ArrayList) db.getFavoritesDaoModel().getAll()); + } + + @Override + public void removeItem(int id) { + db.getFavoritesDaoModel().remove(id); + mView.updateListView((ArrayList) db.getFavoritesDaoModel().getAll()); + } } 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 8bcdb04..7c5f316 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/presenters/ItemPresenter.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/presenters/ItemPresenter.java @@ -15,21 +15,27 @@ import java.io.IOException; import java.util.ArrayList; import java.util.UUID; +import androidx.room.Room; +import ru.volgorobot.vrcatalog.App; import ru.volgorobot.vrcatalog.MainContract; +import ru.volgorobot.vrcatalog.additional.DatabaseHelper; import ru.volgorobot.vrcatalog.additional.NetworkErrorException; import ru.volgorobot.vrcatalog.additional.ResultWithErrorCode; import ru.volgorobot.vrcatalog.model.CoreModel; +import ru.volgorobot.vrcatalog.model.FavoritesModel; import ru.volgorobot.vrcatalog.model.ImageItemModel; public class ItemPresenter implements MainContract.ItemPresenter { private MainContract.ItemView mView; private Context context; private MainContract.MainModel coreModel; + private DatabaseHelper db; - public ItemPresenter(Context context, MainContract.ItemView itemView) { + public ItemPresenter(MainContract.ItemView itemView) { this.mView = itemView; - this.context = context; + this.context = App.getContext(); this.coreModel = new CoreModel(context); + this.db = App.getDatabaseInstance(); } @SuppressLint("StaticFieldLeak") @@ -101,4 +107,27 @@ public class ItemPresenter implements MainContract.ItemPresenter { } return Uri.fromFile(cacheObject); } + + @Override + public boolean checkFavoriteListed(int itemID) { + return db.getFavoritesDaoModel().getFavoriteByItemID(itemID).size() != 0; + } + + @Override + public int getFavoriteID(int itemID) { + ArrayList models = (ArrayList) db.getFavoritesDaoModel().getFavoriteByItemID(itemID); + if(models.size() != 0) + return models.get(0).getID(); + return 0; + } + + @Override + public void addToFavorites(int itemID, String itemName) { + db.getFavoritesDaoModel().add(new FavoritesModel(itemID, itemName)); + } + + @Override + public void removeFromFavorites(int favID) { + db.getFavoritesDaoModel().remove(favID); + } } diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/view/AboutActivity.java b/app/src/main/java/ru/volgorobot/vrcatalog/view/AboutActivity.java index 6dc752c..9f3569e 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/view/AboutActivity.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/AboutActivity.java @@ -1,7 +1,7 @@ package ru.volgorobot.vrcatalog.view; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.view.MenuItem; import ru.volgorobot.vrcatalog.R; diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/view/FavoritesActivity.java b/app/src/main/java/ru/volgorobot/vrcatalog/view/FavoritesActivity.java index a622f29..372d09b 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/view/FavoritesActivity.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/FavoritesActivity.java @@ -1,8 +1,8 @@ package ru.volgorobot.vrcatalog.view; import android.content.Intent; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; @@ -19,12 +19,10 @@ 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.model.FavoritesModel; import ru.volgorobot.vrcatalog.presenters.FavoritesPresenter; public class FavoritesActivity extends AppCompatActivity implements MainContract.FavoritesActivityView { - private FavoritesDBPresenter db; private FavoritesListAdapter adapter; private MainContract.FavoritesPresenter mPresenter; @@ -37,15 +35,13 @@ public class FavoritesActivity extends AppCompatActivity implements MainContract super.onCreate(savedInstanceState); setContentView(R.layout.activity_favorites); - mPresenter = new FavoritesPresenter(FavoritesActivity.this, this); + mPresenter = new FavoritesPresenter(this); ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeButtonEnabled(true); actionBar.setTitle("Избранное"); - db = new FavoritesDBPresenter(FavoritesActivity.this); - initViews(); } @@ -55,16 +51,14 @@ public class FavoritesActivity extends AppCompatActivity implements MainContract listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int i, long l) { - FavoritesListModel model = (FavoritesListModel) listView.getItemAtPosition(i); + FavoritesModel model = (FavoritesModel) listView.getItemAtPosition(i); mPresenter.fetchItem(model.getItemID()); } }); + adapter = new FavoritesListAdapter(FavoritesActivity.this, android.R.layout.simple_list_item_1, new ArrayList<>()); + listView.setAdapter(adapter); 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() { @@ -84,18 +78,18 @@ public class FavoritesActivity extends AppCompatActivity implements MainContract AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); switch (item.getItemId()) { case 0: { - FavoritesListModel model = (FavoritesListModel) listView.getItemAtPosition(info.position); - db.removeItem(model.getID()); - updateListView(); - checkForEmptyContent(); + FavoritesModel model = (FavoritesModel) listView.getItemAtPosition(info.position); + mPresenter.removeItem(model.getID()); } } return true; } - private void updateListView() { - adapter.updateData(); + @Override + public void updateListView(ArrayList data) { + adapter.updateData(data); adapter.notifyDataSetChanged(); + checkForEmptyContent(); } @Override @@ -116,7 +110,7 @@ public class FavoritesActivity extends AppCompatActivity implements MainContract } @Override - public void onFailruleAnswer(int errorCode) { + public void onFailureAnswer(int errorCode) { switch (errorCode) { case 1: { Toast.makeText(FavoritesActivity.this, "Ошибка сети. Проверьте подключение к сети или данные подключения к API!", Toast.LENGTH_LONG).show(); @@ -144,7 +138,6 @@ public class FavoritesActivity extends AppCompatActivity implements MainContract @Override protected void onResume() { super.onResume(); - updateListView(); - checkForEmptyContent(); + mPresenter.getAllItems(); } } 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 a897e65..497e451 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/view/FullScreenImageActivity.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/FullScreenImageActivity.java @@ -4,11 +4,11 @@ import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.content.ContextCompat; -import android.support.v4.view.ViewPager; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.viewpager.widget.ViewPager; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import android.view.MenuItem; import android.view.View; import android.view.Window; diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/view/ItemActivity.java b/app/src/main/java/ru/volgorobot/vrcatalog/view/ItemActivity.java index c9154e5..e7b4740 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/view/ItemActivity.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/ItemActivity.java @@ -4,10 +4,11 @@ import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; import android.os.Bundle; -import android.support.design.widget.TabLayout; -import android.support.v4.view.ViewPager; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; +import com.google.android.material.tabs.TabLayout; + +import androidx.viewpager.widget.ViewPager; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; @@ -17,10 +18,7 @@ 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; @@ -33,9 +31,9 @@ public class ItemActivity extends AppCompatActivity implements MainContract.Item private ListView propertiesList; private ImagePagerAdapter imagePagerAdapter; private boolean inFavorites; - private FavoritesDBPresenter db; private int itemID; private String itemName; + private int favoriteID; @Override protected void onCreate(Bundle savedInstanceState) { @@ -47,7 +45,7 @@ public class ItemActivity extends AppCompatActivity implements MainContract.Item getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayShowTitleEnabled(false); initializeViews(); - mPresenter = new ItemPresenter(ItemActivity.this, this); + mPresenter = new ItemPresenter(this); Intent intent = getIntent(); itemName = intent.getStringExtra("detailName"); @@ -63,7 +61,6 @@ public class ItemActivity extends AppCompatActivity implements MainContract.Item 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(intentDataForListView); @@ -71,7 +68,8 @@ public class ItemActivity extends AppCompatActivity implements MainContract.Item mPresenter.getImagesByItemID(Integer.parseInt(intent.getStringExtra("itemID"))); - inFavorites = db.inFavoritesList(itemID); + inFavorites = mPresenter.checkFavoriteListed(itemID); + favoriteID = mPresenter.getFavoriteID(itemID); } void initializeViews() { @@ -229,13 +227,13 @@ public class ItemActivity extends AppCompatActivity implements MainContract.Item MenuItem deleteFromFavorites = menu.findItem(R.id.action_unfavorite); addToFavorites.setOnMenuItemClickListener((MenuItem menuItem) -> { - db.add(new FavoritesListModel(0, itemID, itemName)); + mPresenter.addToFavorites(itemID, itemName); inFavorites = true; this.invalidateOptionsMenu(); return true; }); deleteFromFavorites.setOnMenuItemClickListener((MenuItem menuItem) -> { - db.removeItem(db.getFavoriteID(itemID)); + mPresenter.removeFromFavorites(favoriteID); inFavorites = false; this.invalidateOptionsMenu(); 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 6095e37..63fd314 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/view/MainActivity.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/MainActivity.java @@ -5,16 +5,15 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.design.widget.NavigationView; -import android.support.v4.view.GravityCompat; -import android.support.v4.view.MenuItemCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.SearchView; -import android.support.v7.widget.Toolbar; +import androidx.drawerlayout.widget.DrawerLayout; +import androidx.core.view.GravityCompat; +import androidx.core.view.MenuItemCompat; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import androidx.appcompat.app.ActionBarDrawerToggle; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.DefaultItemAnimator; +import androidx.appcompat.widget.SearchView; +import androidx.appcompat.widget.Toolbar; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; @@ -25,6 +24,8 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import com.google.android.material.navigation.NavigationView; + import java.util.ArrayList; import me.texy.treeview.TreeNode; diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/view/SearchableActivity.java b/app/src/main/java/ru/volgorobot/vrcatalog/view/SearchableActivity.java index 814facc..a0190c2 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/view/SearchableActivity.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/SearchableActivity.java @@ -4,14 +4,13 @@ import android.app.SearchManager; import android.content.Intent; import android.os.Bundle; import android.provider.SearchRecentSuggestions; -import android.support.v4.widget.NestedScrollView; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.DefaultItemAnimator; +import androidx.core.widget.NestedScrollView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.DefaultItemAnimator; import android.util.Log; import android.view.MenuItem; import android.view.View; -import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; diff --git a/app/src/main/res/layout/activity_detail.xml b/app/src/main/res/layout/activity_detail.xml index 05af980..0d398a8 100644 --- a/app/src/main/res/layout/activity_detail.xml +++ b/app/src/main/res/layout/activity_detail.xml @@ -1,25 +1,25 @@ - - - - - - - - + + - - - \ No newline at end of file + + \ 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 index 798f0e0..4308b86 100644 --- a/app/src/main/res/layout/activity_favorites.xml +++ b/app/src/main/res/layout/activity_favorites.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_fullscreenimage.xml b/app/src/main/res/layout/activity_fullscreenimage.xml index 4afd413..f2ed594 100644 --- a/app/src/main/res/layout/activity_fullscreenimage.xml +++ b/app/src/main/res/layout/activity_fullscreenimage.xml @@ -14,7 +14,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> - - - - + diff --git a/app/src/main/res/layout/activity_searchable.xml b/app/src/main/res/layout/activity_searchable.xml index 3220750..6ab6a13 100644 --- a/app/src/main/res/layout/activity_searchable.xml +++ b/app/src/main/res/layout/activity_searchable.xml @@ -1,5 +1,5 @@ - - - - + - + - \ No newline at end of file + \ 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 b87ac6b..a314d65 100644 --- a/app/src/main/res/layout/app_bar_main.xml +++ b/app/src/main/res/layout/app_bar_main.xml @@ -1,17 +1,17 @@ - - - - + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index fb7d24c..b5ae086 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -1,5 +1,5 @@ - - - - + - + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml index c4d297b..f59c587 100644 --- a/app/src/main/res/menu/main.xml +++ b/app/src/main/res/menu/main.xml @@ -5,6 +5,6 @@ android:id="@+id/action_search" android:icon="@drawable/ic_search_white_24dp" app:showAsAction="always|collapseActionView" - app:actionViewClass="android.support.v7.widget.SearchView" + app:actionViewClass="androidx.appcompat.widget.SearchView" android:title="Поиск"/> diff --git a/gradle.properties b/gradle.properties index fc63706..ac6eb9b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,6 +6,8 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. +android.enableJetifier=true +android.useAndroidX=true org.gradle.jvmargs=-Xmx512m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit