diff --git a/library/.classpath b/.classpath
similarity index 100%
rename from library/.classpath
rename to .classpath
diff --git a/library/.gitignore b/.gitignore
similarity index 85%
rename from library/.gitignore
rename to .gitignore
index 9443cfc..cca5487 100644
--- a/library/.gitignore
+++ b/.gitignore
@@ -8,3 +8,5 @@ local.properties
*.BridgeSort
out/
tmp/
+build/*
+*.iml
diff --git a/library/.project b/.project
similarity index 100%
rename from library/.project
rename to .project
diff --git a/library/AndroidManifest.xml b/AndroidManifest.xml
similarity index 100%
rename from library/AndroidManifest.xml
rename to AndroidManifest.xml
diff --git a/library/ant.properties b/ant.properties
similarity index 100%
rename from library/ant.properties
rename to ant.properties
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..bf30b7c
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,27 @@
+buildscript {
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:0.9.+'
+ }
+}
+
+apply plugin: 'android-library'
+
+android {
+ compileSdkVersion 19
+ buildToolsVersion = "19.0.3"
+
+ sourceSets {
+ main {
+ res.srcDirs = ['res']
+ aidl.srcDirs = ['src']
+ resources.srcDirs = ['src']
+ renderscript.srcDirs = ['src']
+ java.srcDirs = ['src']
+ manifest.srcFile 'AndroidManifest.xml'
+
+ }
+ }
+}
diff --git a/library/build.xml b/build.xml
similarity index 100%
rename from library/build.xml
rename to build.xml
diff --git a/library/proguard-project.txt b/proguard-project.txt
similarity index 100%
rename from library/proguard-project.txt
rename to proguard-project.txt
diff --git a/library/project.properties b/project.properties
similarity index 100%
rename from library/project.properties
rename to project.properties
diff --git a/library/res/drawable-hdpi/ic_error_network.png b/res/drawable-hdpi/ic_error_network.png
similarity index 100%
rename from library/res/drawable-hdpi/ic_error_network.png
rename to res/drawable-hdpi/ic_error_network.png
diff --git a/library/res/drawable-hdpi/ic_error_unkown.png b/res/drawable-hdpi/ic_error_unkown.png
similarity index 100%
rename from library/res/drawable-hdpi/ic_error_unkown.png
rename to res/drawable-hdpi/ic_error_unkown.png
diff --git a/library/res/drawable-xhdpi/ic_error_network.png b/res/drawable-xhdpi/ic_error_network.png
similarity index 100%
rename from library/res/drawable-xhdpi/ic_error_network.png
rename to res/drawable-xhdpi/ic_error_network.png
diff --git a/library/res/drawable-xhdpi/ic_error_unkown.png b/res/drawable-xhdpi/ic_error_unkown.png
similarity index 100%
rename from library/res/drawable-xhdpi/ic_error_unkown.png
rename to res/drawable-xhdpi/ic_error_unkown.png
diff --git a/library/res/drawable/btn_retry.xml b/res/drawable/btn_retry.xml
similarity index 100%
rename from library/res/drawable/btn_retry.xml
rename to res/drawable/btn_retry.xml
diff --git a/library/res/drawable/color_retry_button.xml b/res/drawable/color_retry_button.xml
similarity index 100%
rename from library/res/drawable/color_retry_button.xml
rename to res/drawable/color_retry_button.xml
diff --git a/library/res/drawable/ic_error_network.png b/res/drawable/ic_error_network.png
similarity index 100%
rename from library/res/drawable/ic_error_network.png
rename to res/drawable/ic_error_network.png
diff --git a/library/res/drawable/ic_error_unkown.png b/res/drawable/ic_error_unkown.png
similarity index 100%
rename from library/res/drawable/ic_error_unkown.png
rename to res/drawable/ic_error_unkown.png
diff --git a/res/layout/msv__empty.xml b/res/layout/msv__empty.xml
new file mode 100644
index 0000000..02c0aa5
--- /dev/null
+++ b/res/layout/msv__empty.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/library/res/layout/msv__error_network.xml b/res/layout/msv__error_network.xml
similarity index 100%
rename from library/res/layout/msv__error_network.xml
rename to res/layout/msv__error_network.xml
diff --git a/library/res/layout/msv__error_unknown.xml b/res/layout/msv__error_unknown.xml
similarity index 100%
rename from library/res/layout/msv__error_unknown.xml
rename to res/layout/msv__error_unknown.xml
diff --git a/library/res/layout/msv__loading.xml b/res/layout/msv__loading.xml
similarity index 100%
rename from library/res/layout/msv__loading.xml
rename to res/layout/msv__loading.xml
diff --git a/library/res/values/msv__attrs.xml b/res/values/msv__attrs.xml
similarity index 75%
rename from library/res/values/msv__attrs.xml
rename to res/values/msv__attrs.xml
index e1ab950..bb7cece 100644
--- a/library/res/values/msv__attrs.xml
+++ b/res/values/msv__attrs.xml
@@ -8,12 +8,15 @@
-
+
-
+
+
+
+
@@ -23,4 +26,4 @@
-
\ No newline at end of file
+
diff --git a/library/res/values/msv__strings.xml b/res/values/msv__strings.xml
similarity index 76%
rename from library/res/values/msv__strings.xml
rename to res/values/msv__strings.xml
index b39334b..977edd9 100644
--- a/library/res/values/msv__strings.xml
+++ b/res/values/msv__strings.xml
@@ -4,5 +4,6 @@
Network Error
Oops! We messed up.
Tap to retry
+ Nothing to show
-
\ No newline at end of file
+
diff --git a/library/res/values/msv__styles.xml b/res/values/msv__styles.xml
similarity index 100%
rename from library/res/values/msv__styles.xml
rename to res/values/msv__styles.xml
diff --git a/library/src/com/meetme/android/multistateview/MultiStateView.java b/src/com/meetme/android/multistateview/MultiStateView.java
similarity index 91%
rename from library/src/com/meetme/android/multistateview/MultiStateView.java
rename to src/com/meetme/android/multistateview/MultiStateView.java
index ec37783..aa2aeef 100644
--- a/library/src/com/meetme/android/multistateview/MultiStateView.java
+++ b/src/com/meetme/android/multistateview/MultiStateView.java
@@ -21,6 +21,7 @@ public class MultiStateView extends FrameLayout {
private MultiStateViewData mViewState = new MultiStateViewData(ContentState.CONTENT);
private View mContentView;
+ private View mEmptyView;
private View mLoadingView;
private View mNetworkErrorView;
private View mGeneralErrorView;
@@ -55,6 +56,7 @@ private void parseAttrs(Context context, AttributeSet attrs) {
setLoadingLayoutResourceId(a.getResourceId(R.styleable.MultiStateView_msvLoadingLayout, R.layout.msv__loading));
setGeneralErrorLayoutResourceId(a.getResourceId(R.styleable.MultiStateView_msvErrorUnknownLayout, R.layout.msv__error_unknown));
setNetworkErrorLayoutResourceId(a.getResourceId(R.styleable.MultiStateView_msvErrorNetworkLayout, R.layout.msv__error_network));
+ setEmptyLayoutResourceId(a.getResourceId(R.styleable.MultiStateView_msvEmptyLayout, R.layout.msv__empty));
String tmpString;
@@ -82,6 +84,14 @@ private void parseAttrs(Context context, AttributeSet attrs) {
setTapToRetryString(tmpString);
+ tmpString = a.getString(R.styleable.MultiStateView_msvEmptyLayout);
+
+ if (tmpString == null) {
+ tmpString = context.getString(R.string.nothing_to_show);
+ }
+
+ setEmptyString(tmpString);
+
setState(a.getInt(R.styleable.MultiStateView_msvState, ContentState.CONTENT.nativeInt));
} finally {
a.recycle();
@@ -140,6 +150,18 @@ public void setLoadingLayoutResourceId(int loadingLayout) {
this.mViewState.loadingLayoutResId = loadingLayout;
}
+ private void setEmptyLayoutResourceId(int resourceId) {
+ mViewState.emptyLayoutResId = resourceId;
+ }
+
+ private void setEmptyString(String string) {
+ mViewState.emptyString = string;
+ }
+
+ public String getEmptyString() {
+ return mViewState.emptyString;
+ }
+
/**
* @return the {@link ContentState} the view is currently in
*/
@@ -207,6 +229,9 @@ public void setState(final ContentState state) {
*/
public View getStateView(ContentState state) {
switch (state) {
+ case EMPTY:
+ return getEmptyView();
+
case ERROR_NETWORK:
return getNetworkErrorView();
@@ -223,6 +248,21 @@ public View getStateView(ContentState state) {
return null;
}
+ /**
+ * Returns the view to be displayed when there is nothing to show (e.g., no search results)
+ */
+ public View getEmptyView() {
+ if (mEmptyView == null) {
+ mEmptyView = View.inflate(getContext(), mViewState.emptyLayoutResId, null);
+
+ ((TextView) mEmptyView.findViewById(R.id.empty)).setText(getEmptyString());
+
+ addView(mEmptyView);
+ }
+
+ return mEmptyView;
+ }
+
/**
* Returns the view to be displayed for the case of a network error
*
@@ -322,7 +362,8 @@ public void setContentView(View contentView) {
}
private boolean isViewInternal(View view) {
- return view == mNetworkErrorView || view == mGeneralErrorView || view == mLoadingView;
+ return view == mNetworkErrorView || view == mGeneralErrorView
+ || view == mLoadingView || view == mEmptyView;
}
@Override
@@ -359,6 +400,8 @@ private void setViewState(MultiStateViewData state) {
setNetworkErrorLayoutResourceId(state.networkErrorLayoutResId);
setLoadingLayoutResourceId(state.loadingLayoutResId);
setCustomErrorString(state.customErrorString);
+ setEmptyLayoutResourceId(state.emptyLayoutResId);
+ setEmptyString(state.emptyString);
}
@Override
@@ -448,7 +491,13 @@ public static enum ContentState {
*
* @see R.attr#msvState
*/
- ERROR_GENERAL(0x03);
+ ERROR_GENERAL(0x03),
+ /**
+ * Used to indicate that the Empty indication should be displayed to the user
+ *
+ * @see R.attr#msvState
+ */
+ EMPTY(0x04);
public final int nativeInt;
private final static SparseArray sStates = new SparseArray();
@@ -506,9 +555,11 @@ public static class MultiStateViewData implements Parcelable {
public int loadingLayoutResId;
public int generalErrorLayoutResId;
public int networkErrorLayoutResId;
+ public int emptyLayoutResId;
public String networkErrorTitleString;
public String generalErrorTitleString;
public String tapToRetryString;
+ public String emptyString;
public ContentState state;
public MultiStateViewData(ContentState contentState) {
@@ -523,6 +574,7 @@ private MultiStateViewData(Parcel in) {
networkErrorTitleString = in.readString();
generalErrorTitleString = in.readString();
tapToRetryString = in.readString();
+ emptyString = in.readString();
state = ContentState.valueOf(in.readString());
}
@@ -538,6 +590,7 @@ public void writeToParcel(Parcel dest, int flags) {
dest.writeString(networkErrorTitleString);
dest.writeString(generalErrorTitleString);
dest.writeString(tapToRetryString);
+ dest.writeString(emptyString);
dest.writeString(state.name());
}