init i7lv android studio
This commit is contained in:
commit
abc06382dd
|
@ -0,0 +1,2 @@
|
||||||
|
/build
|
||||||
|
/gradle
|
|
@ -0,0 +1 @@
|
||||||
|
#Mon Dec 12 23:14:59 CST 2016
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" native2AsciiForPropertiesFiles="true" defaultCharsetForPropertiesFiles="UTF-8">
|
||||||
|
<file url="file://$PROJECT_DIR$/qy" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/qy/src/main/java/com/qiyou/mb/android/service/TrackPlaybackService.java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/qy/src/main/java/com/qiyou/mb/android/ui/fragments/NoteNew.java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/qy/src/main/java/com/qiyou/mb/android/ui/fragments/TrackingBasic_fragment.java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/qy/src/main/java/com/qiyou/mb/android/ui/fragments/WebList_fragment.java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/qy/src/main/res/layout" charset="UTF-8" />
|
||||||
|
<file url="PROJECT" charset="UTF-8" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="GradleSettings">
|
||||||
|
<option name="linkedExternalProjectsSettings">
|
||||||
|
<GradleProjectSettings>
|
||||||
|
<option name="distributionType" value="LOCAL" />
|
||||||
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
|
<option name="gradleHome" value="$APPLICATION_HOME_DIR$/gradle/gradle-2.14.1" />
|
||||||
|
<option name="modules">
|
||||||
|
<set>
|
||||||
|
<option value="$PROJECT_DIR$" />
|
||||||
|
<option value="$PROJECT_DIR$/listviewlibrary" />
|
||||||
|
<option value="$PROJECT_DIR$/qy" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
<option name="resolveModulePerSourceSet" value="false" />
|
||||||
|
</GradleProjectSettings>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="BaiduLBS_Android">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/BaiduLBS_Android.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="SocialSDK_QQZone_1">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/SocialSDK_QQZone_1.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="SocialSDK_QQZone_2">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/SocialSDK_QQZone_2.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="SocialSDK_QQZone_3">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/SocialSDK_QQZone_3.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="SocialSDK_Sina">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/SocialSDK_Sina.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="SocialSDK_WeiXin_1">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/SocialSDK_WeiXin_1.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="SocialSDK_WeiXin_2">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/SocialSDK_WeiXin_2.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="SocialSDK_tencentWB_1">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/SocialSDK_tencentWB_1.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="SocialSDK_tencentWB_2">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/SocialSDK_tencentWB_2.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="SocialSDK_tencentWB_3">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/SocialSDK_tencentWB_3.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="SpeechApi">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/SpeechApi.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="achartengine-1.1.0">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/achartengine-1.1.0.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="android-async-http-1.4.6">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/android-async-http-1.4.6.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="conceal_android">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/conceal_android.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,12 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="gridlayout-v7-22.2.1">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/build/intermediates/exploded-aar/com.android.support/gridlayout-v7/22.2.1/jars/classes.jar!/" />
|
||||||
|
<root url="file://$PROJECT_DIR$/qy/build/intermediates/exploded-aar/com.android.support/gridlayout-v7/22.2.1/res" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/../adt-bundle-mac-x86_64-20140702/sdk/extras/android/m2repository/com/android/support/gridlayout-v7/22.2.1/gridlayout-v7-22.2.1-sources.jar!/" />
|
||||||
|
</SOURCES>
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="gson-2.8.0">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.8.0/c4ba5371a29ac9b2ad6129b1d39ea38750043eff/gson-2.8.0.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES>
|
||||||
|
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.8.0/baf95d8519fc1a11d388f8543cb40cd2bb9d66dc/gson-2.8.0-sources.jar!/" />
|
||||||
|
</SOURCES>
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="httpmime-4.1.3">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/httpmime-4.1.3.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="libconceal">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/libconceal.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="locSDK_6.13">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/locSDK_6.13.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="nineoldandroids-2.4.0">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/nineoldandroids-2.4.0.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="support-annotations-21.0.3">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/../adt-bundle-mac-x86_64-20140702/sdk/extras/android/m2repository/com/android/support/support-annotations/21.0.3/support-annotations-21.0.3.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/../adt-bundle-mac-x86_64-20140702/sdk/extras/android/m2repository/com/android/support/support-annotations/21.0.3/support-annotations-21.0.3-sources.jar!/" />
|
||||||
|
</SOURCES>
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="support-annotations-22.2.1">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/../adt-bundle-mac-x86_64-20140702/sdk/extras/android/m2repository/com/android/support/support-annotations/22.2.1/support-annotations-22.2.1.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/../adt-bundle-mac-x86_64-20140702/sdk/extras/android/m2repository/com/android/support/support-annotations/22.2.1/support-annotations-22.2.1-sources.jar!/" />
|
||||||
|
</SOURCES>
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="support-v4-21.0.3">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/listviewlibrary/build/intermediates/exploded-aar/com.android.support/support-v4/21.0.3/jars/classes.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/listviewlibrary/build/intermediates/exploded-aar/com.android.support/support-v4/21.0.3/jars/libs/internal_impl-21.0.3.jar!/" />
|
||||||
|
<root url="file://$PROJECT_DIR$/listviewlibrary/build/intermediates/exploded-aar/com.android.support/support-v4/21.0.3/res" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/../adt-bundle-mac-x86_64-20140702/sdk/extras/android/m2repository/com/android/support/support-v4/21.0.3/support-v4-21.0.3-sources.jar!/" />
|
||||||
|
</SOURCES>
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,16 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="support-v4-22.2.1">
|
||||||
|
<ANNOTATIONS>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/build/intermediates/exploded-aar/com.android.support/support-v4/22.2.1/annotations.zip!/" />
|
||||||
|
</ANNOTATIONS>
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/build/intermediates/exploded-aar/com.android.support/support-v4/22.2.1/jars/classes.jar!/" />
|
||||||
|
<root url="file://$PROJECT_DIR$/qy/build/intermediates/exploded-aar/com.android.support/support-v4/22.2.1/res" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/build/intermediates/exploded-aar/com.android.support/support-v4/22.2.1/jars/libs/internal_impl-22.2.1.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/../adt-bundle-mac-x86_64-20140702/sdk/extras/android/m2repository/com/android/support/support-v4/22.2.1/support-v4-22.2.1-sources.jar!/" />
|
||||||
|
</SOURCES>
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="swipelistview-1.0-20130701.103547-12-jar-with-dependencies">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/swipelistview-1.0-20130701.103547-12-jar-with-dependencies.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="umeng-analytics-v6.0.3">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/umeng-analytics-v6.0.3.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="umeng_social_sdk">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/umeng_social_sdk.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="umeng-update-v2.6.0.1">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/umeng-update-v2.6.0.1.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="universal-image-loader-1.9.2">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/universal-image-loader-1.9.2.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="utdid4all-1.0.4">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/qy/libs/utdid4all-1.0.4.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -0,0 +1,46 @@
|
||||||
|
<?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.8" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectType">
|
||||||
|
<option name="id" value="Android" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/asProjects.iml" filepath="$PROJECT_DIR$/asProjects.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/listviewlibrary/listviewlibrary.iml" filepath="$PROJECT_DIR$/listviewlibrary/listviewlibrary.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/qy/qy.iml" filepath="$PROJECT_DIR$/qy/qy.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>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module external.linked.project.id="asProjects" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
|
||||||
|
<component name="FacetManager">
|
||||||
|
<facet type="java-gradle" name="Java-Gradle">
|
||||||
|
<configuration>
|
||||||
|
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
|
||||||
|
<option name="BUILDABLE" value="false" />
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
|
@ -0,0 +1,18 @@
|
||||||
|
// 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.2.2'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
allprojects {
|
||||||
|
repositories {
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//tasks.withType(JavaCompile) {
|
||||||
|
// options.encoding = "GBK"
|
||||||
|
//}
|
|
@ -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,187 @@
|
||||||
|
ECLIPSE ANDROID PROJECT IMPORT SUMMARY
|
||||||
|
======================================
|
||||||
|
|
||||||
|
Manifest Merging:
|
||||||
|
-----------------
|
||||||
|
Your project uses libraries that provide manifests, and your Eclipse
|
||||||
|
project did not explicitly turn on manifest merging. In Android Gradle
|
||||||
|
projects, manifests are always merged (meaning that contents from your
|
||||||
|
libraries' manifests will be merged into the app manifest. If you had
|
||||||
|
manually copied contents from library manifests into your app manifest
|
||||||
|
you may need to remove these for the app to build correctly.
|
||||||
|
|
||||||
|
Ignored Files:
|
||||||
|
--------------
|
||||||
|
The following files were *not* copied into the new Gradle project; you
|
||||||
|
should evaluate whether these are still needed in your project and if
|
||||||
|
so manually move them:
|
||||||
|
|
||||||
|
From listviewlibrary:
|
||||||
|
* .DS_Store
|
||||||
|
* .gitignore
|
||||||
|
* ant.properties
|
||||||
|
* build.xml
|
||||||
|
* pom.xml
|
||||||
|
* proguard-project.txt
|
||||||
|
From qy:
|
||||||
|
* .DS_Store
|
||||||
|
* .gitignore
|
||||||
|
* app.txt
|
||||||
|
* ic_launcher-web.png
|
||||||
|
* icon_bstart.png
|
||||||
|
* lib/
|
||||||
|
* lib/achartengine-1.1.0.jar
|
||||||
|
* lib/android-support-v4.jar
|
||||||
|
* lib/android-support-v7-gridlayout.jar
|
||||||
|
* lib/armeabi-v7a/
|
||||||
|
* lib/armeabi-v7a/libconceal.so
|
||||||
|
* lib/gen/
|
||||||
|
* lib/gen/android/
|
||||||
|
* lib/gen/android/support/
|
||||||
|
* lib/gen/android/support/v7/
|
||||||
|
* lib/gen/android/support/v7/gridlayout/
|
||||||
|
* lib/gen/android/support/v7/gridlayout/R.java
|
||||||
|
* lib/gen/com/
|
||||||
|
* lib/gen/com/mobeta/
|
||||||
|
* lib/gen/com/mobeta/android/
|
||||||
|
* lib/gen/com/mobeta/android/dslv/
|
||||||
|
* lib/gen/com/mobeta/android/dslv/R.java
|
||||||
|
* lib/gen/com/qiyou/
|
||||||
|
* lib/gen/com/qiyou/mb/
|
||||||
|
* lib/gen/com/qiyou/mb/android/
|
||||||
|
* lib/gen/com/qiyou/mb/android/BuildConfig.java
|
||||||
|
* lib/gen/com/qiyou/mb/android/R.java
|
||||||
|
* lib/gson-2.2.4-javadoc.jar
|
||||||
|
* lib/gson-2.2.4.jar
|
||||||
|
* lib/x86/
|
||||||
|
* lib/x86/libconceal.so
|
||||||
|
* log4j-1.2.16.jar
|
||||||
|
* log4j.properties
|
||||||
|
* proguard-project.txt
|
||||||
|
* proguard.cfg.bak
|
||||||
|
* proguard/
|
||||||
|
* proguard/dump.txt
|
||||||
|
* proguard/mapping.txt
|
||||||
|
* proguard/seeds.txt
|
||||||
|
* proguard/usage.txt
|
||||||
|
* rem.txt
|
||||||
|
* version.xml
|
||||||
|
|
||||||
|
Replaced Jars with Dependencies:
|
||||||
|
--------------------------------
|
||||||
|
The importer recognized the following .jar files as third party
|
||||||
|
libraries and replaced them with Gradle dependencies instead. This has
|
||||||
|
the advantage that more explicit version information is known, and the
|
||||||
|
libraries can be updated automatically. However, it is possible that
|
||||||
|
the .jar file in your project was of an older version than the
|
||||||
|
dependency we picked, which could render the project not compileable.
|
||||||
|
You can disable the jar replacement in the import wizard and try again:
|
||||||
|
|
||||||
|
android-support-v4.jar => com.android.support:support-v4:20.+
|
||||||
|
android-support-v7-gridlayout.jar => com.android.support:gridlayout-v7:20.+
|
||||||
|
|
||||||
|
Replaced Libraries with Dependencies:
|
||||||
|
-------------------------------------
|
||||||
|
The importer recognized the following library projects as third party
|
||||||
|
libraries and replaced them with Gradle dependencies instead. This has
|
||||||
|
the advantage that more explicit version information is known, and the
|
||||||
|
libraries can be updated automatically. However, it is possible that
|
||||||
|
the source files in your project were of an older version than the
|
||||||
|
dependency we picked, which could render the project not compileable.
|
||||||
|
You can disable the library replacement in the import wizard and try
|
||||||
|
again:
|
||||||
|
|
||||||
|
android-support-v7-gridlayout => [com.android.support:gridlayout-v7:20.+]
|
||||||
|
|
||||||
|
Moved Files:
|
||||||
|
------------
|
||||||
|
Android Gradle projects use a different directory structure than ADT
|
||||||
|
Eclipse projects. Here's how the projects were restructured:
|
||||||
|
|
||||||
|
In listviewlibrary:
|
||||||
|
* AndroidManifest.xml => listviewlibrary/src/main/AndroidManifest.xml
|
||||||
|
* assets/ => listviewlibrary/src/main/assets
|
||||||
|
* res/ => listviewlibrary/src/main/res/
|
||||||
|
* src/ => listviewlibrary/src/main/java/
|
||||||
|
In qy:
|
||||||
|
* AndroidManifest.xml => qy/src/main/AndroidManifest.xml
|
||||||
|
* assets/ => qy/src/main/assets
|
||||||
|
* libs/BaiduLBS_Android.jar => qy/libs/BaiduLBS_Android.jar
|
||||||
|
* libs/SocialSDK_QQZone_1.jar => qy/libs/SocialSDK_QQZone_1.jar
|
||||||
|
* libs/SocialSDK_QQZone_2.jar => qy/libs/SocialSDK_QQZone_2.jar
|
||||||
|
* libs/SocialSDK_QQZone_3.jar => qy/libs/SocialSDK_QQZone_3.jar
|
||||||
|
* libs/SocialSDK_Sina.jar => qy/libs/SocialSDK_Sina.jar
|
||||||
|
* libs/SocialSDK_WeiXin_1.jar => qy/libs/SocialSDK_WeiXin_1.jar
|
||||||
|
* libs/SocialSDK_WeiXin_2.jar => qy/libs/SocialSDK_WeiXin_2.jar
|
||||||
|
* libs/SocialSDK_tencentWB_1.jar => qy/libs/SocialSDK_tencentWB_1.jar
|
||||||
|
* libs/SocialSDK_tencentWB_2.jar => qy/libs/SocialSDK_tencentWB_2.jar
|
||||||
|
* libs/SocialSDK_tencentWB_3.jar => qy/libs/SocialSDK_tencentWB_3.jar
|
||||||
|
* libs/SpeechApi.jar => qy/libs/SpeechApi.jar
|
||||||
|
* libs/achartengine-1.1.0.jar => qy/libs/achartengine-1.1.0.jar
|
||||||
|
* libs/android-async-http-1.4.6.jar => qy/libs/android-async-http-1.4.6.jar
|
||||||
|
* libs/armeabi/libBaiduMapSDK_base_v3_7_1.so => qy/src/main/jniLibs/armeabi/libBaiduMapSDK_base_v3_7_1.so
|
||||||
|
* libs/armeabi/libBaiduMapSDK_cloud_v3_7_1.so => qy/src/main/jniLibs/armeabi/libBaiduMapSDK_cloud_v3_7_1.so
|
||||||
|
* libs/armeabi/libBaiduMapSDK_map_v3_7_1.so => qy/src/main/jniLibs/armeabi/libBaiduMapSDK_map_v3_7_1.so
|
||||||
|
* libs/armeabi/libBaiduMapSDK_radar_v3_7_1.so => qy/src/main/jniLibs/armeabi/libBaiduMapSDK_radar_v3_7_1.so
|
||||||
|
* libs/armeabi/libBaiduMapSDK_search_v3_7_1.so => qy/src/main/jniLibs/armeabi/libBaiduMapSDK_search_v3_7_1.so
|
||||||
|
* libs/armeabi/libbspatch.so => qy/src/main/jniLibs/armeabi/libbspatch.so
|
||||||
|
* libs/armeabi/libconceal.so => qy/src/main/jniLibs/armeabi/libconceal.so
|
||||||
|
* libs/armeabi/liblocSDK6a.so => qy/src/main/jniLibs/armeabi/liblocSDK6a.so
|
||||||
|
* libs/armeabi/libvi_voslib.so => qy/src/main/jniLibs/armeabi/libvi_voslib.so
|
||||||
|
* libs/conceal_android.jar => qy/libs/conceal_android.jar
|
||||||
|
* libs/httpmime-4.1.3.jar => qy/libs/httpmime-4.1.3.jar
|
||||||
|
* libs/libconceal.jar => qy/libs/libconceal.jar
|
||||||
|
* libs/locSDK_6.13.jar => qy/libs/locSDK_6.13.jar
|
||||||
|
* libs/nineoldandroids-2.4.0.jar => qy/libs/nineoldandroids-2.4.0.jar
|
||||||
|
* libs/swipelistview-1.0-20130701.103547-12-jar-with-dependencies.jar => qy/libs/swipelistview-1.0-20130701.103547-12-jar-with-dependencies.jar
|
||||||
|
* libs/umeng-analytics-v6.0.3.jar => qy/libs/umeng-analytics-v6.0.3.jar
|
||||||
|
* libs/umeng-update-v2.6.0.1.jar => qy/libs/umeng-update-v2.6.0.1.jar
|
||||||
|
* libs/umeng_social_sdk.jar => qy/libs/umeng_social_sdk.jar
|
||||||
|
* libs/universal-image-loader-1.9.2.jar => qy/libs/universal-image-loader-1.9.2.jar
|
||||||
|
* libs/utdid4all-1.0.4.jar => qy/libs/utdid4all-1.0.4.jar
|
||||||
|
* lint.xml => qy/lint.xml
|
||||||
|
* proguard.cfg => qy/proguard.cfg
|
||||||
|
* res/ => qy/src/main/res/
|
||||||
|
* src/ => qy/src/main/java/
|
||||||
|
* src/.DS_Store => qy/src/main/resources/.DS_Store
|
||||||
|
* src/com/.DS_Store => qy/src/main/resources/com/.DS_Store
|
||||||
|
* src/com/baidu/mapapi/overlayutil/package.html => qy/src/main/resources/com/baidu/mapapi/overlayutil/package.html
|
||||||
|
* src/com/qiyou/.DS_Store => qy/src/main/resources/com/qiyou/.DS_Store
|
||||||
|
* src/com/qiyou/mb/.DS_Store => qy/src/main/resources/com/qiyou/mb/.DS_Store
|
||||||
|
* src/com/qiyou/mb/android/.DS_Store => qy/src/main/resources/com/qiyou/mb/android/.DS_Store
|
||||||
|
* src/com/qiyou/mb/android/beans/.gitignore => qy/src/main/resources/com/qiyou/mb/android/beans/.gitignore
|
||||||
|
* src/com/qiyou/mb/android/ui/.DS_Store => qy/src/main/resources/com/qiyou/mb/android/ui/.DS_Store
|
||||||
|
* src/com/qiyou/mb/android/ui/fragments/.gitignore => qy/src/main/resources/com/qiyou/mb/android/ui/fragments/.gitignore
|
||||||
|
* src/com/qiyou/mb/android/ui/fragments/STAT_test_dd => qy/src/main/resources/com/qiyou/mb/android/ui/fragments/STAT_test_dd
|
||||||
|
* src/org/.DS_Store => qy/src/main/resources/org/.DS_Store
|
||||||
|
* /Volumes/workingspace/android/workspace/testQy/res/ => qy/src/androidTest/res/
|
||||||
|
* /Volumes/workingspace/android/workspace/testQy/src/ => qy/src/androidTest/java/
|
||||||
|
|
||||||
|
Missing Android Support Repository:
|
||||||
|
-----------------------------------
|
||||||
|
Some useful libraries, such as the Android Support Library, are
|
||||||
|
installed from a special Maven repository, which should be installed
|
||||||
|
via the SDK manager.
|
||||||
|
|
||||||
|
It looks like this library is missing from your SDK installation at:
|
||||||
|
/Volumes/workingspace/android/adt-bundle-mac-x86_64-20140702/sdk
|
||||||
|
|
||||||
|
To install it, open the SDK manager, and in the Extras category,
|
||||||
|
select "Android Support Repository". You may also want to install the
|
||||||
|
"Google Repository" if you want to use libraries like Google Play
|
||||||
|
Services.
|
||||||
|
|
||||||
|
Next Steps:
|
||||||
|
-----------
|
||||||
|
You can now build the project. The Gradle project needs network
|
||||||
|
connectivity to download dependencies.
|
||||||
|
|
||||||
|
Bugs:
|
||||||
|
-----
|
||||||
|
If for some reason your project does not build, and you determine that
|
||||||
|
it is due to a bug or limitation of the Eclipse to Gradle importer,
|
||||||
|
please file a bug at http://b.android.com with category
|
||||||
|
Component-Tools.
|
||||||
|
|
||||||
|
(This import summary is for your information only, and can be deleted
|
||||||
|
after import once you are satisfied with the results.)
|
|
@ -0,0 +1 @@
|
||||||
|
/build
|
|
@ -0,0 +1,22 @@
|
||||||
|
apply plugin: 'com.android.library'
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdkVersion 21
|
||||||
|
buildToolsVersion "21.1.2"
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion 8
|
||||||
|
targetSdkVersion 22
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile 'com.android.support:support-v4:21.0.3'
|
||||||
|
}
|
|
@ -0,0 +1,111 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module external.linked.project.id=":listviewlibrary" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
|
||||||
|
<component name="FacetManager">
|
||||||
|
<facet type="android-gradle" name="Android-Gradle">
|
||||||
|
<configuration>
|
||||||
|
<option name="GRADLE_PROJECT_PATH" value=":listviewlibrary" />
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
<facet type="android" name="Android">
|
||||||
|
<configuration>
|
||||||
|
<option name="SELECTED_BUILD_VARIANT" value="debug" />
|
||||||
|
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
|
||||||
|
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
|
||||||
|
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
|
||||||
|
<afterSyncTasks>
|
||||||
|
<task>generateDebugSources</task>
|
||||||
|
</afterSyncTasks>
|
||||||
|
<option name="ALLOW_USER_CONFIGURATION" value="false" />
|
||||||
|
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
|
||||||
|
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
|
||||||
|
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
|
||||||
|
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
|
||||||
|
<option name="LIBRARY_PROJECT" value="true" />
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
|
||||||
|
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
|
||||||
|
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/21.0.3/jars" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/typedefs.txt" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" exported="" name="support-v4-21.0.3" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="support-annotations-21.0.3" level="project" />
|
||||||
|
</component>
|
||||||
|
</module>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="com.mobeta.android.dslv"
|
||||||
|
android:versionCode="4"
|
||||||
|
android:versionName="0.6.1">
|
||||||
|
<uses-sdk android:targetSdkVersion="22"
|
||||||
|
android:minSdkVersion="8" />
|
||||||
|
</manifest>
|
|
@ -0,0 +1,468 @@
|
||||||
|
package com.mobeta.android.dslv;
|
||||||
|
|
||||||
|
import android.graphics.Point;
|
||||||
|
import android.view.GestureDetector;
|
||||||
|
import android.view.HapticFeedbackConstants;
|
||||||
|
import android.view.MotionEvent;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewConfiguration;
|
||||||
|
import android.widget.AdapterView;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class that starts and stops item drags on a {@link DragSortListView}
|
||||||
|
* based on touch gestures. This class also inherits from
|
||||||
|
* {@link SimpleFloatViewManager}, which provides basic float View
|
||||||
|
* creation.
|
||||||
|
*
|
||||||
|
* An instance of this class is meant to be passed to the methods
|
||||||
|
* {@link DragSortListView#setTouchListener()} and
|
||||||
|
* {@link DragSortListView#setFloatViewManager()} of your
|
||||||
|
* {@link DragSortListView} instance.
|
||||||
|
*/
|
||||||
|
public class DragSortController extends SimpleFloatViewManager implements View.OnTouchListener, GestureDetector.OnGestureListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Drag init mode enum.
|
||||||
|
*/
|
||||||
|
public static final int ON_DOWN = 0;
|
||||||
|
public static final int ON_DRAG = 1;
|
||||||
|
public static final int ON_LONG_PRESS = 2;
|
||||||
|
|
||||||
|
private int mDragInitMode = ON_DOWN;
|
||||||
|
|
||||||
|
private boolean mSortEnabled = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove mode enum.
|
||||||
|
*/
|
||||||
|
public static final int CLICK_REMOVE = 0;
|
||||||
|
public static final int FLING_REMOVE = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The current remove mode.
|
||||||
|
*/
|
||||||
|
private int mRemoveMode;
|
||||||
|
|
||||||
|
private boolean mRemoveEnabled = false;
|
||||||
|
private boolean mIsRemoving = false;
|
||||||
|
|
||||||
|
private GestureDetector mDetector;
|
||||||
|
|
||||||
|
private GestureDetector mFlingRemoveDetector;
|
||||||
|
|
||||||
|
private int mTouchSlop;
|
||||||
|
|
||||||
|
public static final int MISS = -1;
|
||||||
|
|
||||||
|
private int mHitPos = MISS;
|
||||||
|
private int mFlingHitPos = MISS;
|
||||||
|
|
||||||
|
private int mClickRemoveHitPos = MISS;
|
||||||
|
|
||||||
|
private int[] mTempLoc = new int[2];
|
||||||
|
|
||||||
|
private int mItemX;
|
||||||
|
private int mItemY;
|
||||||
|
|
||||||
|
private int mCurrX;
|
||||||
|
private int mCurrY;
|
||||||
|
|
||||||
|
private boolean mDragging = false;
|
||||||
|
|
||||||
|
private float mFlingSpeed = 500f;
|
||||||
|
|
||||||
|
private int mDragHandleId;
|
||||||
|
|
||||||
|
private int mClickRemoveId;
|
||||||
|
|
||||||
|
private int mFlingHandleId;
|
||||||
|
private boolean mCanDrag;
|
||||||
|
|
||||||
|
private DragSortListView mDslv;
|
||||||
|
private int mPositionX;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls {@link #DragSortController(DragSortListView, int)} with a
|
||||||
|
* 0 drag handle id, FLING_RIGHT_REMOVE remove mode,
|
||||||
|
* and ON_DOWN drag init. By default, sorting is enabled, and
|
||||||
|
* removal is disabled.
|
||||||
|
*
|
||||||
|
* @param dslv The DSLV instance
|
||||||
|
*/
|
||||||
|
public DragSortController(DragSortListView dslv) {
|
||||||
|
this(dslv, 0, ON_DOWN, FLING_REMOVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DragSortController(DragSortListView dslv, int dragHandleId, int dragInitMode, int removeMode) {
|
||||||
|
this(dslv, dragHandleId, dragInitMode, removeMode, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DragSortController(DragSortListView dslv, int dragHandleId, int dragInitMode, int removeMode, int clickRemoveId) {
|
||||||
|
this(dslv, dragHandleId, dragInitMode, removeMode, clickRemoveId, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* By default, sorting is enabled, and removal is disabled.
|
||||||
|
*
|
||||||
|
* @param dslv The DSLV instance
|
||||||
|
* @param dragHandleId The resource id of the View that represents
|
||||||
|
* the drag handle in a list item.
|
||||||
|
*/
|
||||||
|
public DragSortController(DragSortListView dslv, int dragHandleId, int dragInitMode,
|
||||||
|
int removeMode, int clickRemoveId, int flingHandleId) {
|
||||||
|
super(dslv);
|
||||||
|
mDslv = dslv;
|
||||||
|
mDetector = new GestureDetector(dslv.getContext(), this);
|
||||||
|
mFlingRemoveDetector = new GestureDetector(dslv.getContext(), mFlingRemoveListener);
|
||||||
|
mFlingRemoveDetector.setIsLongpressEnabled(false);
|
||||||
|
mTouchSlop = ViewConfiguration.get(dslv.getContext()).getScaledTouchSlop();
|
||||||
|
mDragHandleId = dragHandleId;
|
||||||
|
mClickRemoveId = clickRemoveId;
|
||||||
|
mFlingHandleId = flingHandleId;
|
||||||
|
setRemoveMode(removeMode);
|
||||||
|
setDragInitMode(dragInitMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getDragInitMode() {
|
||||||
|
return mDragInitMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set how a drag is initiated. Needs to be one of
|
||||||
|
* {@link ON_DOWN}, {@link ON_DRAG}, or {@link ON_LONG_PRESS}.
|
||||||
|
*
|
||||||
|
* @param mode The drag init mode.
|
||||||
|
*/
|
||||||
|
public void setDragInitMode(int mode) {
|
||||||
|
mDragInitMode = mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable/Disable list item sorting. Disabling is useful if only item
|
||||||
|
* removal is desired. Prevents drags in the vertical direction.
|
||||||
|
*
|
||||||
|
* @param enabled Set <code>true</code> to enable list
|
||||||
|
* item sorting.
|
||||||
|
*/
|
||||||
|
public void setSortEnabled(boolean enabled) {
|
||||||
|
mSortEnabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSortEnabled() {
|
||||||
|
return mSortEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* One of {@link CLICK_REMOVE}, {@link FLING_RIGHT_REMOVE},
|
||||||
|
* {@link FLING_LEFT_REMOVE},
|
||||||
|
* {@link SLIDE_RIGHT_REMOVE}, or {@link SLIDE_LEFT_REMOVE}.
|
||||||
|
*/
|
||||||
|
public void setRemoveMode(int mode) {
|
||||||
|
mRemoveMode = mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRemoveMode() {
|
||||||
|
return mRemoveMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable/Disable item removal without affecting remove mode.
|
||||||
|
*/
|
||||||
|
public void setRemoveEnabled(boolean enabled) {
|
||||||
|
mRemoveEnabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isRemoveEnabled() {
|
||||||
|
return mRemoveEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the resource id for the View that represents the drag
|
||||||
|
* handle in a list item.
|
||||||
|
*
|
||||||
|
* @param id An android resource id.
|
||||||
|
*/
|
||||||
|
public void setDragHandleId(int id) {
|
||||||
|
mDragHandleId = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the resource id for the View that represents the fling
|
||||||
|
* handle in a list item.
|
||||||
|
*
|
||||||
|
* @param id An android resource id.
|
||||||
|
*/
|
||||||
|
public void setFlingHandleId(int id) {
|
||||||
|
mFlingHandleId = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the resource id for the View that represents click
|
||||||
|
* removal button.
|
||||||
|
*
|
||||||
|
* @param id An android resource id.
|
||||||
|
*/
|
||||||
|
public void setClickRemoveId(int id) {
|
||||||
|
mClickRemoveId = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets flags to restrict certain motions of the floating View
|
||||||
|
* based on DragSortController settings (such as remove mode).
|
||||||
|
* Starts the drag on the DragSortListView.
|
||||||
|
*
|
||||||
|
* @param position The list item position (includes headers).
|
||||||
|
* @param deltaX Touch x-coord minus left edge of floating View.
|
||||||
|
* @param deltaY Touch y-coord minus top edge of floating View.
|
||||||
|
*
|
||||||
|
* @return True if drag started, false otherwise.
|
||||||
|
*/
|
||||||
|
public boolean startDrag(int position, int deltaX, int deltaY) {
|
||||||
|
|
||||||
|
int dragFlags = 0;
|
||||||
|
if (mSortEnabled && !mIsRemoving) {
|
||||||
|
dragFlags |= DragSortListView.DRAG_POS_Y | DragSortListView.DRAG_NEG_Y;
|
||||||
|
}
|
||||||
|
if (mRemoveEnabled && mIsRemoving) {
|
||||||
|
dragFlags |= DragSortListView.DRAG_POS_X;
|
||||||
|
dragFlags |= DragSortListView.DRAG_NEG_X;
|
||||||
|
}
|
||||||
|
|
||||||
|
mDragging = mDslv.startDrag(position - mDslv.getHeaderViewsCount(), dragFlags, deltaX,
|
||||||
|
deltaY);
|
||||||
|
return mDragging;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onTouch(View v, MotionEvent ev) {
|
||||||
|
if (!mDslv.isDragEnabled() || mDslv.listViewIntercepted()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
mDetector.onTouchEvent(ev);
|
||||||
|
if (mRemoveEnabled && mDragging && mRemoveMode == FLING_REMOVE) {
|
||||||
|
mFlingRemoveDetector.onTouchEvent(ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
int action = ev.getAction() & MotionEvent.ACTION_MASK;
|
||||||
|
switch (action) {
|
||||||
|
case MotionEvent.ACTION_DOWN:
|
||||||
|
mCurrX = (int) ev.getX();
|
||||||
|
mCurrY = (int) ev.getY();
|
||||||
|
break;
|
||||||
|
case MotionEvent.ACTION_UP:
|
||||||
|
if (mRemoveEnabled && mIsRemoving) {
|
||||||
|
int x = mPositionX >= 0 ? mPositionX : -mPositionX;
|
||||||
|
int removePoint = mDslv.getWidth() / 2;
|
||||||
|
if (x > removePoint) {
|
||||||
|
mDslv.stopDragWithVelocity(true, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case MotionEvent.ACTION_CANCEL:
|
||||||
|
mIsRemoving = false;
|
||||||
|
mDragging = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overrides to provide fading when slide removal is enabled.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onDragFloatView(View floatView, Point position, Point touch) {
|
||||||
|
|
||||||
|
if (mRemoveEnabled && mIsRemoving) {
|
||||||
|
mPositionX = position.x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the position to start dragging based on the ACTION_DOWN
|
||||||
|
* MotionEvent. This function simply calls
|
||||||
|
* {@link #dragHandleHitPosition(MotionEvent)}. Override
|
||||||
|
* to change drag handle behavior;
|
||||||
|
* this function is called internally when an ACTION_DOWN
|
||||||
|
* event is detected.
|
||||||
|
*
|
||||||
|
* @param ev The ACTION_DOWN MotionEvent.
|
||||||
|
*
|
||||||
|
* @return The list position to drag if a drag-init gesture is
|
||||||
|
* detected; MISS if unsuccessful.
|
||||||
|
*/
|
||||||
|
public int startDragPosition(MotionEvent ev) {
|
||||||
|
return dragHandleHitPosition(ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int startFlingPosition(MotionEvent ev) {
|
||||||
|
return mRemoveMode == FLING_REMOVE ? flingHandleHitPosition(ev) : MISS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks for the touch of an item's drag handle (specified by
|
||||||
|
* {@link #setDragHandleId(int)}), and returns that item's position
|
||||||
|
* if a drag handle touch was detected.
|
||||||
|
*
|
||||||
|
* @param ev The ACTION_DOWN MotionEvent.
|
||||||
|
|
||||||
|
* @return The list position of the item whose drag handle was
|
||||||
|
* touched; MISS if unsuccessful.
|
||||||
|
*/
|
||||||
|
public int dragHandleHitPosition(MotionEvent ev) {
|
||||||
|
return viewIdHitPosition(ev, mDragHandleId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int flingHandleHitPosition(MotionEvent ev) {
|
||||||
|
return viewIdHitPosition(ev, mFlingHandleId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int viewIdHitPosition(MotionEvent ev, int id) {
|
||||||
|
final int x = (int) ev.getX();
|
||||||
|
final int y = (int) ev.getY();
|
||||||
|
|
||||||
|
int touchPos = mDslv.pointToPosition(x, y); // includes headers/footers
|
||||||
|
|
||||||
|
final int numHeaders = mDslv.getHeaderViewsCount();
|
||||||
|
final int numFooters = mDslv.getFooterViewsCount();
|
||||||
|
final int count = mDslv.getCount();
|
||||||
|
|
||||||
|
// Log.d("mobeta", "touch down on position " + itemnum);
|
||||||
|
// We're only interested if the touch was on an
|
||||||
|
// item that's not a header or footer.
|
||||||
|
if (touchPos != AdapterView.INVALID_POSITION && touchPos >= numHeaders
|
||||||
|
&& touchPos < (count - numFooters)) {
|
||||||
|
final View item = mDslv.getChildAt(touchPos - mDslv.getFirstVisiblePosition());
|
||||||
|
final int rawX = (int) ev.getRawX();
|
||||||
|
final int rawY = (int) ev.getRawY();
|
||||||
|
|
||||||
|
View dragBox = id == 0 ? item : (View) item.findViewById(id);
|
||||||
|
if (dragBox != null) {
|
||||||
|
dragBox.getLocationOnScreen(mTempLoc);
|
||||||
|
|
||||||
|
if (rawX > mTempLoc[0] && rawY > mTempLoc[1] &&
|
||||||
|
rawX < mTempLoc[0] + dragBox.getWidth() &&
|
||||||
|
rawY < mTempLoc[1] + dragBox.getHeight()) {
|
||||||
|
|
||||||
|
mItemX = item.getLeft();
|
||||||
|
mItemY = item.getTop();
|
||||||
|
|
||||||
|
return touchPos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return MISS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onDown(MotionEvent ev) {
|
||||||
|
if (mRemoveEnabled && mRemoveMode == CLICK_REMOVE) {
|
||||||
|
mClickRemoveHitPos = viewIdHitPosition(ev, mClickRemoveId);
|
||||||
|
}
|
||||||
|
|
||||||
|
mHitPos = startDragPosition(ev);
|
||||||
|
if (mHitPos != MISS && mDragInitMode == ON_DOWN) {
|
||||||
|
startDrag(mHitPos, (int) ev.getX() - mItemX, (int) ev.getY() - mItemY);
|
||||||
|
}
|
||||||
|
|
||||||
|
mIsRemoving = false;
|
||||||
|
mCanDrag = true;
|
||||||
|
mPositionX = 0;
|
||||||
|
mFlingHitPos = startFlingPosition(ev);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
|
||||||
|
|
||||||
|
final int x1 = (int) e1.getX();
|
||||||
|
final int y1 = (int) e1.getY();
|
||||||
|
final int x2 = (int) e2.getX();
|
||||||
|
final int y2 = (int) e2.getY();
|
||||||
|
final int deltaX = x2 - mItemX;
|
||||||
|
final int deltaY = y2 - mItemY;
|
||||||
|
|
||||||
|
if (mCanDrag && !mDragging && (mHitPos != MISS || mFlingHitPos != MISS)) {
|
||||||
|
if (mHitPos != MISS) {
|
||||||
|
if (mDragInitMode == ON_DRAG && Math.abs(y2 - y1) > mTouchSlop && mSortEnabled) {
|
||||||
|
startDrag(mHitPos, deltaX, deltaY);
|
||||||
|
}
|
||||||
|
else if (mDragInitMode != ON_DOWN && Math.abs(x2 - x1) > mTouchSlop && mRemoveEnabled)
|
||||||
|
{
|
||||||
|
mIsRemoving = true;
|
||||||
|
startDrag(mFlingHitPos, deltaX, deltaY);
|
||||||
|
}
|
||||||
|
} else if (mFlingHitPos != MISS) {
|
||||||
|
if (Math.abs(x2 - x1) > mTouchSlop && mRemoveEnabled) {
|
||||||
|
mIsRemoving = true;
|
||||||
|
startDrag(mFlingHitPos, deltaX, deltaY);
|
||||||
|
} else if (Math.abs(y2 - y1) > mTouchSlop) {
|
||||||
|
mCanDrag = false; // if started to scroll the list then
|
||||||
|
// don't allow sorting nor fling-removing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// return whatever
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLongPress(MotionEvent e) {
|
||||||
|
// Log.d("mobeta", "lift listener long pressed");
|
||||||
|
if (mHitPos != MISS && mDragInitMode == ON_LONG_PRESS) {
|
||||||
|
mDslv.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
|
||||||
|
startDrag(mHitPos, mCurrX - mItemX, mCurrY - mItemY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// complete the OnGestureListener interface
|
||||||
|
@Override
|
||||||
|
public final boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// complete the OnGestureListener interface
|
||||||
|
@Override
|
||||||
|
public boolean onSingleTapUp(MotionEvent ev) {
|
||||||
|
if (mRemoveEnabled && mRemoveMode == CLICK_REMOVE) {
|
||||||
|
if (mClickRemoveHitPos != MISS) {
|
||||||
|
mDslv.removeItem(mClickRemoveHitPos - mDslv.getHeaderViewsCount());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// complete the OnGestureListener interface
|
||||||
|
@Override
|
||||||
|
public void onShowPress(MotionEvent ev) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
private GestureDetector.OnGestureListener mFlingRemoveListener =
|
||||||
|
new GestureDetector.SimpleOnGestureListener() {
|
||||||
|
@Override
|
||||||
|
public final boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
|
||||||
|
float velocityY) {
|
||||||
|
// Log.d("mobeta", "on fling remove called");
|
||||||
|
if (mRemoveEnabled && mIsRemoving) {
|
||||||
|
int w = mDslv.getWidth();
|
||||||
|
int minPos = w / 5;
|
||||||
|
if (velocityX > mFlingSpeed) {
|
||||||
|
if (mPositionX > -minPos) {
|
||||||
|
mDslv.stopDragWithVelocity(true, velocityX);
|
||||||
|
}
|
||||||
|
} else if (velocityX < -mFlingSpeed) {
|
||||||
|
if (mPositionX < minPos) {
|
||||||
|
mDslv.stopDragWithVelocity(true, velocityX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mIsRemoving = false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,241 @@
|
||||||
|
package com.mobeta.android.dslv;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.util.SparseIntArray;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.support.v4.widget.CursorAdapter;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A subclass of {@link android.widget.CursorAdapter} that provides
|
||||||
|
* reordering of the elements in the Cursor based on completed
|
||||||
|
* drag-sort operations. The reordering is a simple mapping of
|
||||||
|
* list positions into Cursor positions (the Cursor is unchanged).
|
||||||
|
* To persist changes made by drag-sorts, one can retrieve the
|
||||||
|
* mapping with the {@link #getCursorPositions()} method, which
|
||||||
|
* returns the reordered list of Cursor positions.
|
||||||
|
*
|
||||||
|
* An instance of this class is passed
|
||||||
|
* to {@link DragSortListView#setAdapter(ListAdapter)} and, since
|
||||||
|
* this class implements the {@link DragSortListView.DragSortListener}
|
||||||
|
* interface, it is automatically set as the DragSortListener for
|
||||||
|
* the DragSortListView instance.
|
||||||
|
*/
|
||||||
|
public abstract class DragSortCursorAdapter extends CursorAdapter implements DragSortListView.DragSortListener {
|
||||||
|
|
||||||
|
public static final int REMOVED = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Key is ListView position, value is Cursor position
|
||||||
|
*/
|
||||||
|
private SparseIntArray mListMapping = new SparseIntArray();
|
||||||
|
|
||||||
|
private ArrayList<Integer> mRemovedCursorPositions = new ArrayList<Integer>();
|
||||||
|
|
||||||
|
public DragSortCursorAdapter(Context context, Cursor c) {
|
||||||
|
super(context, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DragSortCursorAdapter(Context context, Cursor c, boolean autoRequery) {
|
||||||
|
super(context, c, autoRequery);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DragSortCursorAdapter(Context context, Cursor c, int flags) {
|
||||||
|
super(context, c, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Swaps Cursor and clears list-Cursor mapping.
|
||||||
|
*
|
||||||
|
* @see android.widget.CursorAdapter#swapCursor(android.database.Cursor)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Cursor swapCursor(Cursor newCursor) {
|
||||||
|
Cursor old = super.swapCursor(newCursor);
|
||||||
|
resetMappings();
|
||||||
|
return old;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes Cursor and clears list-Cursor mapping.
|
||||||
|
*
|
||||||
|
* @see android.widget.CursorAdapter#changeCursor(android.database.Cursor)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void changeCursor(Cursor cursor) {
|
||||||
|
super.changeCursor(cursor);
|
||||||
|
resetMappings();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets list-cursor mapping.
|
||||||
|
*/
|
||||||
|
public void reset() {
|
||||||
|
resetMappings();
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resetMappings() {
|
||||||
|
mListMapping.clear();
|
||||||
|
mRemovedCursorPositions.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getItem(int position) {
|
||||||
|
return super.getItem(mListMapping.get(position, position));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getItemId(int position) {
|
||||||
|
return super.getItemId(mListMapping.get(position, position));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getDropDownView(int position, View convertView, ViewGroup parent) {
|
||||||
|
return super.getDropDownView(mListMapping.get(position, position), convertView, parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
return super.getView(mListMapping.get(position, position), convertView, parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On drop, this updates the mapping between Cursor positions
|
||||||
|
* and ListView positions. The Cursor is unchanged. Retrieve
|
||||||
|
* the current mapping with {@link getCursorPositions()}.
|
||||||
|
*
|
||||||
|
* @see DragSortListView.DropListener#drop(int, int)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void drop(int from, int to) {
|
||||||
|
if (from != to) {
|
||||||
|
int cursorFrom = mListMapping.get(from, from);
|
||||||
|
|
||||||
|
if (from > to) {
|
||||||
|
for (int i = from; i > to; --i) {
|
||||||
|
mListMapping.put(i, mListMapping.get(i - 1, i - 1));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = from; i < to; ++i) {
|
||||||
|
mListMapping.put(i, mListMapping.get(i + 1, i + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mListMapping.put(to, cursorFrom);
|
||||||
|
|
||||||
|
cleanMapping();
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On remove, this updates the mapping between Cursor positions
|
||||||
|
* and ListView positions. The Cursor is unchanged. Retrieve
|
||||||
|
* the current mapping with {@link getCursorPositions()}.
|
||||||
|
*
|
||||||
|
* @see DragSortListView.RemoveListener#remove(int)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void remove(int which) {
|
||||||
|
int cursorPos = mListMapping.get(which, which);
|
||||||
|
if (!mRemovedCursorPositions.contains(cursorPos)) {
|
||||||
|
mRemovedCursorPositions.add(cursorPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
int newCount = getCount();
|
||||||
|
for (int i = which; i < newCount; ++i) {
|
||||||
|
mListMapping.put(i, mListMapping.get(i + 1, i + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
mListMapping.delete(newCount);
|
||||||
|
|
||||||
|
cleanMapping();
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does nothing. Just completes DragSortListener interface.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void drag(int from, int to) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove unnecessary mappings from sparse array.
|
||||||
|
*/
|
||||||
|
private void cleanMapping() {
|
||||||
|
ArrayList<Integer> toRemove = new ArrayList<Integer>();
|
||||||
|
|
||||||
|
int size = mListMapping.size();
|
||||||
|
for (int i = 0; i < size; ++i) {
|
||||||
|
if (mListMapping.keyAt(i) == mListMapping.valueAt(i)) {
|
||||||
|
toRemove.add(mListMapping.keyAt(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
size = toRemove.size();
|
||||||
|
for (int i = 0; i < size; ++i) {
|
||||||
|
mListMapping.delete(toRemove.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCount() {
|
||||||
|
return super.getCount() - mRemovedCursorPositions.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Cursor position mapped to by the provided list position
|
||||||
|
* (given all previously handled drag-sort
|
||||||
|
* operations).
|
||||||
|
*
|
||||||
|
* @param position List position
|
||||||
|
*
|
||||||
|
* @return The mapped-to Cursor position
|
||||||
|
*/
|
||||||
|
public int getCursorPosition(int position) {
|
||||||
|
return mListMapping.get(position, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current order of Cursor positions presented by the
|
||||||
|
* list.
|
||||||
|
*/
|
||||||
|
public ArrayList<Integer> getCursorPositions() {
|
||||||
|
ArrayList<Integer> result = new ArrayList<Integer>();
|
||||||
|
|
||||||
|
for (int i = 0; i < getCount(); ++i) {
|
||||||
|
result.add(mListMapping.get(i, i));
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the list position mapped to by the provided Cursor position.
|
||||||
|
* If the provided Cursor position has been removed by a drag-sort,
|
||||||
|
* this returns {@link #REMOVED}.
|
||||||
|
*
|
||||||
|
* @param cursorPosition A Cursor position
|
||||||
|
* @return The mapped-to list position or REMOVED
|
||||||
|
*/
|
||||||
|
public int getListPosition(int cursorPosition) {
|
||||||
|
if (mRemovedCursorPositions.contains(cursorPosition)) {
|
||||||
|
return REMOVED;
|
||||||
|
}
|
||||||
|
|
||||||
|
int index = mListMapping.indexOfValue(cursorPosition);
|
||||||
|
if (index < 0) {
|
||||||
|
return cursorPosition;
|
||||||
|
} else {
|
||||||
|
return mListMapping.keyAt(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
package com.mobeta.android.dslv;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.Gravity;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.View.MeasureSpec;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.AbsListView;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lightweight ViewGroup that wraps list items obtained from user's
|
||||||
|
* ListAdapter. ItemView expects a single child that has a definite
|
||||||
|
* height (i.e. the child's layout height is not MATCH_PARENT).
|
||||||
|
* The width of
|
||||||
|
* ItemView will always match the width of its child (that is,
|
||||||
|
* the width MeasureSpec given to ItemView is passed directly
|
||||||
|
* to the child, and the ItemView measured width is set to the
|
||||||
|
* child's measured width). The height of ItemView can be anything;
|
||||||
|
* the
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* The purpose of this class is to optimize slide
|
||||||
|
* shuffle animations.
|
||||||
|
*/
|
||||||
|
public class DragSortItemView extends ViewGroup {
|
||||||
|
|
||||||
|
private int mGravity = Gravity.TOP;
|
||||||
|
|
||||||
|
public DragSortItemView(Context context) {
|
||||||
|
super(context);
|
||||||
|
|
||||||
|
// always init with standard ListView layout params
|
||||||
|
setLayoutParams(new AbsListView.LayoutParams(
|
||||||
|
ViewGroup.LayoutParams.FILL_PARENT,
|
||||||
|
ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||||
|
|
||||||
|
//setClipChildren(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGravity(int gravity) {
|
||||||
|
mGravity = gravity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getGravity() {
|
||||||
|
return mGravity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||||
|
final View child = getChildAt(0);
|
||||||
|
|
||||||
|
if (child == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mGravity == Gravity.TOP) {
|
||||||
|
child.layout(0, 0, getMeasuredWidth(), child.getMeasuredHeight());
|
||||||
|
} else {
|
||||||
|
child.layout(0, getMeasuredHeight() - child.getMeasuredHeight(), getMeasuredWidth(), getMeasuredHeight());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||||
|
|
||||||
|
int height = MeasureSpec.getSize(heightMeasureSpec);
|
||||||
|
int width = MeasureSpec.getSize(widthMeasureSpec);
|
||||||
|
|
||||||
|
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
|
||||||
|
|
||||||
|
final View child = getChildAt(0);
|
||||||
|
if (child == null) {
|
||||||
|
setMeasuredDimension(0, width);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (child.isLayoutRequested()) {
|
||||||
|
// Always let child be as tall as it wants.
|
||||||
|
measureChild(child, widthMeasureSpec,
|
||||||
|
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (heightMode == MeasureSpec.UNSPECIFIED) {
|
||||||
|
ViewGroup.LayoutParams lp = getLayoutParams();
|
||||||
|
|
||||||
|
if (lp.height > 0) {
|
||||||
|
height = lp.height;
|
||||||
|
} else {
|
||||||
|
height = child.getMeasuredHeight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setMeasuredDimension(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
package com.mobeta.android.dslv;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.Gravity;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.View.MeasureSpec;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.AbsListView;
|
||||||
|
import android.widget.Checkable;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lightweight ViewGroup that wraps list items obtained from user's
|
||||||
|
* ListAdapter. ItemView expects a single child that has a definite
|
||||||
|
* height (i.e. the child's layout height is not MATCH_PARENT).
|
||||||
|
* The width of
|
||||||
|
* ItemView will always match the width of its child (that is,
|
||||||
|
* the width MeasureSpec given to ItemView is passed directly
|
||||||
|
* to the child, and the ItemView measured width is set to the
|
||||||
|
* child's measured width). The height of ItemView can be anything;
|
||||||
|
* the
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* The purpose of this class is to optimize slide
|
||||||
|
* shuffle animations.
|
||||||
|
*/
|
||||||
|
public class DragSortItemViewCheckable extends DragSortItemView implements Checkable {
|
||||||
|
|
||||||
|
public DragSortItemViewCheckable(Context context) {
|
||||||
|
super(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isChecked() {
|
||||||
|
View child = getChildAt(0);
|
||||||
|
if (child instanceof Checkable)
|
||||||
|
return ((Checkable) child).isChecked();
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setChecked(boolean checked) {
|
||||||
|
View child = getChildAt(0);
|
||||||
|
if (child instanceof Checkable)
|
||||||
|
((Checkable) child).setChecked(checked);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void toggle() {
|
||||||
|
View child = getChildAt(0);
|
||||||
|
if (child instanceof Checkable)
|
||||||
|
((Checkable) child).toggle();
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,133 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2011 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.mobeta.android.dslv;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
|
||||||
|
// taken from v4 rev. 10 ResourceCursorAdapter.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static library support version of the framework's {@link android.widget.ResourceCursorAdapter}.
|
||||||
|
* Used to write apps that run on platforms prior to Android 3.0. When running
|
||||||
|
* on Android 3.0 or above, this implementation is still used; it does not try
|
||||||
|
* to switch to the framework's implementation. See the framework SDK
|
||||||
|
* documentation for a class overview.
|
||||||
|
*/
|
||||||
|
public abstract class ResourceDragSortCursorAdapter extends DragSortCursorAdapter {
|
||||||
|
private int mLayout;
|
||||||
|
|
||||||
|
private int mDropDownLayout;
|
||||||
|
|
||||||
|
private LayoutInflater mInflater;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor the enables auto-requery.
|
||||||
|
*
|
||||||
|
* @deprecated This option is discouraged, as it results in Cursor queries
|
||||||
|
* being performed on the application's UI thread and thus can cause poor
|
||||||
|
* responsiveness or even Application Not Responding errors. As an alternative,
|
||||||
|
* use {@link android.app.LoaderManager} with a {@link android.content.CursorLoader}.
|
||||||
|
*
|
||||||
|
* @param context The context where the ListView associated with this adapter is running
|
||||||
|
* @param layout resource identifier of a layout file that defines the views
|
||||||
|
* for this list item. Unless you override them later, this will
|
||||||
|
* define both the item views and the drop down views.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public ResourceDragSortCursorAdapter(Context context, int layout, Cursor c) {
|
||||||
|
super(context, c);
|
||||||
|
mLayout = mDropDownLayout = layout;
|
||||||
|
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor with default behavior as per
|
||||||
|
* {@link CursorAdapter#CursorAdapter(Context, Cursor, boolean)}; it is recommended
|
||||||
|
* you not use this, but instead {@link #ResourceCursorAdapter(Context, int, Cursor, int)}.
|
||||||
|
* When using this constructor, {@link #FLAG_REGISTER_CONTENT_OBSERVER}
|
||||||
|
* will always be set.
|
||||||
|
*
|
||||||
|
* @param context The context where the ListView associated with this adapter is running
|
||||||
|
* @param layout resource identifier of a layout file that defines the views
|
||||||
|
* for this list item. Unless you override them later, this will
|
||||||
|
* define both the item views and the drop down views.
|
||||||
|
* @param c The cursor from which to get the data.
|
||||||
|
* @param autoRequery If true the adapter will call requery() on the
|
||||||
|
* cursor whenever it changes so the most recent
|
||||||
|
* data is always displayed. Using true here is discouraged.
|
||||||
|
*/
|
||||||
|
public ResourceDragSortCursorAdapter(Context context, int layout, Cursor c, boolean autoRequery) {
|
||||||
|
super(context, c, autoRequery);
|
||||||
|
mLayout = mDropDownLayout = layout;
|
||||||
|
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard constructor.
|
||||||
|
*
|
||||||
|
* @param context The context where the ListView associated with this adapter is running
|
||||||
|
* @param layout Resource identifier of a layout file that defines the views
|
||||||
|
* for this list item. Unless you override them later, this will
|
||||||
|
* define both the item views and the drop down views.
|
||||||
|
* @param c The cursor from which to get the data.
|
||||||
|
* @param flags Flags used to determine the behavior of the adapter,
|
||||||
|
* as per {@link CursorAdapter#CursorAdapter(Context, Cursor, int)}.
|
||||||
|
*/
|
||||||
|
public ResourceDragSortCursorAdapter(Context context, int layout, Cursor c, int flags) {
|
||||||
|
super(context, c, flags);
|
||||||
|
mLayout = mDropDownLayout = layout;
|
||||||
|
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inflates view(s) from the specified XML file.
|
||||||
|
*
|
||||||
|
* @see android.widget.CursorAdapter#newView(android.content.Context,
|
||||||
|
* android.database.Cursor, ViewGroup)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public View newView(Context context, Cursor cursor, ViewGroup parent) {
|
||||||
|
return mInflater.inflate(mLayout, parent, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {
|
||||||
|
return mInflater.inflate(mDropDownLayout, parent, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Sets the layout resource of the item views.</p>
|
||||||
|
*
|
||||||
|
* @param layout the layout resources used to create item views
|
||||||
|
*/
|
||||||
|
public void setViewResource(int layout) {
|
||||||
|
mLayout = layout;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Sets the layout resource of the drop down views.</p>
|
||||||
|
*
|
||||||
|
* @param dropDownLayout the layout resources used to create drop down views
|
||||||
|
*/
|
||||||
|
public void setDropDownViewResource(int dropDownLayout) {
|
||||||
|
mDropDownLayout = dropDownLayout;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,422 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2006 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.mobeta.android.dslv;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
|
||||||
|
// taken from sdk/sources/android-16/android/widget/SimpleCursorAdapter.java
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An easy adapter to map columns from a cursor to TextViews or ImageViews
|
||||||
|
* defined in an XML file. You can specify which columns you want, which
|
||||||
|
* views you want to display the columns, and the XML file that defines
|
||||||
|
* the appearance of these views.
|
||||||
|
*
|
||||||
|
* Binding occurs in two phases. First, if a
|
||||||
|
* {@link android.widget.SimpleCursorAdapter.ViewBinder} is available,
|
||||||
|
* {@link ViewBinder#setViewValue(android.view.View, android.database.Cursor, int)}
|
||||||
|
* is invoked. If the returned value is true, binding has occured. If the
|
||||||
|
* returned value is false and the view to bind is a TextView,
|
||||||
|
* {@link #setViewText(TextView, String)} is invoked. If the returned value
|
||||||
|
* is false and the view to bind is an ImageView,
|
||||||
|
* {@link #setViewImage(ImageView, String)} is invoked. If no appropriate
|
||||||
|
* binding can be found, an {@link IllegalStateException} is thrown.
|
||||||
|
*
|
||||||
|
* If this adapter is used with filtering, for instance in an
|
||||||
|
* {@link android.widget.AutoCompleteTextView}, you can use the
|
||||||
|
* {@link android.widget.SimpleCursorAdapter.CursorToStringConverter} and the
|
||||||
|
* {@link android.widget.FilterQueryProvider} interfaces
|
||||||
|
* to get control over the filtering process. You can refer to
|
||||||
|
* {@link #convertToString(android.database.Cursor)} and
|
||||||
|
* {@link #runQueryOnBackgroundThread(CharSequence)} for more information.
|
||||||
|
*/
|
||||||
|
public class SimpleDragSortCursorAdapter extends ResourceDragSortCursorAdapter {
|
||||||
|
/**
|
||||||
|
* A list of columns containing the data to bind to the UI.
|
||||||
|
* This field should be made private, so it is hidden from the SDK.
|
||||||
|
* {@hide}
|
||||||
|
*/
|
||||||
|
protected int[] mFrom;
|
||||||
|
/**
|
||||||
|
* A list of View ids representing the views to which the data must be bound.
|
||||||
|
* This field should be made private, so it is hidden from the SDK.
|
||||||
|
* {@hide}
|
||||||
|
*/
|
||||||
|
protected int[] mTo;
|
||||||
|
|
||||||
|
private int mStringConversionColumn = -1;
|
||||||
|
private CursorToStringConverter mCursorToStringConverter;
|
||||||
|
private ViewBinder mViewBinder;
|
||||||
|
|
||||||
|
String[] mOriginalFrom;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor the enables auto-requery.
|
||||||
|
*
|
||||||
|
* @deprecated This option is discouraged, as it results in Cursor queries
|
||||||
|
* being performed on the application's UI thread and thus can cause poor
|
||||||
|
* responsiveness or even Application Not Responding errors. As an alternative,
|
||||||
|
* use {@link android.app.LoaderManager} with a {@link android.content.CursorLoader}.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public SimpleDragSortCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
|
||||||
|
super(context, layout, c);
|
||||||
|
mTo = to;
|
||||||
|
mOriginalFrom = from;
|
||||||
|
findColumns(c, from);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Standard constructor.
|
||||||
|
*
|
||||||
|
* @param context The context where the ListView associated with this
|
||||||
|
* SimpleListItemFactory is running
|
||||||
|
* @param layout resource identifier of a layout file that defines the views
|
||||||
|
* for this list item. The layout file should include at least
|
||||||
|
* those named views defined in "to"
|
||||||
|
* @param c The database cursor. Can be null if the cursor is not available yet.
|
||||||
|
* @param from A list of column names representing the data to bind to the UI. Can be null
|
||||||
|
* if the cursor is not available yet.
|
||||||
|
* @param to The views that should display column in the "from" parameter.
|
||||||
|
* These should all be TextViews. The first N views in this list
|
||||||
|
* are given the values of the first N columns in the from
|
||||||
|
* parameter. Can be null if the cursor is not available yet.
|
||||||
|
* @param flags Flags used to determine the behavior of the adapter,
|
||||||
|
* as per {@link CursorAdapter#CursorAdapter(Context, Cursor, int)}.
|
||||||
|
*/
|
||||||
|
public SimpleDragSortCursorAdapter(Context context, int layout,
|
||||||
|
Cursor c, String[] from, int[] to, int flags) {
|
||||||
|
super(context, layout, c, flags);
|
||||||
|
mTo = to;
|
||||||
|
mOriginalFrom = from;
|
||||||
|
findColumns(c, from);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds all of the field names passed into the "to" parameter of the
|
||||||
|
* constructor with their corresponding cursor columns as specified in the
|
||||||
|
* "from" parameter.
|
||||||
|
*
|
||||||
|
* Binding occurs in two phases. First, if a
|
||||||
|
* {@link android.widget.SimpleCursorAdapter.ViewBinder} is available,
|
||||||
|
* {@link ViewBinder#setViewValue(android.view.View, android.database.Cursor, int)}
|
||||||
|
* is invoked. If the returned value is true, binding has occured. If the
|
||||||
|
* returned value is false and the view to bind is a TextView,
|
||||||
|
* {@link #setViewText(TextView, String)} is invoked. If the returned value is
|
||||||
|
* false and the view to bind is an ImageView,
|
||||||
|
* {@link #setViewImage(ImageView, String)} is invoked. If no appropriate
|
||||||
|
* binding can be found, an {@link IllegalStateException} is thrown.
|
||||||
|
*
|
||||||
|
* @throws IllegalStateException if binding cannot occur
|
||||||
|
*
|
||||||
|
* @see android.widget.CursorAdapter#bindView(android.view.View,
|
||||||
|
* android.content.Context, android.database.Cursor)
|
||||||
|
* @see #getViewBinder()
|
||||||
|
* @see #setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder)
|
||||||
|
* @see #setViewImage(ImageView, String)
|
||||||
|
* @see #setViewText(TextView, String)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void bindView(View view, Context context, Cursor cursor) {
|
||||||
|
final ViewBinder binder = mViewBinder;
|
||||||
|
final int count = mTo.length;
|
||||||
|
final int[] from = mFrom;
|
||||||
|
final int[] to = mTo;
|
||||||
|
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
final View v = view.findViewById(to[i]);
|
||||||
|
if (v != null) {
|
||||||
|
boolean bound = false;
|
||||||
|
if (binder != null) {
|
||||||
|
bound = binder.setViewValue(v, cursor, from[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!bound) {
|
||||||
|
String text = cursor.getString(from[i]);
|
||||||
|
if (text == null) {
|
||||||
|
text = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (v instanceof TextView) {
|
||||||
|
setViewText((TextView) v, text);
|
||||||
|
} else if (v instanceof ImageView) {
|
||||||
|
setViewImage((ImageView) v, text);
|
||||||
|
} else {
|
||||||
|
throw new IllegalStateException(v.getClass().getName() + " is not a " +
|
||||||
|
" view that can be bounds by this SimpleCursorAdapter");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link ViewBinder} used to bind data to views.
|
||||||
|
*
|
||||||
|
* @return a ViewBinder or null if the binder does not exist
|
||||||
|
*
|
||||||
|
* @see #bindView(android.view.View, android.content.Context, android.database.Cursor)
|
||||||
|
* @see #setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder)
|
||||||
|
*/
|
||||||
|
public ViewBinder getViewBinder() {
|
||||||
|
return mViewBinder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the binder used to bind data to views.
|
||||||
|
*
|
||||||
|
* @param viewBinder the binder used to bind data to views, can be null to
|
||||||
|
* remove the existing binder
|
||||||
|
*
|
||||||
|
* @see #bindView(android.view.View, android.content.Context, android.database.Cursor)
|
||||||
|
* @see #getViewBinder()
|
||||||
|
*/
|
||||||
|
public void setViewBinder(ViewBinder viewBinder) {
|
||||||
|
mViewBinder = viewBinder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by bindView() to set the image for an ImageView but only if
|
||||||
|
* there is no existing ViewBinder or if the existing ViewBinder cannot
|
||||||
|
* handle binding to an ImageView.
|
||||||
|
*
|
||||||
|
* By default, the value will be treated as an image resource. If the
|
||||||
|
* value cannot be used as an image resource, the value is used as an
|
||||||
|
* image Uri.
|
||||||
|
*
|
||||||
|
* Intended to be overridden by Adapters that need to filter strings
|
||||||
|
* retrieved from the database.
|
||||||
|
*
|
||||||
|
* @param v ImageView to receive an image
|
||||||
|
* @param value the value retrieved from the cursor
|
||||||
|
*/
|
||||||
|
public void setViewImage(ImageView v, String value) {
|
||||||
|
try {
|
||||||
|
v.setImageResource(Integer.parseInt(value));
|
||||||
|
} catch (NumberFormatException nfe) {
|
||||||
|
v.setImageURI(Uri.parse(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by bindView() to set the text for a TextView but only if
|
||||||
|
* there is no existing ViewBinder or if the existing ViewBinder cannot
|
||||||
|
* handle binding to a TextView.
|
||||||
|
*
|
||||||
|
* Intended to be overridden by Adapters that need to filter strings
|
||||||
|
* retrieved from the database.
|
||||||
|
*
|
||||||
|
* @param v TextView to receive text
|
||||||
|
* @param text the text to be set for the TextView
|
||||||
|
*/
|
||||||
|
public void setViewText(TextView v, String text) {
|
||||||
|
v.setText(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the index of the column used to get a String representation
|
||||||
|
* of the Cursor.
|
||||||
|
*
|
||||||
|
* @return a valid index in the current Cursor or -1
|
||||||
|
*
|
||||||
|
* @see android.widget.CursorAdapter#convertToString(android.database.Cursor)
|
||||||
|
* @see #setStringConversionColumn(int)
|
||||||
|
* @see #setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)
|
||||||
|
* @see #getCursorToStringConverter()
|
||||||
|
*/
|
||||||
|
public int getStringConversionColumn() {
|
||||||
|
return mStringConversionColumn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the index of the column in the Cursor used to get a String
|
||||||
|
* representation of that Cursor. The column is used to convert the
|
||||||
|
* Cursor to a String only when the current CursorToStringConverter
|
||||||
|
* is null.
|
||||||
|
*
|
||||||
|
* @param stringConversionColumn a valid index in the current Cursor or -1 to use the default
|
||||||
|
* conversion mechanism
|
||||||
|
*
|
||||||
|
* @see android.widget.CursorAdapter#convertToString(android.database.Cursor)
|
||||||
|
* @see #getStringConversionColumn()
|
||||||
|
* @see #setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)
|
||||||
|
* @see #getCursorToStringConverter()
|
||||||
|
*/
|
||||||
|
public void setStringConversionColumn(int stringConversionColumn) {
|
||||||
|
mStringConversionColumn = stringConversionColumn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the converter used to convert the filtering Cursor
|
||||||
|
* into a String.
|
||||||
|
*
|
||||||
|
* @return null if the converter does not exist or an instance of
|
||||||
|
* {@link android.widget.SimpleCursorAdapter.CursorToStringConverter}
|
||||||
|
*
|
||||||
|
* @see #setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)
|
||||||
|
* @see #getStringConversionColumn()
|
||||||
|
* @see #setStringConversionColumn(int)
|
||||||
|
* @see android.widget.CursorAdapter#convertToString(android.database.Cursor)
|
||||||
|
*/
|
||||||
|
public CursorToStringConverter getCursorToStringConverter() {
|
||||||
|
return mCursorToStringConverter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the converter used to convert the filtering Cursor
|
||||||
|
* into a String.
|
||||||
|
*
|
||||||
|
* @param cursorToStringConverter the Cursor to String converter, or
|
||||||
|
* null to remove the converter
|
||||||
|
*
|
||||||
|
* @see #setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter)
|
||||||
|
* @see #getStringConversionColumn()
|
||||||
|
* @see #setStringConversionColumn(int)
|
||||||
|
* @see android.widget.CursorAdapter#convertToString(android.database.Cursor)
|
||||||
|
*/
|
||||||
|
public void setCursorToStringConverter(CursorToStringConverter cursorToStringConverter) {
|
||||||
|
mCursorToStringConverter = cursorToStringConverter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a CharSequence representation of the specified Cursor as defined
|
||||||
|
* by the current CursorToStringConverter. If no CursorToStringConverter
|
||||||
|
* has been set, the String conversion column is used instead. If the
|
||||||
|
* conversion column is -1, the returned String is empty if the cursor
|
||||||
|
* is null or Cursor.toString().
|
||||||
|
*
|
||||||
|
* @param cursor the Cursor to convert to a CharSequence
|
||||||
|
*
|
||||||
|
* @return a non-null CharSequence representing the cursor
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public CharSequence convertToString(Cursor cursor) {
|
||||||
|
if (mCursorToStringConverter != null) {
|
||||||
|
return mCursorToStringConverter.convertToString(cursor);
|
||||||
|
} else if (mStringConversionColumn > -1) {
|
||||||
|
return cursor.getString(mStringConversionColumn);
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.convertToString(cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a map from an array of strings to an array of column-id integers in cursor c.
|
||||||
|
* If c is null, the array will be discarded.
|
||||||
|
*
|
||||||
|
* @param c the cursor to find the columns from
|
||||||
|
* @param from the Strings naming the columns of interest
|
||||||
|
*/
|
||||||
|
private void findColumns(Cursor c, String[] from) {
|
||||||
|
if (c != null) {
|
||||||
|
int i;
|
||||||
|
int count = from.length;
|
||||||
|
if (mFrom == null || mFrom.length != count) {
|
||||||
|
mFrom = new int[count];
|
||||||
|
}
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
mFrom[i] = c.getColumnIndexOrThrow(from[i]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mFrom = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Cursor swapCursor(Cursor c) {
|
||||||
|
// super.swapCursor() will notify observers before we have
|
||||||
|
// a valid mapping, make sure we have a mapping before this
|
||||||
|
// happens
|
||||||
|
findColumns(c, mOriginalFrom);
|
||||||
|
return super.swapCursor(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the cursor and change the column-to-view mappings at the same time.
|
||||||
|
*
|
||||||
|
* @param c The database cursor. Can be null if the cursor is not available yet.
|
||||||
|
* @param from A list of column names representing the data to bind to the UI. Can be null
|
||||||
|
* if the cursor is not available yet.
|
||||||
|
* @param to The views that should display column in the "from" parameter.
|
||||||
|
* These should all be TextViews. The first N views in this list
|
||||||
|
* are given the values of the first N columns in the from
|
||||||
|
* parameter. Can be null if the cursor is not available yet.
|
||||||
|
*/
|
||||||
|
public void changeCursorAndColumns(Cursor c, String[] from, int[] to) {
|
||||||
|
mOriginalFrom = from;
|
||||||
|
mTo = to;
|
||||||
|
// super.changeCursor() will notify observers before we have
|
||||||
|
// a valid mapping, make sure we have a mapping before this
|
||||||
|
// happens
|
||||||
|
findColumns(c, mOriginalFrom);
|
||||||
|
super.changeCursor(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class can be used by external clients of SimpleCursorAdapter
|
||||||
|
* to bind values fom the Cursor to views.
|
||||||
|
*
|
||||||
|
* You should use this class to bind values from the Cursor to views
|
||||||
|
* that are not directly supported by SimpleCursorAdapter or to
|
||||||
|
* change the way binding occurs for views supported by
|
||||||
|
* SimpleCursorAdapter.
|
||||||
|
*
|
||||||
|
* @see SimpleCursorAdapter#bindView(android.view.View, android.content.Context, android.database.Cursor)
|
||||||
|
* @see SimpleCursorAdapter#setViewImage(ImageView, String)
|
||||||
|
* @see SimpleCursorAdapter#setViewText(TextView, String)
|
||||||
|
*/
|
||||||
|
public static interface ViewBinder {
|
||||||
|
/**
|
||||||
|
* Binds the Cursor column defined by the specified index to the specified view.
|
||||||
|
*
|
||||||
|
* When binding is handled by this ViewBinder, this method must return true.
|
||||||
|
* If this method returns false, SimpleCursorAdapter will attempts to handle
|
||||||
|
* the binding on its own.
|
||||||
|
*
|
||||||
|
* @param view the view to bind the data to
|
||||||
|
* @param cursor the cursor to get the data from
|
||||||
|
* @param columnIndex the column at which the data can be found in the cursor
|
||||||
|
*
|
||||||
|
* @return true if the data was bound to the view, false otherwise
|
||||||
|
*/
|
||||||
|
boolean setViewValue(View view, Cursor cursor, int columnIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class can be used by external clients of SimpleCursorAdapter
|
||||||
|
* to define how the Cursor should be converted to a String.
|
||||||
|
*
|
||||||
|
* @see android.widget.CursorAdapter#convertToString(android.database.Cursor)
|
||||||
|
*/
|
||||||
|
public static interface CursorToStringConverter {
|
||||||
|
/**
|
||||||
|
* Returns a CharSequence representing the specified Cursor.
|
||||||
|
*
|
||||||
|
* @param cursor the cursor for which a CharSequence representation
|
||||||
|
* is requested
|
||||||
|
*
|
||||||
|
* @return a non-null CharSequence representing the cursor
|
||||||
|
*/
|
||||||
|
CharSequence convertToString(Cursor cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,89 @@
|
||||||
|
package com.mobeta.android.dslv;
|
||||||
|
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.Point;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.widget.ListView;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple implementation of the FloatViewManager class. Uses list
|
||||||
|
* items as they appear in the ListView to create the floating View.
|
||||||
|
*/
|
||||||
|
public class SimpleFloatViewManager implements DragSortListView.FloatViewManager {
|
||||||
|
|
||||||
|
private Bitmap mFloatBitmap;
|
||||||
|
|
||||||
|
private ImageView mImageView;
|
||||||
|
|
||||||
|
private int mFloatBGColor = Color.BLACK;
|
||||||
|
|
||||||
|
private ListView mListView;
|
||||||
|
|
||||||
|
public SimpleFloatViewManager(ListView lv) {
|
||||||
|
mListView = lv;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackgroundColor(int color) {
|
||||||
|
mFloatBGColor = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This simple implementation creates a Bitmap copy of the
|
||||||
|
* list item currently shown at ListView <code>position</code>.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public View onCreateFloatView(int position) {
|
||||||
|
// Guaranteed that this will not be null? I think so. Nope, got
|
||||||
|
// a NullPointerException once...
|
||||||
|
View v = mListView.getChildAt(position + mListView.getHeaderViewsCount() - mListView.getFirstVisiblePosition());
|
||||||
|
|
||||||
|
if (v == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
v.setPressed(false);
|
||||||
|
|
||||||
|
// Create a copy of the drawing cache so that it does not get
|
||||||
|
// recycled by the framework when the list tries to clean up memory
|
||||||
|
//v.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
|
||||||
|
v.setDrawingCacheEnabled(true);
|
||||||
|
mFloatBitmap = Bitmap.createBitmap(v.getDrawingCache());
|
||||||
|
v.setDrawingCacheEnabled(false);
|
||||||
|
|
||||||
|
if (mImageView == null) {
|
||||||
|
mImageView = new ImageView(mListView.getContext());
|
||||||
|
}
|
||||||
|
mImageView.setBackgroundColor(mFloatBGColor);
|
||||||
|
mImageView.setPadding(0, 0, 0, 0);
|
||||||
|
mImageView.setImageBitmap(mFloatBitmap);
|
||||||
|
mImageView.setLayoutParams(new ViewGroup.LayoutParams(v.getWidth(), v.getHeight()));
|
||||||
|
|
||||||
|
return mImageView;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This does nothing
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onDragFloatView(View floatView, Point position, Point touch) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the Bitmap from the ImageView created in
|
||||||
|
* onCreateFloatView() and tells the system to recycle it.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onDestroyFloatView(View floatView) {
|
||||||
|
((ImageView) floatView).setImageDrawable(null);
|
||||||
|
|
||||||
|
mFloatBitmap.recycle();
|
||||||
|
mFloatBitmap = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<declare-styleable name="DragSortListView">
|
||||||
|
<attr name="collapsed_height" format="dimension" />
|
||||||
|
<attr name="drag_scroll_start" format="float" />
|
||||||
|
<attr name="max_drag_scroll_speed" format="float" />
|
||||||
|
<attr name="float_background_color" format="color" />
|
||||||
|
<attr name="remove_mode">
|
||||||
|
<enum name="clickRemove" value="0" />
|
||||||
|
<enum name="flingRemove" value="1" />
|
||||||
|
</attr>
|
||||||
|
<attr name="track_drag_sort" format="boolean"/>
|
||||||
|
<attr name="float_alpha" format="float"/>
|
||||||
|
<attr name="slide_shuffle_speed" format="float"/>
|
||||||
|
<attr name="remove_animation_duration" format="integer"/>
|
||||||
|
<attr name="drop_animation_duration" format="integer"/>
|
||||||
|
<attr name="drag_enabled" format="boolean" />
|
||||||
|
<attr name="sort_enabled" format="boolean" />
|
||||||
|
<attr name="remove_enabled" format="boolean" />
|
||||||
|
<attr name="drag_start_mode">
|
||||||
|
<enum name="onDown" value="0" />
|
||||||
|
<enum name="onMove" value="1" />
|
||||||
|
<enum name="onLongPress" value="2"/>
|
||||||
|
</attr>
|
||||||
|
<attr name="drag_handle_id" format="integer" />
|
||||||
|
<attr name="fling_handle_id" format="integer" />
|
||||||
|
<attr name="click_remove_id" format="integer" />
|
||||||
|
<attr name="use_default_controller" format="boolean" />
|
||||||
|
</declare-styleable>
|
||||||
|
</resources>
|
|
@ -0,0 +1,7 @@
|
||||||
|
## This file must *NOT* be checked into Version Control Systems,
|
||||||
|
# as it contains information specific to your local configuration.
|
||||||
|
#
|
||||||
|
# Location of the SDK. This is only used by Gradle.
|
||||||
|
#
|
||||||
|
#Mon Dec 12 22:52:27 CST 2016
|
||||||
|
sdk.dir=/Volumes/workingspace/android/adt-bundle-mac-x86_64-20140702/sdk
|
|
@ -0,0 +1 @@
|
||||||
|
/build
|
|
@ -0,0 +1,56 @@
|
||||||
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdkVersion 21
|
||||||
|
buildToolsVersion "21.1.2"
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
applicationId "com.qiyou.mb.android"
|
||||||
|
minSdkVersion 8
|
||||||
|
targetSdkVersion 22
|
||||||
|
|
||||||
|
testApplicationId "com.qiyou.mb.android.test"
|
||||||
|
testInstrumentationRunner "android.test.InstrumentationTestRunner"
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
minifyEnabled true
|
||||||
|
proguardFiles 'proguard.cfg'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile project(':listviewlibrary')
|
||||||
|
compile 'com.android.support:support-v4:22.+'
|
||||||
|
compile 'com.android.support:gridlayout-v7:22.+'
|
||||||
|
compile files('libs/BaiduLBS_Android.jar')
|
||||||
|
compile files('libs/SocialSDK_QQZone_1.jar')
|
||||||
|
compile files('libs/SocialSDK_QQZone_2.jar')
|
||||||
|
compile files('libs/SocialSDK_QQZone_3.jar')
|
||||||
|
compile files('libs/SocialSDK_Sina.jar')
|
||||||
|
compile files('libs/SocialSDK_WeiXin_1.jar')
|
||||||
|
compile files('libs/SocialSDK_WeiXin_2.jar')
|
||||||
|
compile files('libs/SocialSDK_tencentWB_1.jar')
|
||||||
|
compile files('libs/SocialSDK_tencentWB_2.jar')
|
||||||
|
compile files('libs/SocialSDK_tencentWB_3.jar')
|
||||||
|
compile files('libs/SpeechApi.jar')
|
||||||
|
compile files('libs/achartengine-1.1.0.jar')
|
||||||
|
compile files('libs/android-async-http-1.4.6.jar')
|
||||||
|
compile files('libs/conceal_android.jar')
|
||||||
|
compile files('libs/httpmime-4.1.3.jar')
|
||||||
|
compile files('libs/libconceal.jar')
|
||||||
|
compile files('libs/locSDK_6.13.jar')
|
||||||
|
compile files('libs/nineoldandroids-2.4.0.jar')
|
||||||
|
compile files('libs/swipelistview-1.0-20130701.103547-12-jar-with-dependencies.jar')
|
||||||
|
compile files('libs/umeng-analytics-v6.0.3.jar')
|
||||||
|
compile files('libs/umeng-update-v2.6.0.1.jar')
|
||||||
|
compile files('libs/umeng_social_sdk.jar')
|
||||||
|
compile files('libs/universal-image-loader-1.9.2.jar')
|
||||||
|
compile files('libs/utdid4all-1.0.4.jar')
|
||||||
|
compile 'com.google.code.gson:gson:2.8.0'
|
||||||
|
}
|
||||||
|
//tasks.withType(JavaCompile) {
|
||||||
|
// options.encoding = "GBK"
|
||||||
|
//}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue