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()); }