From e9540e4a1dbdeb54e6c460ed7a0651e23bfb975f Mon Sep 17 00:00:00 2001 From: aleiva Date: Sun, 29 Jun 2014 21:31:05 +0200 Subject: [PATCH] first commit --- .gitignore | 38 ++++ app/.gitignore | 38 ++++ app/build.gradle | 26 +++ app/proguard-rules.pro | 17 ++ .../example/ApplicationTest.java | 13 ++ app/src/main/AndroidManifest.xml | 25 +++ .../example/MainActivity.java | 65 +++++++ .../example/MyRecyclerAdapter.java | 76 ++++++++ .../OnRecyclerViewItemClickListener.java | 7 + .../example/ViewModel.java | 38 ++++ .../main/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 9397 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 5237 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 14383 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 19388 bytes app/src/main/res/layout/activity_main.xml | 10 ++ app/src/main/res/layout/item.xml | 30 ++++ app/src/main/res/menu/main.xml | 8 + app/src/main/res/values-v21/styles.xml | 6 + app/src/main/res/values-w820dp/dimens.xml | 6 + app/src/main/res/values/dimens.xml | 7 + app/src/main/res/values/strings.xml | 8 + app/src/main/res/values/styles.xml | 8 + build.gradle | 19 ++ gradle.properties | 18 ++ gradlew | 164 ++++++++++++++++++ gradlew.bat | 90 ++++++++++ readme.md | 11 ++ settings.gradle | 1 + 28 files changed, 729 insertions(+) create mode 100644 .gitignore create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/antonioleiva/recycledviewextensions/example/ApplicationTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/antonioleiva/recycledviewextensions/example/MainActivity.java create mode 100644 app/src/main/java/com/antonioleiva/recycledviewextensions/example/MyRecyclerAdapter.java create mode 100644 app/src/main/java/com/antonioleiva/recycledviewextensions/example/OnRecyclerViewItemClickListener.java create mode 100644 app/src/main/java/com/antonioleiva/recycledviewextensions/example/ViewModel.java create mode 100644 app/src/main/res/drawable-hdpi/ic_launcher.png create mode 100644 app/src/main/res/drawable-mdpi/ic_launcher.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/item.xml create mode 100644 app/src/main/res/menu/main.xml create mode 100644 app/src/main/res/values-v21/styles.xml create mode 100644 app/src/main/res/values-w820dp/dimens.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 readme.md create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bc9978e --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# Built application files +*.apk +*.ap_ + +# Files for the Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ + +# Gradle files +.gradle/ +gradle/ +./gradlew.bat +./gradlew +build/ +mirror/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Intellij project files +*.iws +.idea/workspace.xml +.idea/tasks.xml +.idea + +*.iml + +# OS +.DS_Store diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..bc9978e --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,38 @@ +# Built application files +*.apk +*.ap_ + +# Files for the Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ + +# Gradle files +.gradle/ +gradle/ +./gradlew.bat +./gradlew +build/ +mirror/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Intellij project files +*.iws +.idea/workspace.xml +.idea/tasks.xml +.idea + +*.iml + +# OS +.DS_Store diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..177eb70 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,26 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 'android-L' + buildToolsVersion "19.1.0" + + defaultConfig { + applicationId "com.antonioleiva.recycledviewextensions.app" + minSdkVersion 'L' + targetSdkVersion 'L' + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + runProguard false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + compile 'com.android.support:recyclerview-v7:21.+' + compile 'com.squareup.picasso:picasso:1.+' +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..40dca0b --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /home/antonio/Documentos/Desarrollo/android-sdk-linux/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 *; +#} diff --git a/app/src/androidTest/java/com/antonioleiva/recycledviewextensions/example/ApplicationTest.java b/app/src/androidTest/java/com/antonioleiva/recycledviewextensions/example/ApplicationTest.java new file mode 100644 index 0000000..839157f --- /dev/null +++ b/app/src/androidTest/java/com/antonioleiva/recycledviewextensions/example/ApplicationTest.java @@ -0,0 +1,13 @@ +package com.antonioleiva.recycledviewextensions.example; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..24897e3 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/antonioleiva/recycledviewextensions/example/MainActivity.java b/app/src/main/java/com/antonioleiva/recycledviewextensions/example/MainActivity.java new file mode 100644 index 0000000..e9c5603 --- /dev/null +++ b/app/src/main/java/com/antonioleiva/recycledviewextensions/example/MainActivity.java @@ -0,0 +1,65 @@ +package com.antonioleiva.recycledviewextensions.example; + +import android.app.Activity; +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.Menu; +import android.view.MenuItem; +import android.view.View; + +import java.util.ArrayList; +import java.util.List; + + +public class MainActivity extends Activity { + + private static final String MOCK_URL = "http://lorempixel.com/800/400/nightlife/"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list); + recyclerView.setHasFixedSize(true); + final MyRecyclerAdapter adapter; + recyclerView.setAdapter(adapter = new MyRecyclerAdapter(createMockList(), R.layout.item)); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + + adapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() { + @Override public void onItemClick(View view, ViewModel viewModel) { + adapter.remove(viewModel); + } + }); + } + + private List createMockList() { + List items = new ArrayList(); + for (int i = 0; i < 20; i++) { + items.add(new ViewModel(i, "Item " + (i + 1), MOCK_URL + (i % 10 + 1))); + } + return items; + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_settings) { + return true; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/app/src/main/java/com/antonioleiva/recycledviewextensions/example/MyRecyclerAdapter.java b/app/src/main/java/com/antonioleiva/recycledviewextensions/example/MyRecyclerAdapter.java new file mode 100644 index 0000000..c894c3f --- /dev/null +++ b/app/src/main/java/com/antonioleiva/recycledviewextensions/example/MyRecyclerAdapter.java @@ -0,0 +1,76 @@ +package com.antonioleiva.recycledviewextensions.example; + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.squareup.picasso.Picasso; + +import java.util.List; + +public class MyRecyclerAdapter extends RecyclerView.Adapter implements View.OnClickListener { + + private List items; + private OnRecyclerViewItemClickListener itemClickListener; + private int itemLayout; + + public MyRecyclerAdapter(List items, int itemLayout) { + this.items = items; + this.itemLayout = itemLayout; + } + + @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false); + v.setOnClickListener(this); + return new ViewHolder(v); + } + + @Override public void onBindViewHolder(ViewHolder holder, int position) { + ViewModel item = items.get(position); + holder.text.setText(item.getText()); + holder.image.setImageBitmap(null); + Picasso.with(holder.image.getContext()).cancelRequest(holder.image); + Picasso.with(holder.image.getContext()).load(item.getImage()).into(holder.image); + holder.itemView.setTag(item); + } + + @Override public int getItemCount() { + return items.size(); + } + + @Override public void onClick(View view) { + if (itemClickListener != null) { + ViewModel model = (ViewModel) view.getTag(); + itemClickListener.onItemClick(view, model); + } + } + + public void add(ViewModel item, int position) { + items.add(position, item); + notifyItemInserted(position); + } + + public void remove(ViewModel item) { + int position = items.indexOf(item); + items.remove(position); + notifyItemRemoved(position); + } + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.itemClickListener = listener; + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + public ImageView image; + public TextView text; + + public ViewHolder(View itemView) { + super(itemView); + image = (ImageView) itemView.findViewById(R.id.image); + text = (TextView) itemView.findViewById(R.id.text); + } + } +} diff --git a/app/src/main/java/com/antonioleiva/recycledviewextensions/example/OnRecyclerViewItemClickListener.java b/app/src/main/java/com/antonioleiva/recycledviewextensions/example/OnRecyclerViewItemClickListener.java new file mode 100644 index 0000000..b627bb0 --- /dev/null +++ b/app/src/main/java/com/antonioleiva/recycledviewextensions/example/OnRecyclerViewItemClickListener.java @@ -0,0 +1,7 @@ +package com.antonioleiva.recycledviewextensions.example; + +import android.view.View; + +public interface OnRecyclerViewItemClickListener { + public void onItemClick(View view, Model model); +} \ No newline at end of file diff --git a/app/src/main/java/com/antonioleiva/recycledviewextensions/example/ViewModel.java b/app/src/main/java/com/antonioleiva/recycledviewextensions/example/ViewModel.java new file mode 100644 index 0000000..6e29ac1 --- /dev/null +++ b/app/src/main/java/com/antonioleiva/recycledviewextensions/example/ViewModel.java @@ -0,0 +1,38 @@ +package com.antonioleiva.recycledviewextensions.example; + +public class ViewModel { + + private long id; + private String text; + private String image; + + public ViewModel(long id, String text, String image) { + this.id = id; + this.text = text; + this.image = image; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } +} diff --git a/app/src/main/res/drawable-hdpi/ic_launcher.png b/app/src/main/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..96a442e5b8e9394ccf50bab9988cb2316026245d GIT binary patch literal 9397 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 C29#?6 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher.png b/app/src/main/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..71c6d760f05183ef8a47c614d8d13380c8528499 GIT binary patch literal 14383 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 diff --git a/app/src/main/res/layout/item.xml b/app/src/main/res/layout/item.xml new file mode 100644 index 0000000..9ff47ab --- /dev/null +++ b/app/src/main/res/layout/item.xml @@ -0,0 +1,30 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml new file mode 100644 index 0000000..9bfd22c --- /dev/null +++ b/app/src/main/res/menu/main.xml @@ -0,0 +1,8 @@ + + + diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml new file mode 100644 index 0000000..1e7a95e --- /dev/null +++ b/app/src/main/res/values-v21/styles.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..a75fc81 --- /dev/null +++ b/build.gradle @@ -0,0 +1,19 @@ +// 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:0.12.+' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + jcenter() + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..5d08ba7 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,18 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Settings specified in this file will override any Gradle settings +# configured through the IDE. + +# 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 \ No newline at end of file diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..91a7e26 --- /dev/null +++ b/gradlew @@ -0,0 +1,164 @@ +#!/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 + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# 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\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +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"` + + # 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 "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..8a0b282 --- /dev/null +++ b/gradlew.bat @@ -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 diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..a7047eb --- /dev/null +++ b/readme.md @@ -0,0 +1,11 @@ +RecyclerViewExtensions +========= + +Still in development! + +RecyclerViewExtensions will make the use of RecyclerView easier by providing more LayoutManagers and +abstracting some repetitive work. + +More information about RecyclerView can be found at: + +[RecyclerView in Android: The basics (Part 1) @ antonioleiva.com](http://antonioleiva.com/recyclerview/) \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..e7b4def --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +include ':app'