================================================
FILE: .idea/vcs.xml
================================================
================================================
FILE: README.md
================================================
这是2015年的写的项目,已经不再维护,功能可能已经失效,后期有时间会用kotlin重写一遍,无参考价值
# pedometer
this is a pedometer demo,I will rewrite with kotlin
================================================
FILE: app/.gitignore
================================================
/build
================================================
FILE: app/build.gradle
================================================
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.knight.pedometer"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-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
================================================
FILE: app/src/androidTest/java/com/knight/pedometer/ExampleInstrumentedTest.kt
================================================
package com.knight.pedometer
import android.support.test.InstrumentationRegistry
import android.support.test.runner.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getTargetContext()
assertEquals("com.knight.pedometer", appContext.packageName)
}
}
================================================
FILE: app/src/main/AndroidManifest.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_launcher_background.xml
================================================
================================================
FILE: app/src/main/res/drawable-v24/ic_launcher_foreground.xml
================================================
================================================
FILE: app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
================================================
FILE: app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
================================================
================================================
FILE: app/src/main/res/values/colors.xml
================================================
#008577#00574B#D81B60
================================================
FILE: app/src/main/res/values/strings.xml
================================================
Pedometer
================================================
FILE: app/src/main/res/values/styles.xml
================================================
================================================
FILE: app/src/test/java/com/knight/pedometer/ExampleUnitTest.kt
================================================
package com.knight.pedometer
import org.junit.Test
import org.junit.Assert.*
/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}
================================================
FILE: build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.11'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0-rc03'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
#Mon Dec 31 12:40:30 CST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
================================================
FILE: gradle.properties
================================================
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
================================================
FILE: gradlew
================================================
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# 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
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# 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
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
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" -a "$nonstop" = "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
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"
================================================
FILE: gradlew.bat
================================================
@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
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@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=
@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 Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_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=%*
: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
================================================
FILE: pedometer/AndroidManifest.xml
================================================
================================================
FILE: pedometer/README.md
================================================
# 前言
之前一直没有写简介,比较简陋,现在简单介绍一些这个项目,这个计步器的主要实现是基于手机的加速度感应器实现的,不是根据GPS实现的。
# 记步
经过两个月的努力,终于把计步器APP初步完成,已经可以正常使用,话不多说,首先上几张APP正常运行的图片:
首先这是计步器(Pedometer)主页面——记步页面

点击中间部分,可以更换显示的数据,分别有步数,消耗的卡路里以及当前的天气情况。下面是分别几个界面:


还可以分享到相应设社交平台上

大家可以清晰的看到,图中的圆圈是一个ProgressBar(进度条),随着圈内的数值的增加,ProgressBar也在动态的增加。
首先进入页面的是显示步数,点击圆圈会显示消耗的卡路里,再次点击圆圈会显示当天的天气情况(现在仅仅是北京的天气),最后点击左上方的图标,是一个分享的按钮。
这个重新定义的ProgressBar当初画了好几天,才做成的。
# 历史
点击左侧的历史页面,会进入近期步数的记录页面,这里对数据进行本地化存储。


大家可以看到这个是历史页面,也就是记录每一天的所走的步数,点击左上角的日历的图标,会出现一个Dialog来显示日期,选择日期。
这个页面的步数,使用了动画,数字动态的从0到当天的步数,在2秒内完成。
# 分析
正如大家所见,这个页面是一个条形统计的页面,记录最近一周,每天的步数,更加直观的看到7天内的步数。此页面底部的星期,是可以动态变化的,开头总是当天的星期。这个柱状图可以动态的,当打开这个页面后,柱状图从底部上升到它所对应的数值(在1秒内完成),而且点击各个柱状图都能显示这个柱状图所代表的步数。


# 个人信息设置
这个页面主要是设置一些个人信息,例如头像,姓名,年龄等基本情况,也可以对计步器的灵敏度进行调节。

如图所示,大家应该都很清楚了,但是还是容小弟介绍一下,这里我把图片进行处理,设置成圆形的(更加美观)。点击头像可以选择:拍照或者相册。
# pk
这是最后一个页面——PK页面,这个页面由于考虑到有服务器和数据的交互,也是特别难实现。由于这个项目是我一个人独自完成,其他两个人不太会,所以后台的服务器我就使用了第三方的API(Bmob)。
第一张图是多人的PK,依次排名显示,单击每个人头像就会显示此人的详细信息(可以删除此人,图2所示)。向左滑动页面,进入分组PK页面,这里所有的人都分好组,然后点击小组下的人,可以进入图4的页面,此页面主要就是对这个成员进行分组调整。回到PK页面,点击右上角的小人标志,就可以连接服务器,添加好友。





# 总结
这个项目,可以作为入门的新手练手。因为很久之前的写的,本地的操作都可以正常运行,但是网络会出现一些问题,使用的第三方的后台。
================================================
FILE: pedometer/assets/ShareSDK.xml
================================================
================================================
FILE: pedometer/build.gradle
================================================
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
multiDexEnabled true
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
}
================================================
FILE: pedometer/gradle/wrapper/gradle-wrapper.properties
================================================
#Wed Apr 10 15:27:10 PDT 2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-1.6-bin.zip
================================================
FILE: pedometer/local.properties
================================================
## 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.
# For customization when using a Version Control System, please read the
# header note.
#Mon Dec 31 12:38:02 CST 2018
sdk.dir=/Users/knight/Library/Android/sdk
================================================
FILE: pedometer/proguard-project.txt
================================================
# 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.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
================================================
FILE: pedometer/res/anim/animation_main.xml
================================================
================================================
FILE: pedometer/res/anim/slide_bottom_in.xml
================================================
================================================
FILE: pedometer/res/anim/slide_left_in.xml
================================================
================================================
FILE: pedometer/res/anim/slide_left_out.xml
================================================
================================================
FILE: pedometer/res/anim/slide_right_in.xml
================================================
================================================
FILE: pedometer/res/anim/slide_right_out.xml
================================================
================================================
FILE: pedometer/res/anim/slide_top_out.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/barcolor.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/dlbtn_selector.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_analysis.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_back.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_button.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_calendar.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_color.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_color_set.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_female.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_friend.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_history.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_image.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_male.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_pedometer.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_pk.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_set.xml
================================================
================================================
FILE: pedometer/res/drawable-hdpi/selector_tab.xml
================================================
================================================
FILE: pedometer/res/drawable-ldpi/headpic_bg_frame.xml
================================================
================================================
FILE: pedometer/res/drawable-xhdpi/common_title_text_background.xml
================================================
================================================
FILE: pedometer/res/drawable-xhdpi/dialog_backgroud.xml
================================================
================================================
FILE: pedometer/res/drawable-xhdpi/dialog_left_btn_background.xml
================================================
================================================
FILE: pedometer/res/drawable-xhdpi/dialog_right_btn_background.xml
================================================
================================================
FILE: pedometer/res/drawable-xhdpi/ssdk_oks_shake_to_share_back.xml
================================================
================================================
FILE: pedometer/res/layout/activity_set_headpic.xml
================================================
================================================
FILE: pedometer/res/layout/analyze.xml
================================================
================================================
FILE: pedometer/res/layout/common_title.xml
================================================
================================================
FILE: pedometer/res/layout/dialog_layout.xml
================================================
================================================
FILE: pedometer/res/layout/group_list.xml
================================================
================================================
FILE: pedometer/res/layout/group_member_list.xml
================================================
================================================
FILE: pedometer/res/layout/header_layout.xml
================================================
================================================
FILE: pedometer/res/layout/history.xml
================================================
================================================
FILE: pedometer/res/layout/member_add.xml
================================================
================================================
FILE: pedometer/res/layout/member_add_list.xml
================================================
================================================
FILE: pedometer/res/layout/member_list.xml
================================================
================================================
FILE: pedometer/res/layout/membet_set.xml
================================================
================================================
FILE: pedometer/res/layout/page_mian.xml
================================================
================================================
FILE: pedometer/res/layout/pedometer.xml
================================================
================================================
FILE: pedometer/res/layout/pk.xml
================================================
================================================
FILE: pedometer/res/layout/pk_1.xml
================================================
================================================
FILE: pedometer/res/layout/pk_2.xml
================================================
================================================
FILE: pedometer/res/layout/set.xml
================================================
================================================
FILE: pedometer/res/layout/userinfo.xml
================================================
================================================
FILE: pedometer/res/layout/welcome.xml
================================================
================================================
FILE: pedometer/res/values/colors.xml
================================================
#6DCAEC#ff39393b#00000000#ff2c2c2e#fff5f5f5#00000000#80000000#03a9f4#01567c#858e99#f98425#858e99#ffffff#000000#3f3f3f#efeff4#3170cf#c3dee7#efefe3#cBcBcd#fafafa#66ffffff#33ffffff#b2ffffff#ccffffff#b2000000#e5000000#66000000#66a7cef2#9950c6a2#b2f97525#99103a5d#33ff9710#b2d1d4d8#ffdd3c#ffc000#fda72c#ff4200#3f3f3f#4f4f4f#adadad#80adadad#fcf1df#d7d4cf#646464#2d2d2d#efeff4#acb2b9#70858e99#d1d4d8#f3452a#da7420#f94a1e#eb4a2a#f98425#f3a033#f7d87a#f9f9f9#a4cbf2#b8b8b8#c5c5c5#bbbbbb#e7e7e7#7e7e7e#e7be63#55c1e7#03a9f4#1690ce#5e5e5e#696868#a7a8a9#e5e5e5#858e99#eefaff#999999#84f3f5#fffdf9#818181#858585#3393e4#a5c5d3#a4a4a4#ff761a#808081#cfb5a7#6fd7f9#a8a7a7#5d6265#babbbc#e1e1e1#b09d76#9003a9f4#cc000000#20000000#8dffffff#cd000000#66000000#b4b4b4#ff7b11#a2a2a2#ffb207#a15100#ff0000#fafafa#ff623d#ea5920#6a6a6a#f7f7f7#c4c4c4#C8C6C7#979797#898989#ff9f15
================================================
FILE: pedometer/res/values/dimens.xml
================================================
40dp12dp13dp15dp16dp19dp21dp23dp27dp11dp43dp5dp8dp40dp10dp20dp4dp38dp240dp18dp25dp51dp7dp14dp94dp74dp2dp130dp235dp0dp1dp2dp3dp4dp5dp6dp7dp8dp9dp10dp11dp12dp13dp14dp15dp16dp17dp18dp19dp20dp21dp22dp23dp24dp25dp26dp27dp28dp29dp30dp31dp32dp33dp34dp35dp36dp37dp38dp39dp40dp41dp42dp43dp44dp45dp46dp47dp48dp49dp50dp51dp52dp53dp54dp55dp56dp57dp58dp59dp60dp61dp62dp63dp64dp65dp66dp67dp68dp69dp70dp71dp72dp73dp74dp75dp76dp77dp78dp79dp80dp81dp82dp83dp84dp85dp86dp87dp88dp89dp90dp91dp92dp93dp94dp95dp96dp97dp98dp99dp100dp101dp102dp103dp104dp105dp106dp107dp108dp109dp110dp111dp112dp113dp114dp115dp116dp117dp118dp119dp120dp121dp122dp123dp124dp125dp126dp127dp128dp129dp130dp131dp132dp133dp134dp135dp136dp137dp138dp139dp140dp141dp142dp143dp144dp145dp146dp147dp148dp149dp150dp151dp152dp153dp154dp155dp156dp157dp158dp159dp160dp161dp162dp163dp164dp165dp166dp167dp168dp169dp170dp171dp172dp173dp174dp175dp176dp177dp178dp179dp180dp181dp182dp183dp184dp185dp186dp187dp188dp189dp190dp191dp192dp193dp194dp195dp196dp197dp198dp199dp200dp201dp202dp203dp204dp205dp206dp207dp208dp209dp210dp211dp212dp213dp214dp215dp216dp217dp218dp219dp220dp221dp222dp223dp224dp225dp226dp227dp228dp229dp230dp231dp232dp233dp234dp235dp236dp237dp238dp239dp240dp241dp242dp243dp244dp245dp246dp247dp248dp249dp250dp251dp252dp253dp254dp255dp256dp257dp258dp259dp260dp261dp262dp263dp264dp265dp266dp267dp268dp269dp270dp271dp272dp273dp274dp275dp276dp277dp278dp279dp280dp281dp282dp283dp284dp285dp286dp287dp288dp289dp290dp291dp292dp293dp294dp295dp296dp297dp298dp299dp300dp301dp302dp303dp304dp305dp306dp307dp308dp309dp310dp311dp312dp313dp314dp315dp316dp317dp318dp319dp320dp321dp322dp323dp324dp325dp326dp327dp328dp329dp330dp331dp332dp333dp334dp335dp336dp337dp338dp339dp340dp341dp342dp343dp344dp345dp346dp347dp348dp349dp350dp351dp352dp353dp354dp355dp356dp357dp358dp359dp360dp361dp362dp363dp364dp365dp366dp367dp368dp369dp370dp371dp372dp373dp374dp375dp376dp377dp378dp379dp380dp381dp382dp383dp384dp385dp386dp387dp388dp389dp390dp391dp392dp393dp394dp395dp396dp397dp398dp399dp400dp401dp402dp403dp404dp405dp406dp407dp408dp409dp410dp411dp412dp413dp414dp415dp416dp417dp418dp419dp420dp421dp422dp423dp424dp425dp426dp427dp428dp429dp430dp431dp432dp433dp434dp435dp436dp437dp438dp439dp440dp441dp442dp443dp444dp445dp446dp447dp448dp449dp450dp451dp452dp453dp454dp455dp456dp457dp458dp459dp460dp461dp462dp463dp464dp465dp466dp467dp468dp469dp470dp471dp472dp473dp474dp475dp476dp477dp478dp479dp480dp481dp482dp483dp484dp485dp486dp487dp488dp489dp490dp491dp492dp493dp494dp495dp496dp497dp498dp499dp500dp501dp502dp503dp504dp505dp506dp507dp508dp509dp510dp511dp512dp513dp514dp515dp516dp517dp518dp519dp520dp521dp522dp523dp524dp525dp526dp527dp528dp529dp530dp531dp532dp533dp534dp535dp536dp537dp538dp539dp540dp541dp542dp543dp544dp545dp546dp547dp548dp549dp550dp551dp552dp553dp554dp555dp556dp557dp558dp559dp560dp561dp562dp563dp564dp565dp566dp567dp568dp569dp570dp571dp572dp573dp574dp575dp576dp577dp578dp579dp580dp581dp582dp583dp584dp585dp586dp587dp588dp589dp590dp591dp592dp593dp594dp595dp596dp597dp598dp599dp600dp
================================================
FILE: pedometer/res/values/instapaper_strings.xml
================================================
%s
]]>
================================================
FILE: pedometer/res/values/oks_strings.xml
================================================
取消完成分享操作正在后台进行…分享到分享图文分享分享成功分享已取消请选择一个目标平台%s的朋友分享失败下拉刷新松开刷新刷新中…摇晃手机!请选择一个朋友
================================================
FILE: pedometer/res/values/ssdk_strings.xml
================================================
应用授权http://www.mob.com分享图片目前您的微信版本过低或未安装微信,需要安装微信才能使用Google+ 版本过低或者没有安装,需要升级或安装Google+才能使用!QQ 版本过低或者没有安装,需要升级或安装QQ才能使用!Pinterest版本过低或者没有安装,需要升级或安装Pinterest才能使用!Instagram版本过低或者没有安装,需要升级或安装Instagram才能使用!目前您的易信版本过低或未安装,需要安装易信才能使用目前您的Line版本过低或未安装,需要安装Line才能使用目前您的KakaoTalk版本过低或未安装,需要安装KakaoTalk才能使用目前您的KakaoStory版本过低或未安装,需要安装KakaoStory才能使用目前您的WhatsApp版本过低或未安装,需要安装WhatsApp才能使用新浪微博腾讯微博QQ空间微信好友微信朋友圈微信收藏FacebookTwitter人人网开心网邮件信息搜狐微博搜狐随身看网易微博豆瓣有道云笔记印象笔记领英Google+FourSquareQQPinterestFlickrTumblrDropboxVKInstagram易信易信朋友圈明道KakaoTalkKakaoStoryLine蓝牙WhatsAppPocketInstapaper邮箱密码登录登录中…Email或密码不正确Facebook Messenger分享到QQ空间分享到QQ网页分享分享到明道来自%s的分享请改用“登录”按钮
================================================
FILE: pedometer/res/values/strings.xml
================================================
PedometerSettingsHello world!历史分析pk设置记步"周一 "周二周三周四周五周六周日运动今天0步数已完成:0%目标:10000平均步数总步数更多接口授权微信易信自定义接口自定义分享内容关注新浪微博关注腾讯微博摇一摇截屏分享关注官方网站Demo版本 Ver. %s请选择微信客户端完成操作获取%s的AccessToken获取%s授权用户资料获取%s其他用户资料分享到%s分享全部(有分享界面)分享全部(无界面,直接分享)获取AccessToken获取授权用户资料获取其他用户资料获取新浪微博关注列表获取腾讯微博关注列表搜索用户获取通知列表获取推荐话题上传照片到用户的相册获取微博主页列表发表日志到QQ空间获取我的粉丝列表获取主页列表获取可能认识的人获取好友列表获取笔记本列表获取搜狐随身看书签列表获取Tumblr用户Post列表尚未授权ShareSDK for Android不仅集成简单、支持如QQ好友、微信、新浪微博、腾讯微博等所有社交平台,而且还有强大的统计分析管理后台,实时了解用户、信息流、回流率、传播效应等数据,详情见官网http://mob.com @Mob移动开发者服务平台ShareSDK不仅集成简单、支持如微信、新浪微博、腾讯微博等平台,还有强大的统计分析管理后台,实时了解用户、信息流、回流率、传播效应等数据,详情见官网http://mob.com @Mob移动开发者服务平台ShareSDK是一个神奇的SDK文字分享图片分享(本地图片)图片分享(Bitmap对象)图片分享(网络图片)表情分享(本地图片)表情分享(网络图片)表情分享(Bitmap对象)音乐分享视频分享网页分享(本地图片)网页分享(Bitmap对象)网页分享(网络图片)应用分享(携带文件)应用分享(携带脚本)文件分享微信好友微信朋友圈微信收藏微信分享Demo标题
QQ互联
轻松分享,快乐生活。详情请看。微信客户端未安装或版本太旧微信客户端不支持第三方应用执行关注功能易信好友易信朋友圈易信收藏易信分享Demo标题恭喜你得到%s个金币!购买成功购买失败来往自定义QQ空间分享风格请选择分享方式QQ/QZone登录发微博腾讯微博登录发微博性别出生年份体重身高灵敏度步伐长度198155kgcm一级男女1700k分组PK多人PK步数排名名步2步数第姓名请输入姓名填写您的姓名头像平均步数:组成员数:第组姓名:步数:健康生活每一天移动到组第添加好友
================================================
FILE: pedometer/res/values/styles.xml
================================================
================================================
FILE: pedometer/res/values-sw600dp/dimens.xml
================================================
================================================
FILE: pedometer/res/values-sw720dp-land/dimens.xml
================================================
128dp
================================================
FILE: pedometer/res/values-v11/styles.xml
================================================
================================================
FILE: pedometer/res/values-v14/styles.xml
================================================
================================================
FILE: pedometer/src/com/bit/pedometer/common/utils/BmobUtil.java
================================================
package com.bit.pedometer.common.utils;
import java.util.List;
import android.content.Context;
import cn.bmob.v3.Bmob;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.listener.FindListener;
import cn.bmob.v3.listener.SaveListener;
import cn.bmob.v3.listener.UpdateListener;
import com.bit.pedometer.data.bean.User;
public class BmobUtil {
public static void saveBmob(final User user,
final BmobSaveAndUpdataListener listener, final Context context) {
new Thread(new Runnable() {
public void run() {
Bmob.initialize(context, "c153449e638703134b8fe75c52210bc7");
if (user.getObjectId().equals("1")) {
user.setObjectId(null);
// Toast.makeText(context, "我正在存储", Toast.LENGTH_LONG).show();
user.save(context, new SaveListener() {
@Override
public void onSuccess() {
listener.onFinishedSave(user);
}
@Override
public void onFailure(int arg0, String arg1) {
listener.onFailure(arg1);
}
});
} else {
// Toast.makeText(context, "我在更新", Toast.LENGTH_LONG).show();
user.update(context,new UpdateListener() {
public void onSuccess() {
listener.onFinishedupdata(user);
}
public void onFailure(int arg0, String arg1) {
listener.onFailure(arg1);
}
});
}
}
}).start();
}
public static void queryBmob(final BmobQueryListener listener,
final Context context) {
new Thread(new Runnable() {
public void run() {
Bmob.initialize(context, "c153449e638703134b8fe75c52210bc7");
BmobQuery query = new BmobQuery();
query.findObjects(context, new FindListener() {
@Override
public void onSuccess(List user_list) {
listener.onQuerySuccess(user_list);
}
@Override
public void onError(int arg0, String arg1) {
listener.onFailure(arg1);
}
});
}
}).start();
}
public interface BmobSaveAndUpdataListener{
void onFinishedSave(User user);
void onFailure(String str);
void onFinishedupdata(User user);
}
public interface BmobQueryListener{
void onQuerySuccess(List users);
void onFailure(String str);
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/common/utils/HttpCallbackListener.java
================================================
package com.bit.pedometer.common.utils;
public interface HttpCallbackListener {
void onFinish(String response);
void onError(Exception e);
}
================================================
FILE: pedometer/src/com/bit/pedometer/common/utils/HttpUtil.java
================================================
package com.bit.pedometer.common.utils;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpUtil {
/**
* 网络请求属于耗时操作,所以必须开启另外一个线程,如果不这样,就会导致主线程被阻塞
* 这里为什么要使用java的回调机制,因为我们这里开启了一个线程,来发送HTTP请求
* ,因为HTTP请求属于耗时操作,这就导致sendHttpRequest 方法还没来得及相应时候就执行结束了,当然也就无法返回显影的数据了
* @param address
* @param listener
*/
public static void sendHttpRequest(final String address,
final HttpCallbackListener listener) {
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
try {
/* 这是另一种实现的方法
* HttpClient httpClient = new DefaultHttpClient(); HttpGet
* httpGet = new HttpGet(address); HttpResponse httpResponse =
* httpClient.execute(httpGet); String response = null; if
* (httpResponse.getStatusLine().getStatusCode() == 200) {
* HttpEntity entity = httpResponse.getEntity(); response =
* EntityUtils.toString(entity);
*
* }else {
*
* } Gson gson = new Gson(); List weathers =
* gson.fromJson(response, new TypeToken>() {
* }.getType()); for (Weather weather1 : weathers) {
* weather.setPtime(weather1.getPtime());
* weather.setTemp1(weather1.getTemp1());
* weather.setTemp2(weather1.getTemp2());
* weather.setWeather(weather1.getWeather()); }
*/
URL url = new URL(address);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
if (listener != null) {
// 回调onFinish()方法
listener.onFinish(response.toString());
}
} catch (Exception e) {
if (listener != null) {
// 回调onError()方法
listener.onError(e);
}
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
}).start();
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/data/bean/Group.java
================================================
package com.bit.pedometer.data.bean;
public class Group {
private int ID;
private int total_number;
private int member_number;
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public int getTotal_number() {
return total_number;
}
public void setTotal_number(int total_number) {
this.total_number = total_number;
}
public int getMember_number() {
return member_number;
}
public void setMember_number(int member_number) {
this.member_number = member_number;
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/data/bean/Step.java
================================================
package com.bit.pedometer.data.bean;
public class Step {
private int id;
private int number;
private String date;
private String userId;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/data/bean/User.java
================================================
package com.bit.pedometer.data.bean;
import java.io.Serializable;
import java.sql.Blob;
import cn.bmob.v3.BmobObject;
public class User extends BmobObject implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
private String sex;
private int weight;
private int sensitivity;
private int step_length;
private int groupId;
private byte[] picture;
private int today_step;
public int getToday_step() {
return today_step;
}
public void setToday_step(int today_step) {
this.today_step = today_step;
}
public byte[] getPicture() {
return picture;
}
public void setPicture(byte[] picture) {
this.picture = picture;
}
public int getGroupId() {
return groupId;
}
public void setGroupId(int groupId) {
this.groupId = groupId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public int getSensitivity() {
return sensitivity;
}
public void setSensitivity(int sensitivity) {
this.sensitivity = sensitivity;
}
public int getStep_length() {
return step_length;
}
public void setStep_length(int step_length) {
this.step_length = step_length;
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/data/bean/Weather.java
================================================
package com.bit.pedometer.data.bean;
import java.io.Serializable;
public class Weather{
/**
*
*/
private static final long serialVersionUID = 1L;
private int cityid;
private String city;
private String temp1;
private String temp2;
private String weather;
private String ptime;
public int getCityid() {
return cityid;
}
public void setCityid(int cityid) {
this.cityid = cityid;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getTemp1() {
return temp1;
}
public void setTemp1(String temp1) {
this.temp1 = temp1;
}
public String getTemp2() {
return temp2;
}
public void setTemp2(String temp2) {
this.temp2 = temp2;
}
public String getWeather() {
return weather;
}
public void setWeather(String weather) {
this.weather = weather;
}
public String getPtime() {
return ptime;
}
public void setPtime(String ptime) {
this.ptime = ptime;
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/data/db/PedometerDB.java
================================================
package com.bit.pedometer.data.db;
import java.util.ArrayList;
import java.util.List;
import com.bit.pedometer.data.bean.Group;
import com.bit.pedometer.data.bean.Step;
import com.bit.pedometer.data.bean.User;
import com.bit.pedometer.data.bean.Weather;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
/**
* 对数据库pedometer里的各个表进行增删改查
*
* @author 李垭超
*
*/
public class PedometerDB {
public static final String DB_NAME = "pedometer.db";// 数据库名称
public static final int VERSION = 1;// 数据版本
private static PedometerDB pedometerDB;
private SQLiteDatabase db;
/**
* 将PedometerDB的构造方法设置为私有方法,在别的类里不能通过new来创建这个对象
*
* @param context
*/
private PedometerDB(Context context) {
PedometerOpenHelper pHelper = new PedometerOpenHelper(context, DB_NAME,
null, VERSION);
db = pHelper.getWritableDatabase();
}
/**
* 使用单例模式创建数据库
*/
public synchronized static PedometerDB getInstance(Context context) {
if (pedometerDB == null) {
pedometerDB = new PedometerDB(context);
}
return pedometerDB;
}
/**
* 增加user表里的数据
*
* @param user
*/
public void saveUser(User user) {
if (user != null) {
ContentValues values = new ContentValues();
values.put("objectId", user.getObjectId());
values.put("name", user.getName());
values.put("sex", user.getSex());
values.put("picture", user.getPicture());
values.put("weight", user.getWeight());
values.put("sensitivity", user.getSensitivity());
values.put("step_length", user.getStep_length());
values.put("groupId", user.getGroupId());
values.put("today_step", user.getToday_step());
db.insert("user", null, values);
}
}
/**
* 根据user的id删除user表里的数据
*
* @param user
*/
public void deleteUser(User user) {
if (user != null) {
db.delete("user", "objectId = ?",
new String[] { user.getObjectId() });
}
}
/**
* 升级user表里的数据
*
* @param user
*/
public void updateUser(User user) {
if (user != null) {
ContentValues values = new ContentValues();
values.put("objectId", user.getObjectId());
values.put("name", user.getName());
values.put("sex", user.getSex());
values.put("picture", user.getPicture());
values.put("weight", user.getWeight());
values.put("sensitivity", user.getSensitivity());
values.put("step_length", user.getStep_length());
values.put("groupId", user.getGroupId());
values.put("today_step", user.getToday_step());
db.update("user", values, "objectId = ?",
new String[] { user.getObjectId() });
}
}
/**
* 升级user表里的数据
*
* @param user
*/
public void changeObjectId(User user) {
if (user != null) {
ContentValues values = new ContentValues();
values.put("objectId", user.getObjectId());
db.update("user", values, null, null);
}
}
/**
* 增加step表里的数据
*
* @param step
*/
public void saveStep(Step step) {
if (step != null) {
ContentValues values = new ContentValues();
values.put("number", step.getNumber());
values.put("date", step.getDate());
values.put("userId", step.getUserId());
db.insert("step", null, values);
}
}
/**
* 升级step表里的数据
*
* @param step
*/
public void updateStep(Step step) {
if (step != null) {
ContentValues values = new ContentValues();
values.put("number", step.getNumber());
values.put("date", step.getDate());
values.put("userId", step.getUserId());
db.update("step", values, "userId = ? and date = ?", new String[] {
step.getUserId(), step.getDate() });
}
}
/**
* 升级step表里的数据
*
* @param step
*/
public void changeuserId(Step step) {
if (step != null) {
ContentValues values = new ContentValues();
// values.put("number", step.getNumber());
// values.put("date", step.getDate());
values.put("userId", step.getUserId());
db.update("step", values, null, null);
}
}
/**
* 增加group数据表里的数据
*
* @param group
*/
public void saveGroup(Group group) {
if (group != null) {
ContentValues values = new ContentValues();
values.put("total_number", group.getTotal_number());
values.put("member_number", group.getMember_number());
db.insert("group1", null, values);
}
}
/**
* 升级group表里的数据
*
* @param group
*/
public void updateGroup(Group group) {
if (group != null) {
ContentValues values = new ContentValues();
values.put("total_number", group.getTotal_number());
values.put("member_number", group.getMember_number());
db.update("group1", values, "id = ?",
new String[] { String.valueOf(group.getID()) });
}
}
/**
* 存储从网站上抓取的天气数据
*
* @param weather
*/
public void saveWeather(Weather weather) {
if (weather != null) {
ContentValues values = new ContentValues();
values.put("cityid", weather.getCityid());
values.put("city", weather.getCity());
values.put("temp1", weather.getTemp1());
values.put("temp2", weather.getTemp2());
values.put("weather", weather.getWeather());
values.put("date", weather.getWeather());
db.insert("weather", null, values);
}
}
/**
* 根据group组的id取数据
*
* @param weather
*/
public Group loadGroup(int id) {
Group group = null;
Cursor cursor = db.query("group1", null, "id = ?",
new String[] { String.valueOf(id) }, null, null, null);
if (cursor.moveToFirst()) {
do {
group = new Group();
group.setID(cursor.getInt(cursor.getColumnIndex("id")));
group.setTotal_number(cursor.getInt(cursor
.getColumnIndex("total_number")));
group.setMember_number(cursor.getInt(cursor
.getColumnIndex("member_number")));
} while (cursor.moveToNext());
}
return group;
}
/**
* 根据user表的userid和date来取数据
*
* @param userId
* @param date
* @return
*/
public Step loadSteps(String userId, String date) {
Step step = null;
Cursor cursor = db.query("step", null, "userId = ? and date = ?",
new String[] { userId, date }, null, null, null);
if (cursor.moveToFirst()) {
do {
step = new Step();
step.setNumber(cursor.getInt(cursor.getColumnIndex("number")));
step.setDate(cursor.getString(cursor.getColumnIndex("date")));
step.setUserId(userId);
} while (cursor.moveToNext());
} else {
Log.i("tag", "step is null!");
}
return step;
}
/**
* 取出group1中的所有数据 因为sqlit中自带group表,所以不能创建group组
*
* @return
*/
public List loadListGroup() {
Group group = null;
List list = new ArrayList();
Cursor cursor = db.rawQuery("select * from group1", null);
if (cursor.moveToFirst()) {
do {
group = new Group();
group.setID(cursor.getInt(cursor.getColumnIndex("id")));
group.setTotal_number(cursor.getInt(cursor
.getColumnIndex("total_number")));
group.setMember_number(cursor.getInt(cursor
.getColumnIndex("member_number")));
list.add(group);
} while (cursor.moveToNext());
}
return list;
}
/**
* 取出user中所有的数据,按照步数的降序取出
*
* @return
*/
public List lodListUsers() {
List list = null;
Cursor cursor = db.rawQuery(
"select * from user order by today_step desc", null);
if (cursor.moveToFirst()) {
list = new ArrayList();
do {
User user = new User();
user.setObjectId(cursor.getString(cursor
.getColumnIndex("objectId")));
user.setGroupId(cursor.getInt(cursor.getColumnIndex("groupId")));
user.setName(cursor.getString(cursor.getColumnIndex("name")));
user.setSex(cursor.getString(cursor.getColumnIndex("sex")));
user.setPicture(cursor.getBlob(cursor.getColumnIndex("picture")));
user.setSensitivity(cursor.getInt(cursor
.getColumnIndex("sensitivity")));
user.setStep_length(cursor.getInt(cursor
.getColumnIndex("step_length")));
user.setWeight(cursor.getInt(cursor.getColumnIndex("weight")));
user.setToday_step(cursor.getInt(cursor
.getColumnIndex("today_step")));
list.add(user);
} while (cursor.moveToNext());
}
return list;
}
/**
* 更具date取出所有的step数据
*
* @param date
* @return
*/
public List loadListSteps() {
List list = new ArrayList();
Cursor cursor = db.rawQuery("select * from step order by number desc",
null);
if (cursor.moveToFirst()) {
do {
Step step = new Step();
step.setId(cursor.getInt(cursor.getColumnIndex("id")));
step.setNumber(cursor.getInt(cursor.getColumnIndex("number")));
step.setDate(cursor.getString(cursor.getColumnIndex("date")));
step.setUserId(cursor.getString(cursor.getColumnIndex("userId")));
list.add(step);
} while (cursor.moveToNext());
}
return list;
}
/**
* 根据id取出user数据
*
* @param id
* @return
*/
public User loadUser(String objectId) {
User user = null;
Cursor cursor = db.query("user", null, "objectId = ?",
new String[] { objectId }, null, null, null);
if (cursor.moveToFirst()) {
do {
user = new User();
user.setName(cursor.getString(cursor.getColumnIndex("name")));
user.setSex(cursor.getString(cursor.getColumnIndex("sex")));
user.setObjectId(objectId);
user.setPicture(cursor.getBlob(cursor.getColumnIndex("picture")));
user.setSensitivity(cursor.getInt(cursor
.getColumnIndex("sensitivity")));
user.setStep_length(cursor.getInt(cursor
.getColumnIndex("step_length")));
user.setWeight(cursor.getInt(cursor.getColumnIndex("weight")));
user.setGroupId(cursor.getInt(cursor.getColumnIndex("groupId")));
user.setToday_step(cursor.getInt(cursor
.getColumnIndex("today_step")));
} while (cursor.moveToNext());
} else {
Log.i("tag", "User is null!");
}
return user;
}
/**
* 取出第一个用户,也就是用此app的用户
*
* @param id
* @return
*/
public User loadFirstUser() {
User user = null;
Cursor cursor = db.query("user", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
user = new User();
user.setName(cursor.getString(cursor.getColumnIndex("name")));
user.setSex(cursor.getString(cursor.getColumnIndex("sex")));
user.setObjectId(cursor.getString(cursor.getColumnIndex("objectId")));
user.setPicture(cursor.getBlob(cursor.getColumnIndex("picture")));
user.setSensitivity(cursor.getInt(cursor
.getColumnIndex("sensitivity")));
user.setStep_length(cursor.getInt(cursor
.getColumnIndex("step_length")));
user.setWeight(cursor.getInt(cursor.getColumnIndex("weight")));
user.setGroupId(cursor.getInt(cursor.getColumnIndex("groupId")));
user.setToday_step(cursor.getInt(cursor
.getColumnIndex("today_step")));
} else {
Log.i("tag", "User is null!");
}
return user;
}
/**
* 更具日期取出天气数据
*
* @param date
* @return
*/
public Weather loadWeather(String date) {
Weather weather = new Weather();
Cursor cursor = db.query("weather", null, "date = ?",
new String[] { date }, null, null, null);
if (cursor.moveToFirst()) {
do {
weather.setCity(cursor.getString(cursor.getColumnIndex("city")));
weather.setTemp1(cursor.getString(cursor
.getColumnIndex("temp1")));
weather.setTemp2(cursor.getString(cursor
.getColumnIndex("temp2")));
weather.setWeather(cursor.getString(cursor
.getColumnIndex("weather")));
} while (cursor.moveToNext());
} else {
}
return weather;
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/data/db/PedometerOpenHelper.java
================================================
package com.bit.pedometer.data.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class PedometerOpenHelper extends SQLiteOpenHelper{
/**
* 创建step表
*/
public static final String CREATE_STEP = "create table step("
+ "id integer primary key autoincrement,"
+ "number text,"
+ "date integer,"
+ "userId text)";
/**
* 创建group表
*/
public static final String CREATE_GROUP = "create table group1("
+ "id integer primary key autoincrement,"
+ "total_number integer,"
+ "member_number integer)";
/**
* 创建user表
*/
public static final String CREATE_USER = "create table user("
+ "objectId text ,"
+ "name text,"
+ "sex text,"
+ "weight integer,"
+ "step_length integer,"
+ "sensitivity integer,"
+ "picture blob,"
+ "groupId integer,"
+ "today_step integer)";
/**
* 创建weather表
*/
public static final String CREATE_WEATHER = "create table weather("
+ "cityid integer primary key,"
+ "city text,"
+ "temp1 text,"
+ "temp2 text,"
+ "weather text,"
+ "ptime text)";
/**
* 带参数的PedometerOpenHelper构造函数
* @param context
* @param name
* @param factory
* @param version
*/
public PedometerOpenHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
/**
* 创建数据库
*/
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_STEP);
db.execSQL(CREATE_USER);
db.execSQL(CREATE_WEATHER);
db.execSQL(CREATE_GROUP);
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/receiver/AutoSaveReceiver.java
================================================
package com.bit.pedometer.receiver;
import com.bit.pedometer.service.AutoSaveService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class AutoSaveReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, AutoSaveService.class);
Toast.makeText(context, "date changes", Toast.LENGTH_SHORT)
.show();
context.startService(i);
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/service/AutoSaveService.java
================================================
package com.bit.pedometer.service;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import com.bit.pedometer.data.db.PedometerDB;
import com.bit.pedometer.data.bean.Step;
import com.bit.pedometer.data.bean.User;
import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class AutoSaveService extends Service {
private PedometerDB pedometerDB;
private Step step;
private User user;
private String date;
private Calendar calendar;
private SimpleDateFormat sdf;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
init();
return super.onStartCommand(intent, flags, startId);
}
@SuppressLint("SimpleDateFormat")
private void init() {
Log.i("info", "你好啊");
calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -1);
sdf = new SimpleDateFormat("yyyyMMdd");
pedometerDB = PedometerDB.getInstance(this);
date = sdf.format(calendar.getTime());
Log.i("info", date);
user = pedometerDB.loadFirstUser();
step = pedometerDB.loadSteps(user.getObjectId(), date);
step.setNumber(StepDetector.CURRENT_SETP);
pedometerDB.updateStep(step);
Log.i("info", "你好啊1");
user.setToday_step(0);
pedometerDB.updateUser(user);
step = new Step();
step.setDate(sdf.format(new Date()));
step.setNumber(0);
step.setUserId(user.getObjectId());
pedometerDB.saveStep(step);
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/service/MyService.java
================================================
package com.bit.pedometer.service;
import android.app.IntentService;
import android.content.Intent;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
/**
* Created by Android Studio. author: liyachao Date: 15/10/24 Time: 10:24
*/
public abstract class MyService extends IntentService {
/**
* Creates an IntentService. Invoked by your subclass's constructor.
*
* @param name Used to name the worker thread, important only for debugging.
*/
public MyService(String name) {
super(name);
mName = name;
}
private volatile Looper mServiceLooper;
private volatile ServiceHandler mServiceHandler;
private String mName;
private boolean mRedelivery;
private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
onHandleIntent((Intent) msg.obj);
stopSelf(msg.arg1);
}
}
public void setIntentRedelivery(boolean enabled) {
mRedelivery = enabled;
}
@Override
public void onCreate() {
// TODO: It would be nice to have an option to hold a partial wakelock
// during processing, and to have a static startService(Context, Intent)
// method that would launch the service & hand off a wakelock.
super.onCreate();
HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}
public void onStart(Intent intent, int startId) {
Message msg = mServiceHandler.obtainMessage();
msg.arg1 = startId;
msg.obj = intent;
mServiceHandler.sendMessage(msg);
}
/**
* You should not override this method for your IntentService. Instead,
* override {@link #onHandleIntent}, which the system calls when the IntentService
* receives a start request.
*
* @see android.app.Service#onStartCommand
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
onStart(intent, startId);
return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY;
}
@Override
public void onDestroy() {
mServiceLooper.quit();
}
/**
* Unless you provide binding for your service, you don't need to implement this
* method, because the default implementation returns null.
*
* @see android.app.Service#onBind
*/
@Override
public IBinder onBind(Intent intent) {
return null;
}
/**
* This method is invoked on the worker thread with a request to process.
* Only one Intent is processed at a time, but the processing happens on a
* worker thread that runs independently from other application logic.
* So, if this code takes a long time, it will hold up other requests to
* the same IntentService, but it will not hold up anything else.
* When all requests have been handled, the IntentService stops itself,
* so you should not call {@link #stopSelf}.
*
* @param intent The value passed to {@link
* android.content.Context#startService(Intent)}.
*/
protected abstract void onHandleIntent(Intent intent);
}
================================================
FILE: pedometer/src/com/bit/pedometer/service/StepDetector.java
================================================
package com.bit.pedometer.service;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
/**
* 这是一个实现了信号监听的记步的类
* 这是从谷歌找来的一个记步的算法,看不太懂
* @author Liyachao Date:2015-1-6
*
*/
public class StepDetector implements SensorEventListener {
public static int CURRENT_SETP = 0;
public static float SENSITIVITY = 10; // SENSITIVITY灵敏度
private float mLastValues[] = new float[3 * 2];
private float mScale[] = new float[2];
private float mYOffset;
private static long end = 0;
private static long start = 0;
/**
* 最后加速度方向
*/
private float mLastDirections[] = new float[3 * 2];
private float mLastExtremes[][] = { new float[3 * 2], new float[3 * 2] };
private float mLastDiff[] = new float[3 * 2];
private int mLastMatch = -1;
/**
* 传入上下文的构造函数
*
* @param context
*/
public StepDetector(Context context) {
super();
int h = 480;
mYOffset = h * 0.5f;
mScale[0] = -(h * 0.5f * (1.0f / (SensorManager.STANDARD_GRAVITY * 2)));
mScale[1] = -(h * 0.5f * (1.0f / (SensorManager.MAGNETIC_FIELD_EARTH_MAX)));
}
//当传感器检测到的数值发生变化时就会调用这个方法
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
synchronized (this) {
if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
float vSum = 0;
for (int i = 0; i < 3; i++) {
final float v = mYOffset + event.values[i] * mScale[1];
vSum += v;
}
int k = 0;
float v = vSum / 3;
float direction = (v > mLastValues[k] ? 1
: (v < mLastValues[k] ? -1 : 0));
if (direction == -mLastDirections[k]) {
// Direction changed
int extType = (direction > 0 ? 0 : 1); // minumum or
// maximum?
mLastExtremes[extType][k] = mLastValues[k];
float diff = Math.abs(mLastExtremes[extType][k]
- mLastExtremes[1 - extType][k]);
if (diff > SENSITIVITY) {
boolean isAlmostAsLargeAsPrevious = diff > (mLastDiff[k] * 2 / 3);
boolean isPreviousLargeEnough = mLastDiff[k] > (diff / 3);
boolean isNotContra = (mLastMatch != 1 - extType);
if (isAlmostAsLargeAsPrevious && isPreviousLargeEnough
&& isNotContra) {
end = System.currentTimeMillis();
if (end - start > 500) {// 此时判断为走了一步
CURRENT_SETP++;
mLastMatch = extType;
start = end;
}
} else {
mLastMatch = -1;
}
}
mLastDiff[k] = diff;
}
mLastDirections[k] = direction;
mLastValues[k] = v;
}
}
}
//当传感器的经度发生变化时就会调用这个方法,在这里没有用
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/service/StepService.java
================================================
package com.bit.pedometer.service;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.IBinder;
public class StepService extends Service {
public static Boolean flag = false;
private SensorManager sensorManager;
private StepDetector stepDetector;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
new Thread(new Runnable() {
public void run() {
startStepDetector();
}
}).start();
}
private void startStepDetector() {
flag = true;
stepDetector = new StepDetector(this);
sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE);//获取传感器管理器的实例
Sensor sensor = sensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//获得传感器的类型,这里获得的类型是加速度传感器
//此方法用来注册,只有注册过才会生效,参数:SensorEventListener的实例,Sensor的实例,更新速率
sensorManager.registerListener(stepDetector, sensor,
SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
flag = false;
if (stepDetector != null) {
sensorManager.unregisterListener(stepDetector);
}
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/activity/BaseActivity.java
================================================
package com.bit.pedometer.ui.activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.bit.pedometer.R;
import com.bit.pedometer.ui.view.MyDialog;
/**
* Created by Android Studio. author: liyachao Date: 15/5/20 Time: 16:31
*/
public abstract class BaseActivity extends FragmentActivity {
/**
* 自定义的吐司
*/
private Toast toast;
// /**
// * 吐司中显示的文字
// */
// private TextView toastTextView;
/**
* 使用handler发送吐司
*/
private Handler handler = new Handler();
/**
* 显示对话框
*/
private MyDialog dialog;
/**
* 现实进度条
*/
private ProgressDialog progressDialog;
/**
* 软键盘管理工具
*/
InputMethodManager imm;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
setContentView();
initView();
setTitle();
initData();
setEvent();
}
/**
* 初始化布局
*/
protected abstract void setContentView();
/**
* 初始化控件
*/
protected abstract void initView();
/**
* 设置标头
*/
protected abstract void setTitle();
/**
* 初始化值
*/
protected abstract void initData();
/**
* 设置事件
*/
protected abstract void setEvent();
private void init() {
context = this;
/**
* 初始化吐司和吐司的布局文件
*/
// LayoutInflater inflater = LayoutInflater.from(this);
// View view = inflater.inflate(R.layout.toast_layout, null);
// toastTextView = (TextView) view.findViewById(R.id.toast_text);
// toast = new Toast(getApplicationContext());
// toast.setView(view);
toast = Toast.makeText(context, "", Toast.LENGTH_SHORT);
/**
* 初始化进度框
*/
progressDialog = new ProgressDialog(this, R.style.ProgressDialog);
/**
* 初始化软键盘管理工具
*/
imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
}
protected T getView(int viewId) {
View view = findViewById(viewId);
return (T) view;
}
/**
* 设置标题栏
*
* @param str 标题栏文字
*/
protected void setTitleText(String str) {
TextView titleText = (TextView) findViewById(R.id.center_title);
titleText.setText(str);
}
/**
* 设置标题栏颜色
*
* @param colorStr 标题栏颜色
*/
protected void setMyTitleColor(String colorStr) {
RelativeLayout titleLayout = (RelativeLayout) findViewById(R.id.title_layout);
titleLayout.setBackgroundColor(Color.parseColor(colorStr));
}
/**
* 设置标题栏颜色
*
* @param color 标题栏颜色
*/
protected void setMyTitleColor(int color) {
RelativeLayout titleLayout = (RelativeLayout) findViewById(R.id.title_layout);
titleLayout.setBackgroundColor(color);
}
/**
* 显示标题栏左部图片
*
* @param resId 图片资源的ID
* @param clickListener 点击事件
*/
protected void showLeftWithImage(int resId,
View.OnClickListener clickListener) {
ImageView leftImage = (ImageView) findViewById(R.id.left_title_image);
leftImage.setVisibility(View.VISIBLE);
leftImage.setImageResource(resId);
//设置点击区域
LinearLayout leftClickRange = (LinearLayout) findViewById(R.id.left_title_layout);
leftClickRange.setOnClickListener(clickListener);
}
/**
* 显示左部的文字
*
* @param str 所要显示的文字
* @param clickListener 点击事件
*/
protected void showLeftWithText(String str,
View.OnClickListener clickListener) {
TextView leftText = (TextView) findViewById(R.id.left_title_text);
leftText.setVisibility(View.VISIBLE);
leftText.setText(str);
//设置点击区域
LinearLayout leftClickRange = (LinearLayout) findViewById(R.id.left_title_layout);
leftClickRange.setOnClickListener(clickListener);
}
/**
* 显示标题栏右部图片
*
* @param resId 图片资源的ID
* @param clickListener 点击事件
*/
protected void showRightWithImage(int resId,
View.OnClickListener clickListener) {
ImageView rightImage = (ImageView) findViewById(R.id.right_title_image);
rightImage.setVisibility(View.VISIBLE);
rightImage.setImageResource(resId);
//设置点击区域
LinearLayout rightClickRange = (LinearLayout) findViewById(R.id.right_title_layout);
rightClickRange.setOnClickListener(clickListener);
}
/**
* 显示标题栏右部第二个图片
*
* @param resId 图片资源的ID
* @param clickListener 点击事件
*/
protected void showRightWithSecondImage(int resId,
View.OnClickListener clickListener) {
ImageView rightImage = (ImageView) findViewById(R.id.right_second_title_image);
rightImage.setVisibility(View.VISIBLE);
rightImage.setImageResource(resId);
//设置点击区域
LinearLayout rightClickRange = (LinearLayout) findViewById(R.id.right_second_title_layout);
rightClickRange.setOnClickListener(clickListener);
}
/**
* 显示右部的文字
*
* @param str 所要显示的文字
* @param clickListener 点击事件
*/
protected void showRightWithText(String str,
View.OnClickListener clickListener) {
TextView rightText = (TextView) findViewById(R.id.right_title_text);
rightText.setVisibility(View.VISIBLE);
rightText.setText(str);
//设置点击区域
LinearLayout rightClickRange = (LinearLayout) findViewById(R.id.right_title_layout);
rightClickRange.setOnClickListener(clickListener);
}
/**
* 显示自定义的Toast,并在有软键盘和没有软键盘弹出时间不相同
*
* @param strId 在strings.xml对应的字符串
* @param booleans
*/
protected void showToast(int strId, boolean[] booleans) {
String str = getResources().getString(strId);
showToast(str, booleans);
}
/**
* 显示自定义的Toast,并在有软键盘和没有软键盘弹出时间不相同
*
* @param str 吐司的内容
* @param booleans 输入框是否有焦点
*/
protected void showToast(final String str, final boolean[] booleans) {
runOnUiThread(new Runnable() {
@Override
public void run() {
toast.setText(str);
// toast.setGravity(Gravity.TOP, 0, dp2px(60));
boolean isAllFocused = false;//是否输入框一个都没有选中
if (booleans != null) {
for (boolean b : booleans) {
if (b) {
isAllFocused = true;
break;
}
}
}
if (isAllFocused) {
closeSoftKeyboard();
handler.postDelayed(new Runnable() {
@Override
public void run() {
toast.show();
// Toast toast = Toast.makeText(context, str, Toast.LENGTH_SHORT);
}
}, 300);
} else {
toast.show();
// Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
}
}
});
}
/**
* 关闭软键盘
*/
protected void closeSoftKeyboard() {
if (getCurrentFocus() != null && getCurrentFocus().getWindowToken() != null) {
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
/**
* 开启软键盘
*/
protected void showSoftKeyboard() {
imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
}
protected void showToast(String str) {
showToast(str, null);
}
protected void showToast(int strId) {
showToast(strId, null);
}
/**
* 显示进度框
*
* @param message 传入显示的文字
*/
protected void showProgressDialog(final String message) {
runOnUiThread(new Runnable() {
@Override
public void run() {
progressDialog.setMessage(message);
progressDialog.setCancelable(false);
progressDialog.show();
progressDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && (progressDialog.isShowing())) {
progressDialog.dismiss();
return true;
}
return false;
}
});
}
});
}
/**
* 显示进度框
*
* @param message
* @param keyListener 监听点击返回按钮
*/
protected void showProgressDialog(final String message, final DialogInterface.OnKeyListener keyListener) {
runOnUiThread(new Runnable() {
@Override
public void run() {
progressDialog.setMessage(message);
progressDialog.setCancelable(false);
progressDialog.show();
progressDialog.setOnKeyListener(keyListener);
}
});
}
/**
* 现实对话框
*
* @param message 输入显示的文字
* @param sureListener 监听事件
*/
protected void showDialog(final String message, final View.OnClickListener sureListener) {
runOnUiThread(new Runnable() {
@Override
public void run() {
/**
* 初始化对话框
*/
dialog = new MyDialog(BaseActivity.this, R.style.TransparentDialog);
dialog.setCancelable(false);
dialog.setDialogTitle("提示");
dialog.setDialogContent(message);
dialog.setMyOnclickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
}, sureListener);
dialog.show();
}
});
}
/**
* 现实对话框
*
* @param message 输入显示的文字
* @param sureListener 监听事件
*/
protected void showDialog(final String message,
final String leftButtonStr, final String rightButtonStr,
final View.OnClickListener sureListener) {
runOnUiThread(new Runnable() {
@Override
public void run() {
/**
* 初始化对话框
*/
dialog = new MyDialog(BaseActivity.this, R.style.TransparentDialog);
dialog.setCancelable(false);
dialog.setDialogTitle("提示");
dialog.setButtonText(leftButtonStr, rightButtonStr);
dialog.setDialogContent(message);
dialog.setMyOnclickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
}, sureListener);
dialog.show();
}
});
}
/**
* 现实对话框
*
* @param message 输入显示的文字
* @param sureListener 监听事件
*/
protected void showDialog(final String message, final View.OnClickListener sureListener
, final View.OnClickListener cancelListener) {
runOnUiThread(new Runnable() {
@Override
public void run() {
/**
* 初始化对话框
*/
dialog = new MyDialog(BaseActivity.this, R.style.TransparentDialog);
dialog.setCancelable(false);
dialog.setDialogTitle("提示");
dialog.setDialogContent(message);
dialog.setMyOnclickListener(cancelListener, sureListener);
dialog.show();
}
});
}
/**
* 关闭对话框
*/
protected void cancelProgressDialog() {
if (progressDialog != null && progressDialog.isShowing())
progressDialog.cancel();
}
/**
* 关闭进度框
*/
protected void cancelDialog() {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
/**
* popupwindow关闭,显示正常
*/
protected void onLight() {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 1.0f;
getWindow().setAttributes(lp);
}
/**
* popupwindow开启,显示暗色
*/
protected void offLight() {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 0.7f;
getWindow().setAttributes(lp);
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/activity/MainActivity.java
================================================
package com.bit.pedometer.ui.activity;
import java.util.ArrayList;
import java.util.List;
import com.bit.pedometer.R;
import com.bit.pedometer.data.db.PedometerDB;
import com.bit.pedometer.ui.fragment.FragmentAdapter;
import com.bit.pedometer.ui.fragment.FragmentAnalysis;
import com.bit.pedometer.ui.fragment.FragmentHistory;
import com.bit.pedometer.ui.fragment.FragmentPK;
import com.bit.pedometer.ui.fragment.FragmentPedometer;
import com.bit.pedometer.ui.fragment.FragmentSet;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Window;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.support.v4.app.Fragment;
/**
* 这是pedometer的主页面
*
* @author 李垭超
*/
public class MainActivity extends FragmentActivity {
public static String myObjectId = null;
private RadioGroup rgs;//用来切换各个页面
private RadioButton btn1;//如果是用户第一次进入这个app没有进行注册,则会跳转到注册页面
public List fragments = new ArrayList();//将5个fragment添加到这个list里
private PedometerDB pd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.page_mian);
btn1 = (RadioButton) findViewById(R.id.btn5);
pd = PedometerDB.getInstance(this);
//判断用户是否进行注册过,如果没有进行注册则选中注册页面的radiobutton
if (pd.loadFirstUser() == null) {
btn1.setChecked(true);
} else {
myObjectId = pd.loadFirstUser().getObjectId();
}
rgs = (RadioGroup) findViewById(R.id.radioGroup);//实例化RadioGroup
fragments.add(new FragmentHistory());
fragments.add(new FragmentAnalysis());
fragments.add(new FragmentPedometer());
fragments.add(new FragmentPK());
fragments.add(new FragmentSet());
//自己写的一个fragment的适配器,进行几个页面的逻辑跳转
new FragmentAdapter(MainActivity.this, fragments, R.id.Fragment, rgs,
this);
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/activity/SetToTakePicActivity.java
================================================
package com.bit.pedometer.ui.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import com.bit.pedometer.R;
/**
* Created with Android Studio. User: liyachao Date: 15-4-14 Time: 下午2:33
* 头像获取方式选择弹出框
*/
public class SetToTakePicActivity extends Activity {
public static final String INTENT_KEY_BUTTON_TYPE = "ButtonType";
public static final String BUTTON_TYPE_TAKE_PICTURES = "TAKE_PICTURES";
public static final String BUTTON_TYPE_FROM_ALBUM = "FROM_ALBUM";
public static final String BUTTON_TYPE_NUM = "NUM";
private String num;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_headpic);
View btnTakePics = findViewById(R.id.btn_take_pictures);
View btnFromAlbum = findViewById(R.id.btn_from_album);
View btnCancel = findViewById(R.id.btn_cancel);
btnTakePics.setOnClickListener(new mOnClickListener());
btnFromAlbum.setOnClickListener(new mOnClickListener());
btnCancel.setOnClickListener(new mOnClickListener());
num = getIntent().getStringExtra("num");
}
class mOnClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_take_pictures:
Intent intent = new Intent();
intent.putExtra(INTENT_KEY_BUTTON_TYPE,
BUTTON_TYPE_TAKE_PICTURES);
intent.putExtra(BUTTON_TYPE_NUM, num);
setResult(Activity.RESULT_OK, intent);
finish();
break;
case R.id.btn_from_album:
intent = new Intent();
intent.putExtra(INTENT_KEY_BUTTON_TYPE, BUTTON_TYPE_FROM_ALBUM);
intent.putExtra(BUTTON_TYPE_NUM, num);
setResult(Activity.RESULT_OK, intent);
finish();
break;
case R.id.btn_cancel:
finish();
break;
default:
break;
}
}
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/activity/WelcomeActivity.java
================================================
package com.bit.pedometer.ui.activity;
import java.util.Timer;
import java.util.TimerTask;
import com.bit.pedometer.R;
import com.bit.pedometer.service.StepDetector;
import com.bit.pedometer.service.StepService;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Window;
/**
* 这是开启程序的第一个启动页面
* @author liyachao
*
*/
public class WelcomeActivity extends Activity {
//private Animation animation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);//页面设置为无标题
//如果StepServer是启动的话或者CURRENT_SETP不为0,则直接进入到主页面,否则进入欢迎页面
if (StepService.flag || StepDetector.CURRENT_SETP > 0) {
Intent intent = new Intent(WelcomeActivity.this, MainActivity.class);
startActivity(intent);
this.finish();
} else {
setContentView(R.layout.welcome);
// animation = AnimationUtils.loadAnimation(WelcomeActivity.this,
// R.anim.animation_main);
// this.findViewById(R.id.welcome).setAnimation(animation);
// animation.setAnimationListener(new AnimationListener() {
//
// @Override
// public void onAnimationStart(Animation arg0) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public void onAnimationRepeat(Animation arg0) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public void onAnimationEnd(Animation arg0) {
// Intent intent = new Intent(WelcomeActivity.this,
// MainActivity.class);
// startActivity(intent);
// WelcomeActivity.this.finish();
// }
// });
//设置一个计时器,在此页面上停留3秒然后跳转到主页面,
(new Timer()).schedule(new TimerTask() {
public void run() {
Intent intent = new Intent(WelcomeActivity.this,
MainActivity.class);
startActivity(intent);
finish();
}
}, 3000);
}
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/FragmentAdapter.java
================================================
package com.bit.pedometer.ui.fragment;
import java.util.List;
import com.bit.pedometer.ui.activity.MainActivity;
import com.bit.pedometer.data.db.PedometerDB;
import com.bit.pedometer.data.bean.Group;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
/**
* 5个fragment切换的适配器
*
* @author 李垭超
*
*/
public class FragmentAdapter implements OnCheckedChangeListener {
private List fragments;// 一个tab页面对应一个Fragment
private RadioGroup rGroup;// 用于切换tab
private FragmentActivity activity;// Fragment所属的Activity
private int fgContentId;// Activity中所要被替换的区域的id
private int currentId; // 当前Tab页面索引
private FragmentTransaction fTransaction;// 用于让调用者在切换tab时候增加新的功能
@SuppressLint("SimpleDateFormat")
public FragmentAdapter(FragmentActivity activity,
final List fragments, final int fgContentId,
RadioGroup rGroup, Context context) {
PedometerDB pedometerDB = PedometerDB.getInstance(context);
this.activity = activity;
this.fragments = fragments;
this.rGroup = rGroup;
this.fgContentId = fgContentId;
fTransaction = activity.getSupportFragmentManager().beginTransaction();
// 判断是否存在用户,如果存在则显示第三个页面,如果不存在则显示第5个页面
if (MainActivity.myObjectId != null) {
fTransaction.add(fgContentId, fragments.get(2));
fTransaction.commit();
} else {
//如果是第一次登陆则自动初始化三个小组,进行PK
Group group = new Group();
group.setTotal_number(0);
group.setMember_number(0);
pedometerDB.saveGroup(group);
group.setTotal_number(0);
group.setMember_number(0);
pedometerDB.saveGroup(group);
group.setTotal_number(0);
group.setMember_number(0);
pedometerDB.saveGroup(group);
//进行对话框提示,需要进行注册
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setTitle("提示");
dialog.setMessage("您还没有注册,需要注册!");
dialog.setPositiveButton("确认", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
fTransaction.add(fgContentId, fragments.get(4));
fTransaction.show(fragments.get(4));
fTransaction.commit();
}
});
dialog.setCancelable(false);
dialog.show();
}
rGroup.setOnCheckedChangeListener(this);
}
/**
* 改变Tab键,进行更换页面
*/
public void onCheckedChanged(RadioGroup arg0, int arg1) {
for (int i = 0; i < rGroup.getChildCount(); i++) {
if (rGroup.getChildAt(i).getId() == arg1) {
Fragment fragment = fragments.get(i);
FragmentTransaction ft = obtainFragmentTransaction(i);
getCurrentFragment().onPause();// 暂停当前页面
if (fragment.isAdded()) {
fragment.onResume();// 启动目标tab的onResume()
} else {
ft.add(fgContentId, fragment);
}
showFragment(i);// 显示目标tab
ft.commit();
}
}
}
/**
* 显示切换的页面
* @param i
*/
private void showFragment(int i) {
for (int i1 = 0; i1 < fragments.size(); i1++) {
Fragment fragment = fragments.get(i1);
FragmentTransaction ft = obtainFragmentTransaction(i1);
if (i == i1) {
ft.show(fragment);
} else {
ft.hide(fragment);
}
ft.commit();
}
currentId = i;// 更新目标tab为当前tab
}
/**
* 得到当前的页面
* @return
*/
private Fragment getCurrentFragment() {
return fragments.get(currentId);
}
/**
* 得到当前页面的事务管理
* @param i
* @return
*/
private FragmentTransaction obtainFragmentTransaction(int i) {
FragmentTransaction fg = activity.getSupportFragmentManager()
.beginTransaction();
return fg;
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/FragmentAnalysis.java
================================================
package com.bit.pedometer.ui.fragment;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import com.bit.pedometer.ui.activity.MainActivity;
import com.bit.pedometer.R;
import com.bit.pedometer.data.db.PedometerDB;
import com.bit.pedometer.ui.fragment.tools.DisplayUtil;
import com.bit.pedometer.data.bean.Step;
import com.bit.pedometer.ui.view.HistogramView;
import android.annotation.SuppressLint;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.Animation;
import android.view.animation.Transformation;
import android.view.ViewGroup;
import android.widget.TextView;
public class FragmentAnalysis extends Fragment implements OnTouchListener {
private HistogramView hv;
private PedometerDB pedometerDB;
private String[] weeks;// 设置星期数目
private int[] steps;// 设置7天的步数
private int[] text;// 设置是否显示对应柱状图的数值
private TextView average_step;
private TextView sum_step;
private Step step = null;
private int average = 0;
private int sum = 0;
private int average1 = 0;
private int sum1 = 0;
private Calendar calendar;
private String day;
private View view;
private AllAnimation ani;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.analyze, container, false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
init();
setWeek();
setProgress();
view.startAnimation(ani);
}
@SuppressLint("ClickableViewAccessibility")
private void init() {
weeks = new String[] { "周一", "周二", "周三", "周四", "周五", "周六", "周日" };
steps = new int[] { 0, 0, 0, 0, 0, 0, 0 };
text = new int[] { 0, 0, 0, 0, 0, 0, 0 };
average_step = (TextView) view.findViewById(R.id.average_step);
sum_step = (TextView) view.findViewById(R.id.sum_step);
ani = new AllAnimation();
ani.setDuration(2000);
calendar = Calendar.getInstance();
hv = (HistogramView) view.findViewById(R.id.histograms);
pedometerDB = PedometerDB.getInstance(getActivity());
hv.setOnTouchListener(this);
}
@SuppressLint("SimpleDateFormat")
private void setProgress() {
int i = 0;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
day = sdf.format(calendar.getTime());
// Toast.makeText(getActivity(), day + "", Toast.LENGTH_LONG).show();
step = pedometerDB.loadSteps(MainActivity.myObjectId, day);
if (step != null) {
steps[i++] = step.getNumber();
sum += step.getNumber();
} else {
steps[i++] = 0;
sum += 0;
}
calendar.add(Calendar.DAY_OF_MONTH, -1);
day = sdf.format(calendar.getTime());
step = pedometerDB.loadSteps(MainActivity.myObjectId, day);
if (step != null) {
steps[i++] = step.getNumber();
sum += step.getNumber();
} else {
steps[i++] = 0;
sum += 0;
}
// Toast.makeText(getActivity(), day+"", Toast.LENGTH_LONG).show();
calendar.add(Calendar.DAY_OF_MONTH, -1);
day = sdf.format(calendar.getTime());
step = pedometerDB.loadSteps(MainActivity.myObjectId, day);
if (step != null) {
steps[i++] = step.getNumber();
sum += step.getNumber();
} else {
steps[i++] = 0;
sum += 0;
}
calendar.add(Calendar.DAY_OF_MONTH, -1);
day = sdf.format(calendar.getTime());
step = pedometerDB.loadSteps(MainActivity.myObjectId, day);
if (step != null) {
steps[i++] = step.getNumber();
sum += step.getNumber();
} else {
steps[i++] = 0;
sum += 0;
}
calendar.add(Calendar.DAY_OF_MONTH, -1);
day = sdf.format(calendar.getTime());
step = pedometerDB.loadSteps(MainActivity.myObjectId, day);
if (step != null) {
steps[i++] = step.getNumber();
sum += step.getNumber();
} else {
steps[i++] = 0;
sum += 0;
}
calendar.add(Calendar.DAY_OF_MONTH, -1);
day = sdf.format(calendar.getTime());
step = pedometerDB.loadSteps(MainActivity.myObjectId, day);
if (step != null) {
steps[i++] = step.getNumber();
sum += step.getNumber();
} else {
steps[i++] = 0;
sum += 0;
}
calendar.add(Calendar.DAY_OF_MONTH, -1);
day = sdf.format(calendar.getTime());
step = pedometerDB.loadSteps(MainActivity.myObjectId, day);
if (step != null) {
steps[i++] = step.getNumber();
sum += step.getNumber();
} else {
steps[i++] = 0;
sum += 0;
}
hv.setWeekd(weeks);
hv.setProgress(steps);
}
private void setWeek() {
int day = calendar.get(Calendar.DAY_OF_WEEK);
// Toast.makeText(getActivity(), day + "", Toast.LENGTH_LONG).show();
day -= 1;
for (int i = 0; i < weeks.length; i++) {
weeks[i] = week(day - i);
}
}
private String week(int day) {
if (day < 1) {
day += 7;
}
switch (day) {
case 1:
return "周一";
case 2:
return "周二";
case 3:
return "周三";
case 4:
return "周四";
case 5:
return "周五";
case 6:
return "周六";
case 7:
return "周日";
default:
return "";
}
}
private class AllAnimation extends Animation {
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t) {
super.applyTransformation(interpolatedTime, t);
if (interpolatedTime < 1.0f) {
sum1 = (int) (sum * interpolatedTime);
average1 = (int) (average * interpolatedTime);
} else {
sum1 = sum;
average1 = average;
}
view.postInvalidate();
sum_step.setText(sum1 + "");
average = sum / 7;
average_step.setText(average1 + "");
}
}
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
int step = (v.getWidth() - dp2px(30)) / 8;
int x = (int) event.getX();
for (int i = 0; i < 7; i++) {
if (x > (dp2px(15) + step * (i + 1) - dp2px(15))
&& x < (dp2px(15) + step * (i + 1) + dp2px(15))) {
text[i] = 1;
for (int j = 0; j < 7; j++) {
if (i != j) {
text[j] = 0;
}
}
hv.setText(text);
}
}
return false;
}
private int dp2px(int value) {
return DisplayUtil.dip2px(getActivity(), value);
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/FragmentHistory.java
================================================
package com.bit.pedometer.ui.fragment;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import com.bit.pedometer.ui.activity.MainActivity;
import com.bit.pedometer.R;
import com.bit.pedometer.data.db.PedometerDB;
import com.bit.pedometer.data.bean.Step;
import android.annotation.SuppressLint;
import android.app.DatePickerDialog;
import android.support.v4.app.Fragment;
import android.app.DatePickerDialog.OnDateSetListener;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.Transformation;
import android.widget.DatePicker;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
public class FragmentHistory extends Fragment implements OnClickListener {
private AllAnimation ani;
private View view;
private ImageView iView;
private TextView tView;
private TextView number;
private TextView ratio;
private ProgressBar progressBar;
private DatePicker dPicker;
private DatePickerDialog dialog;
private Calendar calendar;
private int year;
private int month;
private int day;
private String date;
private String date1;
private PedometerDB pedometerDB;
private Step step;
private int count;
private int progress;
private int ratio1;
private SimpleDateFormat sdf;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.history, container, false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
init();
insert();
}
@SuppressLint("SimpleDateFormat")
private void init() {
iView = (ImageView) view.findViewById(R.id.date_image);
tView = (TextView) view.findViewById(R.id.date_text);
number = (TextView) view.findViewById(R.id.number);
progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
ratio = (TextView) view.findViewById(R.id.ratio);
ani = new AllAnimation();
ani.setDuration(2000);
iView.setOnClickListener(this);
calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
pedometerDB = PedometerDB.getInstance(getActivity());
sdf = new SimpleDateFormat("yyyyMMdd");
date1 = sdf.format(new Date());
step = pedometerDB.loadSteps(MainActivity.myObjectId, date1);
if (step == null) {
step = new Step();
}
view.startAnimation(ani);
number.setText(count + "");
progressBar.setProgress(progress);
ratio.setText(ratio1 + "%");
}
@Override
public void onClick(View arg0) {
dialog = new DatePickerDialog(getActivity(), new OnDateSetListener() {
public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
if (arg3 < 10 && arg2 < 10) {
date = arg1 + "" + "0" + (arg2 + 1) + "0" + arg3;
} else if (arg3 < 10) {
date = arg1 + "" + (arg2 + 1) + "0" + arg3;
} else if (arg2 < 10) {
date = arg1 + "" + "0" + (arg2 + 1) + arg3;
} else {
date = arg1 + "" + (arg2 + 1) + "" + arg3;
}
if (date.equals(date1)) {
tView.setText("今天");
} else {
tView.setText(arg1 + "/" + (arg2 + 1) + "/" + arg3);
}
queryStep();
}
}, year, month, day);
dPicker = dialog.getDatePicker();
dPicker.setSpinnersShown(false);
dPicker.setCalendarViewShown(true);
// 设置对话框背景
// dPicker.setBackground(view.getResources().getDrawable(R.drawable.back_pressed));
dPicker.setMaxDate(System.currentTimeMillis());
// dialog.setTitle("你好");
dialog.show();
}
// 这是用来测试数据的,正常使用的话,可以将这个方法删除。
private void insert() {
if (pedometerDB.lodListUsers().size() < 2) {
int drawables[] = new int[] { R.drawable.head1, R.drawable.head2,
R.drawable.head3, R.drawable.head4, R.drawable.head5,
R.drawable.head6, R.drawable.head8, R.drawable.head9,
R.drawable.head10 };
calendar.add(Calendar.DAY_OF_MONTH, -1);
Step step = new Step();
step.setNumber(9000);
step.setDate(sdf.format(calendar.getTime()));
step.setUserId(MainActivity.myObjectId);
pedometerDB.saveStep(step);
calendar.add(Calendar.DAY_OF_MONTH, -1);
step.setNumber(8754);
step.setDate(sdf.format(calendar.getTime()));
step.setUserId(MainActivity.myObjectId);
pedometerDB.saveStep(step);
calendar.add(Calendar.DAY_OF_MONTH, -1);
step.setNumber(4213);
step.setDate(sdf.format(calendar.getTime()));
step.setUserId(MainActivity.myObjectId);
pedometerDB.saveStep(step);
calendar.add(Calendar.DAY_OF_MONTH, -1);
step.setNumber(1234);
step.setDate(sdf.format(calendar.getTime()));
step.setUserId(MainActivity.myObjectId);
pedometerDB.saveStep(step);
calendar.add(Calendar.DAY_OF_MONTH, -1);
step.setNumber(4523);
step.setDate(sdf.format(calendar.getTime()));
step.setUserId(MainActivity.myObjectId);
pedometerDB.saveStep(step);
calendar.add(Calendar.DAY_OF_MONTH, -1);
step.setNumber(1342);
step.setDate(sdf.format(calendar.getTime()));
step.setUserId(MainActivity.myObjectId);
pedometerDB.saveStep(step);
// String temp = sdf.format(new Date());
// Group group = pedometerDB.loadGroup(1);
// group.setMember_number(group.getMember_number() + 2);
// group.setTotal_number(group.getTotal_number() + 9834);
// pedometerDB.updateGroup(group);
//
// group = pedometerDB.loadGroup(2);
// group.setMember_number(group.getMember_number() + 2);
// group.setTotal_number(group.getTotal_number() + 11234);
// pedometerDB.updateGroup(group);
//
// group = pedometerDB.loadGroup(3);
// group.setMember_number(group.getMember_number() + 3);
// group.setTotal_number(group.getTotal_number() + 12013);
// pedometerDB.updateGroup(group);
// User user = new User();
// user.setName("潘兆轩");
// user.setObjectId("1");
// user.setPicture(PictureUtil.Bitmap2Byte(PictureUtil
// .drawable2Bitmap(getActivity().getResources().getDrawable(
// drawables[1]))));
// user.setGroupId(1);
// user.setSensitivity(5);
// user.setSex("男");
// user.setStep_length(35);
// user.setWeight(63);
// user.setToday_step(5213);
// pedometerDB.saveUser(user);
// step.setNumber(5213);
// step.setDate(temp);
// step.setUserId("1");
// pedometerDB.saveStep(step);
//
// user.setName("陶冶");
// user.setObjectId("3");
// user.setPicture(PictureUtil.Bitmap2Byte(PictureUtil
// .drawable2Bitmap(getActivity().getResources().getDrawable(
// drawables[0]))));
// user.setSensitivity(5);
// user.setSex("女");
// user.setGroupId(1);
// user.setToday_step(4321);
// user.setStep_length(30);
// user.setWeight(53);
// pedometerDB.saveUser(user);
// step.setNumber(4321);
// step.setDate(temp);
// step.setUserId("3");
// pedometerDB.saveStep(step);
//
// user.setName("李楠");
// user.setObjectId("4");
// user.setPicture(PictureUtil.Bitmap2Byte(PictureUtil
// .drawable2Bitmap(getActivity().getResources().getDrawable(
// drawables[2]))));
// user.setGroupId(3);
// user.setSensitivity(5);
// user.setSex("男");
// user.setStep_length(35);
// user.setWeight(63);
// user.setToday_step(3213);
// pedometerDB.saveUser(user);
// step.setNumber(3213);
// step.setDate(temp);
// step.setUserId("3");
// pedometerDB.saveStep(step);
//
// user.setName("李名扬");
// user.setObjectId("6");
// user.setPicture(PictureUtil.Bitmap2Byte(PictureUtil
// .drawable2Bitmap(getActivity().getResources().getDrawable(
// drawables[3]))));
// user.setGroupId(2);
// user.setSensitivity(5);
// user.setSex("男");
// user.setStep_length(35);
// user.setToday_step(6234);
// user.setWeight(89);
// pedometerDB.saveUser(user);
// step.setNumber(6234);
// step.setDate(temp);
// step.setUserId("6");
// pedometerDB.saveStep(step);
//
// user.setName("李涛");
// user.setObjectId("7");
// user.setPicture(PictureUtil.Bitmap2Byte(PictureUtil
// .drawable2Bitmap(getActivity().getResources().getDrawable(
// drawables[4]))));
// user.setGroupId(2);
// user.setSensitivity(5);
// user.setToday_step(5000);
// user.setSex("女");
// user.setStep_length(30);
// user.setWeight(53);
// pedometerDB.saveUser(user);
// step.setNumber(5000);
// step.setDate(temp);
// step.setUserId("7");
// pedometerDB.saveStep(step);
//
// user.setName("潘大轩");
// user.setObjectId("8");
// user.setPicture(PictureUtil.Bitmap2Byte(PictureUtil
// .drawable2Bitmap(getActivity().getResources().getDrawable(
// drawables[5]))));
// user.setGroupId(3);
// user.setSensitivity(5);
// user.setToday_step(6400);
// user.setSex("女");
// user.setStep_length(30);
// user.setWeight(53);
// pedometerDB.saveUser(user);
// step.setNumber(6400);
// step.setDate(temp);
// step.setUserId("8");
// pedometerDB.saveStep(step);
//
// user.setName("潘小轩");
// user.setObjectId("9");
// user.setPicture(PictureUtil.Bitmap2Byte(PictureUtil
// .drawable2Bitmap(getActivity().getResources().getDrawable(
// drawables[6]))));
// user.setGroupId(3);
// user.setSensitivity(5);
// user.setToday_step(2400);
// user.setSex("女");
// user.setStep_length(30);
// user.setWeight(53);
// pedometerDB.saveUser(user);
// step.setNumber(2400);
// step.setDate(temp);
// step.setUserId("9");
// pedometerDB.saveStep(step);
// Group group = new Group();
// group.setAverage_number(9534);
// group.setMember_number(2);
// pedometerDB.saveGroup(group);
//
// group.setAverage_number(12340);
// group.setMember_number(2);
// pedometerDB.saveGroup(group);
//
// group.setAverage_number(12013);
// group.setMember_number(3);
// pedometerDB.saveGroup(group);
}
}
/**
* 查询选择日期所走的步数
*/
private void queryStep() {
step = pedometerDB.loadSteps(MainActivity.myObjectId, date);
if (step != null) {
// count = 0;
// Toast.makeText(getActivity(), step.getNumber() + "---"+date,
// Toast.LENGTH_SHORT).show();
progressBar.setProgress(0);
number.setText(count + "");
view.startAnimation(ani);
} else {
progressBar.setProgress(0);
number.setText(0 + "");
ratio.setText("0%");
}
}
private class AllAnimation extends Animation {
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t) {
super.applyTransformation(interpolatedTime, t);
if (interpolatedTime < 1.0f) {
count = (int) (step.getNumber() * interpolatedTime);
progress = (int) ((step.getNumber() / (double) 10000)
* progressBar.getMax() * interpolatedTime);
ratio1 = (int) ((step.getNumber() / (double) 10000) * 100 * interpolatedTime);
} else {
count = step.getNumber();
progress = (int) ((step.getNumber() / (double) 10000) * progressBar
.getMax());
ratio1 = (int) ((step.getNumber() / (double) 10000) * 100);
}
view.postInvalidate();
progressBar.setProgress(progress);
number.setText(count + "");
ratio.setText(ratio1 + "%");
}
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/FragmentPK.java
================================================
package com.bit.pedometer.ui.fragment;
import java.util.ArrayList;
import java.util.List;
import com.bit.pedometer.R;
import com.bit.pedometer.ui.fragment.PK.FragmentPK_1;
import com.bit.pedometer.ui.fragment.PK.FragmentPK_2;
import com.bit.pedometer.ui.fragment.PK.FragmentPK_addmember;
import com.bit.pedometer.ui.fragment.tools.DisplayUtil;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
public class FragmentPK extends Fragment {
private View view;
private RadioButton rButton1;
private RadioButton rButton2;
private List fragments;
private FragmentPagerAdapter mAdapter;
private ViewPager viewPager;
private ImageView imageView;
private int mScreen1_2;
private ImageView friend;
FragmentPK_1 fPk_1;
FragmentPK_2 fPk_2;
private int mCurrentPageIndex;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.pk, container, false);
init();
initTabline();
return view;
}
private void initTabline() {
imageView = (ImageView) view.findViewById(R.id.pk_tabline);
Display display = getActivity().getWindow().getWindowManager()
.getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);// 得到屏幕的像素和分辨率,得到了屏幕的高度和宽度
mScreen1_2 = outMetrics.widthPixels / 2
- DisplayUtil.dip2px(getActivity(), 60);
LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) imageView
.getLayoutParams();
lp.leftMargin = DisplayUtil.dip2px(getActivity(), 60);
lp.width = mScreen1_2;
imageView.setLayoutParams(lp);
}
private void init() {
rButton1 = (RadioButton) view.findViewById(R.id.pk_1);
rButton2 = (RadioButton) view.findViewById(R.id.pk_2);
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
friend = (ImageView) view.findViewById(R.id.friend);
rButton1.setClickable(false);
rButton2.setClickable(false);
fragments = new ArrayList();
fPk_1 = new FragmentPK_1();
fPk_2 = new FragmentPK_2();
fragments.add(fPk_1);
fragments.add(fPk_2);
mAdapter = new FragmentPagerAdapter(getActivity()
.getSupportFragmentManager()) {
@Override
public int getCount() {
return fragments.size();
}
@Override
public Fragment getItem(int arg0) {
return fragments.get(arg0);
}
};
viewPager.setAdapter(mAdapter);
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
switch (position) {
case 0:
rButton1.setChecked(true);
rButton2.setChecked(false);
break;
case 1:
rButton1.setChecked(false);
rButton2.setChecked(true);
break;
}
mCurrentPageIndex = position;
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPx) {
LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) imageView
.getLayoutParams();
if (mCurrentPageIndex == 0 && position == 0)// 0->1
{
lp.leftMargin = DisplayUtil.dip2px(getActivity(), 60)
+ (int) (positionOffset * mScreen1_2 + mCurrentPageIndex
* mScreen1_2);
} else if (mCurrentPageIndex == 1 && position == 0)// 1->0
{
lp.leftMargin = DisplayUtil.dip2px(getActivity(), 60)
+ (int) (mCurrentPageIndex * mScreen1_2 + (positionOffset - 1)
* mScreen1_2);
}
imageView.setLayoutParams(lp);
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
friend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// ConnectivityManager connectivityManager = (ConnectivityManager) getActivity()
// .getSystemService(getActivity().CONNECTIVITY_SERVICE);
// NetworkInfo networkInfo = connectivityManager
// .getActiveNetworkInfo();
// if (networkInfo != null && networkInfo.isAvailable()) {
Intent intent = new Intent(getActivity(),
FragmentPK_addmember.class);
startActivity(intent);
getActivity().overridePendingTransition(
R.anim.slide_left_in, R.anim.slide_left_out);
// } else {
// Toast.makeText(getActivity(), "您需要连接网络才能使用此功能~", Toast.LENGTH_LONG)
// .show();
// }
}
});
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/FragmentPedometer.java
================================================
package com.bit.pedometer.ui.fragment;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.json.JSONException;
import org.json.JSONObject;
import cn.sharesdk.framework.ShareSDK;
import com.bit.pedometer.ui.activity.MainActivity;
import com.bit.pedometer.R;
import com.bit.pedometer.data.db.PedometerDB;
import com.bit.pedometer.ui.fragment.onekeyshare.*;
import com.bit.pedometer.data.bean.Group;
import com.bit.pedometer.data.bean.Step;
import com.bit.pedometer.data.bean.User;
import com.bit.pedometer.data.bean.Weather;
import com.bit.pedometer.service.StepDetector;
import com.bit.pedometer.service.StepService;
import com.bit.pedometer.ui.view.CircleBar;
import com.bit.pedometer.common.utils.HttpCallbackListener;
import com.bit.pedometer.common.utils.HttpUtil;
import android.annotation.SuppressLint;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;
public class FragmentPedometer extends Fragment implements OnClickListener {
private View view;
private CircleBar circleBar;
private int total_step = 0;
private Thread thread;
private int Type = 1;
private int calories = 0;
private ImageView sharekey;
private int step_length = 50;
private int weight = 70;
private Step step = null;
private User user = null;
private Group group = null;
private Weather weather;
private PedometerDB pedometerDB;
private SimpleDateFormat sdf;
private String today;
private String test;
private boolean flag = true;// 来判断第三个页面是否开启动画
@SuppressLint("HandlerLeak")
Handler handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
total_step = StepDetector.CURRENT_SETP;
if (Type == 1) {
circleBar.setProgress(total_step, Type);
} else if (Type == 2) {
calories = (int) (weight * total_step * step_length * 0.01 * 0.01);
circleBar.setProgress(calories, Type);
} else if (Type == 3) {
if (flag) {
circleBar.startCustomAnimation();
flag = false;
}
if (test != null || weather.getWeather() == null) {
weather.setWeather("正在更新中...");
weather.setPtime("");
weather.setTemp1("");
weather.setTemp2("");
circleBar.setWeather(weather);
} else {
circleBar.setWeather(weather);
}
}
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
this.view = inflater.inflate(R.layout.pedometer, container, false);
init();
mThread();
return view;
}
@Override
public void onPause() {
super.onPause();
saveDate();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
saveDate();
}
private void saveDate() {
user = pedometerDB.loadUser(MainActivity.myObjectId);
step = pedometerDB.loadSteps(MainActivity.myObjectId, today);
group = pedometerDB.loadGroup(user.getGroupId());
user.setToday_step(StepDetector.CURRENT_SETP);
pedometerDB.updateUser(user);
// Toast.makeText(getActivity(), StepDetector.CURRENT_SETP+"--" + group.getID(),
// Toast.LENGTH_LONG).show();
group.setTotal_number(group.getTotal_number()
+ (user.getToday_step()- step.getNumber()));
pedometerDB.updateGroup(group);
step.setNumber(StepDetector.CURRENT_SETP);
pedometerDB.updateStep(step);
}
@SuppressLint("SimpleDateFormat")
private void init() {
ConnectivityManager connectivityManager = (ConnectivityManager) getActivity()
.getSystemService(getActivity().CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager
.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) {
}else {
Toast.makeText(getActivity(), "没有网络", Toast.LENGTH_LONG).show();
}
sdf = new SimpleDateFormat("yyyyMMdd");
today = sdf.format(new Date());
pedometerDB = PedometerDB.getInstance(getActivity());
user = pedometerDB.loadUser(MainActivity.myObjectId);
// Toast.makeText(getActivity(), MainActivity.myObjectId+"--" ,
// Toast.LENGTH_LONG).show();
if (MainActivity.myObjectId != null) {
step_length = user.getStep_length();
weight = user.getWeight();
StepDetector.SENSITIVITY = user.getSensitivity();
StepDetector.CURRENT_SETP = user.getToday_step();
} else {
Toast.makeText(getActivity(), "this is my", Toast.LENGTH_SHORT)
.show();
}
Intent intent = new Intent(getActivity(), StepService.class);
getActivity().startService(intent);
sharekey = (ImageView) view.findViewById(R.id.title_pedometer);
weather = new Weather();
circleBar = (CircleBar) view.findViewById(R.id.progress_pedometer);
circleBar.setMax(10000);
circleBar.setProgress(StepDetector.CURRENT_SETP, 1);
circleBar.startCustomAnimation();
circleBar.setOnClickListener(this);
ShareSDK.initSDK(getActivity());
sharekey.setOnClickListener(this);
}
private void mThread() {
if (thread == null) {
thread = new Thread(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (StepService.flag) {
Message msg = new Message();
handler.sendMessage(msg);
}
}
}
});
thread.start();
}
}
@SuppressLint("SimpleDateFormat")
private void queryFromServer(final String address) {
HttpUtil.sendHttpRequest(address, new HttpCallbackListener() {
@Override
public void onFinish(String response) {
JSONObject jsonObject;
try {
jsonObject = new JSONObject(response.toString());
JSONObject weatherInfo = jsonObject
.getJSONObject("weatherinfo");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
weather.setPtime(sdf.format(new Date()));
weather.setTemp1(weatherInfo.getString("temp1"));
weather.setTemp2(weatherInfo.getString("temp2"));
weather.setWeather(weatherInfo.getString("weather"));
test = null;
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Exception e) {
test = "同步失败";
}
});
}
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.title_pedometer:
OnekeyShare oks = new OnekeyShare();
oks.setNotification(R.drawable.pedometer,
"ShareSDK notification content");
oks.setText("今天已经走了" + total_step + "步");
oks.setSilent(false);
oks.disableSSOWhenAuthorize();
oks.setDialogMode();
// 显示
oks.show(getActivity());
break;
case R.id.progress_pedometer:
if (Type == 1) {
Type = 2;
} else if (Type == 2) {
String address = "http://www.weather.com.cn/data/cityinfo"
+ "/101010100.html";
queryFromServer(address);
flag = true;
Type = 3;
} else if (Type == 3) {
Type = 1;
}
Message msg = new Message();
handler.sendMessage(msg);
break;
default:
break;
}
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/FragmentSet.java
================================================
package com.bit.pedometer.ui.fragment;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.bit.pedometer.ui.activity.MainActivity;
import com.bit.pedometer.R;
import com.bit.pedometer.ui.activity.SetToTakePicActivity;
import com.bit.pedometer.data.db.PedometerDB;
import com.bit.pedometer.ui.fragment.tools.PictureUtil;
import com.bit.pedometer.ui.fragment.tools.ToRoundBitmap;
import com.bit.pedometer.data.bean.Group;
import com.bit.pedometer.data.bean.Step;
import com.bit.pedometer.data.bean.User;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.support.v4.app.Fragment;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.NumberPicker;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
public class FragmentSet extends Fragment implements OnClickListener {
public static final int REQUEST_CODE_TO_TACK_PICTURE = 2201;
public static final int REQUEST_CODE_TACK_PICTURE = 2202;
public static final int REQUEST_CODE_TACK_PICTURE_ZOOM = 2204;
public static final int REQUEST_CODE_FROM_ALBUM = 2203;
public static final int REQUEST_CODE_FROM_ALBUM_ZOOM = 2205;
private File file;
private View view;
// private LinearLayout sexLayout;
private LinearLayout weightLayout;
private LinearLayout sensitivyLayout;
private LinearLayout lengthLayout;
private LinearLayout nameLayout;
private RadioButton rButton1;
private RadioButton rButton2;
private TextView weightText;
private ImageView pictureImage;
private TextView sensitivyText;
private TextView lengthText;
private TextView nameText;
private EditText editText;
private AlertDialog.Builder dialog;
private NumberPicker numberPicker;
private PedometerDB pedometerDB;
private User user = null;
private Group group = null;
private ToRoundBitmap toRoundBitmap;
// private Intent pictureIntent;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.set, container, false);
init();
return view;
}
@Override
public void onPause() {
super.onPause();
pedometerDB.updateUser(user);
}
@Override
public void onDestroy() {
super.onDestroy();
pedometerDB.updateUser(user);
}
@SuppressLint("SimpleDateFormat")
private void init() {
toRoundBitmap = ToRoundBitmap.getInstance(getActivity());
// sexLayout = (LinearLayout) view.findViewById(R.id.sex);
weightLayout = (LinearLayout) view.findViewById(R.id.weight);
sensitivyLayout = (LinearLayout) view.findViewById(R.id.sensitivy);
lengthLayout = (LinearLayout) view.findViewById(R.id.lengh_step);
nameLayout = (LinearLayout) view.findViewById(R.id.set_name);
weightText = (TextView) view.findViewById(R.id.weight_);
sensitivyText = (TextView) view.findViewById(R.id.sensitivy_);
lengthText = (TextView) view.findViewById(R.id.lengh_step_);
nameText = (TextView) view.findViewById(R.id.name_);
pictureImage = (ImageView) view.findViewById(R.id.picture);
rButton1 = (RadioButton) view.findViewById(R.id.male);
rButton2 = (RadioButton) view.findViewById(R.id.female);
pedometerDB = PedometerDB.getInstance(getActivity());
weightLayout.setOnClickListener(this);
sensitivyLayout.setOnClickListener(this);
nameLayout.setOnClickListener(this);
lengthLayout.setOnClickListener(this);
rButton1.setOnClickListener(this);
rButton2.setOnClickListener(this);
pictureImage.setOnClickListener(this);
if (MainActivity.myObjectId != null) {
user = pedometerDB.loadUser(MainActivity.myObjectId);
nameText.setText(user.getName());
setSensitivity(user.getSensitivity());
weightText.setText(String.valueOf(user.getWeight()));
Bitmap picture = PictureUtil.Byte2Bitmap(user.getPicture());
pictureImage.setImageBitmap(toRoundBitmap.toRoundBitmap(picture));
lengthText.setText(String.valueOf(user.getStep_length()));
if (user.getSex().equals("男")) {
rButton1.setChecked(true);
} else {
rButton2.setChecked(true);
}
} else {
pictureImage.setImageBitmap(toRoundBitmap
.toRoundBitmap(BitmapFactory.decodeResource(getActivity()
.getResources(), R.drawable.default_picture)));
user = new User();
user.setName(nameText.getText().toString());
user.setWeight(Integer.valueOf(weightText.getText().toString()));
user.setSensitivity(10);
user.setSex("男");
Bitmap picture = PictureUtil.drawable2Bitmap(getActivity()
.getResources().getDrawable(R.drawable.default_picture));
user.setPicture(PictureUtil.Bitmap2Byte(picture));
user.setStep_length(Integer
.valueOf(lengthText.getText().toString()));
user.setGroupId(1);
group = pedometerDB.loadGroup(1);
group.setMember_number(1);
pedometerDB.updateGroup(group);
user.setObjectId("1");
MainActivity.myObjectId = user.getObjectId();
pedometerDB.saveUser(user);
// 将当前日期格式化为:yyyyMMdd
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Step step = new Step();
// 得到当天的日期
step.setDate(sdf.format(new Date()));
step.setUserId(MainActivity.myObjectId);
step.setNumber(0);
pedometerDB.saveStep(step);
}
}
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.picture:
Intent intent = new Intent(getActivity(),
SetToTakePicActivity.class);
startActivityForResult(intent, REQUEST_CODE_TO_TACK_PICTURE);
pedometerDB.updateUser(user);
break;
case R.id.set_name:
dialog = new AlertDialog.Builder(getActivity());
editText = new EditText(getActivity());
editText.setSingleLine(true);
dialog.setView(editText);
dialog.setTitle("填写姓名");
dialog.setPositiveButton("确认",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
nameText.setText(editText.getText().toString());
user.setName(editText.getText().toString());
pedometerDB.updateUser(user);
}
});
dialog.show();
break;
case R.id.weight:
dialog = new AlertDialog.Builder(getActivity());
numberPicker = new NumberPicker(getActivity());
numberPicker.setFocusable(true);
numberPicker.setFocusableInTouchMode(true);
numberPicker.setMaxValue(200);
numberPicker.setValue(Integer.parseInt(weightText.getText()
.toString()));
numberPicker.setMinValue(30);
dialog.setView(numberPicker);
dialog.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
weightText.setText(numberPicker.getValue() + "");
user.setWeight(numberPicker.getValue());
}
});
dialog.show();
break;
case R.id.sensitivy:
dialog = new AlertDialog.Builder(getActivity());
numberPicker = new NumberPicker(getActivity());
numberPicker.setFocusable(true);
numberPicker.setFocusableInTouchMode(true);
numberPicker.setMaxValue(10);
numberPicker.setMinValue(1);
dialog.setView(numberPicker);
dialog.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
user.setSensitivity(numberPicker.getValue());
setSensitivity(numberPicker.getValue());
}
});
dialog.show();
break;
case R.id.lengh_step:
dialog = new AlertDialog.Builder(getActivity());
numberPicker = new NumberPicker(getActivity());
numberPicker.setFocusable(true);
numberPicker.setFocusableInTouchMode(true);
numberPicker.setMaxValue(100);
numberPicker.setValue(Integer.parseInt(lengthText.getText()
.toString()));
numberPicker.setMinValue(15);
dialog.setView(numberPicker);
dialog.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
lengthText.setText(numberPicker.getValue() + "");
user.setStep_length(numberPicker.getValue());
}
});
dialog.show();
break;
case R.id.male:
user.setSex("男");
break;
case R.id.female:
user.setSex("女");
break;
}
}
private void setSensitivity(int value) {
switch (value) {
case 1:
sensitivyText.setText("一级");
break;
case 2:
sensitivyText.setText("二级");
break;
case 3:
sensitivyText.setText("三级");
break;
case 4:
sensitivyText.setText("四级");
break;
case 5:
sensitivyText.setText("五级");
break;
case 6:
sensitivyText.setText("六级");
break;
case 7:
sensitivyText.setText("七级");
break;
case 8:
sensitivyText.setText("八级");
break;
case 9:
sensitivyText.setText("九级");
break;
case 10:
sensitivyText.setText("十级");
break;
default:
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (Activity.RESULT_OK == resultCode) {
switch (requestCode) {
case REQUEST_CODE_TO_TACK_PICTURE:
Intent i = new Intent();
i.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
// 两个参数:外部存储设备目录,存储的名字
file = new File(Environment.getExternalStorageDirectory(),
System.currentTimeMillis() + ".jpg");
// 往意图中放额外的数据
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); // 设置拍照的照片存储在哪个位置。
String state = Environment.getExternalStorageState();
if (!Environment.MEDIA_MOUNTED.equals(state)) {
Toast.makeText(getActivity(),
"SD Card Error! Please check it!",
Toast.LENGTH_SHORT).show();
return;
}
// 头像获取方式获取,并调用对应系统API
String buttonType = (String) data.getExtras().get(
SetToTakePicActivity.INTENT_KEY_BUTTON_TYPE);
if (SetToTakePicActivity.BUTTON_TYPE_TAKE_PICTURES
.equals(buttonType)) {
startActivityForResult(i, REQUEST_CODE_TACK_PICTURE_ZOOM);
} else if (SetToTakePicActivity.BUTTON_TYPE_FROM_ALBUM
.equals(buttonType)) {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
startActivityForResult(intent, REQUEST_CODE_FROM_ALBUM_ZOOM);
}
break;
case REQUEST_CODE_TACK_PICTURE_ZOOM:
Uri uri_tack = Uri.fromFile(file);
if (uri_tack != null) {
startPhotoZoom(uri_tack, REQUEST_CODE_TACK_PICTURE);
}
break;
case REQUEST_CODE_TACK_PICTURE:
Bitmap photo = null;
if (photo == null) {
Bundle bundle = data.getExtras();
if (bundle != null) {
photo = (Bitmap) bundle.get("data");
}
}
if (photo != null) {
pictureImage.setImageBitmap(toRoundBitmap.toRoundBitmap(photo));
} else {
Toast.makeText(getActivity(),
"添加头像失败,请重新操作",
Toast.LENGTH_LONG).show();
}
break;
case REQUEST_CODE_FROM_ALBUM_ZOOM:
Uri originalUri = data.getData();
if (originalUri != null) {
startPhotoZoom(originalUri, REQUEST_CODE_FROM_ALBUM);
}
break;
case REQUEST_CODE_FROM_ALBUM:
Bitmap image = null;
Bundle bundle = data.getExtras();
if (bundle != null) {
image = (Bitmap) bundle.get("data");
}
if (image != null) {
pictureImage.setImageBitmap(toRoundBitmap.toRoundBitmap(image));
} else {
Toast.makeText(getActivity(),
"添加头像失败,请重新操作",
Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
}
}
/**
* 裁剪图片方法实现
*
* @param uri
*/
public void startPhotoZoom(Uri uri, int witch) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 300);
intent.putExtra("outputY", 300);
// 系统的裁剪图片默认对图片进行人脸识别,当识别到有人脸时,
// 会按aspectX和aspectY为1来处理,如果想设置成自定义的裁剪比例,
// 需要设置noFaceDetection为true。
intent.putExtra("noFaceDetection", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, witch);
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/PK/FragmentPK_1.java
================================================
package com.bit.pedometer.ui.fragment.PK;
import java.util.List;
import com.bit.pedometer.ui.activity.MainActivity;
import com.bit.pedometer.R;
import com.bit.pedometer.data.db.PedometerDB;
import com.bit.pedometer.ui.fragment.tools.MyListAdapter;
import com.bit.pedometer.ui.fragment.tools.PictureUtil;
import com.bit.pedometer.ui.fragment.tools.ReFlashListView;
import com.bit.pedometer.ui.fragment.tools.ToRoundBitmap;
import com.bit.pedometer.ui.fragment.tools.ReFlashListView.IReflashListener;
import com.bit.pedometer.data.bean.Group;
import com.bit.pedometer.data.bean.User;
import android.support.v4.app.Fragment;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
public class FragmentPK_1 extends Fragment implements OnItemClickListener,
IReflashListener {
private View view;
private ReFlashListView listView;
private MyListAdapter mAdapter;
private PedometerDB pedometerDB;
private List users;
private ToRoundBitmap toRoundBitmap;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.pk_1, container, false);
init();
showList();
return view;
}
@Override
public void onResume() {
super.onResume();
users = pedometerDB.lodListUsers();
showList();
}
@SuppressLint("SimpleDateFormat")
private void init() {
toRoundBitmap = ToRoundBitmap.getInstance(getActivity());
listView = (ReFlashListView) view.findViewById(R.id.pk_1_listview);
pedometerDB = PedometerDB.getInstance(getActivity());
users = pedometerDB.lodListUsers();
// Toast.makeText(getActivity(), users.get(0).getSex() + "",
// Toast.LENGTH_LONG).show();
// listView.setOnScrollListener(this);
}
private void showList() {
if (mAdapter == null) {
mAdapter = new MyListAdapter(getActivity(), users, listView);
listView.setAdapter(mAdapter);
} else {
mAdapter.changeData(users);
}
listView.setInterface(this);
listView.setOnItemClickListener(this);
}
@SuppressLint("InflateParams")
public void onItemClick(AdapterView> arg0, View convrtView, int position,
long arg3) {
final int pos = position - 1;
final AlertDialog.Builder dialog = new AlertDialog.Builder(
getActivity());
LayoutInflater inflater = LayoutInflater.from(getActivity());
View view = inflater.inflate(R.layout.userinfo, null);
TextView name = (TextView) view.findViewById(R.id.user_name);
TextView steps = (TextView) view.findViewById(R.id.user_steps);
TextView number = (TextView) view.findViewById(R.id.user_number);
TextView sex = (TextView) view.findViewById(R.id.user_sex);
ImageView picture = (ImageView) view.findViewById(R.id.user_picture);
sex.setText(users.get(pos).getSex());
Bitmap bitmap = toRoundBitmap.toRoundBitmap(PictureUtil
.Byte2Bitmap(users.get(pos).getPicture()));
picture.setImageBitmap(bitmap);
steps.setText(users.get(pos).getToday_step() + "");
number.setText((position) + "");
dialog.setView(view);
if (users.get(pos).getObjectId().equals(MainActivity.myObjectId)) {
dialog.setPositiveButton("确认", null);
name.setText(users.get(pos).getName() + "(自己)");
} else {
name.setText(users.get(pos).getName());
dialog.setNegativeButton("删除",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
pedometerDB.deleteUser(users.get(pos));
Group group = pedometerDB.loadGroup(users.get(pos)
.getGroupId());
group.setMember_number(group.getMember_number() - 1);
group.setTotal_number(group.getTotal_number()
- users.get(pos).getToday_step());
pedometerDB.updateGroup(group);
}
});
dialog.setPositiveButton("确认", null);
}
dialog.setCancelable(false);
dialog.show();
}
@Override
public void onReflash() {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// 获取最新数据
users = pedometerDB.lodListUsers();
// 通知界面显示
showList();
// 通知listview 刷新数据完毕;
listView.reflashComplete();
}
}, 2000);
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/PK/FragmentPK_2.java
================================================
package com.bit.pedometer.ui.fragment.PK;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import com.bit.pedometer.R;
import com.bit.pedometer.data.db.PedometerDB;
import com.bit.pedometer.ui.fragment.tools.ExpandableListViewAdapter;
import com.bit.pedometer.data.bean.Group;
import com.bit.pedometer.data.bean.User;
public class FragmentPK_2 extends Fragment implements OnChildClickListener {
private View view;
private ExpandableListView listView;
private ExpandableListViewAdapter eAdapter;
private List list;
private HashMap> userMap;
private List userList;
private PedometerDB pedometerDB;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.pk_2, container, false);
init();
prepareData();
showData();
return view;
}
@Override
public void onResume() {
super.onResume();
prepareData();
showData();
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
private void showData() {
if (eAdapter == null) {
eAdapter = new ExpandableListViewAdapter(getActivity(), list,
userMap, listView);
listView.setAdapter(eAdapter);
} else {
eAdapter.changeExpandableList(list, userMap);
}
}
private void init() {
listView = (ExpandableListView) view.findViewById(R.id.pk_2_listview);
userMap = new HashMap>();
pedometerDB = PedometerDB.getInstance(getActivity());
list = new ArrayList();
userList = new ArrayList();
listView.setOnChildClickListener(this);
}
private void prepareData() {
list = pedometerDB.loadListGroup();
userList = pedometerDB.lodListUsers();
for (int i = 0; i < list.size(); i++) {
List mUser = new ArrayList();
for (int j = 0; j < userList.size(); j++) {
if (userList.get(j).getGroupId() == list.get(i).getID()) {
mUser.add(userList.get(j));
userMap.put(list.get(i), mUser);
}
}
}
}
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
User user = userMap.get(list.get(groupPosition)).get(childPosition);
Intent intent = new Intent(getActivity(), FragmentPK_memberset.class);
// Toast.makeText(getActivity(), user.getName(),
// Toast.LENGTH_SHORT).show();
intent.putExtra("user_data", user);
startActivity(intent);
getActivity().overridePendingTransition(R.anim.slide_bottom_in,
R.anim.slide_top_out);
return false;
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/PK/FragmentPK_addmember.java
================================================
package com.bit.pedometer.ui.fragment.PK;
import java.util.List;
import cn.bmob.v3.Bmob;
import com.bit.pedometer.ui.activity.MainActivity;
import com.bit.pedometer.R;
import com.bit.pedometer.data.db.PedometerDB;
import com.bit.pedometer.ui.fragment.tools.MyAdapter;
import com.bit.pedometer.ui.fragment.tools.ReFlashListView;
import com.bit.pedometer.ui.fragment.tools.ReFlashListView.IReflashListener;
import com.bit.pedometer.data.bean.Step;
import com.bit.pedometer.data.bean.User;
import com.bit.pedometer.common.utils.BmobUtil;
import com.bit.pedometer.common.utils.BmobUtil.BmobQueryListener;
import com.bit.pedometer.common.utils.BmobUtil.BmobSaveAndUpdataListener;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.Toast;
public class FragmentPK_addmember extends FragmentActivity implements
OnClickListener, IReflashListener {
private ImageView back;
private ReFlashListView memberList;
private MyAdapter myAdapter;
private User user;
private List steps;
private PedometerDB pedometerdb;
private ProgressDialog progressDialog;
private boolean flag = false;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.member_add);
init();
queryAll();
}
private void init() {
Bmob.initialize(this, "c153449e638703134b8fe75c52210bc7");
back = (ImageView) findViewById(R.id.member_add_back);
memberList = (ReFlashListView) findViewById(R.id.member_add_list);
pedometerdb = PedometerDB.getInstance(this);
user = pedometerdb.loadFirstUser();
steps = pedometerdb.loadListSteps();
showProgressDialog();
BmobUtil.saveBmob(user, new BmobSaveAndUpdataListener() {
@Override
public void onFinishedupdata(User user) {
Toast.makeText(FragmentPK_addmember.this, "向服务器更新自己信息",
Toast.LENGTH_SHORT).show();
}
@Override
public void onFinishedSave(User user) {
Toast.makeText(FragmentPK_addmember.this, "成功连接服务器",
Toast.LENGTH_SHORT).show();
pedometerdb.changeObjectId(user);
MainActivity.myObjectId = user.getObjectId();
for (int i = 0; i < steps.size(); i++) {
Step step = steps.get(i);
step.setUserId(user.getObjectId());
pedometerdb.changeuserId(step);
}
}
@Override
public void onFailure(String str) {
Toast.makeText(FragmentPK_addmember.this, str,
Toast.LENGTH_SHORT).show();
}
}, this);
back.setOnClickListener(this);
memberList.setInterface(this);
}
private void queryAll() {
BmobUtil.queryBmob(new BmobQueryListener() {
@Override
public void onQuerySuccess(List users) {
// Toast.makeText(FragmentPK_addmember.this,
// user_list.get(0).getName() + "", Toast.LENGTH_SHORT)
// .show();
myAdapter = new MyAdapter(FragmentPK_addmember.this, users,
memberList);
memberList.setAdapter(myAdapter);
closeProgressDialog();
if (flag) {
memberList.reflashComplete();
flag = false;
}
}
@Override
public void onFailure(String str) {
Toast.makeText(FragmentPK_addmember.this, "连接不上服务器",
Toast.LENGTH_SHORT).show();
closeProgressDialog();
FragmentPK_addmember.this.finish();
}
}, this);
}
/**
* 显示进度对话框
*/
private void showProgressDialog() {
if (progressDialog == null) {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("正在加载...");
progressDialog.setCanceledOnTouchOutside(false);
}
progressDialog.show();
}
/**
* 关闭进度对话框
*/
private void closeProgressDialog() {
if (progressDialog != null) {
progressDialog.dismiss();
}
}
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.member_add_back:
this.finish();
break;
case R.id.member_add_list_button:
break;
default:
break;
}
}
@Override
public void onReflash() {
queryAll();
flag = true;
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/PK/FragmentPK_memberset.java
================================================
package com.bit.pedometer.ui.fragment.PK;
import com.bit.pedometer.R;
import com.bit.pedometer.data.db.PedometerDB;
import com.bit.pedometer.ui.fragment.tools.MyNumberPicker;
import com.bit.pedometer.ui.fragment.tools.PictureUtil;
import com.bit.pedometer.ui.fragment.tools.ToRoundBitmap;
import com.bit.pedometer.data.bean.Group;
import com.bit.pedometer.data.bean.User;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class FragmentPK_memberset extends FragmentActivity implements
OnClickListener {
private User user;
private ImageView picture;
private TextView name;
private ImageView sexImage;
private TextView weight;
private TextView steps;
private MyNumberPicker nPicker;
private Button btn1;//OK按钮,确定
private Button btn2;//NO按钮,取消当前操作
private Group group;
private PedometerDB pedometerDB;
private int groNum;
private ToRoundBitmap toRoundBitmap;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.membet_set);
init();
}
private void init() {
toRoundBitmap = ToRoundBitmap.getInstance(this);
picture = (ImageView) findViewById(R.id.member_picture);
name = (TextView) findViewById(R.id.member_name);
sexImage = (ImageView) findViewById(R.id.member_sexpic);
weight = (TextView) findViewById(R.id.member_weight);
steps = (TextView) findViewById(R.id.member_steps);
nPicker = (MyNumberPicker) findViewById(R.id.member_numberPicker);
btn1 = (Button) findViewById(R.id.member_button1);
btn2 = (Button) findViewById(R.id.member_button2);
user = (User) getIntent().getSerializableExtra("user_data");
Bitmap bitmap = toRoundBitmap.toRoundBitmap(PictureUtil
.Byte2Bitmap(user.getPicture()));
picture.setImageBitmap(bitmap);
// if (user.getPicture() != null) {
//
// try {
// bitmap = ToRoundBitmap
// .toRoundBitmap(BitmapFactory.decodeStream(this
// .getContentResolver().openInputStream(
// Uri.parse(user.getPicture()))));
// picture.setImageBitmap(bitmap);
// } catch (FileNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// } else {
// Resources default_picture = this.getResources();
// bitmap = ToRoundBitmap.toRoundBitmap(BitmapFactory.decodeResource(
// default_picture, R.drawable.default_picture));
// picture.setImageBitmap(bitmap);
// }
name.setText(user.getName());
if (user.getSex().equals("男")) {
sexImage.setImageResource(R.drawable.male_set);
} else {
sexImage.setImageResource(R.drawable.female_set);
}
weight.setText(user.getWeight() + "");
steps.setText(user.getToday_step() + "");
nPicker.setFocusable(true);
nPicker.setFocusableInTouchMode(true);
nPicker.setMaxValue(3);
nPicker.setValue(user.getGroupId());
nPicker.setMinValue(1);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.member_button1:
pedometerDB = PedometerDB.getInstance(this);//实例化数据库操作类
group = pedometerDB.loadGroup(user.getGroupId());//取出当前成员所在的组,方便随后的修改
groNum = nPicker.getValue();//选择移动的组数
//如果移动组数则执行下列的语句
if (groNum != user.getGroupId()) {
group.setMember_number(group.getMember_number() - 1);
group.setTotal_number(group.getTotal_number()
- user.getToday_step());
pedometerDB.updateGroup(group);
Group group1 = pedometerDB.loadGroup(groNum);
group1.setMember_number(group1.getMember_number() + 1);
group1.setTotal_number(group1.getTotal_number()
+ user.getToday_step());
pedometerDB.updateGroup(group1);
user.setGroupId(groNum);
pedometerDB.updateUser(user);
}
this.finish();
break;
case R.id.member_button2:
this.finish();
break;
default:
break;
}
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/onekeyshare/CustomerLogo.java
================================================
/*
* Offical Website:http://www.ShareSDK.cn
* Support QQ: 4006852216
* Offical Wechat Account:ShareSDK (We will inform you our updated news at the first time by Wechat, if we release a new version. If you get any problem, you can also contact us with Wechat, we will reply you within 24 hours.)
*
* Copyright (c) 2013 ShareSDK.cn. All rights reserved.
*/
package com.bit.pedometer.ui.fragment.onekeyshare;
import android.graphics.Bitmap;
import android.view.View.OnClickListener;
/** 九宫格自定义的图标对象 */
public class CustomerLogo {
public String label;
public Bitmap logo;
public OnClickListener listener;
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/onekeyshare/EditPage.java
================================================
/*
* Offical Website:http://www.ShareSDK.cn
* Support QQ: 4006852216
* Offical Wechat Account:ShareSDK (We will inform you our updated news at the first time by Wechat, if we release a new version. If you get any problem, you can also contact us with Wechat, we will reply you within 24 hours.)
*
* Copyright (c) 2013 ShareSDK.cn. All rights reserved.
*/
package com.bit.pedometer.ui.fragment.onekeyshare;
import static cn.sharesdk.framework.utils.R.*;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Typeface;
import android.os.Message;
import android.os.Handler.Callback;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout.LayoutParams;
import android.widget.Toast;
import cn.sharesdk.framework.FakeActivity;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.framework.TitleLayout;
import cn.sharesdk.framework.utils.UIHandler;
/**
* Photo-text Sharing will be handling in this page
*
* note:
* wechat, yixin, qzone, etc. are shared in their clients, not in this page
*/
public class EditPage extends FakeActivity implements OnClickListener, TextWatcher, Callback {
private static final int MAX_TEXT_COUNT = 140;
private static final int MSG_PLATFORM_LIST_GOT = 1;
private HashMap reqData;
private OnekeyShare parent;
private LinearLayout llPage;
private TitleLayout llTitle;
// share content editor
private EditText etContent;
// Words counter
private TextView tvCounter;
// the pin
private ImageView ivPin;
// shared image container
private ImageView ivImage;
private Bitmap image;
private boolean shareImage;
private LinearLayout llPlat;
private LinearLayout llAt;
// platform list
private Platform[] platformList;
private View[] views;
// set to display as a dialog
private boolean dialogMode;
public void setShareData(HashMap data) {
reqData = data;
}
public void setParent(OnekeyShare parent) {
this.parent = parent;
}
/** set to display as a dialog */
public void setDialogMode() {
dialogMode = true;
}
public void setActivity(Activity activity) {
super.setActivity(activity);
if (dialogMode) {
activity.setTheme(android.R.style.Theme_Dialog);
activity.requestWindowFeature(Window.FEATURE_NO_TITLE);
}
activity.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
public void onCreate() {
if (reqData == null) {
finish();
return;
}
initPageView();
activity.setContentView(llPage);
onTextChanged(etContent.getText(), 0, etContent.length(), 0);
// requests platform list and remove platforms share in their clients
new Thread(){
public void run() {
platformList = ShareSDK.getPlatformList(activity);
if (platformList == null) {
return;
}
ArrayList list = new ArrayList();
for (Platform plat : platformList) {
String name = plat.getName();
if (ShareCore.isUseClientToShare(activity, name)) {
continue;
}
list.add(plat);
}
platformList = new Platform[list.size()];
for (int i = 0; i < platformList.length; i++) {
platformList[i] = list.get(i);
}
UIHandler.sendEmptyMessage(MSG_PLATFORM_LIST_GOT, EditPage.this);
}
}.start();
}
private void initPageView() {
llPage = new LinearLayout(getContext());
llPage.setBackgroundColor(0xff323232);
llPage.setOrientation(LinearLayout.VERTICAL);
// title bar
llTitle = new TitleLayout(getContext());
int resId = getBitmapRes(activity, "title_back");
if (resId > 0) {
llTitle.setBackgroundResource(resId);
}
llTitle.getBtnBack().setOnClickListener(this);
resId = getStringRes(activity, "multi_share");
if (resId > 0) {
llTitle.getTvTitle().setText(resId);
}
llTitle.getBtnRight().setVisibility(View.VISIBLE);
resId = getStringRes(activity, "share");
if (resId > 0) {
llTitle.getBtnRight().setText(resId);
}
llTitle.getBtnRight().setOnClickListener(this);
llTitle.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
llPage.addView(llTitle);
FrameLayout flPage = new FrameLayout(getContext());
LinearLayout.LayoutParams lpFl = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lpFl.weight = 1;
flPage.setLayoutParams(lpFl);
llPage.addView(flPage);
// page body
LinearLayout llBody = new LinearLayout(getContext());
llBody.setOrientation(LinearLayout.VERTICAL);
FrameLayout.LayoutParams lpLl = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
lpLl.gravity = Gravity.LEFT | Gravity.TOP;
llBody.setLayoutParams(lpLl);
flPage.addView(llBody);
// the pin
ivPin = new ImageView(getContext());
resId = getBitmapRes(activity, "pin");
if (resId > 0) {
ivPin.setImageResource(resId);
}
int dp_80 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 80);
int dp_36 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 36);
FrameLayout.LayoutParams lpPin = new FrameLayout.LayoutParams(dp_80, dp_36);
lpPin.topMargin = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 6);
lpPin.gravity = Gravity.RIGHT | Gravity.TOP;
ivPin.setLayoutParams(lpPin);
flPage.addView(ivPin);
ImageView ivShadow = new ImageView(getContext());
resId = getBitmapRes(activity, "title_shadow");
if (resId > 0) {
ivShadow.setBackgroundResource(resId);
}
FrameLayout.LayoutParams lpSd = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
ivShadow.setLayoutParams(lpSd);
flPage.addView(ivShadow);
LinearLayout llInput = new LinearLayout(getContext());
llInput.setMinimumHeight(cn.sharesdk.framework.utils.R.dipToPx(getContext(), 150));
resId = getBitmapRes(activity, "edittext_back");
if (resId > 0) {
llInput.setBackgroundResource(resId);
}
LinearLayout.LayoutParams lpInput = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
int dp_3 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 3);
lpInput.setMargins(dp_3, dp_3, dp_3, dp_3);
lpInput.weight = 1;
llInput.setLayoutParams(lpInput);
llBody.addView(llInput);
// platform logos
LinearLayout llToolBar = new LinearLayout(getContext());
resId = getBitmapRes(activity, "share_tb_back");
if (resId > 0) {
llToolBar.setBackgroundResource(resId);
}
LinearLayout.LayoutParams lpTb = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
int dp_4 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 4);
lpTb.setMargins(dp_4, 0, dp_4, dp_4);
llToolBar.setLayoutParams(lpTb);
llBody.addView(llToolBar);
LinearLayout llContent = new LinearLayout(getContext());
llContent.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams lpEt = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
lpEt.weight = 1;
llContent.setLayoutParams(lpEt);
llInput.addView(llContent);
// share content editor
etContent = new EditText(getContext());
etContent.setGravity(Gravity.LEFT | Gravity.TOP);
etContent.setText(String.valueOf(reqData.get("text")));
etContent.addTextChangedListener(this);
etContent.setLayoutParams(lpEt);
llContent.addView(etContent);
String platform = String.valueOf(reqData.get("platform"));
checkAtMth(llContent, platform);
int dp_74 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 74);
int dp_16 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 16);
String imagePath = String.valueOf(reqData.get("imagePath"));
if(!TextUtils.isEmpty(imagePath) && new File(imagePath).exists()){
LinearLayout llRight = new LinearLayout(getContext());
llRight.setOrientation(LinearLayout.VERTICAL);
llRight.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
llInput.addView(llRight);
// shared image container
ivImage = new ImageView(getContext());
resId = getBitmapRes(activity, "btn_back_nor");
if (resId > 0) {
ivImage.setBackgroundResource(resId);
}
ivImage.setScaleType(ScaleType.CENTER_INSIDE);
ivImage.setVisibility(View.GONE);
ivImage.setVisibility(View.VISIBLE);
try {
shareImage = true;
image = cn.sharesdk.framework.utils.R.getBitmap(imagePath);
ivImage.setImageBitmap(image);
} catch(Throwable t) {
System.gc();
try {
image = cn.sharesdk.framework.utils.R.getBitmap(imagePath, 2);
ivImage.setImageBitmap(image);
} catch(Throwable t1) {
t1.printStackTrace();
shareImage = false;
}
}
ivImage.setPadding(dp_4, dp_4, dp_4, dp_4);
LinearLayout.LayoutParams lpImage = new LinearLayout.LayoutParams(dp_74, dp_74);
int dp_8 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 8);
lpImage.setMargins(0, dp_16, dp_8, 0);
ivImage.setLayoutParams(lpImage);
llRight.addView(ivImage);
if(!shareImage){
ivPin.setVisibility(View.GONE);
ivImage.setVisibility(View.GONE);
}
ivImage.setOnClickListener(this);
}else {
shareImage = false;
ivPin.setVisibility(View.GONE);
}
// shared image container
if(shareImage){
Button btn = new Button(getContext());
btn.setTag("img_cancel");
btn.setOnClickListener(this);
resId = getBitmapRes(activity, "img_cancel");
if (resId > 0) {
btn.setBackgroundResource(resId);
}
int dp_20 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 20);
int dp_83 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 83);
int dp_13 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 13);
FrameLayout.LayoutParams lpBtn = new FrameLayout.LayoutParams(dp_20, dp_20);
lpBtn.topMargin = dp_83;
lpBtn.rightMargin = dp_13;
lpBtn.gravity = Gravity.RIGHT | Gravity.TOP;
btn.setPadding(dp_4, dp_4, dp_4, dp_4);
btn.setLayoutParams(lpBtn);
flPage.addView(btn);
}
// Words counter
tvCounter = new TextView(getContext());
tvCounter.setText(String.valueOf(MAX_TEXT_COUNT));
tvCounter.setTextColor(0xffcfcfcf);
tvCounter.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
tvCounter.setTypeface(Typeface.DEFAULT_BOLD);
FrameLayout.LayoutParams lpCounter = new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpCounter.bottomMargin = dp_74;
lpCounter.gravity = Gravity.RIGHT | Gravity.BOTTOM;
tvCounter.setPadding(0, 0, dp_16, 0);
tvCounter.setLayoutParams(lpCounter);
flPage.addView(tvCounter);
TextView tvShareTo = new TextView(getContext());
resId = getStringRes(activity, "share_to");
if (resId > 0) {
tvShareTo.setText(resId);
}
tvShareTo.setTextColor(0xffcfcfcf);
tvShareTo.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
int dp_9 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 9);
LinearLayout.LayoutParams lpShareTo = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpShareTo.gravity = Gravity.CENTER_VERTICAL;
lpShareTo.setMargins(dp_9, 0, 0, 0);
tvShareTo.setLayoutParams(lpShareTo);
llToolBar.addView(tvShareTo);
HorizontalScrollView sv = new HorizontalScrollView(getContext());
sv.setHorizontalScrollBarEnabled(false);
sv.setHorizontalFadingEdgeEnabled(false);
LinearLayout.LayoutParams lpSv = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpSv.setMargins(dp_9, dp_9, dp_9, dp_9);
sv.setLayoutParams(lpSv);
llToolBar.addView(sv);
llPlat = new LinearLayout(getContext());
llPlat.setLayoutParams(new HorizontalScrollView.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
sv.addView(llPlat);
}
// if platform selected form platform gridview is SinaWeibo,
// TencentWeibo, Facebook, or Twitter, there will be a button
// in the left-bottom of the page, which provides At-friends function
private void checkAtMth(LinearLayout llInput, String platform) {
if ("SinaWeibo".equals(platform) || "TencentWeibo".equals(platform)
|| "Facebook".equals(platform) || "Twitter".equals(platform)) {
llAt= new LinearLayout(getContext());
FrameLayout.LayoutParams lpAt = new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpAt.leftMargin = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 10);
lpAt.bottomMargin = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 10);
lpAt.gravity = Gravity.LEFT | Gravity.BOTTOM;
llAt.setLayoutParams(lpAt);
llAt.setOnClickListener(this);
llInput.addView(llAt);
TextView tvAt = new TextView(getContext());
int resId = getBitmapRes(activity, "btn_back_nor");
if (resId > 0) {
tvAt.setBackgroundResource(resId);
}
int dp_32 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 32);
tvAt.setLayoutParams(new LinearLayout.LayoutParams(dp_32, dp_32));
tvAt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
tvAt.setText("@");
int dp_2 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 2);
tvAt.setPadding(0, 0, 0, dp_2);
tvAt.setTypeface(Typeface.DEFAULT_BOLD);
tvAt.setTextColor(0xff000000);
tvAt.setGravity(Gravity.CENTER);
llAt.addView(tvAt);
TextView tvName = new TextView(getContext());
tvName.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
tvName.setTextColor(0xff000000);
resId = getStringRes(activity, "list_friends");
String text = getContext().getString(resId, getName(platform));
tvName.setText(text);
LinearLayout.LayoutParams lpName = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpName.gravity = Gravity.CENTER_VERTICAL;
tvName.setLayoutParams(lpName);
llAt.addView(tvName);
}
}
private String getName(String platform) {
if (platform == null) {
return "";
}
int resId = cn.sharesdk.framework.utils.R.getStringRes(getContext(), platform);
return getContext().getString(resId);
}
public void onClick(View v) {
if (v.equals(ivImage)) {
if (image != null && !image.isRecycled()) {
PicViewer pv = new PicViewer();
pv.setImageBitmap(image);
pv.show(activity, null);
}
return;
}
if (v.equals(llTitle.getBtnBack())) {
Platform plat = null;
for (int i = 0; i < views.length; i++) {
if (views[i].getVisibility() == View.INVISIBLE) {
plat = platformList[i];
break;
}
}
// a statistics of Cancel-sharing
if (plat != null) {
ShareSDK.logDemoEvent(5, plat);
}
finish();
return;
}
// a statistics of Cancel-sharing
if (v.equals(llTitle.getBtnRight())) {
String text = etContent.getText().toString();
reqData.put("text", text);
if(!shareImage){
reqData.put("imagePath", null);
}
HashMap> editRes
= new HashMap>();
boolean selected = false;
for (int i = 0; i < views.length; i++) {
if (views[i].getVisibility() != View.VISIBLE) {
editRes.put(platformList[i], reqData);
selected = true;
}
}
if (selected) {
if (parent != null) {
parent.share(editRes);
}
finish();
}
else {
int resId = getStringRes(activity, "select_one_plat_at_least");
if (resId > 0) {
Toast.makeText(getContext(), resId, Toast.LENGTH_SHORT).show();
}
}
return;
}
if (v.equals(llAt)) {
FollowList subPage = new FollowList();
String platform = String.valueOf(reqData.get("platform"));
subPage.setPlatform(ShareSDK.getPlatform(activity, platform));
subPage.setBackPage(this);
subPage.show(activity, null);
return;
}
// remove the photo to share
if("img_cancel".equals(v.getTag())){
v.setVisibility(View.GONE);
ivPin.setVisibility(View.GONE);
ivImage.setVisibility(View.GONE);
shareImage = false;
}
if (v instanceof FrameLayout) {
((FrameLayout) v).getChildAt(1).performClick();
return;
}
if (v.getVisibility() == View.INVISIBLE) {
v.setVisibility(View.VISIBLE);
}
else {
v.setVisibility(View.INVISIBLE);
}
}
public boolean handleMessage(Message msg) {
switch(msg.what) {
case MSG_PLATFORM_LIST_GOT: {
afterPlatformListGot();
}
break;
}
return false;
}
/** display platform list */
public void afterPlatformListGot() {
String name = String.valueOf(reqData.get("platform"));
int size = platformList == null ? 0 : platformList.length;
views = new View[size];
final int dp_36 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 36);
LinearLayout.LayoutParams lpItem = new LinearLayout.LayoutParams(dp_36, dp_36);
final int dp_9 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 9);
lpItem.setMargins(0, 0, dp_9, 0);
FrameLayout.LayoutParams lpMask = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
lpMask.gravity = Gravity.LEFT | Gravity.TOP;
int selection = 0;
for (int i = 0; i < size; i++) {
FrameLayout fl = new FrameLayout(getContext());
fl.setLayoutParams(lpItem);
if (i >= size - 1) {
fl.setLayoutParams(new LinearLayout.LayoutParams(dp_36, dp_36));
}
llPlat.addView(fl);
fl.setOnClickListener(this);
ImageView iv = new ImageView(getContext());
iv.setScaleType(ScaleType.CENTER_INSIDE);
iv.setImageBitmap(getPlatLogo(platformList[i]));
iv.setLayoutParams(new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
fl.addView(iv);
views[i] = new View(getContext());
views[i].setBackgroundColor(0xcfffffff);
views[i].setOnClickListener(this);
if (name != null && name.equals(platformList[i].getName())) {
views[i].setVisibility(View.INVISIBLE);
selection = i;
// a statistics of Sharing
ShareSDK.logDemoEvent(3, platformList[i]);
}
views[i].setLayoutParams(lpMask);
fl.addView(views[i]);
}
final int postSel = selection;
UIHandler.sendEmptyMessageDelayed(0, 333, new Callback() {
public boolean handleMessage(Message msg) {
HorizontalScrollView hsv = (HorizontalScrollView)llPlat.getParent();
hsv.scrollTo(postSel * (dp_36 + dp_9), 0);
return false;
}
});
}
private Bitmap getPlatLogo(Platform plat) {
if (plat == null) {
return null;
}
String name = plat.getName();
if (name == null) {
return null;
}
String resName = "logo_" + plat.getName();
int resId = getBitmapRes(activity, resName);
return BitmapFactory.decodeResource(activity.getResources(), resId);
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
int remain = MAX_TEXT_COUNT - etContent.length();
tvCounter.setText(String.valueOf(remain));
tvCounter.setTextColor(remain > 0 ? 0xffcfcfcf : 0xffff0000);
}
public void afterTextChanged(Editable s) {
}
public void onResult(ArrayList selected) {
StringBuilder sb = new StringBuilder();
for (String sel : selected) {
sb.append('@').append(sel).append(' ');
}
etContent.append(sb.toString());
}
public void finish() {
InputMethodManager imm = null;
try {
imm = (InputMethodManager) activity.getSystemService(
Context.INPUT_METHOD_SERVICE);
} catch (Throwable t) {
t.printStackTrace();
imm = null;
}
if (imm != null) {
imm.hideSoftInputFromWindow(etContent.getWindowToken(), 0);
}
super.finish();
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/onekeyshare/FollowList.java
================================================
/*
* Offical Website:http://www.ShareSDK.cn
* Support QQ: 4006852216
* Offical Wechat Account:ShareSDK (We will inform you our updated news at the first time by Wechat, if we release a new version. If you get any problem, you can also contact us with Wechat, we will reply you within 24 hours.)
*
* Copyright (c) 2013 ShareSDK.cn. All rights reserved.
*/
package com.bit.pedometer.ui.fragment.onekeyshare;
import static cn.sharesdk.framework.utils.R.*;
import java.util.ArrayList;
import java.util.HashMap;
import m.framework.ui.widget.asyncview.AsyncImageView;
import m.framework.ui.widget.asyncview.BitmapProcessor;
import m.framework.ui.widget.pulltorefresh.PullToRefreshListAdapter;
import m.framework.ui.widget.pulltorefresh.PullToRefreshView;
import cn.sharesdk.framework.FakeActivity;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.TitleLayout;
import cn.sharesdk.framework.utils.UIHandler;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Message;
import android.os.Handler.Callback;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
/** Request a list of friends or followings */
public class FollowList extends FakeActivity implements OnClickListener, OnItemClickListener {
private TitleLayout llTitle;
private Platform platform;
private FollowAdapter adapter;
private EditPage page;
public void setPlatform(Platform platform) {
this.platform = platform;
}
public void onCreate() {
LinearLayout llPage = new LinearLayout(getContext());
llPage.setBackgroundColor(0xfff5f5f5);
llPage.setOrientation(LinearLayout.VERTICAL);
activity.setContentView(llPage);
// title bar
llTitle = new TitleLayout(getContext());
int resId = getBitmapRes(getContext(), "title_back");
if (resId > 0) {
llTitle.setBackgroundResource(resId);
}
llTitle.getBtnBack().setOnClickListener(this);
resId = getStringRes(getContext(), "multi_share");
if (resId > 0) {
llTitle.getTvTitle().setText(resId);
}
llTitle.getBtnRight().setVisibility(View.VISIBLE);
resId = getStringRes(getContext(), "finish");
if (resId > 0) {
llTitle.getBtnRight().setText(resId);
}
llTitle.getBtnRight().setOnClickListener(this);
llTitle.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
llPage.addView(llTitle);
FrameLayout flPage = new FrameLayout(getContext());
LinearLayout.LayoutParams lpFl = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lpFl.weight = 1;
flPage.setLayoutParams(lpFl);
llPage.addView(flPage);
// the list of friends or followings
PullToRefreshView followList = new PullToRefreshView(getContext());
FrameLayout.LayoutParams lpLv = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
followList.setLayoutParams(lpLv);
flPage.addView(followList);
adapter = new FollowAdapter(followList);
adapter.setPlatform(platform);
followList.setAdapter(adapter);
adapter.getListView().setOnItemClickListener(this);
ImageView ivShadow = new ImageView(getContext());
resId = getBitmapRes(getContext(), "title_shadow");
if (resId > 0) {
ivShadow.setBackgroundResource(resId);
}
FrameLayout.LayoutParams lpSd = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
ivShadow.setLayoutParams(lpSd);
flPage.addView(ivShadow);
// request data
followList.performPulling(true);
}
public void onClick(View v) {
String name = platform.getName();
if (v.equals(llTitle.getBtnRight())) {
ArrayList selected = new ArrayList();
if ("SinaWeibo".equals(name)) {
for (int i = 0, size = adapter.getCount(); i < size; i++) {
if (adapter.getItem(i).checked) {
selected.add(adapter.getItem(i).screeName);
}
}
} else if ("TencentWeibo".equals(name)) {
for (int i = 0, size = adapter.getCount(); i < size; i++) {
if (adapter.getItem(i).checked) {
selected.add(adapter.getItem(i).uid);
}
}
} else if ("Facebook".equals(name)) {
for (int i = 0, size = adapter.getCount(); i < size; i++) {
if (adapter.getItem(i).checked) {
selected.add("[" + adapter.getItem(i).uid + "]");
}
}
} else if ("Twitter".equals(name)) {
for (int i = 0, size = adapter.getCount(); i < size; i++) {
if (adapter.getItem(i).checked) {
selected.add(adapter.getItem(i).uid);
}
}
}
page.onResult(selected);
}
finish();
}
public void onItemClick(AdapterView> parent, View view, int position, long id) {
Following following = adapter.getItem(position);
following.checked = !following.checked;
adapter.notifyDataSetChanged();
}
public void setBackPage(EditPage page) {
this.page = page;
}
private static class FollowAdapter extends PullToRefreshListAdapter
implements PlatformActionListener, Callback {
private int curPage;
private ArrayList follows;
private HashMap map;
private boolean hasNext;
private Platform platform;
private PRTHeader llHeader;
private Bitmap bmChd;
private Bitmap bmUnch;
public FollowAdapter(PullToRefreshView view) {
super(view);
curPage = -1;
hasNext = true;
map = new HashMap();
follows = new ArrayList();
llHeader = new PRTHeader(getContext());
int resId = getBitmapRes(getContext(), "auth_follow_cb_chd");
if (resId > 0) {
bmChd = BitmapFactory.decodeResource(view.getResources(), resId);
}
resId = getBitmapRes(getContext(), "auth_follow_cb_unc");
if (resId > 0) {
bmUnch = BitmapFactory.decodeResource(view.getResources(), resId);
}
}
public void setPlatform(Platform platform) {
this.platform = platform;
platform.setPlatformActionListener(this);
}
private void next() {
if (hasNext) {
platform.listFriend(15, curPage + 1, null);
}
}
public View getView(int position, View convertView, ViewGroup parent) {
FollowListItem item = null;
if (convertView == null) {
LinearLayout llItem = new LinearLayout(parent.getContext());
item = new FollowListItem();
llItem.setTag(item);
convertView = llItem;
item.aivIcon = new AsyncImageView(getContext());
int dp_52 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 52);
int dp_10 = cn.sharesdk.framework.utils.R.dipToPx(parent.getContext(), 10);
int dp_5 = cn.sharesdk.framework.utils.R.dipToPx(parent.getContext(), 5);
LinearLayout.LayoutParams lpIcon = new LinearLayout.LayoutParams(dp_52, dp_52);
lpIcon.gravity = Gravity.CENTER_VERTICAL;
lpIcon.setMargins(dp_10, dp_5, dp_10, dp_5);
item.aivIcon.setLayoutParams(lpIcon);
llItem.addView(item.aivIcon);
LinearLayout llText = new LinearLayout(parent.getContext());
llText.setPadding(0, dp_10, dp_10, dp_10);
llText.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams lpText = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpText.gravity = Gravity.CENTER_VERTICAL;
lpText.weight = 1;
llText.setLayoutParams(lpText);
llItem.addView(llText);
item.tvName = new TextView(parent.getContext());
item.tvName.setTextColor(0xff000000);
item.tvName.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
item.tvName.setSingleLine();
llText.addView(item.tvName);
item.tvSign = new TextView(parent.getContext());
item.tvSign.setTextColor(0x7f000000);
item.tvSign.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
item.tvSign.setSingleLine();
llText.addView(item.tvSign);
item.ivCheck = new ImageView(parent.getContext());
item.ivCheck.setPadding(0, 0, dp_10, 0);
LinearLayout.LayoutParams lpCheck = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpCheck.gravity = Gravity.CENTER_VERTICAL;
item.ivCheck.setLayoutParams(lpCheck);
llItem.addView(item.ivCheck);
} else {
item = (FollowListItem) convertView.getTag();
}
Following following = getItem(position);
item.tvName.setText(following.screeName);
item.tvSign.setText(following.description);
item.ivCheck.setImageBitmap(following.checked ? bmChd : bmUnch);
if (isFling()) {
Bitmap bm = BitmapProcessor.getBitmapFromCache(following.icon);
if (bm != null && !bm.isRecycled()) {
item.aivIcon.setImageBitmap(bm);
} else {
item.aivIcon.execute(null, AsyncImageView.DEFAULT_TRANSPARENT);
}
} else {
item.aivIcon.execute(following.icon);
}
if (position == getCount() - 1) {
next();
}
return convertView;
}
public Following getItem(int position) {
return follows.get(position);
}
public long getItemId(int position) {
return position;
}
public int getCount() {
return follows == null ? 0 : follows.size();
}
public View getHeaderView() {
return llHeader;
}
public void onPullDown(int percent) {
llHeader.onPullDown(percent);
}
public void onRequest() {
llHeader.onRequest();
curPage = -1;
hasNext = true;
map.clear();
next();
}
public void onCancel(Platform plat, int action) {
UIHandler.sendEmptyMessage(-1, this);
}
public void onComplete(Platform plat, int action, HashMap res) {
ArrayList data = parseList(res);
if (data != null && data.size() > 0) {
curPage++;
Message msg = new Message();
msg.what = 1;
msg.obj = data;
UIHandler.sendMessage(msg, this);
}
}
public void onError(Platform plat, int action, Throwable t) {
t.printStackTrace();
}
private ArrayList parseList(HashMap res) {
if (res == null || res.size() <= 0) {
return null;
}
ArrayList data = new ArrayList();
if ("SinaWeibo".equals(platform.getName())) {
// users[id, name, description]
@SuppressWarnings("unchecked")
ArrayList> users
= (ArrayList>) res.get("users");
for (HashMap user : users) {
String uid = String.valueOf(user.get("id"));
if (!map.containsKey(uid)) {
Following following = new Following();
following.uid = uid;
following.screeName = String.valueOf(user.get("name"));
following.description = String.valueOf(user.get("description"));
following.icon = String.valueOf(user.get("profile_image_url"));
map.put(following.uid, following);
data.add(following);
}
}
hasNext = (Integer) res.get("total_number") > map.size();
}
else if ("TencentWeibo".equals(platform.getName())) {
hasNext = ((Integer)res.get("hasnext") == 0);
// info[nick, name, tweet[text]]
@SuppressWarnings("unchecked")
ArrayList> infos
= (ArrayList>) res.get("info");
for (HashMap info : infos) {
String uid = String.valueOf(info.get("name"));
if (!map.containsKey(uid)) {
Following following = new Following();
following.screeName = String.valueOf(info.get("nick"));
following.uid = uid;
@SuppressWarnings("unchecked")
ArrayList> tweets
= (ArrayList>) info.get("tweet");
for (int i = 0; i < tweets.size();) {
HashMap tweet = tweets.get(i);
following.description = String.valueOf(tweet.get("text"));
break;
}
following.icon = String.valueOf(info.get("head")) + "/100";
map.put(following.uid, following);
data.add(following);
}
}
}
else if ("Facebook".equals(platform.getName())) {
// data[id, name]
@SuppressWarnings("unchecked")
ArrayList> datas
= (ArrayList>) res.get("data");
for (HashMap d : datas) {
String uid = String.valueOf(d.get("id"));
if (!map.containsKey(uid)) {
Following following = new Following();
following.uid = uid;
following.screeName = String.valueOf(d.get("name"));
@SuppressWarnings("unchecked")
HashMap picture = (HashMap) d.get("picture");
if (picture != null) {
@SuppressWarnings("unchecked")
HashMap pData = (HashMap) picture.get("data");
if (d != null) {
following.icon = String.valueOf(pData.get("url"));
}
}
map.put(following.uid, following);
data.add(following);
}
}
@SuppressWarnings("unchecked")
HashMap paging = (HashMap) res.get("paging");
hasNext = paging.containsKey("next");
}
else if ("Twitter".equals(platform.getName())) {
// users[screen_name, name, description]
@SuppressWarnings("unchecked")
ArrayList> users
= (ArrayList>) res.get("users");
for (HashMap user : users) {
String uid = String.valueOf(user.get("screen_name"));
if (!map.containsKey(uid)) {
Following following = new Following();
following.uid = uid;
following.screeName = String.valueOf(user.get("name"));
following.description = String.valueOf(user.get("description"));
following.icon = String.valueOf(user.get("profile_image_url"));
map.put(following.uid, following);
data.add(following);
}
}
}
return data;
}
public boolean handleMessage(Message msg) {
if (msg.what < 0) {
((Activity) getContext()).finish();
} else {
if (curPage <= 0) {
follows.clear();
}
@SuppressWarnings("unchecked")
ArrayList data = (ArrayList) msg.obj;
follows.addAll(data);
notifyDataSetChanged();
}
return false;
}
public void onReversed() {
super.onReversed();
llHeader.reverse();
}
}
private static class FollowListItem {
public AsyncImageView aivIcon;
public TextView tvName;
public TextView tvSign;
public ImageView ivCheck;
}
private static class Following {
public boolean checked;
public String screeName;
public String description;
public String uid;
public String icon;
}
private static class PRTHeader extends LinearLayout {
private TextView tvHeader;
private RotateImageView ivArrow;
private ProgressBar pbRefreshing;
public PRTHeader(Context context) {
super(context);
setOrientation(VERTICAL);
LinearLayout llInner = new LinearLayout(context);
LinearLayout.LayoutParams lpInner = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpInner.gravity = Gravity.CENTER_HORIZONTAL;
addView(llInner, lpInner);
ivArrow = new RotateImageView(context);
int resId = getBitmapRes(context, "ssdk_oks_ptr_ptr");
if (resId > 0) {
ivArrow.setImageResource(resId);
}
int dp_32 = dipToPx(context, 32);
LayoutParams lpIv = new LayoutParams(dp_32, dp_32);
lpIv.gravity = Gravity.CENTER_VERTICAL;
llInner.addView(ivArrow, lpIv);
pbRefreshing = new ProgressBar(context);
llInner.addView(pbRefreshing, lpIv);
pbRefreshing.setVisibility(View.GONE);
tvHeader = new TextView(getContext());
tvHeader.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
tvHeader.setGravity(Gravity.CENTER);
int dp_10 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 10);
tvHeader.setPadding(dp_10, dp_10, dp_10, dp_10);
tvHeader.setTextColor(0xff000000);
LayoutParams lpTv = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpTv.gravity = Gravity.CENTER_VERTICAL;
llInner.addView(tvHeader, lpTv);
}
public void onPullDown(int percent) {
if (percent > 100) {
int degree = (percent - 100) * 180 / 20;
if (degree > 180) {
degree = 180;
}
if (degree < 0) {
degree = 0;
}
ivArrow.setRotation(degree);
} else {
ivArrow.setRotation(0);
}
if (percent < 100) {
int resId = getStringRes(getContext(), "pull_to_refresh");
if (resId > 0) {
tvHeader.setText(resId);
}
} else {
int resId = getStringRes(getContext(), "release_to_refresh");
if (resId > 0) {
tvHeader.setText(resId);
}
}
}
public void onRequest() {
ivArrow.setVisibility(View.GONE);
pbRefreshing.setVisibility(View.VISIBLE);
int resId = getStringRes(getContext(), "refreshing");
if (resId > 0) {
tvHeader.setText(resId);
}
}
public void reverse() {
pbRefreshing.setVisibility(View.GONE);
ivArrow.setRotation(180);
ivArrow.setVisibility(View.VISIBLE);
}
}
private static class RotateImageView extends ImageView {
private int rotation;
public RotateImageView(Context context) {
super(context);
}
public void setRotation(int degree) {
rotation = degree;
invalidate();
}
protected void onDraw(Canvas canvas) {
canvas.rotate(rotation, getWidth() / 2, getHeight() / 2);
super.onDraw(canvas);
}
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/onekeyshare/OnekeyShare.java
================================================
/*
* Offical Website:http://www.ShareSDK.cn
* Support QQ: 4006852216
* Offical Wechat Account:ShareSDK (We will inform you our updated news at the first time by Wechat, if we release a new version. If you get any problem, you can also contact us with Wechat, we will reply you within 24 hours.)
*
* Copyright (c) 2013 ShareSDK.cn. All rights reserved.
*/
package com.bit.pedometer.ui.fragment.onekeyshare;
import static cn.sharesdk.framework.utils.R.getBitmapRes;
import static cn.sharesdk.framework.utils.R.getStringRes;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.os.Message;
import android.os.Handler.Callback;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.view.animation.Animation.AnimationListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Toast;
import android.widget.FrameLayout.LayoutParams;
import cn.sharesdk.framework.FakeActivity;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.framework.utils.UIHandler;
/**
* entrance of onekeyshare
*
* by setting different setter parameter, then call the Show method to start the shortcut to share
*/
public class OnekeyShare extends FakeActivity implements
OnClickListener, PlatformActionListener, Callback {
private static final int MSG_TOAST = 1;
private static final int MSG_ACTION_CCALLBACK = 2;
private static final int MSG_CANCEL_NOTIFY = 3;
// page container
private FrameLayout flPage;
// gridview of platform list
private PlatformGridView grid;
// cancel button
private Button btnCancel;
// sliding up animation
private Animation animShow;
// sliding down animation
private Animation animHide;
private boolean finishing;
private boolean canceled;
private HashMap reqMap;
private ArrayList customers;
private int notifyIcon;
private String notifyTitle;
private boolean silent;
private PlatformActionListener callback;
private ShareContentCustomizeCallback customizeCallback;
private boolean dialogMode;
private boolean disableSSO;
public OnekeyShare() {
reqMap = new HashMap();
customers = new ArrayList();
callback = this;
}
public void show(Context context) {
super.show(context, null);
}
/** icon and text to notify after sharing */
public void setNotification(int icon, String title) {
notifyIcon = icon;
notifyTitle = title;
}
/** short message address or email address */
public void setAddress(String address) {
reqMap.put("address", address);
}
/** title of share content */
public void setTitle(String title) {
reqMap.put("title", title);
}
/** the url of title */
public void setTitleUrl(String titleUrl) {
reqMap.put("titleUrl", titleUrl);
}
/** share content */
public void setText(String text) {
reqMap.put("text", text);
}
/** returns share content */
public String getText() {
return reqMap.containsKey("text") ? String.valueOf(reqMap.get("text")) : null;
}
/** local path of the image to share */
public void setImagePath(String imagePath) {
if(!TextUtils.isEmpty(imagePath))
reqMap.put("imagePath", imagePath);
}
/** url of the image to share */
public void setImageUrl(String imageUrl) {
if (!TextUtils.isEmpty(imageUrl))
reqMap.put("imageUrl", imageUrl);
}
/** webpage link to share in wechat and yixin etc.*/
public void setUrl(String url) {
reqMap.put("url", url);
}
/** local path of the file to share in wechat */
public void setFilePath(String filePath) {
reqMap.put("filePath", filePath);
}
/** comment field of platform renren */
public void setComment(String comment) {
reqMap.put("comment", comment);
}
/** app name or site name of your program */
public void setSite(String site) {
reqMap.put("site", site);
}
/** the url of the website or appname */
public void setSiteUrl(String siteUrl) {
reqMap.put("siteUrl", siteUrl);
}
/** location name */
public void setVenueName(String venueName) {
reqMap.put("venueName", venueName);
}
/** description of your sharing location */
public void setVenueDescription(String venueDescription) {
reqMap.put("venueDescription", venueDescription);
}
/** latitude */
public void setLatitude(float latitude) {
reqMap.put("latitude", latitude);
}
/** longitude */
public void setLongitude(float longitude) {
reqMap.put("longitude", longitude);
}
/** determine whether to share directly */
public void setSilent(boolean silent) {
this.silent = silent;
}
/** Setting the selected platform of EditPage when initializing */
public void setPlatform(String platform) {
reqMap.put("platform", platform);
}
/** setting custom external callback */
public void setCallback(PlatformActionListener callback) {
this.callback = callback;
}
/** returns sharing callback */
public PlatformActionListener getCallback() {
return callback;
}
/** setting the share content customizing callback for sharing process */
public void setShareContentCustomizeCallback(ShareContentCustomizeCallback callback) {
customizeCallback = callback;
}
/** returns share content customizing callback */
public ShareContentCustomizeCallback getShareContentCustomizeCallback() {
return customizeCallback;
}
/** add a custom icon and its click event listener */
public void setCustomerLogo(Bitmap logo, String label, OnClickListener ocListener) {
CustomerLogo cl = new CustomerLogo();
cl.label = label;
cl.logo = logo;
cl.listener = ocListener;
customers.add(cl);
}
/** disable SSO authorizing before sharing */
public void disableSSOWhenAuthorize() {
disableSSO = true;
}
/** set the display mode of editpage to be the dialog mode */
public void setDialogMode() {
dialogMode = true;
reqMap.put("dialogMode", dialogMode);
}
public void onCreate() {
// display mode of onekeyshare is controled by the field of platform and silent,
// if platform is set, platform gridview won't be display, onekeyshare will jump to editpage directly
// if silent is true, onekeyshare will skip the editpage and shares directly
// the class only determines the value of platform, because after PlatformGridView is shown, all events will be passed into it
// when platform is set, and silent is true, onekeyshare will share the selected platform directly
// when platform is set, and silent is false, onekeyshare will determine whether to share by the client of the platform or not
HashMap copy = new HashMap();
copy.putAll(reqMap);
if (copy.containsKey("platform")) {
String name = String.valueOf(copy.get("platform"));
if (silent) {
HashMap> shareData
= new HashMap>();
shareData.put(ShareSDK.getPlatform(activity, name), copy);
share(shareData);
} else if (ShareCore.isUseClientToShare(activity, name)) {
HashMap> shareData
= new HashMap>();
shareData.put(ShareSDK.getPlatform(activity, name), copy);
share(shareData);
} else {
EditPage page = new EditPage();
page.setShareData(copy);
page.setParent(this);
if (dialogMode) {
page.setDialogMode();
}
page.show(activity, null);
}
finish();
return;
}
finishing = false;
canceled = false;
initPageView();
initAnim();
activity.setContentView(flPage);
// set the data for platform gridview
grid.setData(copy, silent);
grid.setCustomerLogos(customers);
grid.setParent(this);
btnCancel.setOnClickListener(this);
// display gridviews
flPage.clearAnimation();
flPage.startAnimation(animShow);
// a statistics of opening the platform gridview
ShareSDK.logDemoEvent(1, null);
}
private void initPageView() {
flPage = new FrameLayout(getContext());
flPage.setOnClickListener(this);
// container of the platform gridview
LinearLayout llPage = new LinearLayout(getContext()) {
public boolean onTouchEvent(MotionEvent event) {
return true;
}
};
llPage.setOrientation(LinearLayout.VERTICAL);
int resId = getBitmapRes(getContext(), "share_vp_back");
if (resId > 0) {
llPage.setBackgroundResource(resId);
}
FrameLayout.LayoutParams lpLl = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lpLl.gravity = Gravity.BOTTOM;
llPage.setLayoutParams(lpLl);
flPage.addView(llPage);
// gridview
grid = new PlatformGridView(getContext());
LinearLayout.LayoutParams lpWg = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
grid.setLayoutParams(lpWg);
llPage.addView(grid);
// cancel button
btnCancel = new Button(getContext());
btnCancel.setTextColor(0xffffffff);
btnCancel.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
resId = getStringRes(getContext(), "cancel");
if (resId > 0) {
btnCancel.setText(resId);
}
btnCancel.setPadding(0, 0, 0, cn.sharesdk.framework.utils.R.dipToPx(getContext(), 5));
resId = getBitmapRes(getContext(), "btn_cancel_back");
if (resId > 0) {
btnCancel.setBackgroundResource(resId);
}
LinearLayout.LayoutParams lpBtn = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, cn.sharesdk.framework.utils.R.dipToPx(getContext(), 45));
int dp_10 = cn.sharesdk.framework.utils.R.dipToPx(getContext(), 10);
lpBtn.setMargins(dp_10, dp_10, dp_10, dp_10);
btnCancel.setLayoutParams(lpBtn);
llPage.addView(btnCancel);
}
private void initAnim() {
animShow = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 1,
Animation.RELATIVE_TO_SELF, 0);
animShow.setDuration(300);
animHide = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 1);
animHide.setDuration(300);
}
public void onClick(View v) {
if (v.equals(flPage) || v.equals(btnCancel)) {
canceled = true;
finish();
}
}
public boolean onKeyEvent(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
canceled = true;
}
return super.onKeyEvent(keyCode, event);
}
public void onConfigurationChanged(Configuration newConfig) {
if (grid != null) {
grid.onConfigurationChanged();
}
}
public void finish() {
if (finishing) {
return;
}
if (animHide == null) {
finishing = true;
super.finish();
return;
}
// a statistics of cancel sharing
if (canceled) {
ShareSDK.logDemoEvent(2, null);
}
finishing = true;
animHide.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation) {
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
flPage.setVisibility(View.GONE);
OnekeyShare.super.finish();
}
});
flPage.clearAnimation();
flPage.startAnimation(animHide);
}
/** execute the loop of share */
public void share(HashMap> shareData) {
boolean started = false;
for (Entry> ent : shareData.entrySet()) {
Platform plat = ent.getKey();
plat.SSOSetting(disableSSO);
String name = plat.getName();
boolean isWechat = "WechatMoments".equals(name) || "Wechat".equals(name)
|| "WechatFavorite".equals(name);
if (isWechat && !plat.isValid()) {
Message msg = new Message();
msg.what = MSG_TOAST;
int resId = getStringRes(getContext(), "wechat_client_inavailable");
msg.obj = activity.getString(resId);
UIHandler.sendMessage(msg, this);
continue;
}
boolean isGooglePlus = "GooglePlus".equals(name);
if (isGooglePlus && !plat.isValid()) {
Message msg = new Message();
msg.what = MSG_TOAST;
int resId = getStringRes(getContext(), "google_plus_client_inavailable");
msg.obj = activity.getString(resId);
UIHandler.sendMessage(msg, this);
continue;
}
boolean isQQ = "QQ".equals(name);
if (isQQ && !plat.isValid()) {
Message msg = new Message();
msg.what = MSG_TOAST;
int resId = getStringRes(getContext(), "qq_client_inavailable");
msg.obj = activity.getString(resId);
UIHandler.sendMessage(msg, this);
continue;
}
boolean isPinterest = "Pinterest".equals(name);
if (isPinterest && !plat.isValid()) {
Message msg = new Message();
msg.what = MSG_TOAST;
int resId = getStringRes(getContext(), "pinterest_client_inavailable");
msg.obj = activity.getString(resId);
UIHandler.sendMessage(msg, this);
continue;
}
boolean isInstagram = "Instagram".equals(name);
if (isInstagram && !plat.isValid()) {
Message msg = new Message();
msg.what = MSG_TOAST;
int resId = getStringRes(getContext(), "instagram_client_inavailable");
msg.obj = activity.getString(resId);
UIHandler.sendMessage(msg, this);
continue;
}
boolean isYixin = "YixinMoments".equals(name) || "Yixin".equals(name);
if (isYixin && !plat.isValid()) {
Message msg = new Message();
msg.what = MSG_TOAST;
int resId = getStringRes(getContext(), "yixin_client_inavailable");
msg.obj = activity.getString(resId);
UIHandler.sendMessage(msg, this);
continue;
}
HashMap data = ent.getValue();
int shareType = Platform.SHARE_TEXT;
String imagePath = String.valueOf(data.get("imagePath"));
if (imagePath != null && (new File(imagePath)).exists()) {
shareType = Platform.SHARE_IMAGE;
if (imagePath.endsWith(".gif")) {
shareType = Platform.SHARE_EMOJI;
} else if (data.containsKey("url") && !TextUtils.isEmpty(data.get("url").toString())) {
shareType = Platform.SHARE_WEBPAGE;
}
} else {
Object imageUrl = data.get("imageUrl");
if (imageUrl != null && !TextUtils.isEmpty(String.valueOf(imageUrl))) {
shareType = Platform.SHARE_IMAGE;
if (String.valueOf(imageUrl).endsWith(".gif")) {
shareType = Platform.SHARE_EMOJI;
} else if (data.containsKey("url") && !TextUtils.isEmpty(data.get("url").toString())) {
shareType = Platform.SHARE_WEBPAGE;
}
}
}
data.put("shareType", shareType);
if (!started) {
started = true;
if (equals(callback)) {
int resId = getStringRes(getContext(), "sharing");
if (resId > 0) {
showNotification(2000, getContext().getString(resId));
}
}
finish();
}
plat.setPlatformActionListener(callback);
ShareCore shareCore = new ShareCore();
shareCore.setShareContentCustomizeCallback(customizeCallback);
shareCore.share(plat, data);
}
}
public void onComplete(Platform platform, int action,
HashMap res) {
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = 1;
msg.arg2 = action;
msg.obj = platform;
UIHandler.sendMessage(msg, this);
}
public void onError(Platform platform, int action, Throwable t) {
t.printStackTrace();
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = 2;
msg.arg2 = action;
msg.obj = t;
UIHandler.sendMessage(msg, this);
// a statistics of cancel sharing
ShareSDK.logDemoEvent(4, platform);
}
public void onCancel(Platform platform, int action) {
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = 3;
msg.arg2 = action;
msg.obj = platform;
UIHandler.sendMessage(msg, this);
}
public boolean handleMessage(Message msg) {
switch(msg.what) {
case MSG_TOAST: {
String text = String.valueOf(msg.obj);
Toast.makeText(activity, text, Toast.LENGTH_SHORT).show();
}
break;
case MSG_ACTION_CCALLBACK: {
switch (msg.arg1) {
case 1: {
// success
int resId = getStringRes(getContext(), "share_completed");
if (resId > 0) {
showNotification(2000, getContext().getString(resId));
}
}
break;
case 2: {
// failed
String expName = msg.obj.getClass().getSimpleName();
if ("WechatClientNotExistException".equals(expName)
|| "WechatTimelineNotSupportedException".equals(expName)
|| "WechatFavoriteNotSupportedException".equals(expName)) {
int resId = getStringRes(getContext(), "wechat_client_inavailable");
if (resId > 0) {
showNotification(2000, getContext().getString(resId));
}
} else if ("GooglePlusClientNotExistException".equals(expName)) {
int resId = getStringRes(getContext(), "google_plus_client_inavailable");
if (resId > 0) {
showNotification(2000, getContext().getString(resId));
}
} else if ("QQClientNotExistException".equals(expName)) {
int resId = getStringRes(getContext(), "qq_client_inavailable");
if (resId > 0) {
showNotification(2000, getContext().getString(resId));
}
} else if ("YixinClientNotExistException".equals(expName)
|| "YixinTimelineNotSupportedException".equals(expName)) {
int resId = getStringRes(getContext(), "yixin_client_inavailable");
if (resId > 0) {
showNotification(2000, getContext().getString(resId));
}
} else {
int resId = getStringRes(getContext(), "share_failed");
if (resId > 0) {
showNotification(2000, getContext().getString(resId));
}
}
}
break;
case 3: {
// canceled
int resId = getStringRes(getContext(), "share_canceled");
if (resId > 0) {
showNotification(2000, getContext().getString(resId));
}
}
break;
}
}
break;
case MSG_CANCEL_NOTIFY: {
NotificationManager nm = (NotificationManager) msg.obj;
if (nm != null) {
nm.cancel(msg.arg1);
}
}
break;
}
return false;
}
// notify the share result
@SuppressWarnings("deprecation")
private void showNotification(long cancelTime, String text) {
try {
Context app = getContext().getApplicationContext();
NotificationManager nm = (NotificationManager) app
.getSystemService(Context.NOTIFICATION_SERVICE);
final int id = Integer.MAX_VALUE / 13 + 1;
nm.cancel(id);
long when = System.currentTimeMillis();
Notification notification = new Notification(notifyIcon, text, when);
PendingIntent pi = PendingIntent.getActivity(app, 0, new Intent(), 0);
// notification.setLatestEventInfo(app, notifyTitle, text, pi);
notification.flags = Notification.FLAG_AUTO_CANCEL;
nm.notify(id, notification);
if (cancelTime > 0) {
Message msg = new Message();
msg.what = MSG_CANCEL_NOTIFY;
msg.obj = nm;
msg.arg1 = id;
UIHandler.sendMessageDelayed(msg, cancelTime, this);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/onekeyshare/PicViewer.java
================================================
/*
* Offical Website:http://www.ShareSDK.cn
* Support QQ: 4006852216
* Offical Wechat Account:ShareSDK (We will inform you our updated news at the first time by Wechat, if we release a new version. If you get any problem, you can also contact us with Wechat, we will reply you within 24 hours.)
*
* Copyright (c) 2013 ShareSDK.cn. All rights reserved.
*/
package com.bit.pedometer.ui.fragment.onekeyshare;
import android.graphics.Bitmap;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import cn.sharesdk.framework.FakeActivity;
/** Preview photo to be shared page */
public class PicViewer extends FakeActivity implements OnClickListener {
private ImageView ivViewer;
private Bitmap pic;
/** set the picture */
public void setImageBitmap(Bitmap pic) {
this.pic = pic;
if (ivViewer != null) {
ivViewer.setImageBitmap(pic);
}
}
public void onCreate() {
ivViewer = new ImageView(activity);
ivViewer.setScaleType(ScaleType.CENTER_INSIDE);
ivViewer.setBackgroundColor(0xc0000000);
ivViewer.setOnClickListener(this);
activity.setContentView(ivViewer);
if (pic != null && !pic.isRecycled()) {
ivViewer.setImageBitmap(pic);
}
}
public void onClick(View v) {
finish();
}
}
================================================
FILE: pedometer/src/com/bit/pedometer/ui/fragment/onekeyshare/PlatformGridView.java
================================================
/*
* Offical Website:http://www.ShareSDK.cn
* Support QQ: 4006852216
* Offical Wechat Account:ShareSDK (We will inform you our updated news at the first time by Wechat, if we release a new version. If you get any problem, you can also contact us with Wechat, we will reply you within 24 hours.)
*
* Copyright (c) 2013 ShareSDK.cn. All rights reserved.
*/
package com.bit.pedometer.ui.fragment.onekeyshare;
import static cn.sharesdk.framework.utils.R.getBitmapRes;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import m.framework.ui.widget.viewpager.ViewPagerAdapter;
import m.framework.ui.widget.viewpager.ViewPagerClassic;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.Handler.Callback;
import android.os.Message;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.TextView;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.framework.utils.UIHandler;
/** platform logo list gridview */
public class PlatformGridView extends LinearLayout implements
OnClickListener, Callback {
private static final int MSG_PLATFORM_LIST_GOT = 1;
// grids in each line
private int LINE_PER_PAGE;
// lines in each page
private int COLUMN_PER_LINE;
// grids in each page
private int PAGE_SIZE;
// grids container
private ViewPagerClassic pager;
// indicators
private ImageView[] points;
private Bitmap grayPoint;
private Bitmap whitePoint;
// Determine whether don't jump editpage and share directly
private boolean silent;
// platforms
private Platform[] platformList;
// data to share
private HashMap reqData;
private OnekeyShare parent;
private ArrayList customers;
public PlatformGridView(Context context) {
super(context);
init(context);
}
public PlatformGridView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(final Context context) {
calPageSize();
setOrientation(VERTICAL);
pager = new ViewPagerClassic(context);
disableOverScrollMode(pager);
pager.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
addView(pager);
// in order to have a better UI effect, opening a thread request the list of platforms
new Thread(){
public void run() {
platformList = ShareSDK.getPlatformList(context);
if (platformList == null) {
platformList = new Platform[0];
}
UIHandler.sendEmptyMessage(MSG_PLATFORM_LIST_GOT, PlatformGridView.this);
}
}.start();
}
private void calPageSize() {
float scrW = cn.sharesdk.framework.utils.R.getScreenWidth(getContext());
float scrH = cn.sharesdk.framework.utils.R.getScreenHeight(getContext());
float whR = scrW / scrH;
if (whR < 0.6) {
COLUMN_PER_LINE = 3;
LINE_PER_PAGE = 3;
} else if (whR < 0.75) {
COLUMN_PER_LINE = 3;
LINE_PER_PAGE = 2;
} else {
LINE_PER_PAGE = 1;
if (whR >= 1.75) {
COLUMN_PER_LINE = 6;
} else if (whR >= 1.5) {
COLUMN_PER_LINE = 5;
} else if (whR >= 1.3) {
COLUMN_PER_LINE = 4;
} else {
COLUMN_PER_LINE = 3;
}
}
PAGE_SIZE = COLUMN_PER_LINE * LINE_PER_PAGE;
}
public boolean handleMessage(Message msg) {
switch (msg.what) {
case MSG_PLATFORM_LIST_GOT: {
afterPlatformListGot();
}
break;
}
return false;
}
// initializes the girdview of platforms
public void afterPlatformListGot() {
PlatformAdapter adapter = new PlatformAdapter(this);
pager.setAdapter(adapter);
int pageCount = 0;
if (platformList != null) {
int cusSize = customers == null ? 0 : customers.size();
int platSize = platformList == null ? 0 : platformList.length;
int size = platSize + cusSize;
pageCount = size / PAGE_SIZE;
if (size % PAGE_SIZE > 0) {
pageCount++;
}
}
points = new ImageView[pageCount];
if (points.length <= 0) {
return;
}
Context context = getContext();
LinearLayout llPoints = new LinearLayout(context);
// if the total number of pages exceeds 1, we set the page indicators
llPoints.setVisibility(pageCount > 1 ? View.VISIBLE: View.GONE);
LayoutParams lpLl = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lpLl.gravity = Gravity.CENTER_HORIZONTAL;
llPoints.setLayoutParams(lpLl);
addView(llPoints);
int dp_5 = cn.sharesdk.framework.utils.R.dipToPx(context, 5);
int resId = getBitmapRes(getContext(), "gray_point");
if (resId > 0) {
grayPoint = BitmapFactory.decodeResource(getResources(), resId);
}
resId = getBitmapRes(getContext(), "white_point");
if (resId > 0) {
whitePoint = BitmapFactory.decodeResource(getResources(), resId);
}
for (int i = 0; i < pageCount; i++) {
points[i] = new ImageView(context);
points[i].setScaleType(ScaleType.CENTER_INSIDE);
points[i].setImageBitmap(grayPoint);
LayoutParams lpIv = new LayoutParams(dp_5, dp_5);
lpIv.setMargins(dp_5, dp_5, dp_5, 0);
points[i].setLayoutParams(lpIv);
llPoints.addView(points[i]);
}
int curPage = pager.getCurrentScreen();
points[curPage].setImageBitmap(whitePoint);
}
/** after the screen rotates, this method will be called to refresh the list of gridviews */
public void onConfigurationChanged() {
int curFirst = pager.getCurrentScreen() * PAGE_SIZE;
calPageSize();
int newPage = curFirst / PAGE_SIZE;
removeViewAt(1);
afterPlatformListGot();
pager.setCurrentScreen(newPage);
}
public void setData(HashMap data, boolean silent) {
reqData = data;
this.silent = silent;
}
/** Set the Click event of the custom icon */
public void setCustomerLogos(ArrayList customers) {
this.customers = customers;
}
/** Sets the callback page sharing operations */
public void setParent(OnekeyShare parent) {
this.parent = parent;
}
public void onClick(View v) {
Platform plat = (Platform) v.getTag();
if (plat != null) {
if (silent) {
HashMap> shareData
= new HashMap>();
shareData.put(plat, reqData);
parent.share(shareData);
return;
}
String name = plat.getName();
reqData.put("platform", name);
// EditPage don't support Wechat, google+, QQ, pinterest, short message and email,
// these performs always share directly
if (ShareCore.isUseClientToShare(getContext(), name)) {
HashMap> shareData
= new HashMap>();
shareData.put(plat, reqData);
parent.share(shareData);
return;
}
// jump in editpage to share
EditPage page = new EditPage();
page.setShareData(reqData);
page.setParent(parent);
if ("true".equals(String.valueOf(reqData.get("dialogMode")))) {
page.setDialogMode();
}
page.show(parent.getContext(), null);
parent.finish();
}
}
// Disable the flashing effect when viewpages sliding to left/right edge
private void disableOverScrollMode(View view) {
if (Build.VERSION.SDK_INT < 9) {
return;
}
try {
Method m = View.class.getMethod("setOverScrollMode",
new Class[] { Integer.TYPE });
m.setAccessible(true);
m.invoke(view, new Object[] { Integer.valueOf(2) });
} catch (Throwable t) {
t.printStackTrace();
}
}
/** gridview adapter */
private static class PlatformAdapter extends ViewPagerAdapter {
private GridView[] girds;
private List