diff --git a/.gitignore b/.gitignore index 9a26923..f545b32 100644 --- a/.gitignore +++ b/.gitignore @@ -1,276 +1,10 @@ - -# Created by https://www.gitignore.io/api/android,jetbrains,eclipse,jetbrains,windows,osx,gradle - -.idea - -### Android ### -# Built application files -*.apk -*.ap_ - -# Files for the Dalvik VM -*.dex - -# Java class files -*.class - -# Generated files -bin/ -gen/ -out/ - -# Gradle files -.gradle/ -build/ - -# Local configuration file (sdk path, etc) -local.properties - -# Proguard folder generated by Eclipse -proguard/ - -# Log Files -*.log - -# Android Studio Navigation editor temp files -.navigation/ - -# Android Studio captures folder -captures/ - -# Intellij *.iml - -# Keystore files -*.jks - -### Android Patch ### -gen-external-apklibs - - -### JetBrains ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff: -.idea/workspace.xml -.idea/tasks.xml -.idea/dictionaries -.idea/vcs.xml -.idea/jsLibraryMappings.xml - -# Sensitive or high-churn files: -.idea/dataSources.ids -.idea/dataSources.xml -.idea/dataSources.local.xml -.idea/sqlDataSources.xml -.idea/dynamic.xml -.idea/uiDesigner.xml - -# Gradle: -.idea/gradle.xml -.idea/libraries - -# Mongo Explorer plugin: -.idea/mongoSettings.xml - -## File-based project format: -*.iws - -## Plugin-specific files: - -# IntelliJ -/out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -### JetBrains Patch ### -# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 - -# *.iml -# modules.xml - - -### Eclipse ### - -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath -.recommenders - -# Eclipse Core -.project - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# PyDev specific (Python IDE for Eclipse) -*.pydevproject - -# CDT-specific (C/C++ Development Tooling) -.cproject - -# JDT-specific (Eclipse Java Development Tools) -.classpath - -# Java annotation processor (APT) -.factorypath - -# PDT-specific (PHP Development Tools) -.buildpath - -# sbteclipse plugin -.target - -# Tern plugin -.tern-project - -# TeXlipse plugin -.texlipse - -# STS (Spring Tool Suite) -.springBeans - -# Code Recommenders -.recommenders/ - - -### JetBrains ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff: -.idea/workspace.xml -.idea/tasks.xml -.idea/dictionaries -.idea/vcs.xml -.idea/jsLibraryMappings.xml - -# Sensitive or high-churn files: -.idea/dataSources.ids -.idea/dataSources.xml -.idea/dataSources.local.xml -.idea/sqlDataSources.xml -.idea/dynamic.xml -.idea/uiDesigner.xml - -# Gradle: -.idea/gradle.xml -.idea/libraries - -# Mongo Explorer plugin: -.idea/mongoSettings.xml - -## File-based project format: -*.iws - -## Plugin-specific files: - -# IntelliJ -/out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -### JetBrains Patch ### -# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 - -# *.iml -# modules.xml - - -### Windows ### -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msm -*.msp - -# Windows shortcuts -*.lnk - - -### OSX ### -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - - -### Gradle ### .gradle -build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.externalNativeBuild +/.idea/ diff --git a/.travis.yml b/.travis.yml index 56c9fd3..576922e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,48 +1,24 @@ language: android + jdk: oraclejdk8 -env: - matrix: - - ANDROID_TARGET=android-23 ANDROID_ABI=armeabi-v7a -git: - depth: 10000 +sudo: false -matrix: - fast_finish: true +licenses: + - 'android-sdk-preview-license-.+' + - 'android-sdk-preview-license' + - 'android-sdk-license-.+' + - 'android-sdk-license' + - 'google-gdk-license-.+' + - '.+' android: components: - - platform-tools - - tools - - # The BuildTools version used by your project - - build-tools-23.0.3 - - # The SDK version used to compile your project - - android-23 - - # Additional components - - extra-google-google_play_services - - extra-google-m2repository - - extra-android-m2repository - - addon-google_apis-google-23 - - licenses: - - android-sdk-license-.+ - -before_install: - - git submodule update --init --recursive - - chmod u+x gradlew - - android list sdk --no-ui --all --extended - - android list targets - -install: true + - tools + - build-tools-25.0.0 + - android-25 + - extra-android-m2repository + - extra-android-support script: - - ./gradlew -v - - ./gradlew clean build --stacktrace - -after_failure: true - -notifications: - email: false + - "./gradlew assembleRelease" \ No newline at end of file diff --git a/LICENSE b/LICENSE index ad410e1..261eeb9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Apache License + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -178,7 +178,7 @@ Apache License APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" + boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a @@ -186,7 +186,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright {yyyy} {name of copyright owner} + Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -198,4 +198,4 @@ Apache License 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. \ No newline at end of file + limitations under the License. diff --git a/README.md b/README.md index 7a0e3eb..9dee6ba 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -## Android工具类库 [![Build Status](https://travis-ci.org/kibotu/android-utils.svg?branch=master)](https://travis-ci.org/kibotu/android-utils) [![](https://jitpack.io/v/kibotu/android-utils.svg)](https://jitpack.io/#kibotu/android-utils) [![API](https://img.shields.io/badge/API-3%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=3) [![Gradle Version](https://img.shields.io/badge/gradle-2.13-green.svg)](https://docs.gradle.org/current/release-notes) [![Licence](https://img.shields.io/badge/licence-Apache-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0) +## Android工具类库 [![Build Status](https://travis-ci.org/jingle1267/android-utils.svg?branch=master)](https://travis-ci.org/jingle1267/android-utils) [ ![Download](https://api.bintray.com/packages/ihongqiqu/maven/android-utils/images/download.svg) ](https://bintray.com/ihongqiqu/maven/android-utils/_latestVersion)[![API](https://img.shields.io/badge/API-15%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=15) [![Gradle Version](https://img.shields.io/badge/gradle-3.3-green.svg)](https://docs.gradle.org/current/release-notes) [![Licence](https://img.shields.io/badge/licence-Apache-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0) + 囊括了一大部分Android应用开发过程当中常用的工具类。工具类来源整理自网络和自己编写。 @@ -50,6 +51,9 @@ |[BaseCrashHandler][40]|在 Application 中统一捕获异常,保存到文件中下次再打开时上传| |[RebootThreadExceptionHandler][41]|重启线程异常处理器,当发生未知异常时会提示异常信息并在一秒钟后重新启动应用。| |[StartAppReceiver][42]|重启应用广播接收器。| +|[ToastsUtils][49]|Toasts弹框。| +|[SharesUtils][50]|分享,调用手机自带的分享字符串或图片。| +|[DeviceUtils][51]|获取设备唯一标志| ### Framework 内置工具类 @@ -117,14 +121,20 @@ AOSP 源码中包含Util关键字的类,整理出的列表如下: ### 如何使用 (How to install) ```xml -repositories { - maven { - url "https://jitpack.io" +allprojects { + repositories { + // other repositories + maven { + url "http://dl.bintray.com/ihongqiqu/maven" + } } } - +``` + + +```xml dependencies { - compile 'com.github.kibotu:android-utils:1.0.0' + compile 'com.ihongqiqu:android-utils:1.0.2' } ``` @@ -165,7 +175,7 @@ dependencies { ## License - Copyright 2014-2016 Zhenguo Jin + Copyright 2014-2017 Zhenguo Jin Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -179,53 +189,55 @@ dependencies { See the License for the specific language governing permissions and limitations under the License. -[1]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/AnimationUtils.java -[2]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/AppUtils.java -[3]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/AssetDatabaseOpenHelper.java -[4]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/BitmapUtil.java -[5]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/CipherUtils.java -[6]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/Colors.java -[7]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/CommonUtil.java -[8]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/DataCleanManager.java -[9]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/DatabaseExportUtils.java -[10]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/DateUtils.java -[11]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/DeviceStatusUtils.java -[12]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/ -[13]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/DisplayUtils.java -[14]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/DoubleKeyValueMap.java -[15]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/DownloadManagerPro.java -[16]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/FileUtils.java -[17]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/HanziToPinyin.java -[18]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/ImsiUtil.java -[19]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/LocationUtils.java -[20]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/LogUtils.java -[21]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/NetUtil.java -[22]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/PackageUtils.java -[23]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/PhoneUtil.java -[24]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/PollingUtils.java -[25]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/PreferencesCookieStore.java -[26]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/RUtils.java -[27]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/RandomUtils.java -[28]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/RegUtils.java -[29]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/ResourceUtils.java -[30]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/SDCardUtils.java -[31]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/SettingUtils.java -[32]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/ShellUtils.java -[33]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/ShortCutUtils.java -[34]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/Singleton.java -[35]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/StringUtils.java -[36]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/ViewAnimationUtils.java -[37]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/ViewUtils.java -[38]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/WindowUtils.java - -[39]: https://github.com/jingle1267/android-utils/blob/master/src/com/ihongqiqu/app/BaseApplication.java -[40]: https://github.com/jingle1267/android-utils/blob/master/src/com/ihongqiqu/app/BaseCrashHandler.java -[41]: https://github.com/jingle1267/android-utils/blob/master/src/com/ihongqiqu/app/RebootThreadExceptionHandler.java -[42]: https://github.com/jingle1267/android-utils/blob/master/src/com/ihongqiqu/app/StartAppReceiver.java +[1]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/AnimationUtils.java +[2]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/AppUtils.java +[3]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/AssetDatabaseOpenHelper.java +[4]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/BitmapUtil.java +[5]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/CipherUtils.java +[6]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/Colors.java +[7]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/CommonUtil.java +[8]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/DataCleanManager.java +[9]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/DatabaseExportUtils.java +[10]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/DateUtils.java +[11]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/DeviceStatusUtils.java +[12]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/ +[13]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/DisplayUtils.java +[14]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/DoubleKeyValueMap.java +[15]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/DownloadManagerPro.java +[16]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/FileUtils.java +[17]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/HanziToPinyin.java +[18]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/ImsiUtil.java +[19]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/LocationUtils.java +[20]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/LogUtils.java +[21]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/NetUtil.java +[22]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/PackageUtils.java +[23]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/PhoneUtil.java +[24]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/PollingUtils.java +[25]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/PreferencesCookieStore.java +[26]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/RUtils.java +[27]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/RandomUtils.java +[28]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/RegUtils.java +[29]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/ResourceUtils.java +[30]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/SDCardUtils.java +[31]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/SettingUtils.java +[32]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/ShellUtils.java +[33]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/ShortCutUtils.java +[34]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/Singleton.java +[35]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/StringUtils.java +[36]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/ViewAnimationUtils.java +[37]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/ViewUtils.java +[38]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/WindowUtils.java + +[39]: https://github.com/jingle1267/android-utils/blob/master/app/src/main/java/com/ihongqiqu/app/BaseApplication.java +[40]: https://github.com/jingle1267/android-utils/blob/master/app/src/main/java/com/ihongqiqu/app/BaseCrashHandler.java +[41]: https://github.com/jingle1267/android-utils/blob/master/app/src/main/java/com/ihongqiqu/app/RebootThreadExceptionHandler.java +[42]: https://github.com/jingle1267/android-utils/blob/master/app/src/main/java/com/ihongqiqu/app/StartAppReceiver.java [43]: http://ihongqiqu.com/2014/10/16/android-log/ [44]: http://ihongqiqu.com -[45]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/ViewFinder.java -[46]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/ChannelUtil.java +[45]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/ViewFinder.java +[46]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/ChannelUtil.java [47]: http://ihongqiqu.com/2015/07/16/android-mutiple-channel-build/ -[48]: https://github.com/jingle1267/android-utils/tree/master/app/src/main/java/com/ihongqiqu/util/JSONUtils.java - +[48]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/JSONUtils.java +[49]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/ToastsUtils.java +[50]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/SharesUtils.java +[51]: https://github.com/jingle1267/android-utils/tree/master/util/src/main/java/com/ihongqiqu/util/DeviceUtils.java diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle index e3053df..b1efe9d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,22 +1,35 @@ -apply plugin: 'com.android.library' -android { - - useLibrary 'org.apache.http.legacy' - - compileSdkVersion 23 - buildToolsVersion "23.0.3" +apply plugin: 'com.android.application' +android { + compileSdkVersion 25 + buildToolsVersion "25.0.0" defaultConfig { - minSdkVersion 3 - targetSdkVersion 23 + applicationId "com.ihongqiqu.demo" + minSdkVersion 15 + targetSdkVersion 25 versionCode 1 versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } } lintOptions { abortOnError false } -} \ No newline at end of file +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + compile 'com.android.support:appcompat-v7:25.1.0' + //compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4' + compile 'com.ihongqiqu:android-utils:1.0.2' + // testCompile 'junit:junit:4.12' +// compile project(path: ':util') +} diff --git a/app/proguard-project.txt b/app/proguard-rules.pro similarity index 51% rename from app/proguard-project.txt rename to app/proguard-rules.pro index f2fe155..d96da59 100644 --- a/app/proguard-project.txt +++ b/app/proguard-rules.pro @@ -1,11 +1,8 @@ -# To enable ProGuard in your project, edit project.properties -# to define the proguard.config property as described in that file. -# # Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified -# in ${sdk.dir}/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the ProGuard -# include property in project.properties. +# in /Users/zhenguo/Documents/develop/android-sdk-macosx/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html @@ -18,3 +15,11 @@ #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/app/src/androidTest/java/com/ihongqiqu/demo/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/ihongqiqu/demo/ExampleInstrumentedTest.java new file mode 100644 index 0000000..cfc9c95 --- /dev/null +++ b/app/src/androidTest/java/com/ihongqiqu/demo/ExampleInstrumentedTest.java @@ -0,0 +1,27 @@ +package com.ihongqiqu.demo; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.ihongqiqu.demo", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 775d869..36d3ea7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ - + + @@ -10,16 +11,17 @@ + - @@ -38,4 +40,4 @@ - + \ No newline at end of file diff --git a/app/src/main/java/com/ihongqiqu/app/BaseCrashHandler.java b/app/src/main/java/com/ihongqiqu/app/BaseCrashHandler.java index 96959f8..19ca6a2 100644 --- a/app/src/main/java/com/ihongqiqu/app/BaseCrashHandler.java +++ b/app/src/main/java/com/ihongqiqu/app/BaseCrashHandler.java @@ -19,9 +19,7 @@ import android.os.Environment; import android.os.Looper; import android.widget.Toast; - import com.ihongqiqu.util.LogUtils; - import java.io.File; import java.io.FileOutputStream; import java.lang.Thread.UncaughtExceptionHandler; @@ -42,7 +40,7 @@ public class BaseCrashHandler implements UncaughtExceptionHandler { /** * 系统默认的UncaughtException处理类 */ - private Thread.UncaughtExceptionHandler mDefaultHandler; + private UncaughtExceptionHandler mDefaultHandler; /** * CrashHandler实例 diff --git a/app/src/main/java/com/ihongqiqu/demo/BitmapActivity.java b/app/src/main/java/com/ihongqiqu/demo/BitmapActivity.java index e730fd8..d29bddc 100644 --- a/app/src/main/java/com/ihongqiqu/demo/BitmapActivity.java +++ b/app/src/main/java/com/ihongqiqu/demo/BitmapActivity.java @@ -26,7 +26,6 @@ import com.ihongqiqu.util.BitmapUtil; import com.ihongqiqu.util.LogUtils; -import com.worthed.R; /** * Bitmap测试 @@ -54,22 +53,22 @@ protected void onCreate(Bundle savedInstanceState) { testProcess(); testCombine(); - blurOriginBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sea); + blurOriginBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.sea); toast = Toast.makeText(this, "Radius 必须在0到25范围", Toast.LENGTH_SHORT); } private void testProcess() { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), - R.drawable.beautiful); + R.mipmap.beautiful); imageViewOrigin.setImageBitmap(BitmapUtil.getRoundBitmap(bitmap)); bitmap.recycle(); } private void testCombine() { Bitmap bitmap = BitmapUtil.getRoundBitmap(BitmapFactory.decodeResource(getResources(), - R.drawable.beautiful)); + R.mipmap.beautiful)); Bitmap mask = BitmapFactory.decodeResource(getResources(), - R.drawable.sea); + R.mipmap.sea); Log.d(TAG, "foreground width - height : " + bitmap.getWidth() + " - " + bitmap.getHeight()); Log.d(TAG, "background width - height : " + mask.getWidth() + " - " + mask.getHeight()); @@ -84,7 +83,7 @@ public void radiusSmall(View view) { if (radius < 0) { radius = 0; toast.show(); - blurImageView.setImageResource(R.drawable.sea); + blurImageView.setImageResource(R.mipmap.sea); return; } long start = System.nanoTime(); diff --git a/app/src/main/java/com/ihongqiqu/demo/MainActivity.java b/app/src/main/java/com/ihongqiqu/demo/MainActivity.java index 8aacbec..f5f31de 100644 --- a/app/src/main/java/com/ihongqiqu/demo/MainActivity.java +++ b/app/src/main/java/com/ihongqiqu/demo/MainActivity.java @@ -12,7 +12,6 @@ import com.ihongqiqu.util.AppUtils; import com.ihongqiqu.util.NetUtil; import com.ihongqiqu.util.ViewFinder; -import com.worthed.R; import java.util.Map; @@ -45,8 +44,6 @@ protected void onCreate(Bundle savedInstanceState) { @Override public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.main, menu); return true; } @@ -80,4 +77,4 @@ void netTest() { } } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/ihongqiqu/demo/ViewFinderActivity.java b/app/src/main/java/com/ihongqiqu/demo/ViewFinderActivity.java index 54cb12d..eac69a0 100644 --- a/app/src/main/java/com/ihongqiqu/demo/ViewFinderActivity.java +++ b/app/src/main/java/com/ihongqiqu/demo/ViewFinderActivity.java @@ -7,7 +7,6 @@ import android.widget.TextView; import com.ihongqiqu.util.ViewFinder; -import com.worthed.R; /** * viewFinder测试 @@ -35,7 +34,7 @@ protected void onCreate(Bundle savedInstanceState) { title.setText("text"); bitmapBtn.setText("button"); - imageView.setImageResource(R.drawable.beautiful); + imageView.setImageResource(R.mipmap.beautiful); } } diff --git a/app/src/main/java/com/ihongqiqu/util/LocationUtils.java b/app/src/main/java/com/ihongqiqu/util/LocationUtils.java deleted file mode 100644 index 2abff33..0000000 --- a/app/src/main/java/com/ihongqiqu/util/LocationUtils.java +++ /dev/null @@ -1,210 +0,0 @@ -/** - * Copyright 2014 Zhenguo Jin (jingle1267@163.com) - *

- * 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.ihongqiqu.util; - -import android.text.TextUtils; -import android.util.Log; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.params.BasicHttpParams; -import org.apache.http.params.HttpConnectionParams; -import org.apache.http.params.HttpParams; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.InputStream; - -/** - * 根据经纬度查询地址信息和根据地址信息查询经纬度 - * - * @author jingle1267@163.com - */ -public final class LocationUtils { - - private final static boolean DEBUG = true; - private final static String TAG = "LocationUtils"; - - /** - * Don't let anyone instantiate this class. - */ - private LocationUtils() { - throw new Error("Do not need instantiate!"); - } - - /** - * 根据地址获取对应的经纬度 - * - * @param address 地址信息 - * @return 经纬度数组 - */ - public static double[] getLocationInfo(String address) { - if (TextUtils.isEmpty(address)) { - return null; - } - if (DEBUG) { - LogUtils.d(TAG, "address : " + address); - } - // 定义一个HttpClient,用于向指定地址发送请求 - HttpClient client = new DefaultHttpClient(); - // 向指定地址发送GET请求 - HttpGet httpGet = new HttpGet("http://maps.google." - + "com/maps/api/geocode/json?address=" + address - + "ka&sensor=false"); - StringBuilder sb = new StringBuilder(); - try { - // 获取服务器的响应 - HttpResponse response = client.execute(httpGet); - HttpEntity entity = response.getEntity(); - // 获取服务器响应的输入流 - InputStream stream = entity.getContent(); - int b; - // 循环读取服务器响应 - while ((b = stream.read()) != -1) { - sb.append((char) b); - } - // 将服务器返回的字符串转换为JSONObject对象 - JSONObject jsonObject = new JSONObject(sb.toString()); - // 从JSONObject对象中取出代表位置的location属性 - JSONObject location = jsonObject.getJSONArray("results") - .getJSONObject(0).getJSONObject("geometry") - .getJSONObject("location"); - // 获取经度信息 - double longitude = location.getDouble("lng"); - // 获取纬度信息 - double latitude = location.getDouble("lat"); - if (DEBUG) { - LogUtils.d(TAG, "location : (" + longitude + "," + latitude + ")"); - } - // 将经度、纬度信息组成double[]数组 - return new double[]{longitude, latitude}; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - /** - * 根据经纬度获取对应的地址 - * - * @param longitude 经度 - * @param latitude 纬度 - * @param lang 语言 如果位空则默认en - * @return 地址信息 - * @throws Exception - */ - public static String getAddress(double longitude, double latitude, - String lang) throws Exception { - if (DEBUG) { - LogUtils.d(TAG, "location : (" + longitude + "," + latitude + ")"); - } - if (lang == null) { - lang = "en"; - } - // 设定请求的超时时间 - HttpParams params = new BasicHttpParams(); - HttpConnectionParams.setConnectionTimeout(params, 10 * 1000); - HttpConnectionParams.setSoTimeout(params, 10 * 1000); - // 定义一个HttpClient,用于向指定地址发送请求 - HttpClient client = new DefaultHttpClient(params); - // 向指定地址发送GET请求 - HttpGet httpGet = new HttpGet("https://maps.googleapis.com/maps/api/" - + "geocode/json?latlng=" + latitude + "," + longitude - + "&sensor=false&language=" + lang); - if (DEBUG) { - LogUtils.d(TAG, - "URL : " + httpGet.getURI()); - } - StringBuilder sb = new StringBuilder(); - // 执行请求 - HttpResponse response = client.execute(httpGet); - HttpEntity entity = response.getEntity(); - // 获取服务器响应的字符串 - InputStream stream = entity.getContent(); - int b; - while ((b = stream.read()) != -1) { - sb.append((char) b); - } - // 把服务器相应的字符串转换为JSONObject - JSONObject jsonObj = new JSONObject(sb.toString()); - Log.d("ConvertUtil", "getAddress:" + sb.toString()); - // 解析出响应结果中的地址数据 - JSONObject addressObject = jsonObj.getJSONArray("results") - .getJSONObject(0); - String address = decodeLocationName(addressObject); - if (DEBUG) { - LogUtils.d(TAG, "address : " + address); - } - return address; - } - - /** - * 根据Google API 解析出国家和城市名称 - * https://developers.google.com/maps/documentation/geocoding - * - * @param jsonObject 地址Json对象 - * @return 返回国家和城市 - */ - public static String decodeLocationName(JSONObject jsonObject) { - JSONArray jsonArray; - String country = "", city = ""; - String TYPE_COUNTRY = "country"; - String TYPE_LOCALITY = "locality"; - String TYPE_POLITICAL = "political"; - boolean hasCountry = false; - try { - jsonArray = jsonObject.getJSONArray("address_components"); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject jo = jsonArray.getJSONObject(i); - JSONArray types = jo.getJSONArray("types"); - boolean hasLocality = false, hasPolicical = false; - - for (int j = 0; j < types.length(); j++) { - String type = types.getString(j); - if (type.equals(TYPE_COUNTRY) && !hasCountry) { - country = jo.getString("long_name"); - } else { - if (type.equals(TYPE_POLITICAL)) { - hasPolicical = true; - } - if (type.equals(TYPE_LOCALITY)) { - hasLocality = true; - } - if (hasPolicical && hasLocality) { - city = jo.getString("long_name"); - } - } - } - } - return city + "," + country; - } catch (JSONException e) { - e.printStackTrace(); - } - if (jsonObject.has("formatted_address")) { - try { - return jsonObject.getString("formatted_address"); - } catch (JSONException e) { - e.printStackTrace(); - } - } - return null; - } - -} diff --git a/app/src/main/java/com/ihongqiqu/util/PreferencesCookieStore.java b/app/src/main/java/com/ihongqiqu/util/PreferencesCookieStore.java deleted file mode 100644 index 321a1e1..0000000 --- a/app/src/main/java/com/ihongqiqu/util/PreferencesCookieStore.java +++ /dev/null @@ -1,245 +0,0 @@ -/** - * Copyright 2014 Zhenguo Jin - *

- * 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.ihongqiqu.util; - -import android.content.Context; -import android.content.SharedPreferences; -import android.text.TextUtils; - -import org.apache.http.client.CookieStore; -import org.apache.http.cookie.Cookie; -import org.apache.http.impl.cookie.BasicClientCookie; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; - -/** - * A CookieStore impl, it's save cookie to SharedPreferences. - * - * @author jingle1267@163.com - */ -public class PreferencesCookieStore implements CookieStore { - - private static final String COOKIE_PREFS = "CookiePrefsFile"; - private static final String COOKIE_NAME_STORE = "names"; - private static final String COOKIE_NAME_PREFIX = "cookie_"; - - private final ConcurrentHashMap cookies; - private final SharedPreferences cookiePrefs; - - /** - * Construct a persistent cookie store. - */ - public PreferencesCookieStore(Context context) { - cookiePrefs = context.getSharedPreferences(COOKIE_PREFS, - Context.MODE_PRIVATE); - cookies = new ConcurrentHashMap(); - - // Load any previously stored cookies into the store - String storedCookieNames = cookiePrefs.getString(COOKIE_NAME_STORE, - null); - if (storedCookieNames != null) { - String[] cookieNames = TextUtils.split(storedCookieNames, ","); - for (String name : cookieNames) { - String encodedCookie = cookiePrefs.getString(COOKIE_NAME_PREFIX - + name, null); - if (encodedCookie != null) { - Cookie decodedCookie = decodeCookie(encodedCookie); - if (decodedCookie != null) { - cookies.put(name, decodedCookie); - } - } - } - - // Clear out expired cookies - clearExpired(new Date()); - } - } - - @Override - public void addCookie(Cookie cookie) { - String name = cookie.getName(); - - // Save cookie into local store, or remove if expired - if (!cookie.isExpired(new Date())) { - cookies.put(name, cookie); - } else { - cookies.remove(name); - } - - // Save cookie into persistent store - SharedPreferences.Editor editor = cookiePrefs.edit(); - editor.putString(COOKIE_NAME_STORE, - TextUtils.join(",", cookies.keySet())); - editor.putString(COOKIE_NAME_PREFIX + name, - encodeCookie(new SerializableCookie(cookie))); - editor.commit(); - } - - @Override - public void clear() { - // Clear cookies from persistent store - SharedPreferences.Editor editor = cookiePrefs.edit(); - for (String name : cookies.keySet()) { - editor.remove(COOKIE_NAME_PREFIX + name); - } - editor.remove(COOKIE_NAME_STORE); - editor.commit(); - - // Clear cookies from local store - cookies.clear(); - } - - @Override - public boolean clearExpired(Date date) { - boolean clearedAny = false; - SharedPreferences.Editor editor = cookiePrefs.edit(); - - for (ConcurrentHashMap.Entry entry : cookies.entrySet()) { - String name = entry.getKey(); - Cookie cookie = entry.getValue(); - if (cookie.getExpiryDate() == null || cookie.isExpired(date)) { - // Remove the cookie by name - cookies.remove(name); - - // Clear cookies from persistent store - editor.remove(COOKIE_NAME_PREFIX + name); - - // We've cleared at least one - clearedAny = true; - } - } - - // Update names in persistent store - if (clearedAny) { - editor.putString(COOKIE_NAME_STORE, - TextUtils.join(",", cookies.keySet())); - } - editor.commit(); - - return clearedAny; - } - - @Override - public List getCookies() { - return new ArrayList(cookies.values()); - } - - public Cookie getCookie(String name) { - return cookies.get(name); - } - - protected String encodeCookie(SerializableCookie cookie) { - ByteArrayOutputStream os = new ByteArrayOutputStream(); - try { - ObjectOutputStream outputStream = new ObjectOutputStream(os); - outputStream.writeObject(cookie); - } catch (Throwable e) { - return null; - } - - return byteArrayToHexString(os.toByteArray()); - } - - protected Cookie decodeCookie(String cookieStr) { - byte[] bytes = hexStringToByteArray(cookieStr); - ByteArrayInputStream is = new ByteArrayInputStream(bytes); - Cookie cookie = null; - try { - ObjectInputStream ois = new ObjectInputStream(is); - cookie = ((SerializableCookie) ois.readObject()).getCookie(); - } catch (Throwable e) { - e.printStackTrace(); - } - - return cookie; - } - - // Using some super basic byte array <-> hex conversions so we don't have - // to rely on any large Base64 libraries. Can be overridden if you like! - protected String byteArrayToHexString(byte[] b) { - StringBuffer sb = new StringBuffer(b.length * 2); - for (byte element : b) { - int v = element & 0xff; - if (v < 16) { - sb.append('0'); - } - sb.append(Integer.toHexString(v)); - } - return sb.toString().toUpperCase(); - } - - protected byte[] hexStringToByteArray(String s) { - int len = s.length(); - byte[] data = new byte[len / 2]; - for (int i = 0; i < len; i += 2) { - data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character - .digit(s.charAt(i + 1), 16)); - } - return data; - } - - public class SerializableCookie implements Serializable { - private static final long serialVersionUID = 6374381828722046732L; - - private transient final Cookie cookie; - private transient BasicClientCookie clientCookie; - - public SerializableCookie(Cookie cookie) { - this.cookie = cookie; - } - - public Cookie getCookie() { - Cookie bestCookie = cookie; - if (clientCookie != null) { - bestCookie = clientCookie; - } - return bestCookie; - } - - private void writeObject(ObjectOutputStream out) throws IOException { - out.writeObject(cookie.getName()); - out.writeObject(cookie.getValue()); - out.writeObject(cookie.getComment()); - out.writeObject(cookie.getDomain()); - out.writeObject(cookie.getExpiryDate()); - out.writeObject(cookie.getPath()); - out.writeInt(cookie.getVersion()); - out.writeBoolean(cookie.isSecure()); - } - - private void readObject(ObjectInputStream in) throws IOException, - ClassNotFoundException { - String name = (String) in.readObject(); - String value = (String) in.readObject(); - clientCookie = new BasicClientCookie(name, value); - clientCookie.setComment((String) in.readObject()); - clientCookie.setDomain((String) in.readObject()); - clientCookie.setExpiryDate((Date) in.readObject()); - clientCookie.setPath((String) in.readObject()); - clientCookie.setVersion(in.readInt()); - clientCookie.setSecure(in.readBoolean()); - } - } -} \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/ic_launcher.png b/app/src/main/res/drawable-hdpi/ic_launcher.png deleted file mode 100644 index 6d59cc4..0000000 Binary files a/app/src/main/res/drawable-hdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_launcher.png b/app/src/main/res/drawable-mdpi/ic_launcher.png deleted file mode 100644 index 74c927b..0000000 Binary files a/app/src/main/res/drawable-mdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_launcher.png b/app/src/main/res/drawable-xhdpi/ic_launcher.png deleted file mode 100644 index 8a5c013..0000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_launcher.png b/app/src/main/res/drawable-xxhdpi/ic_launcher.png deleted file mode 100644 index 9b76c99..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/app/src/main/res/layout/activity_bitmap.xml b/app/src/main/res/layout/activity_bitmap.xml index 0e27688..387ede3 100644 --- a/app/src/main/res/layout/activity_bitmap.xml +++ b/app/src/main/res/layout/activity_bitmap.xml @@ -5,7 +5,7 @@ @@ -14,10 +14,10 @@ android:id="@+id/textView1" android:layout_margin="15dp" android:textSize="20sp" - android:gravity="left" + android:gravity="start" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="圆形图:" /> + android:text="@string/str_circle_title" /> + android:text="@string/str_combine_img" /> @@ -64,7 +64,7 @@