Initial commit
This commit is contained in:
commit
c6bfad37f0
|
@ -0,0 +1,8 @@
|
||||||
|
*.iml
|
||||||
|
.gradle
|
||||||
|
/local.properties
|
||||||
|
/.idea/workspace.xml
|
||||||
|
/.idea/libraries
|
||||||
|
.DS_Store
|
||||||
|
/build
|
||||||
|
/captures
|
|
@ -0,0 +1 @@
|
||||||
|
BackPack
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CompilerConfiguration">
|
||||||
|
<resourceExtensions />
|
||||||
|
<wildcardResourcePatterns>
|
||||||
|
<entry name="!?*.java" />
|
||||||
|
<entry name="!?*.form" />
|
||||||
|
<entry name="!?*.class" />
|
||||||
|
<entry name="!?*.groovy" />
|
||||||
|
<entry name="!?*.scala" />
|
||||||
|
<entry name="!?*.flex" />
|
||||||
|
<entry name="!?*.kt" />
|
||||||
|
<entry name="!?*.clj" />
|
||||||
|
<entry name="!?*.aj" />
|
||||||
|
</wildcardResourcePatterns>
|
||||||
|
<annotationProcessing>
|
||||||
|
<profile default="true" name="Default" enabled="false">
|
||||||
|
<processorPath useClasspath="true" />
|
||||||
|
</profile>
|
||||||
|
</annotationProcessing>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,3 @@
|
||||||
|
<component name="CopyrightManager">
|
||||||
|
<settings default="" />
|
||||||
|
</component>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding">
|
||||||
|
<file url="PROJECT" charset="UTF-8" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="GradleSettings">
|
||||||
|
<option name="linkedExternalProjectsSettings">
|
||||||
|
<GradleProjectSettings>
|
||||||
|
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||||
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
|
<option name="modules">
|
||||||
|
<set>
|
||||||
|
<option value="$PROJECT_DIR$" />
|
||||||
|
<option value="$PROJECT_DIR$/app" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
<option name="myModules">
|
||||||
|
<set>
|
||||||
|
<option value="$PROJECT_DIR$" />
|
||||||
|
<option value="$PROJECT_DIR$/app" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</GradleProjectSettings>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,73 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="EntryPointsManager">
|
||||||
|
<entry_points version="2.0" />
|
||||||
|
</component>
|
||||||
|
<component name="NullableNotNullManager">
|
||||||
|
<option name="myDefaultNullable" value="android.support.annotation.Nullable" />
|
||||||
|
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
|
||||||
|
<option name="myNullables">
|
||||||
|
<value>
|
||||||
|
<list size="4">
|
||||||
|
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
|
||||||
|
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
|
||||||
|
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
|
||||||
|
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
|
||||||
|
</list>
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
<option name="myNotNulls">
|
||||||
|
<value>
|
||||||
|
<list size="4">
|
||||||
|
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
|
||||||
|
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
|
||||||
|
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
|
||||||
|
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
|
||||||
|
</list>
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
||||||
|
<OptionsSetting value="true" id="Add" />
|
||||||
|
<OptionsSetting value="true" id="Remove" />
|
||||||
|
<OptionsSetting value="true" id="Checkout" />
|
||||||
|
<OptionsSetting value="true" id="Update" />
|
||||||
|
<OptionsSetting value="true" id="Status" />
|
||||||
|
<OptionsSetting value="true" id="Edit" />
|
||||||
|
<ConfirmationsSetting value="0" id="Add" />
|
||||||
|
<ConfirmationsSetting value="0" id="Remove" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectType">
|
||||||
|
<option name="id" value="Android" />
|
||||||
|
</component>
|
||||||
|
<component name="masterDetails">
|
||||||
|
<states>
|
||||||
|
<state key="ProjectJDKs.UI">
|
||||||
|
<settings>
|
||||||
|
<last-edited>1.8</last-edited>
|
||||||
|
<splitter-proportions>
|
||||||
|
<option name="proportions">
|
||||||
|
<list>
|
||||||
|
<option value="0.2" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</splitter-proportions>
|
||||||
|
</settings>
|
||||||
|
</state>
|
||||||
|
<state key="ScopeChooserConfigurable.UI">
|
||||||
|
<settings>
|
||||||
|
<splitter-proportions>
|
||||||
|
<option name="proportions">
|
||||||
|
<list>
|
||||||
|
<option value="0.2" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</splitter-proportions>
|
||||||
|
</settings>
|
||||||
|
</state>
|
||||||
|
</states>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/BackPack2.iml" filepath="$PROJECT_DIR$/BackPack2.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RunConfigurationProducerService">
|
||||||
|
<option name="ignoredProducers">
|
||||||
|
<set>
|
||||||
|
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
|
||||||
|
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
|
||||||
|
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1 @@
|
||||||
|
/build
|
|
@ -0,0 +1,42 @@
|
||||||
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdkVersion 23
|
||||||
|
buildToolsVersion "23.0.1"
|
||||||
|
/*
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
defaultConfig {
|
||||||
|
applicationId "hikapro.com.backpack"
|
||||||
|
minSdkVersion 17
|
||||||
|
targetSdkVersion 23
|
||||||
|
versionCode 1
|
||||||
|
versionName "1.0"
|
||||||
|
}
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
|
testCompile 'junit:junit:4.12'
|
||||||
|
|
||||||
|
compile 'com.google.code.gson:gson:2.6.2'
|
||||||
|
compile 'com.squareup.retrofit2:retrofit:2.0.1'
|
||||||
|
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
|
||||||
|
compile 'com.squareup.okhttp3:okhttp:3.2.0'
|
||||||
|
|
||||||
|
compile 'com.squareup.okhttp:logging-interceptor:2.7.0'
|
||||||
|
compile 'com.android.support:support-v4:23.3.0'
|
||||||
|
compile 'com.android.support:appcompat-v7:23.3.0'
|
||||||
|
compile 'com.android.support:design:23.3.0'
|
||||||
|
compile 'com.android.support:support-v4:23.3.0'
|
||||||
|
compile 'com.android.support:cardview-v7:23.3.0'
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Add project specific ProGuard rules here.
|
||||||
|
# By default, the flags in this file are appended to flags specified
|
||||||
|
# in /home/tariel/Android/Sdk/tools/proguard/proguard-android.txt
|
||||||
|
# You can edit the include path and order by changing the proguardFiles
|
||||||
|
# directive in build.gradle.
|
||||||
|
#
|
||||||
|
# For more details, see
|
||||||
|
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||||
|
|
||||||
|
# Add any project specific keep options here:
|
||||||
|
|
||||||
|
# If your project uses WebView with JS, uncomment the following
|
||||||
|
# and specify the fully qualified class name to the JavaScript interface
|
||||||
|
# class:
|
||||||
|
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||||
|
# public *;
|
||||||
|
#}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package hikapro.com.backpack;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.test.ApplicationTestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
|
||||||
|
*/
|
||||||
|
public class ApplicationTest extends ApplicationTestCase<Application> {
|
||||||
|
public ApplicationTest() {
|
||||||
|
super(Application.class);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="hikapro.com.backpack">
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:allowBackup="true"
|
||||||
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:supportsRtl="true"
|
||||||
|
android:theme="@style/AppTheme">
|
||||||
|
<activity android:name=".MainActivity">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
</application>
|
||||||
|
|
||||||
|
</manifest>
|
|
@ -0,0 +1,48 @@
|
||||||
|
package hikapro.com.backpack;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.Fragment;
|
||||||
|
import android.app.FragmentManager;
|
||||||
|
import android.app.FragmentTransaction;
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.model.entities.Set;
|
||||||
|
import hikapro.com.backpack.view.View;
|
||||||
|
import hikapro.com.backpack.view.fragments.ItemListFragment;
|
||||||
|
import hikapro.com.backpack.view.fragments.SetListFragment;
|
||||||
|
|
||||||
|
public class MainActivity extends Activity implements View.ActivityCallback {
|
||||||
|
|
||||||
|
private static String TAG = "TAG";
|
||||||
|
|
||||||
|
private FragmentManager fragmentManager;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_main);
|
||||||
|
fragmentManager = getFragmentManager();
|
||||||
|
|
||||||
|
Fragment fragment = fragmentManager.findFragmentByTag(TAG);
|
||||||
|
if (fragment == null)
|
||||||
|
replaceFragment(SetListFragment.construct(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void startItemListFragment(Set set) {
|
||||||
|
replaceFragment(ItemListFragment.newFromSet(set), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void startItemDetailFragment() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceFragment(Fragment fragment, boolean addBackStack) {
|
||||||
|
FragmentTransaction transaction = fragmentManager.beginTransaction();
|
||||||
|
transaction.replace(R.id.container, fragment, TAG);
|
||||||
|
if (addBackStack)
|
||||||
|
transaction.addToBackStack(null);
|
||||||
|
transaction.commit();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package hikapro.com.backpack.model;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.model.entities.Category;
|
||||||
|
import hikapro.com.backpack.model.entities.Item;
|
||||||
|
import hikapro.com.backpack.model.entities.Set;
|
||||||
|
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.http.GET;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 19/04/16.
|
||||||
|
*/
|
||||||
|
public interface Api {
|
||||||
|
|
||||||
|
@GET("/api/v1/backpack/items")
|
||||||
|
Call<List<Item>> getItems();
|
||||||
|
|
||||||
|
@GET("/api/v1/backpack/item_categories")
|
||||||
|
Call<List<Category>> getItemCategories();
|
||||||
|
|
||||||
|
@GET("/api/v1/backpack/sets")
|
||||||
|
Call<List<Set>> getSets();
|
||||||
|
}
|
|
@ -0,0 +1,197 @@
|
||||||
|
package hikapro.com.backpack.model;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.model.entities.Category;
|
||||||
|
import hikapro.com.backpack.model.entities.Item;
|
||||||
|
import hikapro.com.backpack.presenter.Presenter;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 22/04/16.
|
||||||
|
*/
|
||||||
|
public class ItemModel implements Model.Item {
|
||||||
|
|
||||||
|
private Api api;
|
||||||
|
private Presenter.ItemList presenter;
|
||||||
|
private List<Category> rawCategories;
|
||||||
|
private List<Category> sortedCategories;
|
||||||
|
private List<Item> rawItems;
|
||||||
|
|
||||||
|
private Hashtable<Category, List<Item>> items;
|
||||||
|
|
||||||
|
public ItemModel(Presenter.ItemList presenter) {
|
||||||
|
this.api = RestClient.getApi();
|
||||||
|
this.presenter = presenter;
|
||||||
|
this.rawCategories = new ArrayList<>();
|
||||||
|
this.rawItems = new ArrayList<>();
|
||||||
|
this.sortedCategories = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// categories -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Category getCategoryByPosition(int position) {
|
||||||
|
return sortedCategories.get(position);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public int getCategoriesCount() {
|
||||||
|
return sortedCategories.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
// categories <--
|
||||||
|
|
||||||
|
// items -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int insertItem(Item item) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean deleteItem(int id) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public Item findItem(int id) { // TODO rename to find
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public Item getItemByPosition(int categoryId, int position) {
|
||||||
|
Item ret = null;
|
||||||
|
Category category = findSortedCategory(categoryId);
|
||||||
|
if (category != null) {
|
||||||
|
ret = items.get(category).get(position);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public int getItemsCount(int categoryId) {
|
||||||
|
int ret = 0;
|
||||||
|
Category category = findSortedCategory(categoryId);
|
||||||
|
if (category != null) {
|
||||||
|
ret = items.get(category).size();
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
// items <--
|
||||||
|
|
||||||
|
// events -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notifyDataSetChanged() {
|
||||||
|
presenter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy(boolean isConfigurationChanging) {
|
||||||
|
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void sendMessage(String message) {
|
||||||
|
presenter.showMessage(message);
|
||||||
|
}
|
||||||
|
// events <--
|
||||||
|
|
||||||
|
// process -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void executeQuery() {
|
||||||
|
loadCategories();
|
||||||
|
loadItems();
|
||||||
|
}
|
||||||
|
private void loadCategories() {
|
||||||
|
Call<List<Category>> call = api.getItemCategories();
|
||||||
|
call.enqueue(new Callback<List<Category>>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<List<Category>> call, Response<List<Category>> response) {
|
||||||
|
int statusCode = response.code();
|
||||||
|
rawCategories = response.body();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<List<Category>> call, Throwable t) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
private void loadItems() {
|
||||||
|
Call<List<Item>> call2 = api.getItems();
|
||||||
|
call2.enqueue(new Callback<List<Item>>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<List<Item>> call, Response<List<Item>> response) {
|
||||||
|
int statusCode = response.code();
|
||||||
|
rawItems = response.body();
|
||||||
|
initData();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<List<Item>> call, Throwable t) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
private void syncData() {
|
||||||
|
// TODO sync data here
|
||||||
|
}
|
||||||
|
// process <--
|
||||||
|
|
||||||
|
// other -->
|
||||||
|
|
||||||
|
private void initData() {
|
||||||
|
List<Integer> ids = presenter.getCurrentSet().getItems();
|
||||||
|
List<Item> sortedItems = new ArrayList<>(ids.size());
|
||||||
|
Category category;
|
||||||
|
|
||||||
|
for (Item item : rawItems) {
|
||||||
|
if (ids.contains(item.getId())) {
|
||||||
|
sortedItems.add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Collections.sort(sortedItems);
|
||||||
|
items = new Hashtable<>(sortedItems.size());
|
||||||
|
|
||||||
|
for (Item item : sortedItems) {
|
||||||
|
category = findCategory(item.getCategory());
|
||||||
|
if (category != null) {
|
||||||
|
if (items.containsKey(category)) {
|
||||||
|
items.get(category).add(item);
|
||||||
|
} else {
|
||||||
|
List<Item> innerList = new ArrayList<>(20);
|
||||||
|
innerList.add(item);
|
||||||
|
items.put(category, innerList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Category[] array = items.keySet().toArray(new Category[items.size()]);
|
||||||
|
sortedCategories = Arrays.asList(array);
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
private Category findSortedCategory(int categoryId) {
|
||||||
|
Category category = null;
|
||||||
|
for (Category c : sortedCategories) {
|
||||||
|
if (c.getId() == categoryId) {
|
||||||
|
category = c;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return category;
|
||||||
|
|
||||||
|
}
|
||||||
|
private Category findCategory(int categoryId) {
|
||||||
|
Category category = null;
|
||||||
|
|
||||||
|
for (Category c : rawCategories) {
|
||||||
|
if (c.getId() == categoryId) {
|
||||||
|
category = c;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return category;
|
||||||
|
}
|
||||||
|
// other <--
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package hikapro.com.backpack.model;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.model.entities.Category;
|
||||||
|
import hikapro.com.backpack.model.entities.Item;
|
||||||
|
import hikapro.com.backpack.model.entities.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 19/04/16.
|
||||||
|
*/
|
||||||
|
public interface Model {
|
||||||
|
|
||||||
|
interface Base {
|
||||||
|
void onDestroy(boolean isConfigurationChanging);
|
||||||
|
void executeQuery();
|
||||||
|
void sendMessage(String message);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Set extends Base {
|
||||||
|
hikapro.com.backpack.model.entities.Set getSetByPosition(int position);
|
||||||
|
hikapro.com.backpack.model.entities.Set findSet(int id);
|
||||||
|
int getSetsCount();
|
||||||
|
void notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Item extends Base {
|
||||||
|
int insertItem(hikapro.com.backpack.model.entities.Item item);
|
||||||
|
boolean deleteItem(int id);
|
||||||
|
hikapro.com.backpack.model.entities.Item findItem(int id);
|
||||||
|
hikapro.com.backpack.model.entities.Item getItemByPosition(int categoryId, int position);
|
||||||
|
int getItemsCount(int categoryId);
|
||||||
|
hikapro.com.backpack.model.entities.Category getCategoryByPosition(int position);
|
||||||
|
int getCategoriesCount();
|
||||||
|
void notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package hikapro.com.backpack.model;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
|
import retrofit2.Retrofit;
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 22/04/16.
|
||||||
|
*/
|
||||||
|
public class RestClient {
|
||||||
|
|
||||||
|
public static final String BASE_URL = "http://hikapro.com";
|
||||||
|
|
||||||
|
public static Api getApi() {
|
||||||
|
|
||||||
|
Gson gson = new GsonBuilder()
|
||||||
|
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
|
||||||
|
.create();
|
||||||
|
|
||||||
|
Retrofit retrofit = new Retrofit.Builder()
|
||||||
|
.baseUrl(BASE_URL)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create(gson))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return retrofit.create(Api.class);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,102 @@
|
||||||
|
package hikapro.com.backpack.model;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.model.entities.Set;
|
||||||
|
import hikapro.com.backpack.presenter.Presenter;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 20/04/16.
|
||||||
|
*/
|
||||||
|
public class SetModel implements Model.Set {
|
||||||
|
|
||||||
|
private List<hikapro.com.backpack.model.entities.Set> iList;
|
||||||
|
private Api api;
|
||||||
|
private Presenter.SetList presenter;
|
||||||
|
|
||||||
|
public SetModel(Presenter.SetList presenter) {
|
||||||
|
this.api = RestClient.getApi();
|
||||||
|
this.iList = new ArrayList<>();
|
||||||
|
this.presenter = presenter;
|
||||||
|
}
|
||||||
|
|
||||||
|
// sets -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public hikapro.com.backpack.model.entities.Set getSetByPosition(int position) {
|
||||||
|
return iList.get(position);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public hikapro.com.backpack.model.entities.Set findSet(int id) {
|
||||||
|
Set ret = null;
|
||||||
|
for (Set s : iList) {
|
||||||
|
if (s.getId() == id) {
|
||||||
|
ret = s;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSetsCount() {
|
||||||
|
return iList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
// sets <--
|
||||||
|
|
||||||
|
// events -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy(boolean isConfigurationChanging) {
|
||||||
|
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void notifyDataSetChanged() {
|
||||||
|
presenter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(String message) {
|
||||||
|
presenter.showMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// events <--
|
||||||
|
|
||||||
|
// process -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void executeQuery() {
|
||||||
|
Call<List<hikapro.com.backpack.model.entities.Set>> call = api.getSets();
|
||||||
|
call.enqueue(new Callback<List<hikapro.com.backpack.model.entities.Set>>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<List<hikapro.com.backpack.model.entities.Set>> call, Response<List<hikapro.com.backpack.model.entities.Set>> response) {
|
||||||
|
int statusCode = response.code();
|
||||||
|
iList = response.body();
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<List<hikapro.com.backpack.model.entities.Set>> call, Throwable t) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
private void syncData() {
|
||||||
|
|
||||||
|
}
|
||||||
|
// process <--
|
||||||
|
|
||||||
|
// other -->
|
||||||
|
// other <--
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package hikapro.com.backpack.model.database;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 20/04/16.
|
||||||
|
*/
|
||||||
|
public class DAO {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
private DbHelper helper;
|
||||||
|
|
||||||
|
public DAO(Context context) {
|
||||||
|
this.context = context;
|
||||||
|
this.helper = new DbHelper(this.context);
|
||||||
|
}
|
||||||
|
|
||||||
|
private SQLiteDatabase getReadDB(){
|
||||||
|
return helper.getReadableDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
private SQLiteDatabase getWriteDB(){
|
||||||
|
return helper.getWritableDatabase();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,195 @@
|
||||||
|
package hikapro.com.backpack.model.database;
|
||||||
|
|
||||||
|
import android.content.ContentValues;
|
||||||
|
import android.database.Cursor;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.model.entities.Category;
|
||||||
|
import hikapro.com.backpack.model.entities.Item;
|
||||||
|
import hikapro.com.backpack.model.entities.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 20/04/16.
|
||||||
|
*/
|
||||||
|
public class Db {
|
||||||
|
|
||||||
|
public Db() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract static class CategoriesTable {
|
||||||
|
|
||||||
|
public static final String TABLE_NAME = "CATEGORIES";
|
||||||
|
|
||||||
|
public static final String COLUMN_ID = "_id";
|
||||||
|
public static final String COLUMN_NAME = "NAME";
|
||||||
|
|
||||||
|
public static final String CREATE =
|
||||||
|
"CREATE TABLE " + TABLE_NAME + " (" +
|
||||||
|
COLUMN_ID + " INTEGER PRIMARY KEY, " +
|
||||||
|
COLUMN_NAME + " TEXT NOT NULL" +
|
||||||
|
" ); ";
|
||||||
|
|
||||||
|
public static ContentValues toContentValues(Category category) {
|
||||||
|
ContentValues values = new ContentValues();
|
||||||
|
values.put(COLUMN_ID, category.getId());
|
||||||
|
values.put(COLUMN_NAME, category.getName());
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Category parseCursor(Cursor cursor) {
|
||||||
|
Category category = new Category();
|
||||||
|
category.setId(cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_ID)));
|
||||||
|
category.setName(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_NAME)));
|
||||||
|
return category;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract static class ItemsTable {
|
||||||
|
public static final String TABLE_NAME = "ITEMS";
|
||||||
|
|
||||||
|
public static final String COLUMN_ID = "_id";
|
||||||
|
public static final String COLUMN_NAME = "NAME";
|
||||||
|
public static final String COLUMN_CATEGORY = "CATEGORY";
|
||||||
|
public static final String COLUMN_DESCRIPTION = "DESCRIPTION";
|
||||||
|
public static final String COLUMN_BUY_URLS = "BUY_URLS";
|
||||||
|
public static final String COLUMN_PHOTO_URL = "PHOTO_URL";
|
||||||
|
public static final String COLUMN_PHOTO_THUMB_URL = "PHOTO_THUMB_URL";
|
||||||
|
public static final String COLUMN_PHOTO_LOCAL = "PHOTO_LOCAL";
|
||||||
|
public static final String COLUMN_PHOTO_THUMB_LOCAL = "PHOTO_THUMB_LOCAL";
|
||||||
|
|
||||||
|
|
||||||
|
public static final String CREATE =
|
||||||
|
"CREATE TABLE " + TABLE_NAME + " (" +
|
||||||
|
COLUMN_ID + " INTEGER PRIMARY KEY, " +
|
||||||
|
COLUMN_NAME + " TEXT NOT NULL, " +
|
||||||
|
COLUMN_CATEGORY + " INTEGER NOT NULL, " +
|
||||||
|
COLUMN_DESCRIPTION + " TEXT, " +
|
||||||
|
COLUMN_BUY_URLS + " TEXT, " +
|
||||||
|
COLUMN_PHOTO_URL + " TEXT, " +
|
||||||
|
COLUMN_PHOTO_THUMB_URL + " TEXT, " +
|
||||||
|
COLUMN_PHOTO_LOCAL + " TEXT, " +
|
||||||
|
COLUMN_PHOTO_THUMB_LOCAL + " TEXT" +
|
||||||
|
" ); ";
|
||||||
|
|
||||||
|
public static ContentValues toContentValues(Item item) {
|
||||||
|
ContentValues values = new ContentValues();
|
||||||
|
values.put(COLUMN_ID, item.getId());
|
||||||
|
values.put(COLUMN_NAME, item.getName());
|
||||||
|
values.put(COLUMN_CATEGORY, item.getCategory());
|
||||||
|
if (item.getDescription() != null)
|
||||||
|
values.put(COLUMN_DESCRIPTION, item.getDescription());
|
||||||
|
if (item.getBuyUrls() != null && !item.getBuyUrls().isEmpty()) {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Type type = new TypeToken<List<String>>() {}.getType();
|
||||||
|
String json = gson.toJson(item.getBuyUrls(), type);
|
||||||
|
values.put(COLUMN_BUY_URLS, json);
|
||||||
|
}
|
||||||
|
if (item.getPhotoUrl() != null)
|
||||||
|
values.put(COLUMN_PHOTO_URL, item.getPhotoUrl());
|
||||||
|
if (item.getPhotoThumbUrl() != null)
|
||||||
|
values.put(COLUMN_PHOTO_THUMB_URL, item.getPhotoThumbUrl());
|
||||||
|
/*
|
||||||
|
values.put(COLUMN_PHOTO_LOCAL, );
|
||||||
|
values.put(COLUMN_PHOTO_THUMB_LOCAL, item.getName());
|
||||||
|
*/
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Item parseCursor(Cursor cursor) {
|
||||||
|
Item item = new Item();
|
||||||
|
item.setId(cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_ID)));
|
||||||
|
item.setName(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_NAME)));
|
||||||
|
|
||||||
|
item.setCategory(cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_CATEGORY)));
|
||||||
|
|
||||||
|
item.setDescription(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_DESCRIPTION)));
|
||||||
|
String urls = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_BUY_URLS));
|
||||||
|
if (urls != null && !urls.isEmpty()) {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Type type = new TypeToken<List<String>>() {}.getType();
|
||||||
|
List<String> fromJson = gson.fromJson(urls, type);
|
||||||
|
item.setBuyUrls(fromJson);
|
||||||
|
}
|
||||||
|
item.setPhotoUrl(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_PHOTO_URL)));
|
||||||
|
item.setPhotoThumbUrl(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_PHOTO_THUMB_URL)));
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract static class SetsTable {
|
||||||
|
public static final String TABLE_NAME = "SETS";
|
||||||
|
|
||||||
|
public static final String COLUMN_ID = "_id";
|
||||||
|
public static final String COLUMN_NAME = "NAME";
|
||||||
|
public static final String COLUMN_ITEMS = "ITEMS";
|
||||||
|
public static final String COLUMN_PHOTO_URL = "PHOTO_URL";
|
||||||
|
public static final String COLUMN_PHOTO_THUMB_URL = "PHOTO_THUMB_URL";
|
||||||
|
public static final String COLUMN_PHOTO_LOCAL = "PHOTO_LOCAL";
|
||||||
|
public static final String COLUMN_PHOTO_THUMB_LOCAL = "PHOTO_THUMB_LOCAL";
|
||||||
|
public static final String COLUMN_PHOTO_THUMBNAIL_URL = "PHOTO_THUMBNAIL_URL";
|
||||||
|
public static final String COLUMN_PHOTO_THUMBNAIL_LOCAL = "PHOTO_THUMBNAIL_LOCAL";
|
||||||
|
|
||||||
|
public static final String CREATE =
|
||||||
|
"CREATE TABLE " + TABLE_NAME + " (" +
|
||||||
|
COLUMN_ID + " INTEGER PRIMARY KEY, " +
|
||||||
|
COLUMN_NAME + " TEXT NOT NULL, " +
|
||||||
|
COLUMN_ITEMS + " TEXT, " +
|
||||||
|
COLUMN_PHOTO_URL + " TEXT, " +
|
||||||
|
COLUMN_PHOTO_THUMB_URL + " TEXT, " +
|
||||||
|
COLUMN_PHOTO_LOCAL + " TEXT, " +
|
||||||
|
COLUMN_PHOTO_THUMB_LOCAL + " TEXT, " +
|
||||||
|
COLUMN_PHOTO_THUMBNAIL_URL + " TEXT, " +
|
||||||
|
COLUMN_PHOTO_THUMBNAIL_LOCAL + " TEXT" +
|
||||||
|
" ); ";
|
||||||
|
|
||||||
|
public static ContentValues toContentValues(Set set) {
|
||||||
|
ContentValues values = new ContentValues();
|
||||||
|
values.put(COLUMN_ID, set.getId());
|
||||||
|
values.put(COLUMN_NAME, set.getName());
|
||||||
|
|
||||||
|
List<Integer> items = set.getItems();
|
||||||
|
if (items != null && !items.isEmpty()) {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Type type = new TypeToken<List<Integer>>() {}.getType();
|
||||||
|
String json = gson.toJson(items, type);
|
||||||
|
values.put(COLUMN_ITEMS, json);
|
||||||
|
}
|
||||||
|
values.put(COLUMN_PHOTO_URL, set.getPhoto());
|
||||||
|
values.put(COLUMN_PHOTO_THUMB_URL, set.getPhotoThumb());
|
||||||
|
values.put(COLUMN_PHOTO_THUMBNAIL_URL, set.getPhotoThumbnail());
|
||||||
|
/*
|
||||||
|
values.put(COLUMN_PHOTO_LOCAL, "");
|
||||||
|
values.put(COLUMN_PHOTO_THUMB_LOCAL, "");
|
||||||
|
values.put(COLUMN_PHOTO_THUMBNAIL_LOCAL, "");
|
||||||
|
*/
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Set parseCursor(Cursor cursor) {
|
||||||
|
Set set = new Set();
|
||||||
|
set.setId(cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_ID)));
|
||||||
|
set.setName(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_NAME)));
|
||||||
|
|
||||||
|
String items = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_ITEMS));
|
||||||
|
if (items != null && !items.isEmpty()) {
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Type type = new TypeToken<List<Integer>>() {}.getType();
|
||||||
|
List<Integer> fromJson = gson.fromJson(items, type);
|
||||||
|
set.setItems(fromJson);
|
||||||
|
}
|
||||||
|
set.setPhoto(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_PHOTO_URL)));
|
||||||
|
set.setPhotoThumb(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_PHOTO_THUMB_URL)));
|
||||||
|
set.setPhotoThumbnail(cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_PHOTO_THUMBNAIL_URL)));
|
||||||
|
|
||||||
|
return set;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package hikapro.com.backpack.model.database;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 20/04/16.
|
||||||
|
*/
|
||||||
|
public class DbHelper extends SQLiteOpenHelper {
|
||||||
|
|
||||||
|
public static final String DATABASE_NAME = "backpack";
|
||||||
|
|
||||||
|
public static final int DATABASE_VERSION = 1;
|
||||||
|
|
||||||
|
|
||||||
|
public DbHelper(Context context) {
|
||||||
|
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(SQLiteDatabase db) {
|
||||||
|
db.beginTransaction();
|
||||||
|
try {
|
||||||
|
updateDatabase(db, 0, DATABASE_VERSION);
|
||||||
|
db.setTransactionSuccessful();
|
||||||
|
} finally {
|
||||||
|
db.endTransaction();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||||
|
updateDatabase(db, oldVersion, newVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateDatabase(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||||
|
|
||||||
|
db.execSQL(Db.ItemsTable.CREATE);
|
||||||
|
db.execSQL(Db.CategoriesTable.CREATE);
|
||||||
|
db.execSQL(Db.SetsTable.CREATE);
|
||||||
|
|
||||||
|
if (oldVersion < 2) {
|
||||||
|
// place the logic here
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
package hikapro.com.backpack.model.entities;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.Expose;
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 28/03/16.
|
||||||
|
*/
|
||||||
|
public class Category implements Serializable {
|
||||||
|
|
||||||
|
@SerializedName("id")
|
||||||
|
@Expose
|
||||||
|
private int id;
|
||||||
|
@SerializedName("name")
|
||||||
|
@Expose
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public Category() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Category(int id, String name) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return 31 * id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
Category that = (Category) o;
|
||||||
|
|
||||||
|
if (id != that.id)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,131 @@
|
||||||
|
package hikapro.com.backpack.model.entities;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.Expose;
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 02/04/16.
|
||||||
|
*/
|
||||||
|
public class Item implements Comparable<Item> {
|
||||||
|
|
||||||
|
@SerializedName("id")
|
||||||
|
@Expose
|
||||||
|
private int id;
|
||||||
|
@SerializedName("name")
|
||||||
|
@Expose
|
||||||
|
private String name;
|
||||||
|
@SerializedName("item_category_id")
|
||||||
|
@Expose
|
||||||
|
private int category;
|
||||||
|
@SerializedName("description")
|
||||||
|
@Expose
|
||||||
|
private String description;
|
||||||
|
@SerializedName("buy_urls")
|
||||||
|
@Expose
|
||||||
|
private List<String> buyUrls = new ArrayList<String>();
|
||||||
|
@SerializedName("photo")
|
||||||
|
@Expose
|
||||||
|
private String photoUrl;
|
||||||
|
@SerializedName("photo_thumb")
|
||||||
|
@Expose
|
||||||
|
private String photoThumbUrl;
|
||||||
|
|
||||||
|
public Item() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Item(int id, String name, int category, String description, List<String> buyUrls,
|
||||||
|
String photoUrl, String photoThumbUrl) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.category = category;
|
||||||
|
this.description = description;
|
||||||
|
this.buyUrls = buyUrls;
|
||||||
|
this.photoUrl = photoUrl;
|
||||||
|
this.photoThumbUrl = photoThumbUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCategory() {
|
||||||
|
return category;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCategory(int category) {
|
||||||
|
this.category = category;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getBuyUrls() {
|
||||||
|
return buyUrls;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBuyUrls(List<String> buyUrls) {
|
||||||
|
this.buyUrls = buyUrls;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPhotoUrl() {
|
||||||
|
return photoUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhotoUrl(String photoUrl) {
|
||||||
|
this.photoUrl = photoUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPhotoThumbUrl() {
|
||||||
|
return photoThumbUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhotoThumbUrl(String photoThumbUrl) {
|
||||||
|
this.photoThumbUrl = photoThumbUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = name != null ? name.hashCode() : 0;
|
||||||
|
result = 31 * result + (name != null ? name.hashCode() : 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
Item that = (Item) o;
|
||||||
|
|
||||||
|
if (id != that.id)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(Item another) {
|
||||||
|
int cmp = Integer.valueOf(category).compareTo(Integer.valueOf(another.category));
|
||||||
|
return (cmp != 0 ? cmp : name.compareTo(another.name));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,112 @@
|
||||||
|
package hikapro.com.backpack.model.entities;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.Expose;
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 02/04/16.
|
||||||
|
*/
|
||||||
|
public class Set implements Serializable {
|
||||||
|
|
||||||
|
@SerializedName("id")
|
||||||
|
@Expose
|
||||||
|
private int id;
|
||||||
|
@SerializedName("item_ids")
|
||||||
|
@Expose
|
||||||
|
private List<Integer> items = new ArrayList<Integer>();
|
||||||
|
@SerializedName("name")
|
||||||
|
@Expose
|
||||||
|
private String name;
|
||||||
|
@SerializedName("photo")
|
||||||
|
@Expose
|
||||||
|
private String photo;
|
||||||
|
@SerializedName("photo_thumb")
|
||||||
|
@Expose
|
||||||
|
private String photoThumb;
|
||||||
|
@SerializedName("photo_thumbnail")
|
||||||
|
@Expose
|
||||||
|
private String photoThumbnail;
|
||||||
|
|
||||||
|
public Set() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set(int id, List<Integer> items, String name, String photo, String photoThumb, String photoThumbnail) {
|
||||||
|
this.id = id;
|
||||||
|
this.items = items;
|
||||||
|
this.name = name;
|
||||||
|
this.photo = photo;
|
||||||
|
this.photoThumb = photoThumb;
|
||||||
|
this.photoThumbnail = photoThumbnail;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Integer> getItems() {
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setItems(List<Integer> items) {
|
||||||
|
this.items = items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPhoto() {
|
||||||
|
return photo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhoto(String photo) {
|
||||||
|
this.photo = photo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPhotoThumb() {
|
||||||
|
return photoThumb;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhotoThumb(String photoThumb) {
|
||||||
|
this.photoThumb = photoThumb;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPhotoThumbnail() {
|
||||||
|
return photoThumbnail;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhotoThumbnail(String photoThumbnail) {
|
||||||
|
this.photoThumbnail = photoThumbnail;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = name != null ? name.hashCode() : 0;
|
||||||
|
result = 31 * result + (name != null ? name.hashCode() : 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
Set that = (Set) o;
|
||||||
|
|
||||||
|
if (id != that.id)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,186 @@
|
||||||
|
package hikapro.com.backpack.presenter;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v7.widget.DefaultItemAnimator;
|
||||||
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.R;
|
||||||
|
import hikapro.com.backpack.model.ItemModel;
|
||||||
|
import hikapro.com.backpack.model.Model;
|
||||||
|
import hikapro.com.backpack.model.entities.Set;
|
||||||
|
import hikapro.com.backpack.presenter.adapters.CategoryListAdapter;
|
||||||
|
import hikapro.com.backpack.presenter.adapters.ItemListAdapter;
|
||||||
|
import hikapro.com.backpack.view.View;
|
||||||
|
import hikapro.com.backpack.view.recycler.CategoryViewHolder;
|
||||||
|
import hikapro.com.backpack.view.recycler.ItemViewHolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 20/04/16.
|
||||||
|
*/
|
||||||
|
public class ItemListPresenter implements Presenter.ItemList {
|
||||||
|
|
||||||
|
private static final String BUNDLE_SET_LIST_KEY = "BUNDLE_SET_LIST_KEY";
|
||||||
|
|
||||||
|
private WeakReference<View.ItemList> view;
|
||||||
|
private Model.Item model;
|
||||||
|
private Set set;
|
||||||
|
private CategoryListAdapter categoryListAdapter;
|
||||||
|
|
||||||
|
public ItemListPresenter(View.ItemList view, Set set) {
|
||||||
|
this.view = new WeakReference<>(view);
|
||||||
|
this.set = set;
|
||||||
|
this.categoryListAdapter = new CategoryListAdapter(this);
|
||||||
|
setModel(new ItemModel(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
// life cycle -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy(boolean isChangingConfiguration) {
|
||||||
|
view = null;
|
||||||
|
model.onDestroy(isChangingConfiguration);
|
||||||
|
if ( !isChangingConfiguration ) {
|
||||||
|
model = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public android.view.View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
if (savedInstanceState != null)
|
||||||
|
set = (Set) savedInstanceState.getSerializable(BUNDLE_SET_LIST_KEY);
|
||||||
|
android.view.View view = inflater.inflate(R.layout.fragment_item_list, container, false);
|
||||||
|
LinearLayoutManager llm = new LinearLayoutManager(getActivityContext());
|
||||||
|
RecyclerView mainRecycler = (RecyclerView) view.findViewById(R.id.categories_main_recycler);
|
||||||
|
mainRecycler.setLayoutManager(llm);
|
||||||
|
mainRecycler.setAdapter(categoryListAdapter);
|
||||||
|
mainRecycler.setItemAnimator(new DefaultItemAnimator());
|
||||||
|
model.executeQuery();
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
|
if (set != null)
|
||||||
|
outState.putSerializable(BUNDLE_SET_LIST_KEY, set);
|
||||||
|
}
|
||||||
|
|
||||||
|
// life cycle <--
|
||||||
|
|
||||||
|
// recycler -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CategoryViewHolder createViewHolderCategory(ViewGroup parent, int viewType) {
|
||||||
|
CategoryViewHolder viewHolder;
|
||||||
|
android.view.View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.section,
|
||||||
|
parent, false);
|
||||||
|
viewHolder = new CategoryViewHolder(v);
|
||||||
|
return viewHolder;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void bindViewHolderCategory(CategoryViewHolder holder, int position) {
|
||||||
|
final hikapro.com.backpack.model.entities.Category category = model.getCategoryByPosition(position);
|
||||||
|
holder.sectionText.setText(category.getName());
|
||||||
|
LinearLayoutManager llm = new LinearLayoutManager(getActivityContext());
|
||||||
|
holder.itemsRecycler.setLayoutManager(llm);
|
||||||
|
ItemListAdapter itemListAdapter = new ItemListAdapter(this);
|
||||||
|
itemListAdapter.setCategoryId(category.getId());
|
||||||
|
holder.itemsRecycler.setAdapter(itemListAdapter);
|
||||||
|
holder.itemsRecycler.setItemAnimator(new DefaultItemAnimator());
|
||||||
|
categoryListAdapter.addItemAdapter(itemListAdapter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemViewHolder createViewHolderItem(ViewGroup parent, int viewType) {
|
||||||
|
ItemViewHolder viewHolder;
|
||||||
|
android.view.View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,
|
||||||
|
parent, false);
|
||||||
|
viewHolder = new ItemViewHolder(v);
|
||||||
|
return viewHolder;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void bindViewHolderItem(final ItemViewHolder holder, final int position, int categoryId) {
|
||||||
|
|
||||||
|
hikapro.com.backpack.model.entities.Item item = model.getItemByPosition(categoryId, position);
|
||||||
|
holder.title.setText(item.getName());
|
||||||
|
holder.id = item.getId();
|
||||||
|
holder.title.setOnClickListener(new android.view.View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(android.view.View view) {
|
||||||
|
showMessage("Position " + position + " Id " + holder.id);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public int getItemsCount(int categoryId) {
|
||||||
|
return model.getItemsCount(categoryId);//TODO category Id
|
||||||
|
}
|
||||||
|
|
||||||
|
// recycler <--
|
||||||
|
|
||||||
|
// process -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notifyDataSetChanged() {
|
||||||
|
categoryListAdapter.notifyDataSetChanged();
|
||||||
|
categoryListAdapter.notifyItemAdapters();
|
||||||
|
}
|
||||||
|
|
||||||
|
// process <--
|
||||||
|
|
||||||
|
// other impl -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setView(View.ItemList view) {
|
||||||
|
this.view = new WeakReference<>(view);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public Context getAppContext() {
|
||||||
|
try {
|
||||||
|
return getView().getAppContext();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public Context getActivityContext() {
|
||||||
|
try {
|
||||||
|
return getView().getActivityContext();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void setModel(Model.Item model) {
|
||||||
|
this.model = model;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void showMessage(String message) {
|
||||||
|
Toast.makeText(getView().getAppContext(), message, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
// other impl <--
|
||||||
|
|
||||||
|
private View.ItemList getView() throws NullPointerException {
|
||||||
|
if ( view != null )
|
||||||
|
return view.get();
|
||||||
|
else
|
||||||
|
throw new NullPointerException("View is unavailable");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCategoriesCount() {
|
||||||
|
return model.getCategoriesCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set getCurrentSet() {
|
||||||
|
return set;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
package hikapro.com.backpack.presenter;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.model.Model;
|
||||||
|
import hikapro.com.backpack.model.entities.Set;
|
||||||
|
import hikapro.com.backpack.view.recycler.CategoryViewHolder;
|
||||||
|
import hikapro.com.backpack.view.recycler.ItemViewHolder;
|
||||||
|
import hikapro.com.backpack.view.recycler.SetViewHolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 19/04/16.
|
||||||
|
*/
|
||||||
|
public interface Presenter {
|
||||||
|
|
||||||
|
interface Base {
|
||||||
|
Context getAppContext();
|
||||||
|
Context getActivityContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SetList extends Base {
|
||||||
|
SetViewHolder createViewHolder(ViewGroup parent, int viewType);
|
||||||
|
void bindViewHolder(SetViewHolder holder, int position);
|
||||||
|
int getSetsCount();
|
||||||
|
void clickSet(int setId);
|
||||||
|
void onDestroy(boolean isChangingConfiguration);
|
||||||
|
android.view.View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
|
||||||
|
void setView(hikapro.com.backpack.view.View.SetList view);
|
||||||
|
void setModel(Model.Set model);
|
||||||
|
void notifyDataSetChanged();
|
||||||
|
void showMessage(String message);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ItemList extends Base {
|
||||||
|
ItemViewHolder createViewHolderItem(ViewGroup parent, int viewType);
|
||||||
|
void bindViewHolderItem(ItemViewHolder holder, int position, int categoryId);
|
||||||
|
int getItemsCount(int categoryId);
|
||||||
|
CategoryViewHolder createViewHolderCategory(ViewGroup parent, int viewType);
|
||||||
|
void bindViewHolderCategory(CategoryViewHolder holder, int position);
|
||||||
|
int getCategoriesCount();
|
||||||
|
void onDestroy(boolean isChangingConfiguration);
|
||||||
|
android.view.View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
|
||||||
|
void setView(hikapro.com.backpack.view.View.ItemList view);
|
||||||
|
void setModel(Model.Item model);
|
||||||
|
void notifyDataSetChanged();
|
||||||
|
Set getCurrentSet();
|
||||||
|
void showMessage(String message);
|
||||||
|
void onSaveInstanceState(Bundle outState);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,152 @@
|
||||||
|
package hikapro.com.backpack.presenter;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v7.widget.DefaultItemAnimator;
|
||||||
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.R;
|
||||||
|
import hikapro.com.backpack.model.SetModel;
|
||||||
|
import hikapro.com.backpack.model.Model;
|
||||||
|
import hikapro.com.backpack.model.entities.Set;
|
||||||
|
import hikapro.com.backpack.presenter.adapters.SetListAdapter;
|
||||||
|
import hikapro.com.backpack.view.View;
|
||||||
|
import hikapro.com.backpack.view.recycler.SetViewHolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 20/04/16.
|
||||||
|
*/
|
||||||
|
public class SetListPresenter implements Presenter.SetList {
|
||||||
|
|
||||||
|
private WeakReference<View.SetList> view;
|
||||||
|
private Model.Set model;
|
||||||
|
private SetListAdapter adapter;
|
||||||
|
|
||||||
|
public SetListPresenter() {
|
||||||
|
this.adapter = new SetListAdapter(this);
|
||||||
|
setModel(new SetModel(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
// life cycle -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy(boolean isChangingConfiguration) {
|
||||||
|
view = null;
|
||||||
|
model.onDestroy(isChangingConfiguration);
|
||||||
|
if ( !isChangingConfiguration ) {
|
||||||
|
model = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public android.view.View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
Bundle savedInstanceState) {
|
||||||
|
android.view.View view = inflater.inflate(R.layout.fragment_set_list, container, false);
|
||||||
|
LinearLayoutManager llm = new LinearLayoutManager(getActivityContext());
|
||||||
|
RecyclerView setRecycler = (RecyclerView) view.findViewById(R.id.set_recycler);
|
||||||
|
setRecycler.setLayoutManager(llm);
|
||||||
|
setRecycler.setAdapter(adapter);
|
||||||
|
setRecycler.setItemAnimator(new DefaultItemAnimator());
|
||||||
|
model.executeQuery();
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
|
// life cycle <--
|
||||||
|
|
||||||
|
// recycler -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SetViewHolder createViewHolder(ViewGroup parent, int viewType) {
|
||||||
|
SetViewHolder viewHolder;
|
||||||
|
android.view.View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.set_card,
|
||||||
|
parent, false);
|
||||||
|
viewHolder = new SetViewHolder(v);
|
||||||
|
return viewHolder;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void bindViewHolder(final SetViewHolder holder, int position) {
|
||||||
|
|
||||||
|
final hikapro.com.backpack.model.entities.Set set = model.getSetByPosition(position);
|
||||||
|
holder.textView.setText(set.getName());
|
||||||
|
holder.cardView.setOnClickListener(new android.view.View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(android.view.View v) {
|
||||||
|
if (getView() != null)
|
||||||
|
getView().showItemList(set);
|
||||||
|
else
|
||||||
|
showMessage("There is no view in presenter");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public int getSetsCount() {
|
||||||
|
return model.getSetsCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
// recycler <--
|
||||||
|
|
||||||
|
// process -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clickSet(int setId) {
|
||||||
|
Set set = model.findSet(setId);
|
||||||
|
if (set != null) {
|
||||||
|
getView().showItemList(set);
|
||||||
|
} else {
|
||||||
|
showMessage("Set not found!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void notifyDataSetChanged() {
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
// process <--
|
||||||
|
|
||||||
|
// other impl -->
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Context getAppContext() {
|
||||||
|
try {
|
||||||
|
return getView().getAppContext();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public Context getActivityContext() {
|
||||||
|
try {
|
||||||
|
return getView().getActivityContext();
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void setView(View.SetList view) {
|
||||||
|
this.view = new WeakReference<>(view);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void setModel(Model.Set model) {
|
||||||
|
this.model = model;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void showMessage(String message) {
|
||||||
|
Toast.makeText(getView().getAppContext(), message, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
// other impl <--
|
||||||
|
|
||||||
|
private View.SetList getView() throws NullPointerException {
|
||||||
|
if ( view != null )
|
||||||
|
return view.get();
|
||||||
|
else
|
||||||
|
throw new NullPointerException("View is unavailable");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
package hikapro.com.backpack.presenter.adapters;
|
||||||
|
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.presenter.Presenter;
|
||||||
|
import hikapro.com.backpack.view.recycler.CategoryViewHolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 20/04/16.
|
||||||
|
*/
|
||||||
|
public class CategoryListAdapter extends RecyclerView.Adapter<CategoryViewHolder> {
|
||||||
|
|
||||||
|
private Presenter.ItemList presenter;
|
||||||
|
private List<ItemListAdapter> itemAdapters;
|
||||||
|
|
||||||
|
public CategoryListAdapter(Presenter.ItemList presenter) {
|
||||||
|
this.presenter = presenter;
|
||||||
|
this.itemAdapters = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return presenter.getCategoriesCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(CategoryViewHolder holder, int position) {
|
||||||
|
presenter.bindViewHolderCategory(holder, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CategoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
|
return presenter.createViewHolderCategory(parent, viewType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addItemAdapter(ItemListAdapter adapter) {
|
||||||
|
itemAdapters.add(adapter);
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
public void notifyItemAdapters() {
|
||||||
|
for (ItemListAdapter adapter : itemAdapters) {
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package hikapro.com.backpack.presenter.adapters;
|
||||||
|
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.presenter.Presenter;
|
||||||
|
import hikapro.com.backpack.view.recycler.ItemViewHolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 20/04/16.
|
||||||
|
*/
|
||||||
|
public class ItemListAdapter extends RecyclerView.Adapter<ItemViewHolder> {
|
||||||
|
|
||||||
|
private Presenter.ItemList presenter;
|
||||||
|
private int categoryId;
|
||||||
|
|
||||||
|
public ItemListAdapter(Presenter.ItemList presenter) {
|
||||||
|
this.presenter = presenter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return presenter.getItemsCount(categoryId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
|
return presenter.createViewHolderItem(parent, viewType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(ItemViewHolder holder, int position) {
|
||||||
|
presenter.bindViewHolderItem(holder, position, categoryId);
|
||||||
|
}
|
||||||
|
public void setCategoryId(int categoryId) {
|
||||||
|
this.categoryId = categoryId;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package hikapro.com.backpack.presenter.adapters;
|
||||||
|
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.presenter.SetListPresenter;
|
||||||
|
import hikapro.com.backpack.view.recycler.SetViewHolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 20/04/16.
|
||||||
|
*/
|
||||||
|
public class SetListAdapter extends RecyclerView.Adapter<SetViewHolder> {
|
||||||
|
|
||||||
|
private SetListPresenter presenter;
|
||||||
|
|
||||||
|
public SetListAdapter(SetListPresenter presenter) {
|
||||||
|
this.presenter = presenter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(SetViewHolder holder, int position) {
|
||||||
|
presenter.bindViewHolder(holder, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SetViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
|
return presenter.createViewHolder(parent, viewType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return presenter.getSetsCount();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
package hikapro.com.backpack.view;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.model.entities.Item;
|
||||||
|
import hikapro.com.backpack.model.entities.Set;
|
||||||
|
import hikapro.com.backpack.presenter.Presenter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 19/04/16.
|
||||||
|
*/
|
||||||
|
public interface View {
|
||||||
|
|
||||||
|
interface Base {
|
||||||
|
Context getAppContext();
|
||||||
|
Context getActivityContext();
|
||||||
|
}
|
||||||
|
interface SetList extends Base {
|
||||||
|
void showItemList(Set set);
|
||||||
|
void setPresenter(Presenter.SetList presenter);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ItemList extends Base {
|
||||||
|
void showItemDetail(Item item);
|
||||||
|
void setPresenter(Presenter.ItemList presenter);
|
||||||
|
}
|
||||||
|
interface ItemDetail extends Base {
|
||||||
|
|
||||||
|
}
|
||||||
|
interface ActivityCallback {
|
||||||
|
void startItemListFragment(Set set);
|
||||||
|
void startItemDetailFragment();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,144 @@
|
||||||
|
package hikapro.com.backpack.view.fragments;
|
||||||
|
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.Fragment;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.R;
|
||||||
|
import hikapro.com.backpack.model.entities.Item;
|
||||||
|
import hikapro.com.backpack.model.entities.Set;
|
||||||
|
import hikapro.com.backpack.presenter.ItemListPresenter;
|
||||||
|
import hikapro.com.backpack.presenter.Presenter;
|
||||||
|
|
||||||
|
|
||||||
|
public class ItemListFragment extends Fragment implements hikapro.com.backpack.view.View.ItemList {
|
||||||
|
|
||||||
|
private static final String BUNDLE_SET_KEY = "BUNDLE_SET_KEY";
|
||||||
|
private hikapro.com.backpack.view.View.ActivityCallback activityCallback;
|
||||||
|
private Presenter.ItemList presenter;
|
||||||
|
|
||||||
|
|
||||||
|
public ItemListFragment() {
|
||||||
|
// Required empty public constructor
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static ItemListFragment construct() {
|
||||||
|
return new ItemListFragment();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ItemListFragment newFromSet(Set set) {
|
||||||
|
ItemListFragment ret = ItemListFragment.construct();
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putSerializable(BUNDLE_SET_KEY, set);
|
||||||
|
ret.setArguments(args);
|
||||||
|
ret.setPresenter(new ItemListPresenter(ret, set));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// life cycle -->
|
||||||
|
@Override
|
||||||
|
public void onAttach(Context context) {
|
||||||
|
super.onAttach(context);
|
||||||
|
try {
|
||||||
|
activityCallback = (hikapro.com.backpack.view.View.ActivityCallback) context;
|
||||||
|
} catch (ClassCastException e) {
|
||||||
|
throw new ClassCastException(context.toString()
|
||||||
|
+ " must implement activityCallback");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onAttach(Activity activity) {
|
||||||
|
super.onAttach(activity);
|
||||||
|
try {
|
||||||
|
activityCallback = (hikapro.com.backpack.view.View.ActivityCallback) activity;
|
||||||
|
} catch (ClassCastException e) {
|
||||||
|
throw new ClassCastException(activity.toString()
|
||||||
|
+ " must implement activityCallback");
|
||||||
|
}
|
||||||
|
Log.i(this.toString(), "onAttach");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
Log.i(this.toString(), "onCreate");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
Bundle savedInstanceState) {
|
||||||
|
// Inflate the layout for this fragment
|
||||||
|
View view = presenter.onCreateView(inflater, container, savedInstanceState);
|
||||||
|
Log.i(this.toString(), "onCreateView");
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onActivityCreated(Bundle savedInstanceState) {
|
||||||
|
super.onActivityCreated(savedInstanceState);
|
||||||
|
Log.i(this.toString(), "onActivityCreated");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
Log.i(this.toString(), "onStart");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
Log.i(this.toString(), "onResume");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
Log.i(this.toString(), "onStop");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
presenter.onDestroy(true); // TODO isChangingConfigurations
|
||||||
|
Log.i(this.toString(), "onDestroyView");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
Log.i(this.toString(), "onDestroy");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onDetach() {
|
||||||
|
super.onDetach();
|
||||||
|
Log.i(this.toString(), "onDetach");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
Log.i(this.toString(), "onSaveInstanceState");
|
||||||
|
}
|
||||||
|
|
||||||
|
// life cycle <--
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showItemDetail(Item item) {
|
||||||
|
//TODO not implemented
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPresenter(Presenter.ItemList presenter) {
|
||||||
|
this.presenter = presenter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Context getAppContext() {
|
||||||
|
return this.getActivity().getApplicationContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Context getActivityContext() {
|
||||||
|
return this.getActivity();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,133 @@
|
||||||
|
package hikapro.com.backpack.view.fragments;
|
||||||
|
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.Fragment;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.R;
|
||||||
|
import hikapro.com.backpack.model.entities.Set;
|
||||||
|
import hikapro.com.backpack.presenter.Presenter;
|
||||||
|
import hikapro.com.backpack.presenter.SetListPresenter;
|
||||||
|
|
||||||
|
public class SetListFragment extends Fragment implements hikapro.com.backpack.view.View.SetList {
|
||||||
|
|
||||||
|
private Presenter.SetList presenter;
|
||||||
|
private hikapro.com.backpack.view.View.ActivityCallback activityCallback;
|
||||||
|
|
||||||
|
|
||||||
|
public SetListFragment() {
|
||||||
|
// Required empty public constructor
|
||||||
|
}
|
||||||
|
public static SetListFragment construct() {
|
||||||
|
SetListFragment ret = new SetListFragment();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// life cycle -->
|
||||||
|
@Override
|
||||||
|
public void onAttach(Context context) {
|
||||||
|
super.onAttach(context);
|
||||||
|
try {
|
||||||
|
activityCallback = (hikapro.com.backpack.view.View.ActivityCallback) context;
|
||||||
|
} catch (ClassCastException e) {
|
||||||
|
throw new ClassCastException(context.toString()
|
||||||
|
+ " must implement activityCallback");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onAttach(Activity activity) {
|
||||||
|
super.onAttach(activity);
|
||||||
|
try {
|
||||||
|
activityCallback = (hikapro.com.backpack.view.View.ActivityCallback) activity;
|
||||||
|
} catch (ClassCastException e) {
|
||||||
|
throw new ClassCastException(activity.toString()
|
||||||
|
+ " must implement activityCallback");
|
||||||
|
}
|
||||||
|
Log.i(this.toString(), "onAttach");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setPresenter(new SetListPresenter());
|
||||||
|
Log.i(this.toString(), "onCreate");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
Bundle savedInstanceState) {
|
||||||
|
// Inflate the layout for this fragment
|
||||||
|
View view = presenter.onCreateView(inflater, container, savedInstanceState);
|
||||||
|
presenter.setView(this);
|
||||||
|
Log.i(this.toString(), "onCreateView");
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onActivityCreated(Bundle savedInstanceState) {
|
||||||
|
super.onActivityCreated(savedInstanceState);
|
||||||
|
Log.i(this.toString(), "onActivityCreated");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
Log.i(this.toString(), "onStart");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
Log.i(this.toString(), "onResume");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
Log.i(this.toString(), "onPause");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
Log.i(this.toString(), "onStop");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
super.onDestroyView();
|
||||||
|
presenter.onDestroy(true); // TODO isChangingConfigurations
|
||||||
|
Log.i(this.toString(), "onDestroyView");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
Log.i(this.toString(), "onDestroy");
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onDetach() {
|
||||||
|
super.onDetach();
|
||||||
|
Log.i(this.toString(), "onDetach");
|
||||||
|
}
|
||||||
|
// life cycle <--
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showItemList(Set set) {
|
||||||
|
activityCallback.startItemListFragment(set);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Context getAppContext() {
|
||||||
|
return this.getActivity().getApplicationContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Context getActivityContext() {
|
||||||
|
return this.getActivity();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPresenter(Presenter.SetList presenter) {
|
||||||
|
this.presenter = presenter;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package hikapro.com.backpack.view.recycler;
|
||||||
|
|
||||||
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.R;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 20/04/16.
|
||||||
|
*/
|
||||||
|
public class CategoryViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
public LinearLayout section;
|
||||||
|
public TextView sectionText;
|
||||||
|
public RecyclerView itemsRecycler;
|
||||||
|
|
||||||
|
public CategoryViewHolder(View v) {
|
||||||
|
super(v);
|
||||||
|
setupViews(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupViews(View view) {
|
||||||
|
section = (LinearLayout)view.findViewById(R.id.linear);
|
||||||
|
sectionText = (TextView)view.findViewById(R.id.section_text);
|
||||||
|
itemsRecycler = (RecyclerView) view.findViewById(R.id.category_inner_recycler);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package hikapro.com.backpack.view.recycler;
|
||||||
|
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.R;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 20/04/16.
|
||||||
|
*/
|
||||||
|
public class ItemViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
public TextView title;
|
||||||
|
public int id;
|
||||||
|
public int categoryId;
|
||||||
|
|
||||||
|
public ItemViewHolder(View v) {
|
||||||
|
super(v);
|
||||||
|
setupViews(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupViews(View view) {
|
||||||
|
title = (TextView) view.findViewById(R.id.item_text);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package hikapro.com.backpack.view.recycler;
|
||||||
|
|
||||||
|
import android.support.v7.widget.CardView;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import hikapro.com.backpack.R;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by tariel on 20/04/16.
|
||||||
|
*/
|
||||||
|
public class SetViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
public CardView cardView;
|
||||||
|
public TextView textView;
|
||||||
|
|
||||||
|
public SetViewHolder(View v) {
|
||||||
|
super(v);
|
||||||
|
setupViews(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupViews(View view) {
|
||||||
|
cardView = (CardView) view.findViewById(R.id.card_view_set);
|
||||||
|
textView = (TextView) view.findViewById(R.id.set_text);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
tools:context="hikapro.com.backpack.MainActivity">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||||
|
</LinearLayout>
|
|
@ -0,0 +1,14 @@
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context="hikapro.com.backpack.view.fragments.ItemListFragment"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:id="@+id/categories_main_recycler"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:scrollbars="vertical"
|
||||||
|
/>
|
||||||
|
</LinearLayout>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/set_recycler"
|
||||||
|
android:scrollbars="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"/>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:background="@android:color/transparent"
|
||||||
|
android:textSize="10sp"
|
||||||
|
android:id="@+id/item_text"
|
||||||
|
android:textStyle="bold" />
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/linear">
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingLeft="16dp"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textAllCaps="true"
|
||||||
|
android:background="@android:color/transparent"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:id="@+id/section_text"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:id="@+id/category_inner_recycler"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.v7.widget.CardView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/card_view_set"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="200dp"
|
||||||
|
android:layout_margin="5dp"
|
||||||
|
card_view:cardCornerRadius="4dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/set_text"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_marginBottom="5dp"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</android.support.v7.widget.CardView>
|
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 4.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
|
@ -0,0 +1,6 @@
|
||||||
|
<resources>
|
||||||
|
<!-- Example customization of dimensions originally defined in res/values/dimens.xml
|
||||||
|
(such as screen margins) for screens with more than 820dp of available width. This
|
||||||
|
would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
|
||||||
|
<dimen name="activity_horizontal_margin">64dp</dimen>
|
||||||
|
</resources>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="colorPrimary">#3F51B5</color>
|
||||||
|
<color name="colorPrimaryDark">#303F9F</color>
|
||||||
|
<color name="colorAccent">#FF4081</color>
|
||||||
|
</resources>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<resources>
|
||||||
|
<!-- Default screen margins, per the Android Design guidelines. -->
|
||||||
|
<dimen name="activity_horizontal_margin">16dp</dimen>
|
||||||
|
<dimen name="activity_vertical_margin">16dp</dimen>
|
||||||
|
</resources>
|
|
@ -0,0 +1,3 @@
|
||||||
|
<resources>
|
||||||
|
<string name="app_name">BackPack</string>
|
||||||
|
</resources>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
<!-- Base application theme. -->
|
||||||
|
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||||
|
<!-- Customize your theme here. -->
|
||||||
|
<item name="colorPrimary">@color/colorPrimary</item>
|
||||||
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</resources>
|
|
@ -0,0 +1,15 @@
|
||||||
|
package hikapro.com.backpack;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To work on unit tests, switch the Test Artifact in the Build Variants view.
|
||||||
|
*/
|
||||||
|
public class ExampleUnitTest {
|
||||||
|
@Test
|
||||||
|
public void addition_isCorrect() throws Exception {
|
||||||
|
assertEquals(4, 2 + 2);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
|
||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
classpath 'com.android.tools.build:gradle:2.0.0'
|
||||||
|
|
||||||
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
|
// in the individual module build.gradle files
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
allprojects {
|
||||||
|
repositories {
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
task clean(type: Delete) {
|
||||||
|
delete rootProject.buildDir
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Project-wide Gradle settings.
|
||||||
|
|
||||||
|
# IDE (e.g. Android Studio) users:
|
||||||
|
# Gradle settings configured through the IDE *will override*
|
||||||
|
# any settings specified in this file.
|
||||||
|
|
||||||
|
# For more details on how to configure your build environment visit
|
||||||
|
# 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.
|
||||||
|
# Default value: -Xmx10248m -XX:MaxPermSize=256m
|
||||||
|
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
||||||
|
|
||||||
|
# When configured, Gradle will run in incubating parallel mode.
|
||||||
|
# This option should only be used with decoupled projects. More details, visit
|
||||||
|
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||||
|
# org.gradle.parallel=true
|
Binary file not shown.
|
@ -0,0 +1,6 @@
|
||||||
|
#Mon Dec 28 10:00:20 PST 2015
|
||||||
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionPath=wrapper/dists
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
zipStorePath=wrapper/dists
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
|
|
@ -0,0 +1,160 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
##
|
||||||
|
## Gradle start up script for UN*X
|
||||||
|
##
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
DEFAULT_JVM_OPTS=""
|
||||||
|
|
||||||
|
APP_NAME="Gradle"
|
||||||
|
APP_BASE_NAME=`basename "$0"`
|
||||||
|
|
||||||
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
|
MAX_FD="maximum"
|
||||||
|
|
||||||
|
warn ( ) {
|
||||||
|
echo "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
die ( ) {
|
||||||
|
echo
|
||||||
|
echo "$*"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# OS specific support (must be 'true' or 'false').
|
||||||
|
cygwin=false
|
||||||
|
msys=false
|
||||||
|
darwin=false
|
||||||
|
case "`uname`" in
|
||||||
|
CYGWIN* )
|
||||||
|
cygwin=true
|
||||||
|
;;
|
||||||
|
Darwin* )
|
||||||
|
darwin=true
|
||||||
|
;;
|
||||||
|
MINGW* )
|
||||||
|
msys=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Attempt to set APP_HOME
|
||||||
|
# Resolve links: $0 may be a link
|
||||||
|
PRG="$0"
|
||||||
|
# Need this for relative symlinks.
|
||||||
|
while [ -h "$PRG" ] ; do
|
||||||
|
ls=`ls -ld "$PRG"`
|
||||||
|
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||||
|
if expr "$link" : '/.*' > /dev/null; then
|
||||||
|
PRG="$link"
|
||||||
|
else
|
||||||
|
PRG=`dirname "$PRG"`"/$link"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
SAVED="`pwd`"
|
||||||
|
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||||
|
APP_HOME="`pwd -P`"
|
||||||
|
cd "$SAVED" >/dev/null
|
||||||
|
|
||||||
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
|
# Determine the Java command to use to start the JVM.
|
||||||
|
if [ -n "$JAVA_HOME" ] ; then
|
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||||
|
# IBM's JDK on AIX uses strange locations for the executables
|
||||||
|
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||||
|
else
|
||||||
|
JAVACMD="$JAVA_HOME/bin/java"
|
||||||
|
fi
|
||||||
|
if [ ! -x "$JAVACMD" ] ; then
|
||||||
|
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
JAVACMD="java"
|
||||||
|
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Increase the maximum file descriptors if we can.
|
||||||
|
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
||||||
|
MAX_FD_LIMIT=`ulimit -H -n`
|
||||||
|
if [ $? -eq 0 ] ; then
|
||||||
|
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||||
|
MAX_FD="$MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
ulimit -n $MAX_FD
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Darwin, add options to specify how the application appears in the dock
|
||||||
|
if $darwin; then
|
||||||
|
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Cygwin, switch paths to Windows format before running java
|
||||||
|
if $cygwin ; then
|
||||||
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||||
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||||
|
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||||
|
|
||||||
|
# We build the pattern for arguments to be converted via cygpath
|
||||||
|
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||||
|
SEP=""
|
||||||
|
for dir in $ROOTDIRSRAW ; do
|
||||||
|
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||||
|
SEP="|"
|
||||||
|
done
|
||||||
|
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||||
|
# Add a user-defined pattern to the cygpath arguments
|
||||||
|
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||||
|
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||||
|
fi
|
||||||
|
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||||
|
i=0
|
||||||
|
for arg in "$@" ; do
|
||||||
|
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||||
|
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||||
|
|
||||||
|
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||||
|
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||||
|
else
|
||||||
|
eval `echo args$i`="\"$arg\""
|
||||||
|
fi
|
||||||
|
i=$((i+1))
|
||||||
|
done
|
||||||
|
case $i in
|
||||||
|
(0) set -- ;;
|
||||||
|
(1) set -- "$args0" ;;
|
||||||
|
(2) set -- "$args0" "$args1" ;;
|
||||||
|
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||||
|
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||||
|
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||||
|
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||||
|
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||||
|
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||||
|
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
||||||
|
function splitJvmOpts() {
|
||||||
|
JVM_OPTS=("$@")
|
||||||
|
}
|
||||||
|
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
||||||
|
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
||||||
|
|
||||||
|
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
|
@ -0,0 +1,90 @@
|
||||||
|
@if "%DEBUG%" == "" @echo off
|
||||||
|
@rem ##########################################################################
|
||||||
|
@rem
|
||||||
|
@rem Gradle startup script for Windows
|
||||||
|
@rem
|
||||||
|
@rem ##########################################################################
|
||||||
|
|
||||||
|
@rem Set local scope for the variables with windows NT shell
|
||||||
|
if "%OS%"=="Windows_NT" setlocal
|
||||||
|
|
||||||
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
set DEFAULT_JVM_OPTS=
|
||||||
|
|
||||||
|
set DIRNAME=%~dp0
|
||||||
|
if "%DIRNAME%" == "" set DIRNAME=.
|
||||||
|
set APP_BASE_NAME=%~n0
|
||||||
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
|
@rem Find java.exe
|
||||||
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
|
set JAVA_EXE=java.exe
|
||||||
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
|
if "%ERRORLEVEL%" == "0" goto init
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:findJavaFromJavaHome
|
||||||
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
|
if exist "%JAVA_EXE%" goto init
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:init
|
||||||
|
@rem Get command-line arguments, handling Windowz variants
|
||||||
|
|
||||||
|
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||||
|
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||||
|
|
||||||
|
:win9xME_args
|
||||||
|
@rem Slurp the command line arguments.
|
||||||
|
set CMD_LINE_ARGS=
|
||||||
|
set _SKIP=2
|
||||||
|
|
||||||
|
:win9xME_args_slurp
|
||||||
|
if "x%~1" == "x" goto execute
|
||||||
|
|
||||||
|
set CMD_LINE_ARGS=%*
|
||||||
|
goto execute
|
||||||
|
|
||||||
|
:4NT_args
|
||||||
|
@rem Get arguments from the 4NT Shell from JP Software
|
||||||
|
set CMD_LINE_ARGS=%$
|
||||||
|
|
||||||
|
:execute
|
||||||
|
@rem Setup the command line
|
||||||
|
|
||||||
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
@rem Execute Gradle
|
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||||
|
|
||||||
|
:end
|
||||||
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||||
|
|
||||||
|
:fail
|
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||||
|
rem the _cmd.exe /c_ return code!
|
||||||
|
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:mainEnd
|
||||||
|
if "%OS%"=="Windows_NT" endlocal
|
||||||
|
|
||||||
|
:omega
|
|
@ -0,0 +1 @@
|
||||||
|
include ':app'
|
Loading…
Reference in New Issue