├── .classpath ├── .gitattributes ├── .gitignore ├── .project ├── AndroidManifest.xml ├── ImgApp.png ├── ImgWeb.png ├── LICENSE ├── README.md ├── ant.properties ├── assets └── ws │ ├── css │ ├── wsf.base.css │ └── wsf.view.css │ ├── img │ └── favicon.ico │ ├── js │ ├── ajaxfileupload.min.js │ ├── jquery-1.9.1.min.js │ ├── wsf.confirm.js │ └── wsf.view.js │ └── temp │ ├── 403.html │ ├── 404.html │ ├── 503.html │ ├── base.html │ ├── confirm.html │ └── view.html ├── build.xml ├── libs ├── ant-zip.jar ├── commons-io-2.4.jar ├── jangod-core.jar └── zxing-core.jar ├── local.properties ├── proguard-project.txt ├── project.properties ├── res ├── drawable-hdpi │ ├── ic_launcher.png │ └── ic_noti_running.png ├── drawable-mdpi │ ├── ic_launcher.png │ └── ic_noti_running.png ├── drawable-xhdpi │ └── ic_launcher.png ├── drawable │ ├── btn_toggle.xml │ ├── btn_toggle_off_normal.xml │ ├── btn_toggle_off_pressed.xml │ ├── btn_toggle_on_normal.xml │ ├── btn_toggle_on_pressed.xml │ ├── file_def.png │ ├── folder_def.png │ └── folder_parent.png ├── layout │ ├── capture.xml │ ├── filebrowser.xml │ ├── main.xml │ ├── prefer_widget_checkbox.xml │ ├── prefer_widget_edit.xml │ └── prefer_widget_wait.xml ├── menu │ └── main.xml ├── values-zh-rCN │ └── strings.xml ├── values │ ├── colors.xml │ ├── ids.xml │ ├── items.xml │ ├── strings.xml │ └── styles.xml └── xml │ └── prefer.xml └── src ├── org └── join │ └── ws │ ├── Constants.java │ ├── CrashHandler.java │ ├── WSApplication.java │ ├── receiver │ ├── NetworkReceiver.java │ ├── OnNetworkListener.java │ ├── OnStorageListener.java │ ├── OnWsListener.java │ ├── StorageReceiver.java │ └── WSReceiver.java │ ├── serv │ ├── GzipFilter.java │ ├── TempCacheFilter.java │ ├── UrlPattern.java │ ├── WebServer.java │ ├── WorkerThread.java │ ├── entity │ │ ├── GzipByteArrayEntity.java │ │ ├── GzipEntity.java │ │ └── GzipFileEntity.java │ ├── req │ │ ├── HttpDelHandler.java │ │ ├── HttpDownHandler.java │ │ ├── HttpFBHandler.java │ │ ├── HttpProgressHandler.java │ │ ├── HttpUpHandler.java │ │ └── objs │ │ │ └── FileRow.java │ ├── support │ │ ├── GzipUtil.java │ │ ├── HttpGetParser.java │ │ ├── HttpPostParser.java │ │ ├── MIME.java │ │ ├── MimeType.java │ │ └── Progress.java │ └── view │ │ ├── BaseView.java │ │ ├── FileView.java │ │ ├── StringView.java │ │ ├── TempHandler.java │ │ ├── TempView.java │ │ └── ViewFactory.java │ ├── service │ ├── WSService.java │ └── WebService.java │ ├── ui │ ├── PreferActivity.java │ ├── WSActivity.java │ ├── WebServActivity.java │ └── widget │ │ ├── FileBrowser.java │ │ └── ProgressBarPreference.java │ └── util │ ├── CommonUtil.java │ └── CopyUtil.java ├── temp └── net │ └── asfun │ └── jangod │ ├── lib │ └── tag │ │ ├── AbsResTag.java │ │ ├── ResColorTag.java │ │ ├── ResStrTag.java │ │ └── UUIDTag.java │ └── template │ ├── LazyBindings.java │ ├── Processor.java │ └── TemplateEngine.java ├── test └── net │ └── asfun │ └── jangod │ └── lib │ └── tag │ └── TagTest.java ├── upload └── org │ └── apache │ └── commons │ └── fileupload │ ├── FileItem.java │ ├── FileItemFactory.java │ ├── FileItemHeaders.java │ ├── FileItemHeadersSupport.java │ ├── FileItemIterator.java │ ├── FileItemStream.java │ ├── FileUpload.java │ ├── FileUploadBase.java │ ├── FileUploadException.java │ ├── InvalidFileNameException.java │ ├── MultipartStream.java │ ├── ParameterParser.java │ ├── ProgressListener.java │ ├── RequestContext.java │ ├── UploadContext.java │ ├── disk │ ├── DiskFileItem.java │ ├── DiskFileItemFactory.java │ └── package-info.java │ ├── httpserv │ ├── HttpServFileUpload.java │ └── HttpServRequestContext.java │ ├── package-info.java │ └── util │ ├── Closeable.java │ ├── FileItemHeadersImpl.java │ ├── LimitedInputStream.java │ ├── Streams.java │ ├── mime │ ├── Base64Decoder.java │ ├── MimeUtility.java │ ├── ParseException.java │ ├── QuotedPrintableDecoder.java │ └── package-info.java │ └── package-info.java └── zxing └── org └── join └── zxing ├── AmbientLightManager.java ├── CaptureActivity.java ├── CaptureActivityHandler.java ├── Contents.java ├── DecodeFormatManager.java ├── DecodeHandler.java ├── DecodeHintManager.java ├── DecodeThread.java ├── FinishListener.java ├── InactivityTimer.java ├── Intents.java ├── ViewfinderResultPointCallback.java ├── ViewfinderView.java ├── ZXingPreferences.java ├── camera ├── AutoFocusManager.java ├── CameraConfigurationManager.java ├── CameraManager.java ├── FrontLightMode.java ├── PreviewCallback.java └── open │ ├── DefaultOpenCameraInterface.java │ ├── GingerbreadOpenCameraInterface.java │ ├── OpenCameraInterface.java │ └── OpenCameraManager.java ├── common ├── PlatformSupportManager.java └── executor │ ├── AsyncTaskExecInterface.java │ ├── AsyncTaskExecManager.java │ ├── DefaultAsyncTaskExecInterface.java │ └── HoneycombAsyncTaskExecInterface.java └── encode ├── ContactEncoder.java ├── Formatter.java ├── MECARDContactEncoder.java ├── QRCodeEncoder.java └── VCardContactEncoder.java /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################# 2 | ## Eclipse 3 | ################# 4 | 5 | *.pydevproject 6 | # .project 7 | .metadata 8 | bin/ 9 | gen/ 10 | tmp/ 11 | *.tmp 12 | *.bak 13 | *.swp 14 | *~.nib 15 | # local.properties 16 | # .classpath 17 | .settings/ 18 | .loadpath 19 | 20 | # External tool builders 21 | .externalToolBuilders/ 22 | 23 | # Locally stored "Eclipse launch configurations" 24 | *.launch 25 | 26 | # CDT-specific 27 | .cproject 28 | 29 | # PDT-specific 30 | .buildpath 31 | 32 | 33 | ################# 34 | ## Visual Studio 35 | ################# 36 | 37 | ## Ignore Visual Studio temporary files, build results, and 38 | ## files generated by popular Visual Studio add-ons. 39 | 40 | # User-specific files 41 | *.suo 42 | *.user 43 | *.sln.docstates 44 | 45 | # Build results 46 | [Dd]ebug/ 47 | [Rr]elease/ 48 | *_i.c 49 | *_p.c 50 | *.ilk 51 | *.meta 52 | *.obj 53 | *.pch 54 | *.pdb 55 | *.pgc 56 | *.pgd 57 | *.rsp 58 | *.sbr 59 | *.tlb 60 | *.tli 61 | *.tlh 62 | *.tmp 63 | *.vspscc 64 | .builds 65 | *.dotCover 66 | 67 | ## TODO: If you have NuGet Package Restore enabled, uncomment this 68 | #packages/ 69 | 70 | # Visual C++ cache files 71 | ipch/ 72 | *.aps 73 | *.ncb 74 | *.opensdf 75 | *.sdf 76 | 77 | # Visual Studio profiler 78 | *.psess 79 | *.vsp 80 | 81 | # ReSharper is a .NET coding add-in 82 | _ReSharper* 83 | 84 | # Installshield output folder 85 | [Ee]xpress 86 | 87 | # DocProject is a documentation generator add-in 88 | DocProject/buildhelp/ 89 | DocProject/Help/*.HxT 90 | DocProject/Help/*.HxC 91 | DocProject/Help/*.hhc 92 | DocProject/Help/*.hhk 93 | DocProject/Help/*.hhp 94 | DocProject/Help/Html2 95 | DocProject/Help/html 96 | 97 | # Click-Once directory 98 | publish 99 | 100 | # Others 101 | [Bb]in 102 | [Oo]bj 103 | sql 104 | TestResults 105 | *.Cache 106 | ClientBin 107 | stylecop.* 108 | ~$* 109 | *.dbmdl 110 | Generated_Code #added for RIA/Silverlight projects 111 | 112 | # Backup & report files from converting an old project file to a newer 113 | # Visual Studio version. Backup files are not needed, because we have git ;-) 114 | _UpgradeReport_Files/ 115 | Backup*/ 116 | UpgradeLog*.XML 117 | 118 | 119 | 120 | ############ 121 | ## Windows 122 | ############ 123 | 124 | # Windows image file caches 125 | Thumbs.db 126 | 127 | # Folder config file 128 | Desktop.ini 129 | 130 | 131 | ############# 132 | ## Python 133 | ############# 134 | 135 | *.py[co] 136 | 137 | # Packages 138 | *.egg 139 | *.egg-info 140 | dist 141 | build 142 | eggs 143 | parts 144 | bin 145 | var 146 | sdist 147 | develop-eggs 148 | .installed.cfg 149 | 150 | # Installer logs 151 | pip-log.txt 152 | 153 | # Unit test / coverage reports 154 | .coverage 155 | .tox 156 | 157 | #Translations 158 | *.mo 159 | 160 | #Mr Developer 161 | .mr.developer.cfg 162 | 163 | # Mac crap 164 | .DS_Store 165 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | AndroidWebServ 4 | 5 | 6 | 7 | 8 | 9 | com.android.ide.eclipse.adt.ResourceManagerBuilder 10 | 11 | 12 | 13 | 14 | com.android.ide.eclipse.adt.PreCompilerBuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.jdt.core.javabuilder 20 | 21 | 22 | 23 | 24 | com.android.ide.eclipse.adt.ApkBuilder 25 | 26 | 27 | 28 | 29 | 30 | com.android.ide.eclipse.adt.AndroidNature 31 | org.eclipse.jdt.core.javanature 32 | 33 | 34 | -------------------------------------------------------------------------------- /ImgApp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joinAero/AndroidWebServ/72c215a0549ab314bb1677dd8b097fd315193429/ImgApp.png -------------------------------------------------------------------------------- /ImgWeb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joinAero/AndroidWebServ/72c215a0549ab314bb1677dd8b097fd315193429/ImgWeb.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ![Logo](https://github.com/joinAero/AndroidWebServ/raw/master/res/drawable-mdpi/ic_launcher.png) AndroidWebServ 2 | 3 | A http server for file management on android. And it is achieved by native android httpcore API. 4 | 5 | --- 6 | 7 | *App on phone:* 8 | 9 | ![App on phone](https://github.com/joinAero/AndroidWebServ/raw/master/ImgApp.png) 10 | 11 | *Browse in Chrome:* 12 | 13 | ![Browse in Chrome](https://github.com/joinAero/AndroidWebServ/raw/master/ImgWeb.png) 14 | 15 | ## Libs 16 | 17 | [jangod](https://code.google.com/p/jangod/): jangod-core.jar & src/temp 18 | 19 | * Render html templates similar as django template syntax. 20 | * Customize some tags for android to get its resources. 21 | 22 | [Commons FileUpload](http://commons.apache.org/proper/commons-fileupload/): commons-io-2.4.jar & src/upload 23 | 24 | * Add file upload capability to http server. 25 | * Implement `HttpServFileUpload` for `HttpRequest`. 26 | 27 | [Apache Ant](http://ant.apache.org/): ant-zip.jar 28 | 29 | * Ant zip part for chinese garbled problem. 30 | 31 | [ZXingSimple](https://github.com/joinAero/ZXingSimple): zxing-core.jar & src/zxing 32 | 33 | * Use to scan QRCode and generate it. 34 | 35 | [jQuery](http://jquery.com/): jquery-1.9.1.min.js 36 | 37 | * Much simpler to write JavaScript. 38 | 39 | [AjaxFileUpload](http://www.phpletter.com/Our-Projects/AjaxFileUpload/): ajaxfileupload.min.js 40 | 41 | * Do some amendments for several problems. 42 | 43 | ## Download 44 | 45 | [AndroidWebServ-release-v1.0.apk](https://add110.opendrive.com/files?70641844_EYGvD) 46 | -------------------------------------------------------------------------------- /ant.properties: -------------------------------------------------------------------------------- 1 | # This file is used to override default values used by the Ant build system. 2 | # 3 | # This file must be checked into Version Control Systems, as it is 4 | # integral to the build system of your project. 5 | 6 | # This file is only used by the Ant script. 7 | 8 | # You can use this to override default values such as 9 | # 'source.dir' for the location of your java source folder and 10 | # 'out.dir' for the location of your output folder. 11 | 12 | # You can also use it define how the release builds are signed by declaring 13 | # the following properties: 14 | # 'key.store' for the location of your keystore and 15 | # 'key.alias' for the name of the key to use. 16 | # The password will be asked during the build when you use the 'release' target. 17 | key.store=E:\\Environment\\join.keystore 18 | key.alias=android -------------------------------------------------------------------------------- /assets/ws/css/wsf.view.css: -------------------------------------------------------------------------------- 1 | @import "wsf.base.css"; 2 | 3 | a.red:link { color: #EB6857; } 4 | a.red:visited { color: #EB6857; } 5 | a.red:hover { color: #EB6857; background: transparent; } 6 | 7 | a.icon { 8 | padding-left: 1.5em; 9 | text-decoration: none; 10 | } 11 | a.icon:hover { 12 | text-decoration: underline; 13 | } 14 | a.file { 15 | background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABHUlEQVR42o2RMW7DIBiF3498iHRJD5JKHurL+CRVBp+i2T16tTynF2gO0KSb5ZrBBl4HHDBuK/WXACH4eO9/CAAAbdvijzLGNE1TVZXfZuHg6XCAQESAZXbOKaXO57eiKG6ft9PrKQIkCQqFoIiQFBGlFIB5nvM8t9aOX2Nd18oDzjnPgCDpn/BH4zh2XZdlWVmWiUK4IgCBoFMUz9eP6zRN75cLgEQhcmTQIbl72O0f9865qLAAsURAAgKBJKEtgLXWvyjLuFsThCSstb8rBCaAQhDYWgIZ7myM+TUBjDHrHlZcbMYYk34cN0YSLcgS+wL0fe9TXDMbY33fR2AYBvyQ8L0Gk8MwREBrTfKe4TpTzwhArXWi8HI84h/1DfwI5mhxJamFAAAAAElFTkSuQmCC ") left top no-repeat; 16 | } 17 | a.dir { 18 | background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII= ") left top no-repeat; 19 | } 20 | a.up { 21 | background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU0toU0EUPfPysx/tTxuDH9SCWhUDooIbd7oRUUTMouqi2iIoCO6lceHWhegy4EJFinWjrlQUpVm0IIoFpVDEIthm0dpikpf3ZuZ6Z94nrXhhMjM3c8895977BBHB2PznK8WPtDgyWH5q77cPH8PpdXuhpQT4ifR9u5sfJb1bmw6VivahATDrxcRZ2njfoaMv+2j7mLDn93MPiNRMvGbL18L9IpF8h9/TN+EYkMffSiOXJ5+hkD+PdqcLpICWHOHc2CC+LEyA/K+cKQMnlQHJX8wqYG3MAJy88Wa4OLDvEqAEOpJd0LxHIMdHBziowSwVlF8D6QaicK01krw/JynwcKoEwZczewroTvZirlKJs5CqQ5CG8pb57FnJUA0LYCXMX5fibd+p8LWDDemcPZbzQyjvH+Ki1TlIciElA7ghwLKV4kRZstt2sANWRjYTAGzuP2hXZFpJ/GsxgGJ0ox1aoFWsDXyyxqCs26+ydmagFN/rRjymJ1898bzGzmQE0HCZpmk5A0RFIv8Pn0WYPsiu6t/Rsj6PauVTwffTSzGAGZhUG2F06hEc9ibS7OPMNp6ErYFlKavo7MkhmTqCxZ/jwzGA9Hx82H2BZSw1NTN9Gx8ycHkajU/7M+jInsDC7DiaEmo1bNl1AMr9ASFgqVu9MCTIzoGUimXVAnnaN0PdBBDCCYbEtMk6wkpQwIG0sn0PQIUF4GsTwLSIFKNqF6DVrQq+IWVrQDxAYQC/1SsYOI4pOxKZrfifiUSbDUisif7XlpGIPufXd/uvdvZm760M0no1FZcnrzUdjw7au3vu/BVgAFLXeuTxhTXVAAAAAElFTkSuQmCC ") left top no-repeat; 22 | } 23 | 24 | h1 { 25 | border-bottom: 1px solid #c0c0c0; 26 | margin-bottom: 10px; 27 | padding-top: 10px; 28 | padding-bottom: 10px; 29 | white-space: nowrap; 30 | } 31 | 32 | table { 33 | border-spacing: .4em; 34 | } 35 | tr.header { 36 | font-weight: bold; 37 | } 38 | td { 39 | height: 22px; 40 | vertical-align: top; 41 | } 42 | td.detailsColumn { 43 | padding-left: 2em; 44 | text-align: right; 45 | white-space: nowrap; 46 | } 47 | td.operateColumn { 48 | padding-left: 2em; 49 | white-space: nowrap; 50 | } 51 | 52 | .confirm { 53 | display: none; 54 | position: absolute; 55 | width: 360px; 56 | height: 160px; 57 | top: 50%; 58 | left: 50%; 59 | margin-left: -180px; 60 | margin-top: -80px; 61 | background-color: #f5f5f5; 62 | border: 1px solid #e5ebe4; 63 | border-radius: 4px; 64 | box-shadow: 0 4px 23px 5px rgba(0, 0, 0, 0.2), 0 2px 6px rgba(0,0,0,0.15); 65 | overflow:hidden; 66 | z-index: 2; 67 | } 68 | .confirm .close { 69 | position: relative; 70 | float: right; 71 | top: 4px; 72 | right: 8px; 73 | font-weight: bold; 74 | } 75 | .conf-body { 76 | padding: 10px 20px; 77 | font-size: 16px; 78 | } 79 | .conf-body p { 80 | margin: 15px auto; 81 | } 82 | .conf-body ul ol { 83 | list-style: none; 84 | } 85 | .conf-body ul li { 86 | margin-left: 20px; 87 | display: inline; 88 | } 89 | -------------------------------------------------------------------------------- /assets/ws/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joinAero/AndroidWebServ/72c215a0549ab314bb1677dd8b097fd315193429/assets/ws/img/favicon.ico -------------------------------------------------------------------------------- /assets/ws/js/ajaxfileupload.min.js: -------------------------------------------------------------------------------- 1 | jQuery.extend({handleError:function(s,xhr,status,e){if(s.error){s.error.call(s.context||s,xhr,status,e)}if(s.global){(s.context?jQuery(s.context):jQuery.event).trigger("ajaxError",[xhr,s,e])}},createUploadIframe:function(id,uri){var frameId="jUploadFrame"+id;var iframeHtml='