summaryrefslogtreecommitdiff
authorTing Li <ting.li@amlogic.com>2014-11-20 07:50:25 (GMT)
committer Ting Li <ting.li@amlogic.com>2014-11-20 07:50:25 (GMT)
commitaffb4c2445aeda98a638fc246c8be5de8673fd9a (patch)
treeea7f55bee12e359e5f08db348aec34e439d6c19b
parenta41846f6f6c6b6ab58b7cb941c0eb8c65d4321a1 (diff)
downloadOTAUpgrade2-affb4c2445aeda98a638fc246c8be5de8673fd9a.zip
OTAUpgrade2-affb4c2445aeda98a638fc246c8be5de8673fd9a.tar.gz
OTAUpgrade2-affb4c2445aeda98a638fc246c8be5de8673fd9a.tar.bz2
pd#00001 update OTA code for android_L and change package Name
Change-Id: I08ef8b09ecc5087e9dd151fdea5a2f0f1330e7a7
Diffstat
-rwxr-xr-xAndroidManifest.xml16
-rwxr-xr-xlibs/libotaupdate.jar362
-rwxr-xr-xres/layout/install_ota.xml4
-rwxr-xr-xsrc/com/amlapp/update/otaupgrade/BackupActivity.java137
-rwxr-xr-xsrc/com/amlapp/update/otaupgrade/InstallPackage.java190
-rwxr-xr-xsrc/com/amlapp/update/otaupgrade/LoaderReceiver.java145
-rwxr-xr-xsrc/com/amlapp/update/otaupgrade/UpdateActivity.java661
-rwxr-xr-xsrc/com/droidlogic/otaupgrade/BackupActivity.java159
-rwxr-xr-xsrc/com/droidlogic/otaupgrade/BadMovedSDcard.java (renamed from src/com/amlapp/update/otaupgrade/BadMovedSDcard.java)101
-rwxr-xr-xsrc/com/droidlogic/otaupgrade/FileSelector.java (renamed from src/com/amlapp/update/otaupgrade/FileSelector.java)249
-rwxr-xr-xsrc/com/droidlogic/otaupgrade/InstallPackage.java214
-rwxr-xr-xsrc/com/droidlogic/otaupgrade/LoaderReceiver.java174
-rwxr-xr-xsrc/com/droidlogic/otaupgrade/MainActivity.java (renamed from src/com/amlapp/update/otaupgrade/MainActivity.java)244
-rwxr-xr-xsrc/com/droidlogic/otaupgrade/PrefUtils.java (renamed from src/com/amlapp/update/otaupgrade/PrefUtils.java)122
-rwxr-xr-xsrc/com/droidlogic/otaupgrade/UpdateActivity.java709
-rwxr-xr-xsrc/com/droidlogic/otaupgrade/UpdateService.java (renamed from src/com/amlapp/update/otaupgrade/UpdateService.java)299
16 files changed, 2057 insertions, 1729 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 5c2ad85..b21895e 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.amlapp.update.otaupgrade"
+ package="com.droidlogic.otaupgrade"
android:versionCode="2"
android:versionName="2.0201411131439" >
@@ -28,17 +28,17 @@
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
- android:name="com.amlapp.update.otaupgrade.UpdateActivity"
+ android:name="com.droidlogic.otaupgrade.UpdateActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="landscape" >
</activity>
<activity
- android:name="com.amlapp.update.otaupgrade.FileSelector"
+ android:name="com.droidlogic.otaupgrade.FileSelector"
android:screenOrientation="landscape" >
</activity>
- <receiver android:name="com.amlapp.update.otaupgrade.LoaderReceiver" >
+ <receiver android:name="com.droidlogic.otaupgrade.LoaderReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="com.android.otaupdate.aml.backup" />
@@ -47,16 +47,16 @@
</receiver>
<activity
- android:name="com.amlapp.update.otaupgrade.BackupActivity"
+ android:name="com.droidlogic.otaupgrade.BackupActivity"
android:screenOrientation="landscape" >
</activity>
<activity
- android:name="com.amlapp.update.otaupgrade.BadMovedSDcard"
+ android:name="com.droidlogic.otaupgrade.BadMovedSDcard"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Holo.Dialog" >
</activity>
<activity
- android:name="com.amlapp.update.otaupgrade.MainActivity"
+ android:name="com.droidlogic.otaupgrade.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="landscape" >
@@ -67,7 +67,7 @@
</intent-filter>
</activity>
- <service android:name="com.amlapp.update.otaupgrade.UpdateService" >
+ <service android:name="com.droidlogic.otaupgrade.UpdateService" >
<intent-filter>
<action android:name="com.android.update.action.check" />
<action android:name="com.android.update.action.download" />
diff --git a/libs/libotaupdate.jar b/libs/libotaupdate.jar
index 78b2688..0e29656 100755
--- a/libs/libotaupdate.jar
+++ b/libs/libotaupdate.jar
@@ -1,173 +1,189 @@
-PK
-ZM-4h 9W@OsPϜa~f|/_PKq
-L]BV5=x5Ѯ<^
-(/9nQ|dS*V|^}8T^,P]jG'd \4wI Rܜi\l嬝ti4fo%LSe9Y?Cf92:1X:}z4XeN VI29)0D
-WغB@9b'Ys{ʧP/1jgQ:Bm1`3<w?PKx
- [HH (| Lf,lZA(JH[%*n(HU]R..)Jl ===9w߽{m
-lp`'xX[9 DZC6&=/
-XQD ?#у2]څ.WqGw px@VK8rމ³9>:69!s#<i9#_bBZnCy*BF(T-E!3/dpz _f
-Mͮ8Nv8:K<Aj oSWS_™am8j!+1|v 9g ]"ëJ\y\pU>pWYJ#|d'³֜ҧYiyJ~,9+ffm\tAh:7p?0"2 KN]%c@,yC؊Sj7.`r=\<>Ohkem*c!6awƯ !G*Pti|ljUj**//+_R\fQJFE .*Q=xfIQdUҲthl y 1<^̬QP\3F0hR"RTߔBeCaT(نr!}
-/;ZѴ, 7ԘJ˄\#3~i䠉ud:LA?pk<De]9a;s=u,-9^ÜD}(+RHty>Gŕ"ۥ`_&
-CcvbI<x}Sq,ˌ2v#\6H\^k}L'8? 0SGOo*ܹ7FvfIzpc?2=.G}֭U
-_|qQHZ#gz .@ldu9f(LaVxCG]?>'/
- 4 EVaQ>7,džEް(7HPXЊk
-T Q0C "mјVLjUl. #k/ L븘 |FN#F>c$f`<f"Sh&'PRfRX쿨`?vkyeϡMv3 í
-
-DC2Ό9
-ZM#r
-&5)U)L-Y Q[!ZevuFgS:5l/|9?<+[AX'6UXLΝ-_ XփV&xhi< [օG;MzrWX‹ hPB{^ePYQpѨUQf^ãL\yU+8ojaTO`jjՎ=ܥN\=\zwlP_a4ܯ f-t$hءNFf6W+
-/\#גC xD{[]xTۃm^l^F
-#إw#9E=g篜olm_O= 9تuئOv}:"KS@P_FƓ&BObx^o xQ?}دB9fUG /)l2!\sy &\`L98']@^,mDO [Ca9x{7pN{üڻnRismq5um}Fz&qԊ`"9v2!gvh_t ]֗A}bzZ؇3{kx~B>i󆢢9Cs"5$ s$ t+<k8Aף0pSg l0ӳ{Kl!Z{ǻ"9Gfu+dw;gOCr"M*{] ^@Jt6rOMLO%Q{l^( }tPK\ߤ
-sDPux+jk&o8Ǩq`FYPha@i"=I5DQ~pV]6@3;ځ<T5q蕡Ib}aG,5rjZeF1B|AQ52 (5ƈYNe4.z*\"{X+m%`KpG,aAK)7TURhSPKq
-+-oS;
-~_|P(O*(U9_T%O+G_VO
-
-
-U7|KTD"+b"rHL.E,WJERĥX"EQD"*Deؠ2vxH^dKW2񔌏8 BBIfYB"TYXdaMi#HYL4YLS3d1Sdq,fb,"[d
-!hc0ae Sa#JFCC 32,cXRթPβ,[β8k%ɐbU 0̶:xeO0a$6 , IJi3݈ʐ0a\ & T{8a:<5M..be8U85<uJp*C[XLaT݊<-a.gЁso;f31lXjZ@Y4a N
-#Vh@q>%V`8
-~̷B+Z!\ X 2ap=^jÃx baCz na 1lx>Ek9Ʋ 0lx'q 2Í ?e٧X7<;eyfY^ r=63^7G 4ƆFwm`φfp wK6|g>~ȽYGlGx ?ƫl Da1 dpf&&&pMlb>+
-6
-k M$Q հ#{TkArj',dN+UѫKu=:JƞtaKU{<Z8;smMiRz[cByb2'i@zzDS=s$?*b3 63mmZo !FREn4|=Day L%
-|!8ڶʨnEpώZS<R_1ZZq w<|=FIq0BC5Bmj-H:4O{DLD8rMq˻pz8cvy)16XJ${h/ ]Rl+f-FnJO2
-xg< G B)*C!o: $5`%tҁ.'-QbV2))TD;Nȶv2A?&5B+1%BHac\B^)<6[ 4H+Z?HG\ᵾ
-j83Dc^.h&6B?f[t({p̡OW;HM|I"~8̰3푸qEieɐ Qd1N'?f٧'a$#v02[f!o|okwD_bK\
-{jDVƈh!5クz٣}gIa)6#12ݙV]B1ɸvF,k%bڍ RJ?)竕@I>G]*.sh* Krroi0fsGQm
-'rZ1ZJ&ޜDVj
-֨a/~7|眣y*@TCv&rdsd&{$MO\/t_]T^1"j擋R֝bv㓁Dр'ET9y{(Jq?.iH YWD+'5V-km~'R }HRdy BE||;H0VLYK~c}tnAn_4fF."S .img*1=J$p.JֻC>3&?\(L_0J
- n,h|gX(ϟ$M/z{Po--Q6 6iVpuvC_rC!v3a &8 PCb$- & Ҝ^v==x4^7~B LMu$#Zt&(ZZ
-ZÕ0TX
-<_̠̤!5ݪfRBbyWb7ߖ6
-4A;<78 w~K9\c il?b!xx5?Oi/}~ߢ]̃$sdIyd!I%ɼI2Y;~)5,lL
-xM8/b&EҹW
-
-'Z2hzVzYz\EQQc(Jn@ eFWJ4RyI"/eX}ȕH玒y%GOJ7JJsYQzQ8JGo4*8JHD( (/#gwΒ]ƐbRXԓ~NuoJNGj0•fX'uző6 #prntYybCTW6Ƹ'fANcwsP<U D'@b_[9I
- lh80]BީQ{fP
->ğ*<Bj| ixڷq-%1d,sqX+bnmx>b8H{V܇CX'zqxǩ}SU<
-qWAWQ{U)RjlfP; y"-FոSD[+0 5RߋAɇmRÐ K_ƈ7c==R^#k1Sz(/Igz5AzJq &S*7eIQơɜqRӪ[/T[7X@)6Z&Ύ9q^)n1KMɥPΜ>\=
-kASAvI 8.ȡwEx7,{`%vUo&aޞhtB5o{} ;Y {N@ܭ #ա]nPK˜w
-@B놀¡Q"T"ⲱ׭Mԇ!oP?qx#.YS37?w
-ZC9c>n$nP P=e/{ɔBIDZHzOS2.xa,O#䣈@tA PNO< 5faw'FM$=L$ 45I3_5{1E{* ,y4Tq5MJ;dЎZN i9PJ&jR g.?йy;bԜ;uf|ө$4kX\)R+*gZ1ִɉ#yHPlEBJy&N}$nC']X&#OU͈Ϸ%mPKIs
-aTM|E\8!=|\#b}_U
-^5
-^
-^
-^U
-^M,s$,t4TTOXԅ#Z%p\nm.,uVvj!RLs5E OuLWCjhBZx@ YK|fCs sir6zhw'?y=3<j_D <n<~CmZ͕ZM,]}).5ޘ79
-OBަ͆?|)01p͜O1w~6%̵
-B7V|Q:&92k7%+H zD(!՚}]Z,vE39=WE]2b KL*H(lѺtXգU_q᧳JV= iƮPC4)#m͵UodjqdC۫١ukS.,,WC"VkT5{k%,;Y߭ih9ѬbjT[r[YO<] O}}HMYqq{S$l?JUQФC1 ]IVHٺfmn"f$;?{5V0jD9 ('2U+dD6E͈DI?i aOLMegtNODJL?am]<9mX4+ i:zoZ( zg5Қ"ZW\BӹQ=֧F131ys=ZNTz;Z,3Xg&1=/Hg=0̔ TF+/&5 $;MDJ[Ktϊi.j0LId!$^պfJDkdOjwْc9Iv/ $eiVWHBKSO0]1œ]tƏeSK2$B8/-1/qsq>3{0mlS|כ}~՛-TOy<|s݂FUskƑיmŦ(bLuGFÁrp: !)`{{nQ-=(JܥG#X;38?}j T*i&绨Ex ՛Nl,NL``iBF:b5@ߦ@;R#@"mMGvg}#(똆_A
-
-e#'iQ\32ꨰY6[>kAq ($-~
-ի4#7Ѓ`'AKo?<<F$!1$ GAɆCG$oj&P
-@Hf`M /Z=+R,bNwN͸gTZL)6iJ*6I߆T,1IYY:eN+ޙī$9c H5V0ӿGN .N(H,揂%-w,kɿ\ 1LPKI#
-
-q)?
-~o*9,wugp+8wIE`+Ŕ7(5~ᄂwi~ ?M#G4[OX;'1զhF3ǣ#m=. 153m[F:LG7.wzЖEfZ{:Z6Mj|:80ݠWSz\6e.Z(\+PVk tCKp򨞢R6*Ne!RUt)/od-ބNWWpxGl똖dqՁC/@p\U1 XAh fZ.G:fbe.1#ER %M9Bv6bZ +dMέD'˖"e&Jڭi8 ŪqsL7LQ#ۥJ:aR}n!]VZ,m:wKz
-u/wDOwR6(ʀi i2Foeu[s S6[7L}(?RZ-YVFLS;#V ò< jْ5qSLoSք^RB/!t; i>`N1,4)MUGt[ʴC
-}{,,_sDCcwL4nSQ8Igr4m1-E`Hm9JxuLR 5/eMFɌ5nlZsh_I_:kchC1#3y-C|7-%oX>)ȾmyutD
-r2D,HSS?0\A]r-K
-ƥSRF4,S$mDȑaqjI9dݙQPSsp2yb8ss4%hcd*ʎa=NBO ^pWz(YO$@78Av] }C+V7xw\sp|Qu,v<])sؒ=z2^VfuEh=2(*!}vCal$ Z+6U'v:^zu>KR!S
-j#LϞbb )Ayt]GKes%fmUbb-5bw4
->I u
-U'qY"yU.BRZGxL+E~4V|‡ԆE>Uw5.,Jq'ckb0!~t}?\/2\Ť8{g]es?&IvЯ&-" |WCs#@OZ"Ԉ-a\GK˘F$&COqg3q 랆]xs B]nlpiă{mpOk^["چ-&R.W +ʉ&^txS3bO^bB*;
-_aoh 5] D'\hDFhq\ڨNaaЋ@_H~*ͨUA Mg;D~g<ŀ
-;(Mi ^bh{m$͓7>:PK]7FOA"XY<E9e1m\ ,BvJhGxf҉ZdA
-jn| e%5ʄE4FHϾu4;6=W^F ;KwŃ\ĦYwKYz W:Z0o1L.ҟ:r?PKKF
-!6m=8&fg"uJ]t?l`QFeI,~g !~s=;?pxA@h4Y#`.
-EqE'7@ $pU [Ch B@L`(+p?)pO`8agjVPq<, < aAZUUV>08hfcM=k.(H:a9^{>.7Q(9]AilͰC^Nx`qgk]BAI
-/-]QOM$sL<>J3tj2 u
-{ 'L+MFt) ӊj[E3_FN`t>Y S}5mW2jl4[OkW[SjՌer1.csfuYs+Vs۱#
-OPpn(u{²L܁3d,3o%i"KNf0B
-baGr|:Wn߶xKܝ-
-<cPy(lsk2|A0Zb7>0*wcZ7=Gkx/i<(w쳕{w ȍvwhhG@|^ڸ·}-yK?T,=w|жŒ]^r-߅8Dĝ
-]Őc*8bB*PqRœ*QT5oxGşT|#x7"0"|#4;#'O_`F
-hƶ(Z+u x 8 _G(n^A <,Hzj8^&L[ -6F4&
-:+K?pNDV.
-|i ^9ri. |%_" P߰u>g<oqqޥ:øDk~LON~5gX=۴^3 /_6Ƕg:vyA-[ 5\3cW'z[<|kLJaZFG*jK;4JYOŠ
-=?gM!Ȟy@6(MC*)a{#L@nu)YX5xۣۈeqOw 1|=-47KR+~MڙLllse۝YYa ˜X ;HljGwF2^6cp!1eeX.e +Ԗ2_T{uMN2==sd/PX|(Acfϴҽ0<1wCU`%C!yV2
-g,YΰIY3>VѬ9 A `-8_r|{~`u_^c23y&[  r΅uy*SsK?v'0cb\;@ӸuYs|؞F~)w0 @㆘u4cmx#!6s&5<gfr:ޗKQ%w
-{
-
-T-+ pC
-"p[ApGA*0+`N |b* WHxT<*=TDWQCϑ7f<hr,W
-pfW{%m&WݒeSuIćRO) [)-'h卩3m'ELVNNU|(WJM2k˚i[QvY?OsU9Jz;<-rw3$f,XҚ'=C!L&g$(NbZV]MՊ*iJG4;Wr\Zd1X4위wwN!iJ1F]Nq^28~9ĬPOZڴ1J!UvL3 7m]IJjbf 1下N-ԍk9xzǨG~~x$S]t<m.9}g6o:V&9ZIqvu'@_`Q /7# `Gl'={|1`}{R[N m R\BdPF=U\SZEU*_!i^}u.Ğwf`u3ǥD$R`*.s>rڸGEX nyy.ET/o>*^BA\Ffp08++ޤ)x1Sf|շE2B5IF CF)\cA5xA7g .~d?Pc2r2 5#]bQ?!qdYF͑B:GâuzqA:тY>$[
-F'S%PK==8
-Ukc*bا8 *TUUh/!)t)U^M*q)NIѡa
-i ӳ
-b蛵
-pGO;xV'8Ce#x#"%qNSnO=T'# %r>VlMzFV;
-E/m ^L^@kmkmo|IY)wQgobșb8gPDQ< "
-𲆼DĝJ b̖YTe+6T!ݐTT[" Gm:Ԟn۷]konP=gG5"X֨IZ5In!wdRղn9r7 (Fˊnh}!W2d#t-TΛʒ^Uˇ\"PA@1Җz7aPJ6i ze ~nYQP2dF4k4nlPIQ22|mFZ<6L1nc/z.uyIvE7lmD(ٱ1MWv.~puIM47I+*bZVQYiU5KmF̈́9AWr̓m.q_G̮8R M#X3Tt5T9cQY\ߡ,(}TxL(`Ӏ,y7FOG %< thY3dB;wa/a;Qbq9  xh"YHfI3Ge*ZCc֛~['id $YQs9:c7 p-#b@5L{4[V;=MǕa Jz騋壹e;ۆ62T(ѠTN>FIw=T˒wK0)s. `PWBr($PB6':!䅓'U%#\ F.Mc4 =3j5.&5cC*кRMdL dBJ]r)HRHXChJՁ^jea37Bb9zAO2 }MA,hJDcBOKDB v`Tgr}v vGCv J>oyG51|#<5mA9]HB,ƞPqwя2 ;iQT[۸C'~>q_25- JԮ!*_tᘭJftiPPLM90PK:
-
-gbHpG4Gj5EjV&dSƤZVn̝N\`}yieT>iZi+3xpg]'xxM]۱ܬӢV?A6Qb=VO(E7sD,6rT#oY.qROdtv h&u뭞gL`ĽuYXJ<w 9gLB ʏ
-32!6LɱY2Y&f'2iid:bxt_k"ʤ6 yFߛMge7=&ݜ9fYOeΑ~4[ٝXCߝq ,vĩk8qr+԰bKFAa+n.#{hNwgL֠I;m|1Nv(؉<ZS3cAǶS;!<w`gNC>$ sWџJJ ⺃8h:X'RT͖.),͹a;T V>KbGh*w\)ֆG GvF ZfN*bZ?}6alFÒO2E4QA'{KŴ89} MX©j(;jdy{o`zF= smWegc%49%@jhNdG2n6<WQ}1_@ #qBΖZd͓{\Oh1*CF3^Sƫ{
-> R|[çڗXq!
-%^I6UVƧjʢBc*Q%Nh~.?b_}Qp]hb ~;cXvb}u7G8>:8eN 7zʟV٦ $$I}v/{hq#T;Ͻ>Q֦3!C`_y}8V;ؠ
-;m ۴1'aF
-Tư!^*f
-C ō=]mf6Ʌ(6mY1Vo7vb?҅0e}D=̋Vd)s){{VQ9AC,bWMkH
-
-rg{W.ohHkhpae/#R#QX1J73{K3$C1Z^ׁ(`=t2qs޷#c?a\ n4+Lf- [Bƶ1.0lDFmJz(^C?e}P!vJr1aJr1t
-֭!]WL zaadT5j 6e6SIQн6&Gl>JMNcu"&W
-aR {}fe&A#*8IO
-9?l0:e[g槍_Q(ݤ6e)3ΩP?EU/SK4PZEȫ=
-uTo&T)(J3+0gYV*LUB񊧁eS2 !1baxpPU"OTJ-eCd98R`}#6[^;Խ:n. x]b0/3x+x^"ZA/wihTX-]
-KiZY; ;x<etGQfQ/v>f@/@& | }Dyz%"J~#&\36Z'ϱ|ΨVweVsu9W˩ۢk4X^q.dĹǘ5R;Q}NO!%?cהSTu$lVޫϔ^{d3J;1כjǓ}؁<71qGԌA&CoMԽEԽ˰;l<w 8[E'CkVIޤ3׋kدd+'PKdF
-UZ L䁀2uJx{cƙ@(<v@~<?D[l/b9Ł.tl>we: acO4v% VqCzrtkQwt9lΡ5ۗn"P[g'XҨ
-X;sj~ǟ\Ýa)wruV x>#qFga6IGoy6Ιxh&L9b =v<v)a5H*DiS Jʮi,m]t'̽P8QZyʥO]O)\o:[eOeHBW00;*GB@ f=<E0
->ɷ¾tĦ/&Lsޣp|ҿD"8rPgsž{~Q}.÷trgrxD]YmVWHvcرԷj͍vf xOXû:\yap%PϽqtK?Q?^
-'-ڣ
-DzI+<;ԍ}GDz( c=>;Z\Ԓ1L+ꩈH*Yö*H9_p ovH K1\XbY er זB81TsL; :WtU\R{$E&šsI
-h$}HZd3I&qR|+ |+>S?A'NS̝;s
-SpE
-~P _FYư2Fd E/xY1e"UPG2>O#X"X]v -`G<&`8(ITь^}*thxB$T{XNmخbT,F㍸^ÓN 8-଀s@NÛ8-a62EV{xVbp Ŋ .
-$ಀhy ?iG$@X{ױ2+ӳʖ7l kLLł!%˱Vwg96-"#̌<sFs-;GXA wFcSE,:>플NPL=vܡj!ݲer}sl6r䓳ͺ. 1Mm:3D7ihղ-op-aʳR$HI=~!, J߳F1Y^p5K,kJyR7+ۄS|sYh\AR[Q_
-/٪VB IIX6;ug,il_?DJvVB혭2v/8}juZKFJ/N%jّ#ɔt
-+䝜e~1<^-& 5Q \G,8R3$Ԋʷ=w:ųϓNIKG `\QˮΨxu 5W.:ǵ#&Ȅ]g 4Oh<}[egWpvӾq#tYr"y'Ӧ/e(DH4Utoz$KP}KU鲖[f.i[괎Ǫ໔C3Ley/~c
-LЄ.dE @@ @^@^
- kd]HZ4!g:n`t$ǰ&Jױe+wQ#z6bæQt-^.=:A}NлWQ܅W"&@rD,lYпdLJ2Cώ c4CW?E0 cx``hC7-+PEZt~dDVrD
-]Zr $1{FdG):@t4dDJT! b!H:'U{u6\װb%:BtBaaw{BHSlM
-WBh _$* VJPKUF
-
-(oےq,WU>{ϻyn}{؂<~~͏'Rq{U]?T<xL*iϨxVs*WUR=KQ+z8π kC`an+\-0a9:4^/pBVࠆاRx« p@\`u =H Ld>
-b-oW1Vmuqt9"ݞv1hXlU};11z Px>O]swiAWyWxϓU<邺Vo|닌pXlW5xJ Z$^z<%08
-3?Gc)UNRa7O<cP.yRp/O.׷nv},JIxKݷ 6?쌗NkNMg/\{F:1%QIg3\
-)JJQ]>,ɸkQ T
-㺭Gb3]1ZݴԈAjFZQ+nK
-5*hF^5*hF4*hFK4*jtF-:>Dg WK.f$~:xT1 7nx]7a7w
-|Q!.ww -_O9uc&Qwc>/-o 8l|Nsp8<<|
-X /Snb|E"1ﹱHZ)XL7IX*"b@@(X/ <.sxNe +?8e}@\/]So)pZ;7gj/  b{=~&pJT<oC9AN`$\=Dd2͠l1#jx͠1 5#=נxѠ#dқ)"Wg Z.Vʼ7ȼUAV-7G@Ъ M΂6N,GMl b E S2A31 vT!+V:
-YX 5oqQTST7Ɩ],͢yCI⁠ߊTv([R_8G"V(Vhʑ٫an69nŭQd,qvX,ay~:hz։~1v*mf[0#+͘tdE#k{CbilN娓Ϙ#l;Z);_>.RL2.m`*ϊFotw[i}C1Y]ڇR1'FTN)-9`zC<2[Rvh-qD#.oG>q6aaQ/kѺqIw)Ec!s8I/\1犸<ՙ$y[Xl~->3ȁ6>188ӌ[$3s\M\
-W6=3NFf4j131Z$4|5]Ym-VI2W;(eJ97GX0JL&6,aIWMUz㆚FBn*$p(۬1,&4Lf{jE[~?!+dRy3v+<&5^3cޭdn2q1Y oo-WgaF ­u޸6P_BhUrSjFpYcZ Wʛ;U2q|3VЊd'Ve$s fFvX1dj)7f٩Ľ 7%b/SYs%&3)CVovi"$mc61AEI+JVb=g@K;m'k$úP{<Ƶ2xiN@6ڝ@شAFf PxH~ LXk)YNӋ[xoLڇ< N
-sl G,?K rLOaRU$bZ^Iq7b15<
-c u:'|>%^tQ0Gq~VRĸaVC1fS#|ۍ^:^1 jo Kzc#XSqY7wn1*9 89Q)4܈|la-n:;'}#Yʚ6w#F Obas}vF7g;'$)N}2^:|zPܜmt#ڎvk^W=ʑ,UÌT+]<&l"cF1?me f^c&q;1x܃bbt`)O&|
-ǭhmlӰlvpk}0/}ji} d5,ڠaN2)K#ǒy`vCtQ<`*0^'okKBr2{1T,I`_'9.[\:9 <6G%_obN=7y:Ê|dEcd\dwˣ!ܰvB;8Z^J[rَٝarǻ.< \a#&B=FN\W`s2ۥO`L؟k΃p&qH`i5 cl#r2}z,MEZO`]'vM}sEZh7%?(5)HJRrK|`I2$f\(rW-{R7Z*=uQpU0טXՃ^#K+W |K+ r E9މS)Y&$Rԕ$KE*TZ# JWJĕJKjO<=͑'x.s鳜keo\~.lה.ãGaֲ
-/u
-JEg0Ѐ𡐼tUPKyKRGyAy\w+-3[ ^R uRRN-rҊ,wIZuZPV7M,oT NNմ wUE%̞F3ΰglC/Wq
-*CKH9V*Tzؐ2̔iƄqR
-ʸ|ӨJvwf<3f:IYv7++Y$\n96U#TM3e=L~蹚VU-Iٮj1k͙ja=b ֗{7 6k=gBPUȮWTg742QiM̔qPpg.E0j;!=+;l *d tO'}6z(<Ɲ*7t[l_Șy{y}xW;N4ĥᧂz&l+JAQ78 |
-&5ӛlL5$tL+8wBijԲlodt& :3W
-B`rl]F1621'k-]$g$
-R_ 4Le'HfEqN{ܚemp
-fX&^+ &; .rҙs}N rUK[2ʩqHuQɻ+ 齋MT26ljUvm{iЏ J{tLf_4dL(24bdh9mW!x}91s2د+Yet>֜mv$t<eI]doԗFyT^B_z.J^z˧4+E(46I|${| -ۑN?cQGͽZݮKʹ
-_9l_S?T#
-`Q
-OխTژ굱(؀WFҢÓ>A<{tvRSw?D+ΡO&_˫㘨&_5t02"vq]uopP' "dO=^3熃.ηۢaplXD[Dyw|oIw<k߳>~#'\yA!χ!2nO)}`XR; 'Y5TsБ<<Cp'a{6
-i)R.iS(7ɶ,le)EEqSAqnBh${{^3|~???^e?_8⤊U<)OxF[*VqJ;*UU|Css׀&lC`@
-POTp7q=ql3讞sF,w2]#簹D]‡q=fّ؎!# '\̎Lλ-⦝%k~kk8k;d+q3'c3i{4ZQfnFmsVuoax:uK9NkE5<3T1 46ie </B"U+"kܷJ*y>tft__y0?|Is1*uU&;̬nP3yM=os
-:f5sfȏ gPOY4|l2t`lH#Y;T $켓6doW%\=}1l*rrLFA,R1c, =4ccF敔-UzneﴂeRqIfû9Q>kN'WP}ư WR֖gz՘0 C,;˝~#)#+dw%/fR2bH-(1nzP P YUF“j4:wи9
-oxN~t*hK"mDgTmkA>Zj拧6яڥ^v#ɾy+SyGqc.fԗc я1r;r8
- ;h貎v9bπ>NLw̙9.W+#h ]1/=茧t8EǑՕ#Xčq Rx{\Sc~2Nbew7נ zuYO/keˇΣ)YP,i$'uSb] pSSsrHK5^p7,qv=\6,'Lj',teti
-|Vj(cT7vEqg>kQSJt+0OwŢ+B'[sɥ -۸kBjEW#RWI))w(`0x^ÿ) hIvD!HqXHs6~=z%wE~*;3:L\
-Ko' ܌aq܌l'o&f*%vIZ襬X=Ŭ˧6Njp)mRLoC9H.XﻀV(ມX x_.]CG\m渄5MJșɳ)yV{0՜|=yP7EZLW_EmIڀ)Q/M|VQH,
-& \~@ 2+M|/ ,+T xvz'Iy6/PK3_
-
-%$EZDVp
-dMN$iwFEy3{L5}b15)%)4H 5yLo.+iE^(~bc@$$űYI 5>hVY@FwΛӬ}5s35L> ,Ml(;x[T$ktFѠ6t?>,ފprBsck\>l+PK@^
-BFmBfV #J2$a
-w<QK\eJdib4p'<Ƃ,/]" fې]a(u)#Z`LO?O\>>wPKE
-
-
-
-
+PK
+P\ = nK-pǭ4>LuC`n$2}WUT 5N Ha)mw8k
+6
+ RVClE+JQ #r>Y+JZ9C&I̕KWŻi6LUr˹kFT-KBd`-.Mmv,ᨠZN騝:
+jfߔH
+/q0&2 ۧ2F0t5Ue"gTfE15!{ʠJ2u#oqq63A8,V%Cc4k}kaCt_( R1(.J-lXva&=3e\
+FkarF]5\gg'}),&<[3Ǝl-i̊~$83UXF<ɘqЋLcQƤ8`:ܕ{ d6hTKe+^cG*beDv#nS{*2V JE by$㱰[%^Qz!SҚ'\Wm_۲^A*{w?UV ^;ONnh?Vr.cVۚHϠ XpWB&Dyt=P>(!Eyq>d}(剕h:bI%2FO&0(O KOi_k{wCL;\ZMHp"`-nqƛX.4G"_bˤpʁFunHM{>uCK_aW1s!uu.l1RgI9ybTbؗp֫Z<F=V,Ǡ}
++{SXKQHZc^c]mBۃn7Pa P~1<bvVm,uuoOu+!y!v+v% q0U3؆鐏xMїg8h=HyO;
+ MW\-͉p=3G>_}P<`ƛ 'Cz_pM_p/xm_p ~s /PKF
+
+N.%>\ 0դTp@^5 JBI2
+J$-U,˭l'I*WLG)pVCh;5>2 `L"2K0ԩ /֥*m$ӆˈYɤ +rSJU4a.dr~9H,K+$¸uDxjC3kk:keXOXQj61 h%-QKUp;%҇d\&sfYOvFúJWj@n
+㢾&j8e>hcNKVUE,V'}mlK"٦ TL`TfBfEJӐkj.%)O%}`:6U'*`rZ,u5}ttVщdbĬKb2XŒE
+Vq8 ܠFiw4
+n&N-̄dCcJ%iRfCLܘLj)+1DW9BFw{p/3 iZֲS|
+-ѡF^av!)5[[|Ño22-G|Ȧ"]cV,=Wvk)0˻P[LkɒW2'T<)"R4Tzg#"Z*GBmV
+J%p-U8 <yR
+^f2JXވ͐28=c{S7|>1`5jVC- “=-Ë#  1i9SO1`[(au}?Vf_`ќВZ*:[Kp]rZKښ
+)xA~e_Uc-AfGyy87|x]Wq޶>ĚVr$,q~YOhy-h
+ h]iLUcSGHua{٪DnV-'v~gj+!'_xO& "XpwzyN}BE>lU:/{xF֢0dmLnXWc=3r19|f ‡_W]˯=YY|7,ۆ2Eeb&{{G19:0:حbNCtQ|?G^QÂ.88a&LEݨގKZmnBacX *9ВQ2Oo 2pqPF8j+dTfnCcc/gc3K+mBR?s|DNLBuc,ز㚭^~
+،sLL3O[2ɢWND]gW".m
+z+_Vc42 0錽,Q֣sg#'zrJ4đٸޝ#g4sйrdƻI$ı]}6NNNu"%nܵV؁+i]x<xawuA맃.z}+WӅH^= sޙz'ӫh7kphKx,*D1 :շkQ\åx.†L6l nڎU~wD7vws ^+[9l<~wì
+HGx r
+r |)/
+t㕗 ͢P?qRpaU廲*(oJ*_..CubS܅wNQWXfnG^OwxCc
+Q*j<
+1 ɱAD`pY"\-*jT#~[1f@eh#b(Ӫq >"fӸ| bn&u^TnC?}#>3~l
+[bC;*гI똟n^,>SD6JU6IRUHNr+ӫTK_%U(JŨ*/%jK"~M̨<lCxLQ_E&~jbZʣA_<hc⁝Md᡼,{W},9z
+.iathALK>:Fj?<E]־3Lr(G8O7cVSXOf$p9r&E !Yt˦3> @xw
+[!w΋DCuzIbZM;E?ɩ"JZ_d"17:h"t< ִ/i>8ԅI_ҿ`Mu~rSijhfO "ిI_#Gr
+Iy@ZUg#xÓa4|'P>
+°?^!"_̗|_)2 ƁR>18Wm0IY*k:xE4Gi6Q-g > *t Pv7F
+ĕWaJ:.M~Cߥ}h/MƹeFBA'&xA/ |A?
+DóE:p{HUawE0VU,h1GMQ!Wz&`Tˡ1`d2IEpԠ?jɤa]?H)ϐ
+bğP]zDP 2HIio,^ Ffa,)e(`05o*B:sH8PR
+3L+Eio;U Vek
+09qDTX1Oga کUCyD2kHH… ka&fYsja&>]C$F>4W!Q,As0=So5Tu#G >Ыʘ~ɩ&PC&N5: A_2<T Y8E@H0T3Q![aKd8 rб{Hcz>R}XX8ө ]"ujAq,8g'9Tu*;'jBAc
+ oS TyJDž{<NȺs #MP2\9' B
+-j6Q(/J\b:Q2&] 9
+xȉWd:MIo8]K^uNb0:NSH m!.MFO
+ $X&n.pa/+/WTTaٔ0(.P)x֙<z3U\P)Z Y&u5j֦|iWj:+d`ox\Ai$Y9^@x?Bo E>X/EdTəxwKx X(6Cm$E1Py MpV$4?5Fa rc>1\Sgo}]%YnKޣ:E|pʖ#F"d-8< gId g@JV=i@my$$'ctQS6
+ah)H=aǵ^w<u0]-^y—f.*s
+=K>gN_ "@m||~y
+Q%D_p778Fo:5Ko_I[|}};}y>cHK~^þ_a1}}c }l;U}DDMtIoYKz-"{dz_-þSVcz;Z8 yO#@RTޥFh!~ƭ3@0?9H&;GcgwnrASD<豈&Ϧd8脆
+wcS6_>?u`*MkZvt&QHm HԷV'9Td-ֈ1z5SF.-Q՚,XNriRUTfuu+NH(OvG)5ZMM(KyϨ .2}d ȷgzRKкhL|-NU,וTnB5/ݙ7іyh[!d\eJ'qhRZ.iR{Ws=5Hv$_k ܮ{p..ޡ|Lw~=s]rvP0 A
+ì_Gn"W  v՛PgvNBv%O uf {9ʥ7cSMPDޜDP6$F;j
+M)>ޠ@rm'`9\u.۫j@7m/kԵȱ+mϩ6{ԑ1ۃ,/D i*u u3fy@F۞&}*U V6e^Upv TF,Ph$wc^=ER؏ߣWPQ 2 _J\+:P":Fp ُ0%?'&fV6SrK:?'Ɠ wl9-|%MA ?I!ww`to՝okoHYܓI1 V$Rt72)lޔ13|JҺH9<hS&IEة|8IʪLiVxE|9NDI=YN@8(߉wwgULA#[UN$E`
+މdH2U_n&PH i*JDQf,?
+1(2D㝱5\pl927?p܋L<\Æ넍a*PHX
+?' -P}Bo[wu($n,\#Z'Sj<k-kGw[Y:\;eh6\*:{0Tcw?S:孺u!>:4;ia[FQ
+k PK'P
+
+{>qиDv~7Ls*6ssg 1LN9˶S\u}{VlWi{[#ZP|l^)^o
+g7,ob[ЪX##զ*2E tDС!N*)iнhUR._Ccr{ 0ֹF4Wt$%^~F?0):p!MSxA6쪾e]jnbH lum.
+qֲ^QP#:F1+/N%X6ϠdĪ<14yԂXH5μͭ|;
+JA6\gV>(l8Iv];UO-io²R<+GAS~x\-EhEEf?GԼ~@ XCz! t{Ϝ@;h4M(!}ǸrE.Qw_!^Z][vw;tO>BO_
+FЇs Fue!0i<"C2`J7CJ#1~LX%gUfHE]-i+g&ޠؿ5#Y3 q=oek afYbN!
+:SPK'=S
+XjmE+Ԫq%ĊjԵjֶR-ޗCG޹眙o̙
+&,d|Bɥ%'.)>V&+Bz*$.EqeQW
+G⁅;Ч(m*Fq{E\gFU>,2C3Btxx Y ^eEh6IŰSA{!ǟZXaxx3<.AW/3nE V
+#a K%vzi
+cbBG0&˯l'N|;  MA|Lũ5DWt`B0R&8 =0OŹ#Xc
+g*ܝa8Z` \
+VXр̓F|Q ֆ 3f"2:3.&hb<xrF;"΋I)&D̨h$*>.ykL@ZٮnGqّpi"f(
+9 HJFlW0+Cq2;`G0-/NEPd-lam|ϻM
+y];%(,ogkYڬN^^ YxZ&E|ģ͛sow['cKy:8hǰBFˮ%i8!.O*:NWagr:%~;szgdǜbUgM_cnMgFby/Hf7]sRs+C1$ RtoYV4)hcٓ93˃6)ǜ勢宐l1JqآIe)iK͛&^#fg!g&ޒ
+TMQydR)#5B'TP1nђ`$l o,KM4%jj"Ѹ]HGăTH^䗔_)
+&NA29kYE8޴cy';7if_23uFȞr!V?G9ws
+UW[Psp: )؏as:sH~7w9w ;h`kIFQ (Bc
+glэ&P91dajNQv*1.rM/PiIqə0 13٨_&tX븚eo&UZҢZ~V;9wP9[;5M;_dݡaq=B뱴 2P-{+-k^zq^l{>zxx5ՓjZy7"^=߈Hm 3@v$.ߏJetdm%xPӁj 9Rl<VH5IKU}oLjK ͠}إvp. [܅_ su $3MgJaIjS${ }xB fiOqPPD3RrŎhݵrdJ2$qi`/欔iU`6|ʦc".n%b.%_P0_ 6f,mwy',>3 _%o*y"a~@P<Xp< ՙXBP@HMR5i|`_Bw 仁|[ɷ|ss/ 7\}Vi.r9v<Z_\Zh>Favʰ^F-Mjl֮-ڍUی-6l6Z*A<J9@y!O96:6]Y[U- lՇa>cq>)XZt/zrWa87g;qj88OY_C>ҿ݆ZÃ{ '>Toc4!c$6b13JqN˔,d1S%McT#ꐻF&s/܈ӾDgvc=`P]1e΁QV#)zcKeUHEC{~V%m% mx骤Ŀ؂(D7l-YϷ4 ;"r <ߧْ=fHWz՛do5J*MJJIk<.;r&-'9IM2_I$$|\О8yIᯎL_Rfe~p#27e4vj|x$>ɍ{p︐fr7S矩q. K_7IhFeވMiL5i y>% EV-Jo:35>jhP*@){.g}ʡf
+ uގHsr-FVq^opyf
+&Z&:R
+RHu&3^}*m]wOUü4}`Ѓ2bPK%r>K~Kj+<>2. s7[oԾ4ɰ.csOi I/a'g2.c w\3.Qlo3<=$Zo.4KAN^f\L3\ߖ32[oWfʮhaY,e {~]Ny/dB>SP$`L8i
+;R!Lm<eNA7U*梐WE> ť
+ Fh]x
+yojm,W_0\p>v&* ;0 e@qbE[lӖPB)HhD%qL"ژE)VfXiYY @0Bo8S$"K(ϘK%;e<$ X3PK' Z
+Įb{ZPNf X ?Sa4. 7ND;sp -!7]r ojܩy@w_GO'jIiPPKơ
+,8d4FHcf8%w{z:{[}=-mWt_͊'SF<oDӦ!>ۃ`hw?$¼}pP] Z݃-w@B=6_N{r,5mvI5{Cl`H2*kFƎH΅X>hYG ,ju WnRH|dK<Y7A|Bk0y[_]&Kax<3Z,ԚӶ`WWKw;c|<B?PŠ 5R<՘bfL}V:6X6#DJd_ʢ4A怍jI5]qf(p,MZ16,Ϲwx$SQ[Om֐z4j Peb%}C˰1Sx# ՒWYP[wKƷМnlÒG#YXMG3kGF˪ٞ뗼бnC@b\rhZisՙMM-B˥]:V
+"q;;`&BƁ)ahhyfqY .WrXErtO%h5hX]s$fWcrsHrN6 VҮ$~R#Ijy!22S'̑H2GTûcL1A31u]0e})#.c4㻊,mY!/F$qگPl F82IsmWKw݃wcaG cd/DY$
+mg[4o +FotF'aI2ǥ}"u>M :VQzQf- {k7L3%o-/fRQ[Bp%2|VN `.瞔b3^?iR#u0UW)nŇ4|6BÊtT`(lD^0Hq\bTlF<QF:4D$uSj`D2y;u܅Rɂ՛9/{ .l3ތqXTWR~Ռ+͡;lOx,+f06~3F29d"(*0O$BҍGGfBf:>2H}fPD3̳sy9#ywqڌ_T$fo:]5
+}NJ2P;+H/rUivQ3h.sE󸟘wŁ,Iil*塕vM,fEMc'l5;^V)S6H%[g> ZDbFVˊF\>$aY6g _?ؠFqqk:wxbo3~
+:IF8K! j
+ߛvy\T@Aj[R,%fR,^޺0
+rm٩OM;R,T,.[9ln+XFk;SxuB?!8~i\=@}p` xܟ vrHWn{vW` vT>l@W:>նtVWމ9s%w ak'y{ |3R,E/sq4'$B$JRq, 9wT&ġ3$Vz:(`/9 \'vbX3b; 5?Yҥ_1Ze{xWF_)ye/,ST[ 4?fg~(>@s;&8g# Ao(~+cBrhTkM**37yݻW.ļ'62|8'2BQtL$:WNL~<{'9] Ij)o#t1F1Z~u>BÜz|<&|м P8^znlG( 1|Gq?M)iJzRG&I=͕8r.rʹk*.9znrPJ޹^Nqxy©0ÜGñ> 'VY
+|ɜpLa>xꭜc]KwץhK9;c_“'+ISkuM~v}:[UCV01
+xxUeUW&P(J35L€x&ORyԤZg,\$6'ȹ{g˯oulu9܏EoAB?{J?h.97{J/r3f}O* ծjΛ?**a6k<YM$^_:&jJjI6TZt{7x}沚I .
+Ǎ>i5qT5H2vN0|(~="FIW_L_ݪ&=O1cRZ-S֮m6
+ؠwk̄W _3G:o->6W8wrA)ƗE xZ(39Q|3\J*5QPpHPptvQ%]^ {(u6b ^Q#.&Jw03<RX*&ke b+8z~R|刱\pBXt4ZaVixVB@ldLׄp-teˢPs&w1תȈ:ȂW%b/_ϔ\9Fk٬6#6quf%oY1Y?-V`!u<_%(kP"֢L\zNfsCy&'^ 5$(Wpf:Y- [.ً)v+< ɚ9;G<??b]}fX/gz%+C[lT-r<vfTty%+0HޙMruXŖ u.H4߭luMb!n:rPKH
+ĩ5j^Rj4 xp֩4[FUč1Lݶ+Xb(djì Jr}z;j+H"S8 } j]aU/z\0њzw[xmm Y5v{XcԌd:kF.;w ^{&<r$SZ0SLXtgCQ?0--Y]/67ʦ^|nTfeRo,[lIýlSbj׼J}VlshndY<JYNfޞ,fvR^:]/X%󠂦'l-ICyR0CK!"8q]qq:~isq{9\UiN 7%=ΐ4lAldf
+OtEYJ?̀a>40ĩKGEzw.*P=vS*<!c!ܪICU}0V^'9XGA+Ӷ Ȳa=+'yFC@勬yO5·w<y%[n3Ī%_y!Uulװpob +_(N#)4"H'|lB4<;+NRn蛤 #͇`P3dejw`#jwEUO!V(%s,vH tq*Hb0|xU^3{K; (~ ;3%J.`1Ԕbwc{6` *ݗ#$oRcU=EH+C#t.N=|ϥo~f4} { fc6NMS˲jN)3CeR2E eZ
+zeJ%"Q<E$-Bh1<#$5iXzF#>VxM2Bs,*,7dvj_PK
+ M{>^JKhjKF\:fd\6hnt
+6 #9Һ{*pnj=7Yڡ@Y8=F2fV)Jf[Sn&xf+Pbf,CGžxˍ >c(a*IE~ÊoGYQ?v }pc[=3NfF2Job禡hVq d^#x[J8SI ]h22fkD#{zH;tVvmf"mZ>Bx;X`1k1E^U(Q3mUeTP?/x<Ȅ)dxr᠀ŏXE+3AT.olX2)+652GFM DgueP~܅I@8'gZ'lefqF,LܣcesY_9:jK[$Aӏ.tʒP aŏ +92d9-HeLag;M0Lr9VȀ&qT(*},-ؙY\Z3 wHe7jGMlz$oO<#H,jw4wե%)##0;hpPG?\nÏp
+O$q3^þ_Jɖ`
+`G@u_&
+imCoz!C8B 3\M,4x{ (1-@yٻ(3 ؄ntb;:̠lw#(Pv'Bӆ@S2VF
+>aqy?%}胆ݤ&C4$mL_dt&9JYg"Sa4.< 3_,;-St+xP@/6C"U- G"*GʑQV<#"^b*Z3
+O+8;8V1E&qkH/U/dI<tj$X`^Շa;ɤY (|>3b ~.Ӆts8)|N!c৅b+w
+*&q&k.MMwDz*w 2KyWNʻl [?ψ~ L8$`s,Kȃ:0 {%<řÜ9gY>O`ein
+/!MβB!ΓyQvI>+uʾ/В`cv
+l)~/N{'UM?ZyI-Y]t݉q Nu]hd.y@݀c[(Y'-:m?sw¼^I #qIZ3ըgT l.+βi+l(5@z2!=X:?V*ħW~*?DfJFT#!O8 ,s=7c'8~!"kr|kQd}؎4yK4>%G n99T{X2A Gr<B 0^zbgX@7ʴ8Ɉ"pdz"3 |PfFA\ߝqѸ6{U[dΛؽCoU{-?w-o,{AK.iJ_a^<P ^@ޤYr ]or]%Cz$nU%vMS5GVDUycԁbnyh6WOTVlW$D}-զp{ˌn)/ULv
+h,,Zfi Q=^'<yOx%4] d7:ws:% ]sҴ͎I}Jm%|
+8yYV^KTd_ 4e**njVݞ; RPK^h
+`'a G#QE.J\BqD7lɨ
+KMͶn)[0,}_͜Ue?T]rT%Jrx(Y,?%pKzo"~
+Y㗫*~E6r,ҿfD:Šb}=Ț0 縳@HL|-VLEQfOゅgHHyxX+x@V`ZCܯy'T]p,Fz2{K4í̇ά2Y#5,[=4M V
+lV3<R]'o-<-<oagBmEf>W,dNKx=w8m|@vm7l>d+U)gV8',|řu'
+,8bw n>>cY|[\3I6E _X̖|tZ`koUiWmmqRBdS9km<'46l>҄C5G\$ӟFmKGZ Jk) ʩk-=466iu{ 1W*)Y566kbFӡjHkh
+I6lh:)=1!h՟XēhmVQG7͹/=xȡ7]!|z*h0Ky?"N~i7u80y(=FYڌ=A$K!o%IȆZv|%ۃ:P -q6Po$*}G+sJTVN ,3E$RΞ$!IecvDOFv%S<<IJF&nȿ( oݍyA;u#m/o-;F+ YWy-`kFJ?h䟗7ne.sLDe<ecx)TϠ4PW7L`w%LtPKcJ 
+[^>S_˜@*
+\qU5\';ޞѨ |,(AnKY9K
+nR)KE4WipFJtIoyE`2MFׯiJM[icmucmucm5LMhvjpT4*,[:!~Zi >*+(ГxbRLb&A3H%$i!4&韫N7. [H"v7$ K7SjKR [ n}2Tc|.!)w-$BŤ7\skJJnAO_0GS~@@rO.䌟<H. 9G Lо,18}\IӃ`|i .0^tqnwq>!` 2nb] 2Y"&ED"m`I*U=HokZ+X=D+iJIk-҂2~-]М_kъ˫(PPK*k
+7fml[PҴ;ne@0ރĜʭhJZcQ'mjt]9uh:lf-5Ŏ[y
+7l6SJkLK.ΆXcZe٩삔U@ݗ
+5N5QB邜V2À<%i`BJe`< %mmJw[fxNԌɘLTdwxIIP\PM8 Nˍ؉twiM++ְ*cJPS5 ERj>WkDr-1{ +*+q/#|_ޚ@]m` Xk<
+Vު g`ɘpe;#V:
+ (3=JKY <z=5rf6h,ߋe:֢@3ZnPfeKO:u\$2۰]ǧ3Ǵd:ڰïrM;},jشL+]v)Pn^&uؒ תY1ӣa>2|{ehW?]د#ƣp7p
+3; {~7IZ)8ϒ}Rя;*bafVPTQCEOs6g$AqR$L0
+e2e
+"f9TnzUXq<I$/Is0HFs1,昻䬮x33נV'8QO.K>V{S 0S')N9ij@;;l@hoSP"^F9
+.\Ə8`p.ʢUzAWJh=X}3prA8*v ,}vUq 'eDeǒ@\j,C<ZRB׎k'NlBg]̂!ȗ٨x'*2*2[ R6Y)YCr/*<"UxY<%kWIޖ 
+R4Yl
+nRkSd54%Jγv}Aȫ5|8\"mĎX<C%nu5&p$*ZuɻS^/-X~L%cqbchR 6N#/
+cQj[#K,l:wDŽ+~lj&*w3NCUͯ5Xvcq|_hTy[*o7Rop"R61Stt8UG&Q&0͋z(uAC 8׋ՂãF9/onkL/Gb6YwPRV -lyC/5̌p"#!+\{hEuبd?(]а}x~{
+30`~<~ϛ9~AK
+tSvdh"0Rb 5u7CQ[ 3&n1`"^F?^k^ʲnT刉kb6i#x,Lɚ@ehh&PIkSBe}Csɏt].͟Te?
+x}P#ᅱA0b)n]=ݝȮ&Nt*=wTZ&6c>aSV=© ejG`$fvj2CVűLstS| +4s7")DQx_&4c_6g x."r[-Mb'W2&dmW9252]NʌQ4*PSfjkPl-vrLT TڝRilum [H*iW8>m.[)U5T~P!g<E[YCb̗tV("[;lTKm- D5Lgm˟m9n:o|p,,G.ՙRAK84ekզts)MJB KךNע5awT@dWg䑎T)sB!i7e&_3eўBq ;'[L V~Gf1ck+Ɣ"5E۠0TM:lL=֥i;PY$.J1,uAJ.'/4%.dաMd䔊*);iX#R
+YighQ2%)6C[Ƒ>l<)Gozx:ĔK2Ʋ;;j\#hIEBv+4b}DP51|rwWL46 N+CCkNKem0\cʵ^VVr}q,!ڝRE]~NnPOiu|#zĩ͋(|epnVϛώH,Ag|+7G_n)ȭt'ZkBxhˆM>5HdyhlwWevMShit f2L </Te::ʟ^֥w2seb5a4 ;qV'T8Ӗrc7 Nr6.>ȋJa3F:#)k|LmiK6d{?λExtBXRGTJ]JSZDl'I%x~B^L݉d[}iSxg<L%U#SFK8la`e輻`ΐ;CP1ZrZRdT4V@"a髟 qJpi8q8q!__c~N>3͙|||E9+F 'ℜIOI97ST2rS0ݞ|'31U>Tk͆^2=n7Kg栝E4+G6tW6vwip,F|#4*>Cb fyHS͡qGa^gKe/+WJGK*gt,{*P~lM^Ck{/b9 /J(u<gսJ꩔J
+V9rQ{5EAsJa:gb9=HZ+M>, =ݶ) 8?P>){s?&u~lYU@ߕҦ8^nus=~:>b_BuWuaH֯U#7pG4-oq儽=裸^i37բoQ'0p74 OmQg;`?tE;+mObxq7qi([>y¤}|I;e`H>UWKp@Ušjw{==8Ǒ =x݃oӷ:|t~0wtϵOq/~:?/7've}Y`8 yŸuAk$6Cx~Fo9r?AqB3[% SICN.nEv1t R2RQ\AȏU\la@D%X@]aɹxRL>s(wq#,xECI4xZ/[yLb*U_NqaKZE⢠gH|ckL~SqPa( =asaJۻSɿ鋘E,yS#`bXUG5GN0+gʉ$Ye$؇|>}2WU*K<唽]׸iTdXEfQY.iW/_K<7,ЛJIH>0p'ׂO5fP,.5)fqޒ5=E~c=wVcxnƕ%kܡYq
+]'\D Oӧ!ts-s$WEoz7@ R|>Yr"KeW_es gGU$Vv&;[| wx&xQ%˲**k4㫲_8([pt$ uWnaq܏C<kkxHxpQc 3&qc0)#1ijƧck܌7ύgCd<2^5׌??\_W!^t%x5 *4:/J7s|]uQ.at݉?Ÿ]M x]K7I{2鞅ݧ"]cnqZw)uMA0e{ %i}#eȍ29$`j]Sf$ȽQG;rp҆k>jBIKq|ͧKZ8φ+1y
+a)<١0ž' #Ogf&hC#)Rމمɲ')|=sԩ9{gfy@~8 J|a ?=K` /ʢZ~j7u3?PKG%F
+VDPd"ǣl*1Pֈ'B[cɄ5
+GFBHr<{5ԌqSAS܊!RPM'E#Os+*"TfHأg(
+dP ) m ~X7HlWvbP7"ͦZ4
+M;iaI~. $5#̡a{\OLCP__ޑ^m&ɸhkmcZ5@=
+IhF`dTHb_$oYC5P ƕ* ԧṮT4cP+U1CkĆhio>*TZEEUၗ^</xt$%0,$q$0#32q33<u*jQGL^ln[8F$].(O?mhQHRɱ[Tj@!~Kȫis3>S?Ĺټfm)O,Vʒ)`4~ͣ|2%^41-,q{.?6J)' PPPgh)q'HˇуxY*/j{=ك(:Cד'bZ fd@|Ÿ&*s!J1Y׌լlMvy1 (x(뢜R?fZE^C6}GH21˙aXcVrt*`i~ {p[YdT܁;1ޜ$2
+zpWw1
+`I{ccZZiQ2.JL+X
+<aa}{<
+x X<͸3dZZʸ-/e/ e:H_vB蓎5!]r!'@Gl0!/8BƇ̙9BQ689=jYrYyP%,*y͵^웫jdsr9k Xs򫕫^WM%mR#e .L# "Lhż•W=5<\EXnV-ChC}H>}@wCKs4VMz]]p>%BŵX_G"uH'ՄJ\Z_ r
+d;' W
+@|vVt
+s@:@R
+@TW 'W aw '(ub4@vY2
+d;N G
+N)qZu!'Ex@i,
+JWɒyn& e>(]7pPbjV'G"r?,7o]Mɫ.{+OyY=^A~BgW
+g֞q?nճ™OQ
+S'e
+~s&(9LԤW#o,s{ E gn% *>/ֈrCʳ|Lc=~t'<WɂCڋBNo͏{QW3Ufz)
+j'W,pE
+C[Y"URUxqOYUR*ȇ%a
+NELڏ2xEORB )'aDq#),7n
+0iB6<6FսUWBtN/sb|XBEUIß+(=+2beGQ-Dͬ3l%)zc ߠӤ-q[^\ǡ`n4
+_篏A^|.}l=](Xe-<,{)O1ci8òHcC}5.9 gqr[z|Ʊr]C{rx.~E~8ړ__='C?cesrB-Иpѻ$xևZ +y:Z1BCޤm>/cYbF̃K|23-W BYfp!(Nps$N1OqʧzE(n*1:pY<g\yyPi9/W"J{>n]7q!*@p,ዌ!r9|6Tu!1UxŭR D‹01ȭ#y }Hm"!QLc;}a;=m#ۉFd؅O"me^n=6^Ǚ*9^u2'r򒓱j,wT ؙ:-3uTd3/L0Qځ QӇVS#N(e1:H_EBZE@ˋQZôw0Ee]6jQ6Ae2Z޿ ynv_h)"ǯ*QF|_ ՛()ohoD{|+Sw${bEaBQeYHx &Y3Lhɑ#Ѣ-1" I,qޥ<v_52_+EA$x 8A/4]/`wCbGj=X.\ÏlZ' UDUx}&ܽHS m>~;XEE3,)nK t\Š\ DglUЯ ZbH8,@uқyH定ܴljR~=@V1, &%$He O=4ͤu4dz<(geȞ,9y')QY(e-(k
+l|wrlɻZt  M\nt\zKxJYy+-x
+ҴǞӿAiHX`w}~W>nMK +3i+e&…Ťnmñ>n 7%=ֳM#a+|ɔ3AޡD̚)j[
+g>cA5&
+9#wYK£q=g環vH~ ҧ`;cK b>GN7`8hVUjxqy֌PqIռ(L{93y=e)#okxGIv$ltLu/*R2Hv`3>฀is8[5HDC (}%7"K#G'WA$ouš*$NS2go'E۴̐[sz~N
+?^e=nMsް}e橊ʃn/GT$k)#'2>agqR삭>Y8OָVc`F΋vnP>CT8)hVŸbR\d#ؖ#ʑt;) , б3;P"J4U5b=Yf鏨p/*P<]*aD)Z<cX CrtU݁ԩ+9Q6\2P^`nDw5UEȌHh5QsvL_J<H,Ӳ#=Y |X6/b){|Dū[Ʋs=V8:'Dɾ|!x)֗Q Ҽ3I/>GeρM1E5y;'80e䖤jFLܨrlUɡ2%6۶ŷfZ\,c~9Pw8g;wwnpE<et3+*3[@gg?uL>ŏ]?OUdk3[3cexqe-3~sB[=1T9Y/~:2y"\RgDX?md,{wI] z.E?TAAߔU%q*/ a_f w*wCtWm\xD<KyD7lڄSOhM&}||cܼx;*b(+~:ZX.u4wP~ƿۋT>iѣ8g˛AqZ>)+85n+U xC[ǹid= ELq+1.8CGk&( D!j~$_1 q#h&NBt \E'wч[|W1A`
+p/qOKsD7Cg[H0By=0
+/RX`V g7ΚhwWY5ipW8! ϋ; V9Tx*;"?P7R}^I~6PmE|vlEqO檷"V$+8A,cr
+++{eQs8>,;B#>YQ %gYqY>/ND h8_xe~_*w
+{t* +6{'<怣ys=&"w_7J^/ ';bJD:a4l_`%r|,JVJ]$f>Vz71{/%/x KMb>Ȉ+ڿ_
+ycsk(Y5 t2a {:E%iDhAV??LAtY Bx;7"oPKR
+N<D>`0u<y#(u<ECϤBP`)S;.LgB7:.-ǃq^bσ?ƃuHJ`˓?9j-ৱD)HA|30ԙ_c:elw=> duI
+ *MJ(%X֑3]IҊF%dˠt'5I ؟s-v<-q@V./V.wuc.؈ :yB=iNiؼT93w,w*A<> R
+1ea=JoX+T/*^ J@H{ ]\+K1E 0̿oeYL|[qEFq2s~
+yEvG37kvG%5S~
+h?g!\O嵟[JھT$(u8AM\s">lK*B<dRqL.㷸L:r՝XZ<?Hw3%2rMI0-Է '䘹|Z+5Ӹ.Ef%8EuG
+C
+q< z !
+\rS #Tq?4X:wHFn{Bv;U> v#-~!;~uS~c_KDw$bGy
+I~bءGH"J(zf \w+>l7b< ]hjg*-\cT]"~C*2`,c^vM ;akAN.1K= fY~9K+V\ee)]O(~3,g 32ROT'oxEqᑱ*\geƝEQph-Yz+xuWW_/j5͗
+^#%X+(^ߝgÕ2Eb4Y>cA%z&Z< jP, ~һgȪjKde"[%O?B{XEhL:~@QhQﰖx?5oMע߿KIBݷGA`o4CRQxhG˃2/eڿ}V~UL+Im9wTy3\Ż{+p|%\ஒ~9rKJ}iRbPKo
+&#D&/l[FphuuӠ kP8s0#f2rrKtOx}N:8M݀&7VZ}Ww;O>HGtrP2S ( p2S ,`,Of@7lp&B".BSbXC v.0~& !Ц3xktx[8&## 6Q96& T< @ 8 AcK]qcS+Pu_4\(p#6k(,z1=%1IW0f@**COEF /34AB.Fn= J*aa \wXh`"k.ۖ>W)F$a09á(T?[l"IFt,ѐfL#KP3Ob2uy<0'{QSFh2|},Y3UdH.a\Hi8+]j(,YhH&-:Oh= \FYZdO3̈́E#|M =;:4\k(L#ԁD; 9qK4=7jEAi7Q( <d>(6!ɌY!/VbG,vh%6 _GIۦ N _ƝL ;/ JhsѳU{orOS۶z6A ʘBpc 5Q9M|<5)_|{BF2ea?ڋ0\xp
+Ltzs,roISxH4{m*4LI0Wb2ΑDTfvyJR|Co[zw4lQ=֫ˊҝw b ĥ)?CzQ/PZ:$޴WpG8Y,ɥ}E s#2\峲5FkI$;0ڙ$Dp0#L3#YQjUHіβxG}+2ҍN:z.ʞ iJ&fLt ˧1dkm`0MYfx2 wnVmU2anaK,5.4OõQL66&ZEbh'|E^x\~ɀDh$kSbXm}[BI4| 0'
+%kCa^d8řɱR}X 9@/ns GG.Fey3Z8+9Qq G[ƵϷ8^`/xeqefx-W?~|_BOI&?>S^y|.^͂XX1{b)|c[u
+n[>El0:)ylr^[oAshn_@;hrs?e1Oi ԎR')uҎS:ՆRS HHqv-mlG-K1*%{;v3 v$G0`-+Jq.S!C
+|Ebo{'pXHl%$qIyX#H\lD~(q(ǥ} 6 Nt.Y>al(Or]>kM':q[#FC<QZS->p e61:Sz a-a:T27&uon0]-ܙgٞީL[R;)Bqܞ{WFItIM>Wn$}+ƮY ͓T'l|%%䞗K}f߯PGL׭aipq 緡Jn7œ]MK
+ \w
+ zv]IEWQՌk,ʬM#*Ʒ:q-Q'׉m(ͱt3)ݒҟ?4Ǟҭ9/v1.n';rPq&fgB;"9n0~ḿ;:;4yr@ޝ&h2GJ;V.ʇmAi)+ ]
+gJ{J0ޜ'lA
+rك<e a2{sq([L3ljŸЦ}M2!,PUycS7&=cS]0&&qJE/qeR}2]e*ut9yHOTW="WxQԫ8D-OGz7^TgF)V5d=*gEˢoN+Ldz+{Pti+u>.8ߛPXR!l =;%@ˋ$s+ok.353E?&uAnȊ(T-'l'&&&~޵8l4]!{lBEJJ%PK6IR
+
+
+
+
diff --git a/res/layout/install_ota.xml b/res/layout/install_ota.xml
index be133fd..421005e 100755
--- a/res/layout/install_ota.xml
+++ b/res/layout/install_ota.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<com.amlapp.update.otaupgrade.InstallPackage xmlns:android="http://schemas.android.com/apk/res/android"
+<com.droidlogic.otaupgrade.InstallPackage xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="500dp"
android:layout_height="350dp"
@@ -60,4 +60,4 @@
android:layout_marginTop="30dp"
android:text="@string/confirm_cancel" />
</RelativeLayout>
-</com.amlapp.update.otaupgrade.InstallPackage>
+</com.droidlogic.otaupgrade.InstallPackage>
diff --git a/src/com/amlapp/update/otaupgrade/BackupActivity.java b/src/com/amlapp/update/otaupgrade/BackupActivity.java
deleted file mode 100755
index 1fa6fe9..0000000
--- a/src/com/amlapp/update/otaupgrade/BackupActivity.java
+++ b/dev/null
@@ -1,137 +0,0 @@
-/**
- * @Package com.amlogic.otauicase
- * @Description
- *
- * Copyright (c) Inspur Group Co., Ltd. Unpublished
- *
- * Inspur Group Co., Ltd.
- * Proprietary & Confidential
- *
- * This source code and the algorithms implemented therein constitute
- * confidential information and may comprise trade secrets of Inspur
- * or its associates, and any use thereof is subject to the terms and
- * conditions of the Non-Disclosure Agreement pursuant to which this
- * source code was originally received.
- */
-package com.amlapp.update.otaupgrade;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.Environment;
-import java.io.File;
-import com.amlogic.update.Backup;
-
-/**
- * @ClassName BackupActivity
- * @Description TODO
- * @Date 2013-7-16
- * @Email
- * @Author
- * @Version V1.0
- */
-public class BackupActivity extends Activity{
- public static String BACKUP_FILE = Environment
- .getExternalStorage2Directory().getAbsolutePath() + "/" + "BACKUP";
- public static final String SdcardDir = Environment
- .getExternalStorage2Directory().getAbsolutePath();
- public static final int FUNCBACKUP = 1;
- public static final int FUNCRESTORE = 2;
- public static int func = 0;
- private static void getBackUpFileName(){
- File devDir = new File(PrefUtils.DEV_PATH);
- File[] devs = devDir.listFiles();
- for(File dev:devs){
- if(dev.isDirectory()&&dev.canWrite()){
- BACKUP_FILE = dev.getAbsolutePath();
- BACKUP_FILE += "/BACKUP";
- break;
- }
- }
- }
- @Override
- protected void onCreate(Bundle icicle) {
- getBackUpFileName();
- super.onCreate(icicle);
- boolean flag = false;
- String act = getIntent().getAction();
- if (act.equals(LoaderReceiver.BACKUPDATA)) {
- func = FUNCBACKUP;
- if (!OnSDcardStatus()) {
- flag = true;
- Intent intent0 = new Intent(this, BadMovedSDcard.class);
- Activity activity = (Activity) this;
- startActivityForResult(intent0, 1);
- }else {
- Backup();
- }
- } else if (act.equals(LoaderReceiver.RESTOREDATA)) {
- func = FUNCRESTORE;
- if (!OnSDcardStatus()) {
- flag = true;
- Intent intent0 = new Intent(this, BadMovedSDcard.class);
- Activity activity = (Activity) this;
- startActivityForResult(intent0, 1);
- }else{
- Restore();
- }
- }
- if (!flag) {
- Intent intent = new Intent();
- setResult(1, intent);
- finish();
- }
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (data != null && requestCode == 1) {
- if (resultCode == BadMovedSDcard.SDCANCEL) {
- this.finish();
- }else if(resultCode == BadMovedSDcard.SDOK){
- if (func == FUNCBACKUP){
- Backup();
- }else{
- Restore();
- }
- Intent intent = new Intent();
- setResult(1, intent);
- finish();
- }
- }
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- }
-
- private boolean OnSDcardStatus() {
- File file = new File(BACKUP_FILE);
- return file.getParentFile().canWrite();
- //return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorage2State());
- }
-
- private void Backup() {
- new Thread() {
- final String[] args = { BACKUP_FILE, "backup", "-apk",
- "-system", "-all" };
-
- public void run() {
- Backup mBackup = new Backup(BackupActivity.this);
- mBackup.main(args);
- }
- }.start();
- }
-
- private void Restore() {
- new Thread() {
- final String[] args = { BACKUP_FILE, "restore", "-apk",
- "-system", "-all" };
- public void run() {
- Backup mBackup = new Backup(BackupActivity.this);
- mBackup.main(args);
- }
- }.start();
- }
-}
diff --git a/src/com/amlapp/update/otaupgrade/InstallPackage.java b/src/com/amlapp/update/otaupgrade/InstallPackage.java
deleted file mode 100755
index 28ee271..0000000
--- a/src/com/amlapp/update/otaupgrade/InstallPackage.java
+++ b/dev/null
@@ -1,190 +0,0 @@
-/**
-* Description:
-* @Copyright: Copyright (c) 2012
-* @Company: Amlogic
-* @version: 1.0
-*/
-
-package com.amlapp.update.otaupgrade;
-
-import android.content.Context;
-import android.os.Handler;
-import android.os.RecoverySystem.ProgressListener;
-import android.util.AttributeSet;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.animation.AlphaAnimation;
-import android.view.animation.Animation;
-import android.view.animation.LayoutAnimationController;
-import android.widget.Button;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-
-import java.io.File;
-
-import com.amlogic.update.OtaUpgradeUtils;
-
-public class InstallPackage extends LinearLayout implements OtaUpgradeUtils.ProgressListener{
-
- private ProgressBar mProgressBar;
- private LinearLayout mOutputField;
- private LayoutInflater mInflater;
- private String mPackagePath;
- private OtaUpgradeUtils mUpdateUtils;
- private Handler mHandler = new Handler();
- private Button mDismiss;
- private int mUpdateMode;
- private PrefUtils mPref = null;
-
- public InstallPackage(Context context, AttributeSet attrs) {
- super(context, attrs);
- mInflater = LayoutInflater.from(context);
- mUpdateUtils = new OtaUpgradeUtils(context);
- mUpdateMode = OtaUpgradeUtils.UPDATE_OTA;
- mPref = new PrefUtils(context);
- requestFocus();
- }
-
- public void setPackagePath(String path){
- mPackagePath = path;
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- mProgressBar = (ProgressBar) findViewById(R.id.verify_progress);
- mOutputField = (LinearLayout) findViewById(R.id.output_field);
- final TextView tv = (TextView) mInflater.inflate(R.layout.medium_text, null);
- tv.setText(R.string.install_ota_output_confirm);
- mOutputField.addView(tv);
- Animation animation = new AlphaAnimation(0.0f,1.0f);
- animation.setDuration(600);
- LayoutAnimationController controller = new LayoutAnimationController(animation);
- mOutputField.setLayoutAnimation(controller);
- mDismiss = (Button)findViewById(R.id.confirm_cancel);
- findViewById(R.id.confirm_update).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- tv.setText(R.string.install_ota_output_start);
- mUpdateUtils.registerBattery();
- if(mPref!=null){
- mPref.write2File();
- }
- new Thread(new Runnable(){
- @Override
- public void run() {
- mUpdateUtils.upgrade(new File(mPackagePath), InstallPackage.this,mUpdateMode);
- }
- }).start();
- mDismiss.setEnabled(false);
- }
- });
- }
- public void setParamter(int updateMode){
- mUpdateMode = updateMode;
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if(!mDismiss.isEnabled() && keyCode == KeyEvent.KEYCODE_BACK){
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
-
- @Override
- public void onProgress(final int progress) {
- mHandler.post(new Runnable(){
-
- @Override
- public void run() {
- if(progress == 0){
- TextView tv = (TextView) mInflater.inflate(R.layout.medium_text, null);
- tv.setText(R.string.install_ota_output_checking);
- mOutputField.addView(tv);
- }else if(progress == 100){
- TextView tv = (TextView) mInflater.inflate(R.layout.medium_text, null);
- tv.setText(R.string.install_ota_output_check_ok);
- mOutputField.addView(tv);
- }
- mProgressBar.setProgress(progress/2);
- }
- });
- }
-
- @Override
- public void onVerifyFailed(int errorCode, Object object) {
- mHandler.post(new Runnable(){
- @Override
- public void run() {
- TextView tv = (TextView) mInflater.inflate(R.layout.medium_text, null);
- tv.setText(R.string.install_ota_output_check_error);
- mOutputField.addView(tv);
- mDismiss.setEnabled(true);
- mUpdateUtils.unregistBattery();
- }}
- );
- }
-
- @Override
- public void onCopyProgress(final int progress) {
- mHandler.post(new Runnable(){
- @Override
- public void run() {
- if(progress == 0){
- TextView tv1 = (TextView) mInflater.inflate(R.layout.medium_text, null);
- tv1.setText(R.string.install_ota_output_copying);
- mOutputField.addView(tv1);
- }else if(progress == 100){
- TextView tv = (TextView) mInflater.inflate(R.layout.medium_text, null);
- tv.setText(R.string.install_ota_output_copy_ok);
- mOutputField.addView(tv);
- tv = (TextView) mInflater.inflate(R.layout.medium_text, null);
- tv.setText(R.string.install_ota_output_restart);
- mOutputField.addView(tv);
- }
- mProgressBar.setProgress(50 + progress/2);
- }
- });
- }
-
- @Override
- public void onCopyFailed(int errorCode, Object object) {
- mHandler.post(new Runnable(){
- @Override
- public void run() {
- TextView tv = (TextView) mInflater.inflate(R.layout.medium_text, null);
- tv.setText(R.string.install_ota_output_copy_failed);
- mOutputField.addView(tv);
- mDismiss.setEnabled(true);
- mUpdateUtils.unregistBattery();
- }
- });
- }
-
- @Override
- public void onStopProgress(int reason){
- final int failreason = reason;
- mHandler.post(new Runnable(){
- @Override
- public void run() {
- TextView tv = (TextView) mInflater.inflate(R.layout.medium_text, null);
- if (failreason == OtaUpgradeUtils.FAIL_REASON_BATTERY) {
- tv.setText(R.string.stop_low_battery);
- }
- mOutputField.addView(tv);
- mDismiss.setEnabled(true);
- mUpdateUtils.unregistBattery();
- }
- });
- }
-
- /**
- * @param b
- */
- public void deleteSource(boolean b) {
- }
-
-}
-
diff --git a/src/com/amlapp/update/otaupgrade/LoaderReceiver.java b/src/com/amlapp/update/otaupgrade/LoaderReceiver.java
deleted file mode 100755
index 5387602..0000000
--- a/src/com/amlapp/update/otaupgrade/LoaderReceiver.java
+++ b/dev/null
@@ -1,145 +0,0 @@
-/**
- * Description:
- * @Copyright: Copyright (c) 2012
- * @Company: Amlogic
- * @version: 1.0
- */
-
-package com.amlapp.update.otaupgrade;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.net.wifi.WifiManager;
-import android.os.Environment;
-import android.os.SystemProperties;
-import android.util.Log;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import com.amlogic.update.Backup;
-
-public class LoaderReceiver extends BroadcastReceiver {
-
- private static final String TAG = PrefUtils.TAG;
- public static final String UPDATE_GET_NEW_VERSION = "com.android.update.UPDATE_GET_NEW_VERSION";
- public static final String CHECKING_TASK_COMPLETED = "com.android.update.CHECKING_TASK_COMPLETED";
- public static final String RESTOREDATA = "com.android.amlogic.restoredata";
- public static final String BACKUPDATA = "com.android.amlogic.backupdata";
- public static String BACKUP_FILE = Environment
- .getExternalStorage2Directory().getAbsolutePath() + "/" + "BACKUP";
- private PrefUtils mPref;
- private Context mContext;
-
- private static void getBackUpFileName(){
- File devDir = new File(PrefUtils.DEV_PATH);
- File[] devs = devDir.listFiles();
- for(File dev:devs){
- if(dev.isDirectory()&&dev.canWrite()){
- BACKUP_FILE = dev.getAbsolutePath();
- BACKUP_FILE += "/BACKUP";
- break;
- }
- }
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- getBackUpFileName();
- mContext = context;
- mPref = new PrefUtils(mContext);
- if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)
- || intent.getAction().equals(RESTOREDATA)) {
- mPref.setBoolean("Boot_Checked",true);
- afterReboot();
- } else if (intent.getAction().equals(BACKUPDATA)) {
- if(PrefUtils.DEBUG)
- Log.d(TAG, "backup");
- backup();
- }
- //Log.d(TAG,"getAction:"+intent.getAction());
- if ((ConnectivityManager.CONNECTIVITY_ACTION).equals(intent.getAction())) {
- NetworkInfo netInfo = (NetworkInfo) intent.getExtra(WifiManager.EXTRA_NETWORK_INFO, null);
- if(PrefUtils.DEBUG)
- Log.d(TAG,"BootCompleteFlag"+(mPref.getBooleanVal("Boot_Checked",false) )+""+(netInfo != null)+ ""+mPref.getBooleanVal(PrefUtils.PREF_AUTO_CHECK,false) + (netInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED));
- if(mPref.getBooleanVal("Boot_Checked",false) && (netInfo != null) && (netInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED)) {
- mPref.setBoolean("Boot_Checked",false);
- if(mPref.getBooleanVal(PrefUtils.PREF_AUTO_CHECK,false)) {
- mContext.startService(new Intent(UpdateService.ACTION_AUTOCHECK));
- return;
- }else if(("true").equals(SystemProperties.getBoolean("ro.product.update.autocheck",false))) {
- mPref.setBoolean(PrefUtils.PREF_AUTO_CHECK,true);
- mContext.startService(new Intent(UpdateService.ACTION_AUTOCHECK));
- }
- }
- }
- }
-
-
- private void afterReboot(){
- final String[] args = {
- BACKUP_FILE,
- "restore",
- "-apk",
- "-system",
- "-all"
- };
- new Thread(){
- public void run(){
- try {
- Thread.sleep(5000);
- }catch (InterruptedException e){
- }finally{
- //boolean ismounted = Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorage2State());
- File flagFile = new File(new File(BACKUP_FILE).getParentFile(),PrefUtils.FlagFile);
- //if (ismounted) {
- File bkfile = new File(BACKUP_FILE);
- if (flagFile.exists()) {
- try{
- String files = null;
- BufferedReader input = new BufferedReader(new FileReader(flagFile));
- while((files= input.readLine())!=null){
- File temp = new File(files);
- if (temp.exists()){
- temp.delete();
- }
- }
- flagFile.delete();
- }catch(IOException ex){}
- }
- if (bkfile.exists() && !mPref.getBooleanVal(PrefUtils.PREF_START_RESTORE, false)){
- mPref.setBoolean(PrefUtils.PREF_START_RESTORE, true);
- try{
- FileInputStream fis = new FileInputStream(bkfile) ;
- if (fis.available()<=0){
- bkfile.delete();
- }else{
- Backup mBackup = new Backup(mContext);
- mBackup.main(args);
- }
- }catch(Exception ex){}
- }else if(bkfile.exists()) {
- mPref.setBoolean(PrefUtils.PREF_START_RESTORE, false);
- bkfile.delete();
- }
- // }
- }
- }
- }.start();
- }
-
- private void backup(){
- final String[] args = {
- BACKUP_FILE,
- "backup", "-apk","-system","-all" };
- Backup mBackup = new Backup(mContext);
- mBackup.main(args);
- }
-}
-
-
diff --git a/src/com/amlapp/update/otaupgrade/UpdateActivity.java b/src/com/amlapp/update/otaupgrade/UpdateActivity.java
deleted file mode 100755
index c61d100..0000000
--- a/src/com/amlapp/update/otaupgrade/UpdateActivity.java
+++ b/dev/null
@@ -1,661 +0,0 @@
-/**
- * @Package com.amlogic.otauicase
- * @Description Copyright (c) Inspur Group Co., Ltd. Unpublished Inspur Group
- * Co., Ltd. Proprietary & Confidential This source code and the
- * algorithms implemented therein constitute confidential
- * information and may comprise trade secrets of Inspur or its
- * associates, and any use thereof is subject to the terms and
- * conditions of the Non-Disclosure Agreement pursuant to which
- * this source code was originally received.
- */
-package com.amlapp.update.otaupgrade;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Set;
-
-import com.amlapp.update.otaupgrade.UpdateService.uiBinder;
-import com.amlogic.update.CheckUpdateTask;
-import com.amlogic.update.CheckUpdateTask.CheckUpdateResult;
-import com.amlogic.update.DownloadUpdateTask;
-import com.amlogic.update.DownloadUpdateTask.DownloadResult;
-import com.amlogic.update.OtaUpgradeUtils.ProgressListener;
-import com.amlogic.update.OtaUpgradeUtils;
-import com.amlogic.update.UpdateTasks;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.app.Service;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Environment;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.StatFs;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-import android.widget.Toast;
-
-/**
- * @ClassName UpdateActivity
- * @Description TODO
- * @Date 2013-7-17
- * @Email
- * @Author
- * @Version V1.0
- */
-public class UpdateActivity extends Activity {
- private static final String TAG = "UpdateActivity";
- public static final String WIFI_STATUS_INTENT = "android.net.conn.CONNECTIVITY_CHANGE";
- private TextView mDescription;
- private boolean sdcardFlag = true;
- private boolean networkFlag = true;
- private Button mCancel;
- private boolean enableBtn;
- private Button mCombineBtn;
- private ProgressBar mProgress, mCheckProgress;
- private TextView mCheckingStatus;
- private TextView mPercent;
- private uiBinder mServiceBinder;
- private QueryThread[] mQueryThread = new QueryThread[2];
- private PrefUtils mPreference;
- private Handler mHandler = new Handler();
- private int mDownSize = 0;
- private Button mCheckBtn;
-
- /** ------------------------------------------------------ */
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Intent mIntent = new Intent(this, UpdateService.class);
- bindService(mIntent, mConn, Service.BIND_AUTO_CREATE);
- mPreference = new PrefUtils(this);
- mQueryThread[0] = new QueryCheck();
- mQueryThread[1] = new QueryDownload();
- enableBtn = false;
- }
-
- @Override
- public void onSaveInstanceState(Bundle savedInstanceState) {
- super.onSaveInstanceState(savedInstanceState);
- if (mDescription != null) {
- savedInstanceState.putString("message", mDescription.getText()
- .toString());
- }
- }
-
- @Override
- public void onBackPressed() {
- // super.onBackPressed();
- if(mServiceBinder!=null && mServiceBinder.getTaskRunnningStatus(UpdateService.TASK_ID_DOWNLOAD) == DownloadUpdateTask.RUNNING_STATUS_RUNNING) {
- Intent i= new Intent(Intent.ACTION_MAIN);
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- i.addCategory(Intent.CATEGORY_HOME);
- startActivity(i);
- }else{
- super.onBackPressed();
- }
- }
-
- @Override
- public void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
- String message = savedInstanceState.getString("message");
- if (message != null && mDescription != null) {
- mDescription.setText(message);
- }
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- mQueryThread[0].stop();
- mQueryThread[1].stop();
- unbindService(mConn);
- if (!sdcardFlag) {
- unregisterReceiver(sdcardListener);
- }
- if (!networkFlag) {
- unregisterReceiver(WifiReceiver);
- }
- }
-
- private void setCheckView() {
- setContentView(R.layout.update_checking);
- mCheckBtn = (Button) findViewById(R.id.check_update);
- mCheckBtn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- mServiceBinder.startTask(UpdateService.TASK_ID_CHECKING);
- mCheckProgress.setVisibility(View.VISIBLE);
- mCheckBtn.setVisibility(View.GONE);
- }
- });
- mCheckProgress = (ProgressBar) findViewById(R.id.checking_progress);
- mCheckingStatus = (TextView) findViewById(R.id.checking_status);
- mCheckingStatus.setText(R.string.check_connecting);
- mQueryThread[0].start();
- }
-
- private String setStr(long size, long status) {
- String str = null;
- int block = 1024;
- long k = (size / 1024);
- // if(k > block){
- str = status / 1024 + "KB/" + k + "KB";
- // }
- /*
- * if (k <( block * block)){ showInt = (int)(status/block/block*100.0);
- * str = (showInt/100.0)+"MB/"+(k/block)+"MB"; }
- */
- return str;
- }
-
- private BroadcastReceiver sdcardListener = new BroadcastReceiver() {
- @Override
- public void onReceive(
- Context context,
- Intent intent) {
- String action = intent
- .getAction();
- if (Intent.ACTION_MEDIA_REMOVED
- .equals(action)
- || Intent.ACTION_MEDIA_EJECT
- .equals(action)
- || Intent.ACTION_MEDIA_UNMOUNTED
- .equals(action)
- || Intent.ACTION_MEDIA_BAD_REMOVAL
- .equals(action)) {
- if (mServiceBinder != null
- && mCombineBtn != null
- && mCombineBtn
- .getTag()
- .equals(Integer
- .valueOf(R.string.download_pause))) {
- mServiceBinder
- .setTaskPause(UpdateService.TASK_ID_DOWNLOAD);
- Toast.makeText(
- UpdateActivity.this,
- R.string.sdcard_info,
- 20000)
- .show();
- UpdateActivity.this
- .finish();
- }
- }
- }
- };
-
- private boolean handleSDcardSituation() {
- boolean isScriptAsk = mPreference.getScriptAsk();
- if (isScriptAsk) {
- String filePath = mPreference.getUpdatePath();
- File saveFilePath = new File(filePath).getParentFile();
- if (saveFilePath.canWrite()) {
- StatFs statFs = new StatFs(saveFilePath.getAbsolutePath());
- int blockSize = statFs.getBlockSize();
- int avaliableBlocks = statFs.getAvailableBlocks();
- int totalBlocks = statFs.getBlockCount();
- mDownSize = (int) mPreference.getFileSize();
-
- if (mDownSize > 0 && (mDownSize / blockSize) > avaliableBlocks) {
- Toast.makeText(UpdateActivity.this,
- R.string.capacty_not_enough, Toast.LENGTH_LONG)
- .show();
- } else {
- if (sdcardFlag && isScriptAsk) {
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addDataScheme("file");
- intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);
- intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
- intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
- intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
- registerReceiver(sdcardListener, intentFilter);
- sdcardFlag = false;
- }
- }
- } else {
- enableBtn = true;
- Intent intent0 = new Intent(this, BadMovedSDcard.class);
- Activity activity = (Activity) this;
- startActivityForResult(intent0, 1);
- return false;
- }
- }
- if (networkFlag) {
- registerReceiver(WifiReceiver, new IntentFilter(WIFI_STATUS_INTENT));
- networkFlag = false;
- }
- return true;
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (data != null && requestCode == 1) {
- if (resultCode == BadMovedSDcard.SDCANCEL) {
- Intent startMain = new Intent(UpdateActivity.this,
- MainActivity.class);
- startActivity(startMain);
- this.finish();
- } else if (resultCode == BadMovedSDcard.SDOK) {
- enableBtn = false;
- if (sdcardFlag && mPreference.getScriptAsk()) {
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addDataScheme("file");
- intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);
- intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
- intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
- intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
- registerReceiver(sdcardListener, intentFilter);
- if (PrefUtils.DEBUG) {
- Log.d(TAG, "register sdcard listener");
- }
- sdcardFlag = false;
- }
- }
- }
- }
-
- private void setDownloadView(String desc) {
- setContentView(R.layout.update_download);
- mDescription = (TextView) findViewById(R.id.new_version_description);
- mCombineBtn = (Button) findViewById(R.id.download_pause_and_update);
- mCancel = (Button) findViewById(R.id.cancel);
- mProgress = (ProgressBar) findViewById(R.id.download_progress);
- mPercent = (TextView) findViewById(R.id.percent);
- mCombineBtn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Object tag = v.getTag();
- if (Integer.valueOf(R.string.download_download).equals(tag)
- && !enableBtn) {
- if (handleSDcardSituation()) {
- mServiceBinder
- .startTask(UpdateService.TASK_ID_DOWNLOAD);
- }
- } else if (Integer.valueOf(R.string.download_pause).equals(tag)
- && !enableBtn) {
- mServiceBinder.setTaskPause(UpdateService.TASK_ID_DOWNLOAD);
- } else if (Integer.valueOf(R.string.download_resume)
- .equals(tag) && !enableBtn) {
- if (handleSDcardSituation()) {
- mServiceBinder
- .setTaskResume(UpdateService.TASK_ID_DOWNLOAD);
- }
- } else if (Integer.valueOf(R.string.download_update)
- .equals(tag) && !enableBtn) {
- int UpdateMode = OtaUpgradeUtils.UPDATE_OTA;
- if (mPreference.getScriptAsk()) {
- if (FileSelector.isICSupdate()) {
- UpdateMode = OtaUpgradeUtils.UPDATE_REBOOT;
- } else {
- UpdateMode = OtaUpgradeUtils.UPDATE_UPDATE;
- }
- }
- final Dialog dlg = new Dialog(UpdateActivity.this);
- dlg.setTitle(R.string.confirm_update);
- LayoutInflater inflater = LayoutInflater
- .from(UpdateActivity.this);
- InstallPackage dlgView = (InstallPackage) inflater.inflate(
- R.layout.install_ota, null, false);
- dlgView.setPackagePath(mPreference.getUpdatePath());
- dlgView.setParamter(UpdateMode);
- dlg.setCancelable(false);
- dlg.setContentView(dlgView);
- dlg.findViewById(R.id.confirm_cancel).setOnClickListener(
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- dlg.dismiss();
- }
- });
- dlg.show();
- }
- }
- });
-
- mDownSize = (int) mPreference.getFileSize();
-
- mCancel.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View arg0) {
- if (!mCombineBtn.getTag().equals(
- Integer.valueOf(R.string.download_pause))) {
- mServiceBinder
- .resetTask(UpdateService.TASK_ID_DOWNLOAD);
- Intent startMain = new Intent(UpdateActivity.this,
- MainActivity.class);
- startActivity(startMain);
- UpdateActivity.this.finish();
- } else {
- Toast.makeText(UpdateActivity.this,
- R.string.stop_download_first, Toast.LENGTH_SHORT)
- .show();
- }
- }
- });
- mDescription.setText(desc.replace("\\n", "\n"));
- mQueryThread[1].start();
- }
-
- /** -----------------Internal Class-------------------------- */
- private ServiceConnection mConn = new ServiceConnection() {
- @Override
- public void onServiceConnected(
- ComponentName name,
- IBinder service) {
- mServiceBinder = (uiBinder) service;
- Intent extrasIntent = getIntent();
- String action = extrasIntent
- .getAction();
- boolean b = mServiceBinder
- .getTaskRunnningStatus(UpdateService.TASK_ID_DOWNLOAD) == UpdateTasks.RUNNING_STATUS_UNSTART;
- int lastDownSize = mServiceBinder
- .getTaskProgress(UpdateService.TASK_ID_DOWNLOAD);
- if (lastDownSize == 0 && b) {
- mServiceBinder
- .startTask(UpdateService.TASK_ID_CHECKING);
- setCheckView();
- } else {
- setDownloadView(mPreference
- .getDescri());
- }
- if (UpdateService.ACTION_DOWNLOAD_FAILED
- .equals(action)) {
- setDownloadView(UpdateActivity.this
- .getResources()
- .getString(
- R.string.download_suc));
- mPercent.setVisibility(View.VISIBLE);
- mPercent.setText(R.string.download_error);
- } else if (UpdateService.ACTION_DOWNLOAD_SUCCESS
- .equals(action)) {
- setDownloadView(UpdateActivity.this
- .getResources()
- .getString(
- R.string.download_err));
- mPercent.setVisibility(View.VISIBLE);
- mPercent.setText(getString(R.string.Download_succeed));
- mCombineBtn
- .setText(R.string.download_update);
- mCombineBtn
- .setTag(Integer
- .valueOf(R.string.download_update));
- }
- }
-
- public void onServiceDisconnected(
- ComponentName name) {}
- };
-
- private class QueryDownload extends QueryThread {
- long lastProgress = -1;
-
- protected void loop() {
- int status = mServiceBinder
- .getTaskRunnningStatus(UpdateService.TASK_ID_DOWNLOAD);
- switch (status) {
- case DownloadUpdateTask.RUNNING_STATUS_UNSTART:
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mPercent.setVisibility(View.GONE);
- mCombineBtn.setText(R.string.download_download);
- mCombineBtn.setTag(Integer
- .valueOf(R.string.download_download));
- }
- });
- break;
- case DownloadUpdateTask.RUNNING_STATUS_RUNNING:
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mCombineBtn.setText(R.string.download_pause);
- mCombineBtn.setTag(Integer
- .valueOf(R.string.download_pause));
- }
- });
- long progress = mServiceBinder
- .getTaskProgress(UpdateService.TASK_ID_DOWNLOAD);
- if (lastProgress < progress) {
- lastProgress = progress;
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- if (PrefUtils.DEBUG)
- Log.d(TAG, "progress fileSize:" + mDownSize
- + " lastProgress:" + lastProgress);
- if (mDownSize > 0) {
- mProgress.setVisibility(View.VISIBLE);
- mProgress.setMax((int) mDownSize);
- mPercent.setVisibility(View.VISIBLE);
- if (lastProgress < mDownSize) {
- mPercent.setText(setStr(mDownSize,
- lastProgress));
- }
- if (lastProgress == mDownSize) {
- mPercent.setText(getString(R.string.Download_succeed));
- }
- }
- mProgress.setProgress((int) lastProgress);
- }
- });
- }
- break;
- case DownloadUpdateTask.RUNNING_STATUS_PAUSE:
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mCombineBtn.setText(R.string.download_resume);
- mCombineBtn.setTag(Integer
- .valueOf(R.string.download_resume));
- }
- });
- break;
- case DownloadUpdateTask.RUNNING_STATUS_FINISH:
- int errorCode = mServiceBinder
- .getTaskErrorCode(UpdateService.TASK_ID_DOWNLOAD);
- if (errorCode == DownloadUpdateTask.NO_ERROR) {
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mProgress.setProgress(mProgress.getMax());
- mPercent.setVisibility(View.GONE);
- mCombineBtn.setText(R.string.download_update);
- mCombineBtn.setTag(Integer
- .valueOf(R.string.download_update));
- }
- });
- } else {
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- Toast.makeText(UpdateActivity.this,
- R.string.download_error,
- Toast.LENGTH_SHORT).show();
- mServiceBinder
- .resetTask(UpdateService.TASK_ID_DOWNLOAD);
- mPercent.setText(R.string.download_error);
- }
- });
- }
- stop();
- break;
- }
- }
- }
-
- private BroadcastReceiver WifiReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(
- Context context,
- Intent intent) {
- if (intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")) {
- ConnectivityManager manager = (ConnectivityManager) context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- /*NetworkInfo mobileInfo = manager
- .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
- NetworkInfo wifiInfo = manager
- .getNetworkInfo(ConnectivityManager.TYPE_WIFI);*/
- NetworkInfo activeInfo = manager
- .getActiveNetworkInfo();
- if (activeInfo!=null && !activeInfo
- .isConnected()) {
- if (activeInfo.getState() != NetworkInfo.State.CONNECTED) {
- Toast.makeText(
- context,
- R.string.net_status_change,
- 1).show();
- }
- }
- /*
- if (!wifiInfo
- .isConnectedOrConnecting()
- && Integer
- .valueOf(
- R.string.download_resume)
- .equals(mCombineBtn
- .getTag())) {
- mCombineBtn
- .setText(R.string.download_pause);
- mCombineBtn
- .setTag(Integer
- .valueOf(R.string.download_pause));
- } else if (Integer
- .valueOf(
- R.string.download_pause)
- .equals(mCombineBtn
- .getTag())) {
- mCombineBtn
- .setText(R.string.download_resume);
- mCombineBtn
- .setTag(Integer
- .valueOf(R.string.download_resume));
- }*/
- }
- }
- };
-
- private class QueryCheck extends QueryThread {
- protected void loop() {
- int status = mServiceBinder
- .getTaskRunnningStatus(UpdateService.TASK_ID_CHECKING);
- switch (status) {
- case CheckUpdateTask.RUNNING_STATUS_UNSTART:
- stop();
- break;
- case CheckUpdateTask.RUNNING_STATUS_RUNNING:
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mCheckingStatus.setText(R.string.check_now);
- }
- });
- break;
- case CheckUpdateTask.RUNNING_STATUS_FINISH:
- int errorCode = mServiceBinder
- .getTaskErrorCode(UpdateService.TASK_ID_CHECKING);
- measureError(errorCode);
- if (mCheckBtn != null && mCheckBtn.VISIBLE == View.GONE)
- mCheckBtn.setVisibility(View.VISIBLE);
- break;
- }
- }
-
- private void measureError(int errorCode) {
- switch (errorCode) {
- case CheckUpdateTask.ERROR_UNDISCOVERY_NEW_VERSION:
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mCheckProgress.setVisibility(View.INVISIBLE);
- mCheckingStatus.setText(R.string.check_failed);
- }
- });
- break;
- case CheckUpdateTask.ERROR_UNKNOWN:
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mCheckProgress.setVisibility(View.INVISIBLE);
- mCheckingStatus.setText(R.string.check_unknown);
- }
- });
- break;
- case CheckUpdateTask.NO_ERROR:
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- CheckUpdateResult result = (CheckUpdateResult) mServiceBinder
- .getTaskResult(UpdateService.TASK_ID_CHECKING);
- mPreference.saveFileSize(result.getMemoryAsk());
- mPreference.setScriptAsk(result.ismIsScriptAsk());
- mPreference.setUpdatePath(result
- .getmUpdateFileName());
- String desc = result.getmUpdateDescript();
- mPreference.setDescrib(desc);
- setDownloadView(desc);
- }
- });
- stop();
- break;
- case CheckUpdateTask.ERROR_NETWORK_UNAVAIBLE:
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mCheckingStatus.setText(R.string.net_error);
- }
- });
- break;
- }
- mServiceBinder.resetTask(UpdateService.TASK_ID_CHECKING);
- }
- }
-
- class QueryThread implements Runnable {
- private boolean mStop = false;
-
- public void start() {
- mStop = false;
- new Thread(this).start();
- }
-
- @Override
- public void run() {
- while (!mStop) {
- try {
- Thread.sleep(500);
- } catch (Exception e) {
- e.printStackTrace();
- }
- loop();
- }
- }
-
- public void stop() {
- mStop = true;
- }
-
- protected void loop() {}
- }
-}
diff --git a/src/com/droidlogic/otaupgrade/BackupActivity.java b/src/com/droidlogic/otaupgrade/BackupActivity.java
new file mode 100755
index 0000000..90b6b01
--- a/dev/null
+++ b/src/com/droidlogic/otaupgrade/BackupActivity.java
@@ -0,0 +1,159 @@
+/**
+ * @Package com.amlogic.otauicase
+ * @Description
+ *
+ * Copyright (c) Inspur Group Co., Ltd. Unpublished
+ *
+ * Inspur Group Co., Ltd.
+ * Proprietary & Confidential
+ *
+ * This source code and the algorithms implemented therein constitute
+ * confidential information and may comprise trade secrets of Inspur
+ * or its associates, and any use thereof is subject to the terms and
+ * conditions of the Non-Disclosure Agreement pursuant to which this
+ * source code was originally received.
+ */
+package com.droidlogic.otaupgrade;
+
+import android.app.Activity;
+
+import android.content.Intent;
+
+import android.os.Bundle;
+import android.os.Environment;
+
+import com.amlogic.update.Backup;
+
+import java.io.File;
+
+
+/**
+ * @ClassName BackupActivity
+ * @Description TODO
+ * @Date 2013-7-16
+ * @Email
+ * @Author
+ * @Version V1.0
+ */
+public class BackupActivity extends Activity {
+ public static String BACKUP_FILE = "/storage/external_storage/sdcard1/BACKUP";
+ public static final String SdcardDir = "/storage/external_storage/sdcard1/";
+ public static final int FUNCBACKUP = 1;
+ public static final int FUNCRESTORE = 2;
+ public static int func = 0;
+
+ private static void getBackUpFileName() {
+ File devDir = new File(PrefUtils.DEV_PATH);
+ File[] devs = devDir.listFiles();
+
+ for (File dev : devs) {
+ if (dev.isDirectory() && dev.canWrite()) {
+ BACKUP_FILE = dev.getAbsolutePath();
+ BACKUP_FILE += "/BACKUP";
+
+ break;
+ }
+ }
+ }
+
+ @Override
+ protected void onCreate(Bundle icicle) {
+ getBackUpFileName();
+ super.onCreate(icicle);
+
+ boolean flag = false;
+ String act = getIntent().getAction();
+
+ if (act.equals(LoaderReceiver.BACKUPDATA)) {
+ func = FUNCBACKUP;
+
+ if (!OnSDcardStatus()) {
+ flag = true;
+
+ Intent intent0 = new Intent(this, BadMovedSDcard.class);
+ Activity activity = (Activity) this;
+ startActivityForResult(intent0, 1);
+ } else {
+ Backup();
+ }
+ } else if (act.equals(LoaderReceiver.RESTOREDATA)) {
+ func = FUNCRESTORE;
+
+ if (!OnSDcardStatus()) {
+ flag = true;
+
+ Intent intent0 = new Intent(this, BadMovedSDcard.class);
+ Activity activity = (Activity) this;
+ startActivityForResult(intent0, 1);
+ } else {
+ Restore();
+ }
+ }
+
+ if (!flag) {
+ Intent intent = new Intent();
+ setResult(1, intent);
+ finish();
+ }
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+
+ if ((data != null) && (requestCode == 1)) {
+ if (resultCode == BadMovedSDcard.SDCANCEL) {
+ this.finish();
+ } else if (resultCode == BadMovedSDcard.SDOK) {
+ if (func == FUNCBACKUP) {
+ Backup();
+ } else {
+ Restore();
+ }
+
+ Intent intent = new Intent();
+ setResult(1, intent);
+ finish();
+ }
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ }
+
+ private boolean OnSDcardStatus() {
+ File file = new File(BACKUP_FILE);
+
+ return file.getParentFile().canWrite();
+
+ //return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorage2State());
+ }
+
+ private void Backup() {
+ new Thread() {
+ final String[] args = {
+ BACKUP_FILE, "backup", "-apk", "-system", "-all"
+ };
+
+ public void run() {
+ Backup mBackup = new Backup(BackupActivity.this);
+ mBackup.main(args);
+ }
+ }.start();
+ }
+
+ private void Restore() {
+ new Thread() {
+ final String[] args = {
+ BACKUP_FILE, "restore", "-apk", "-system", "-all"
+ };
+
+ public void run() {
+ Backup mBackup = new Backup(BackupActivity.this);
+ mBackup.main(args);
+ }
+ }.start();
+ }
+}
diff --git a/src/com/amlapp/update/otaupgrade/BadMovedSDcard.java b/src/com/droidlogic/otaupgrade/BadMovedSDcard.java
index f532286..e7a5bd3 100755
--- a/src/com/amlapp/update/otaupgrade/BadMovedSDcard.java
+++ b/src/com/droidlogic/otaupgrade/BadMovedSDcard.java
@@ -1,65 +1,80 @@
-/**
-* Description:
+/**
+* Description:
* @Copyright: Copyright (c) 2012
* @Company: Amlogic
* @version: 1.0
*/
+package com.droidlogic.otaupgrade;
-package com.amlapp.update.otaupgrade;
-
-
-import android.os.Process;
import android.app.Activity;
import android.app.Dialog;
import android.app.Service;
+
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+
import android.os.Bundle;
import android.os.Environment;
-import android.widget.Button;
+import android.os.Process;
+
import android.util.Log;
+
+import android.view.KeyEvent;
+import android.view.MotionEvent;
import android.view.View;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-public class BadMovedSDcard extends Activity{
- private Button mCancleBtn;
- private Button mSureBtn;
+import android.widget.Button;
+
+
+public class BadMovedSDcard extends Activity {
public static final String TAG = "SDCARDACTION";
public static final int SDCANCEL = 1;
public static final int SDOK = 2;
+ private Button mCancleBtn;
+ private Button mSureBtn;
private boolean mReg = false;
-
private View.OnClickListener l = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if(v.getId()==R.id.sdcard_cancel){
- Intent in = new Intent();
- setResult(SDCANCEL, in);
- finish();
- }else if(v.getId()==R.id.sdcard_ok){
- Intent in = new Intent();
- setResult(SDOK, in);
- finish();
+ @Override
+ public void onClick(View v) {
+ if (v.getId() == R.id.sdcard_cancel) {
+ Intent in = new Intent();
+ setResult(SDCANCEL, in);
+ finish();
+ } else if (v.getId() == R.id.sdcard_ok) {
+ Intent in = new Intent();
+ setResult(SDOK, in);
+ finish();
+ }
}
- }
- };
+ };
+
+ private BroadcastReceiver sdcardListener = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+
+ if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) {
+ mSureBtn.setEnabled(true);
+ }
+ }
+ };
public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK
- && event.getRepeatCount() == 0) {
- return true;
+ if ((keyCode == KeyEvent.KEYCODE_BACK) &&
+ (event.getRepeatCount() == 0)) {
+ return true;
}
+
return super.onKeyDown(keyCode, event);
}
-
+
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mid);
- mCancleBtn=(Button)findViewById(R.id.sdcard_cancel);
- mSureBtn=(Button)findViewById(R.id.sdcard_ok);
+ mCancleBtn = (Button) findViewById(R.id.sdcard_cancel);
+ mSureBtn = (Button) findViewById(R.id.sdcard_ok);
mCancleBtn.setOnClickListener(l);
mSureBtn.setOnClickListener(l);
}
@@ -67,29 +82,22 @@ public class BadMovedSDcard extends Activity{
@Override
protected void onResume() {
super.onResume();
-
- if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorage2State()) && mSureBtn != null) {
+
+ if (Environment.MEDIA_MOUNTED.equals(
+ Environment.getExternalStorageState()) &&
+ (mSureBtn != null)) {
mSureBtn.setEnabled(true);
- }else{
+ } else {
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED);
intentFilter.addDataScheme("file");
+
if (!mReg) {
mReg = true;
mSureBtn.setEnabled(false);
registerReceiver(sdcardListener, intentFilter);
}
- }
- }
- private BroadcastReceiver sdcardListener = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
-
- String action = intent.getAction();
- if (Intent.ACTION_MEDIA_MOUNTED.equals(action)) {
- mSureBtn.setEnabled(true);
- }
}
- };
+ }
@Override
public boolean onTouchEvent(MotionEvent event) {
@@ -99,7 +107,8 @@ public class BadMovedSDcard extends Activity{
@Override
protected void onStop() {
super.onStop();
- if (mReg){
+
+ if (mReg) {
mReg = false;
unregisterReceiver(sdcardListener);
}
diff --git a/src/com/amlapp/update/otaupgrade/FileSelector.java b/src/com/droidlogic/otaupgrade/FileSelector.java
index cfa813c..a60618d 100755
--- a/src/com/amlapp/update/otaupgrade/FileSelector.java
+++ b/src/com/droidlogic/otaupgrade/FileSelector.java
@@ -8,31 +8,40 @@
* conditions of the Non-Disclosure Agreement pursuant to which
* this source code was originally received.
*/
-package com.amlapp.update.otaupgrade;
+package com.droidlogic.otaupgrade;
import android.app.Activity;
+import android.app.ProgressDialog;
+
import android.content.Context;
import android.content.Intent;
-import android.os.Bundle;
+
import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+
import android.util.AttributeSet;
import android.util.Log;
+
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+
import android.widget.AdapterView;
+
import android.widget.AdapterView.OnItemClickListener;
+
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.io.File;
import java.io.FilenameFilter;
+
import java.util.ArrayList;
-import android.app.ProgressDialog;
-import android.os.Handler;
-import android.os.Message;
+
/**
* @ClassName FileSelector
@@ -44,67 +53,78 @@ import android.os.Message;
*/
public class FileSelector extends Activity implements OnItemClickListener {
private static final String TAG = "FileSelector";
- public static final String FILE = "file";
- private File mCurrentDirectory;
- private LayoutInflater mInflater;
- private FileAdapter mAdapter = new FileAdapter();
- private ListView mListView;
+ public static final String FILE = "file";
private static final int JB2 = 17;
private static final int JB1 = 16;
private static final int ICS404 = 15;
- private static final String LOCAL = "/sdcard";
- private static final String UDISK_ICS = "/mnt/sd";
- private static final String UDISK_JB1 = "/storage/sd";
- private static final String UDISK_JB2 = "/storage/external_storage/sd";
- private static final String SDCARD_JB = "/sdcard/external_sdcard";
+ private static final String LOCAL = "/sdcard";
+ private static final String UDISK_ICS = "/mnt/sd";
+ private static final String UDISK_JB1 = "/storage/sd";
+ private static final String UDISK_JB2 = "/storage/external_storage/sd";
+ private static final String SDCARD_JB = "/sdcard/external_sdcard";
private static final String SDCARD_JB1 = "/storage/external_storage/sdcard";
- private ProgressDialog mPdWatingScan = null;
private static final int MSG_HIDE_SHOW_DIALOG = 1;
private static final int MSG_SHOW_WAIT_DIALOG = 2;
private static final int MSG_NOTIFY_DATACHANGE = 3;
private static final int WAITDIALOG_DISPALY_TIME = 500;
+ private File mCurrentDirectory;
+ private LayoutInflater mInflater;
+ private FileAdapter mAdapter = new FileAdapter();
+ private ListView mListView;
+ private ProgressDialog mPdWatingScan = null;
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
- private Handler mHandler =new Handler(){
- @Override
- public void handleMessage(Message msg){
- super.handleMessage(msg);
- switch(msg.what) {
- case MSG_SHOW_WAIT_DIALOG:
- mPdWatingScan = ProgressDialog.show(FileSelector.this, getResources().getString(R.string.scan_title), getResources().getString(R.string.scan_tip) );
- break;
- case MSG_HIDE_SHOW_DIALOG:
- removeMessages(MSG_SHOW_WAIT_DIALOG);
- if( mPdWatingScan != null ) {
- mPdWatingScan.dismiss();
- mPdWatingScan = null;
- }
- break;
- case MSG_NOTIFY_DATACHANGE:
- mAdapter.notifyDataSetChanged();
- break;
- default:
- break;
- }
- }
- };
+ switch (msg.what) {
+ case MSG_SHOW_WAIT_DIALOG:
+ mPdWatingScan = ProgressDialog.show(FileSelector.this,
+ getResources().getString(R.string.scan_title),
+ getResources().getString(R.string.scan_tip));
+
+ break;
+
+ case MSG_HIDE_SHOW_DIALOG:
+ removeMessages(MSG_SHOW_WAIT_DIALOG);
+
+ if (mPdWatingScan != null) {
+ mPdWatingScan.dismiss();
+ mPdWatingScan = null;
+ }
+
+ break;
+
+ case MSG_NOTIFY_DATACHANGE:
+ mAdapter.notifyDataSetChanged();
+
+ break;
+
+ default:
+ break;
+ }
+ }
+ };
private void startScanThread() {
- Message nmsg = mHandler.obtainMessage(MSG_SHOW_WAIT_DIALOG);
- mHandler.sendMessageDelayed(nmsg, WAITDIALOG_DISPALY_TIME);
-
- new Thread(){
- public void run(){
- File[] files = new File[2];
- files[0] = new File("/sdcard");
- if (Build.VERSION.SDK_INT == Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
- files[1] = new File("/mnt/");
- } else {
- files[1] = new File("/storage");
- }
- mAdapter.getList(files);
- mHandler.sendEmptyMessage(MSG_HIDE_SHOW_DIALOG);
- }
- }.start();
+ Message nmsg = mHandler.obtainMessage(MSG_SHOW_WAIT_DIALOG);
+ mHandler.sendMessageDelayed(nmsg, WAITDIALOG_DISPALY_TIME);
+
+ new Thread() {
+ public void run() {
+ File[] files = new File[2];
+ files[0] = new File("/sdcard");
+
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
+ files[1] = new File("/mnt/");
+ } else {
+ files[1] = new File("/storage");
+ }
+
+ mAdapter.getList(files);
+ mHandler.sendEmptyMessage(MSG_HIDE_SHOW_DIALOG);
+ }
+ }.start();
}
@Override
@@ -117,11 +137,12 @@ public class FileSelector extends Activity implements OnItemClickListener {
startScanThread();
mListView.setOnItemClickListener(this);
}
-
+
@Override
public void onItemClick(AdapterView<?> adapterView, View view,
- int position, long id) {
+ int position, long id) {
File selectFile = (File) adapterView.getItemAtPosition(position);
+
/*
* if (selectFile.isDirectory()) { mCurrentDirectory = selectFile;
* FileAdapter adapter = (FileAdapter) adapterView.getAdapter();
@@ -134,13 +155,51 @@ public class FileSelector extends Activity implements OnItemClickListener {
finish();
}
}
-
+
+ public static boolean isUdisk(String dir) {
+ if ((Build.VERSION.SDK_INT == ICS404) && dir.startsWith(UDISK_ICS) &&
+ !dir.contains("sdcard")) {
+ return true;
+ } else if ((Build.VERSION.SDK_INT == JB1) && dir.startsWith(UDISK_JB1) &&
+ !dir.contains("sdcard")) {
+ return true;
+ } else if ((Build.VERSION.SDK_INT >= JB2) && dir.startsWith(UDISK_JB2) &&
+ !dir.contains("sdcard")) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public static boolean isSdcard(String dir) {
+ if ((Build.VERSION.SDK_INT == ICS404) && dir.startsWith(SDCARD_JB)) {
+ return true;
+ } else if ((Build.VERSION.SDK_INT == JB1) && dir.startsWith(SDCARD_JB)) {
+ return true;
+ } else if ((Build.VERSION.SDK_INT >= JB2) &&
+ dir.startsWith(SDCARD_JB1)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public static boolean isMediaPart(String dir) {
+ return ((Build.VERSION.SDK_INT < JB2) && dir.startsWith(LOCAL) &&
+ !dir.startsWith(SDCARD_JB));
+ }
+
+ public static boolean isICSupdate() {
+ return (Build.VERSION.SDK_INT == ICS404);
+ }
+
/*
* @Override public void onBackPressed() { if (mCurrentDirectory == null ||
* mCurrentDirectory.getPath().equals("/sdcard")) { super.onBackPressed(); }
* else { mCurrentDirectory = mCurrentDirectory.getParentFile();
* mAdapter.setCurrentList(mCurrentDirectory); } }
*/
+
// @Override
// public boolean onKeyDown(int keyCode, KeyEvent event) {
// if (keyCode == KeyEvent.KEYCODE_BACK) {
@@ -155,12 +214,14 @@ public class FileSelector extends Activity implements OnItemClickListener {
// return super.onKeyDown(keyCode, event)
// }
private class FileAdapter extends BaseAdapter {
- private File mFiles[];
+ private File[] mFiles;
private ArrayList<File> files = new ArrayList();
-
+
public void setCurrentList(File directory) {
File[] tempFiles = directory.listFiles(new ZipFileFilter());
- for (int i = 0; tempFiles != null && i < tempFiles.length; i++) {
+
+ for (int i = 0; (tempFiles != null) && (i < tempFiles.length);
+ i++) {
if (tempFiles[i].isDirectory()) {
setCurrentList(tempFiles[i]);
} else {
@@ -168,55 +229,64 @@ public class FileSelector extends Activity implements OnItemClickListener {
}
}
}
-
+
public void getList(File[] dir) {
for (int j = 0; j < dir.length; j++) {
setCurrentList(dir[j]);
}
+
mFiles = new File[files.size()];
+
for (int i = 0; i < files.size(); i++) {
mFiles[i] = (File) files.get(i);
}
+
mHandler.sendEmptyMessage(MSG_NOTIFY_DATACHANGE);
}
-
+
@Override
public int getCount() {
- return mFiles == null ? 0 : mFiles.length;
+ return (mFiles == null) ? 0 : mFiles.length;
}
-
+
@Override
public File getItem(int position) {
- File file = mFiles == null ? null : mFiles[position];
+ File file = (mFiles == null) ? null : mFiles[position];
+
return file;
}
-
+
@Override
public long getItemId(int position) {
return position;
}
-
+
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.large_text, null);
}
+
TextView tv = (TextView) convertView;
File file = mFiles[position];
String name = file.getPath();
tv.setText(name);
+
return tv;
}
}
-
+
class ZipFileFilter implements FilenameFilter {
public boolean accept(File directory, String file) {
String dir = directory.getPath();
+
if (new File(directory, file).isDirectory()) {
return true;
- } else if (file.toLowerCase().endsWith(".zip") && isSdcard(dir) && !isUdisk(dir)) {
+ } else if (file.toLowerCase().endsWith(".zip") && isSdcard(dir) &&
+ !isUdisk(dir)) {
return true;
- } else if (file.toLowerCase().endsWith(".zip") && isUdisk(dir) && !isSdcard(dir)) {
+ } else if (file.toLowerCase().endsWith(".zip") && isUdisk(dir) &&
+ !isSdcard(dir)) {
return true;
} else if (file.toLowerCase().endsWith(".zip") && isMediaPart(dir)) {
return true;
@@ -225,41 +295,4 @@ public class FileSelector extends Activity implements OnItemClickListener {
}
}
}
-
- public static boolean isUdisk(String dir) {
- if (Build.VERSION.SDK_INT == ICS404
- && dir.startsWith(UDISK_ICS) && !dir.contains("sdcard")) {
- return true;
- } else if (Build.VERSION.SDK_INT == JB1
- && dir.startsWith(UDISK_JB1) && !dir.contains("sdcard")) {
- return true;
- } else if (Build.VERSION.SDK_INT >= JB2
- && dir.startsWith(UDISK_JB2) && !dir.contains("sdcard")) {
- return true;
- }
- return false;
- }
-
- public static boolean isSdcard(String dir) {
- if (Build.VERSION.SDK_INT == ICS404
- && dir.startsWith(SDCARD_JB)) {
- return true;
- } else if (Build.VERSION.SDK_INT == JB1
- && dir.startsWith(SDCARD_JB)) {
- return true;
- } else if (Build.VERSION.SDK_INT >= JB2
- && dir.startsWith(SDCARD_JB1)) {
- return true;
- }
- return false;
- }
-
- public static boolean isMediaPart(String dir) {
- return ((Build.VERSION.SDK_INT < JB2) && dir
- .startsWith(LOCAL) && !dir.startsWith(SDCARD_JB));
- }
-
- public static boolean isICSupdate() {
- return (Build.VERSION.SDK_INT == ICS404);
- }
}
diff --git a/src/com/droidlogic/otaupgrade/InstallPackage.java b/src/com/droidlogic/otaupgrade/InstallPackage.java
new file mode 100755
index 0000000..9cd664f
--- a/dev/null
+++ b/src/com/droidlogic/otaupgrade/InstallPackage.java
@@ -0,0 +1,214 @@
+/**
+* Description:
+* @Copyright: Copyright (c) 2012
+* @Company: Amlogic
+* @version: 1.0
+*/
+package com.droidlogic.otaupgrade;
+
+import android.content.Context;
+
+import android.os.Handler;
+
+import android.os.RecoverySystem.ProgressListener;
+
+import android.util.AttributeSet;
+
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
+import android.view.animation.LayoutAnimationController;
+
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import com.amlogic.update.OtaUpgradeUtils;
+
+import java.io.File;
+
+
+public class InstallPackage extends LinearLayout implements OtaUpgradeUtils.ProgressListener {
+ private ProgressBar mProgressBar;
+ private LinearLayout mOutputField;
+ private LayoutInflater mInflater;
+ private String mPackagePath;
+ private OtaUpgradeUtils mUpdateUtils;
+ private Handler mHandler = new Handler();
+ private Button mDismiss;
+ private int mUpdateMode;
+ private PrefUtils mPref = null;
+
+ public InstallPackage(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mInflater = LayoutInflater.from(context);
+ mUpdateUtils = new OtaUpgradeUtils(context);
+ mUpdateMode = OtaUpgradeUtils.UPDATE_OTA;
+ mPref = new PrefUtils(context);
+ requestFocus();
+ }
+
+ public void setPackagePath(String path) {
+ mPackagePath = path;
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ mProgressBar = (ProgressBar) findViewById(R.id.verify_progress);
+ mOutputField = (LinearLayout) findViewById(R.id.output_field);
+
+ final TextView tv = (TextView) mInflater.inflate(R.layout.medium_text,
+ null);
+ tv.setText(R.string.install_ota_output_confirm);
+ mOutputField.addView(tv);
+
+ Animation animation = new AlphaAnimation(0.0f, 1.0f);
+ animation.setDuration(600);
+
+ LayoutAnimationController controller = new LayoutAnimationController(animation);
+ mOutputField.setLayoutAnimation(controller);
+ mDismiss = (Button) findViewById(R.id.confirm_cancel);
+ findViewById(R.id.confirm_update).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ tv.setText(R.string.install_ota_output_start);
+ mUpdateUtils.registerBattery();
+
+ if (mPref != null) {
+ mPref.write2File();
+ }
+
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ mUpdateUtils.upgrade(new File(mPackagePath),
+ InstallPackage.this, mUpdateMode);
+ }
+ }).start();
+ mDismiss.setEnabled(false);
+ }
+ });
+ }
+
+ public void setParamter(int updateMode) {
+ mUpdateMode = updateMode;
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (!mDismiss.isEnabled() && (keyCode == KeyEvent.KEYCODE_BACK)) {
+ return true;
+ }
+
+ return super.onKeyDown(keyCode, event);
+ }
+
+ @Override
+ public void onProgress(final int progress) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ if (progress == 0) {
+ TextView tv = (TextView) mInflater.inflate(R.layout.medium_text,
+ null);
+ tv.setText(R.string.install_ota_output_checking);
+ mOutputField.addView(tv);
+ } else if (progress == 100) {
+ TextView tv = (TextView) mInflater.inflate(R.layout.medium_text,
+ null);
+ tv.setText(R.string.install_ota_output_check_ok);
+ mOutputField.addView(tv);
+ }
+
+ mProgressBar.setProgress(progress / 2);
+ }
+ });
+ }
+
+ @Override
+ public void onVerifyFailed(int errorCode, Object object) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ TextView tv = (TextView) mInflater.inflate(R.layout.medium_text,
+ null);
+ tv.setText(R.string.install_ota_output_check_error);
+ mOutputField.addView(tv);
+ mDismiss.setEnabled(true);
+ mUpdateUtils.unregistBattery();
+ }
+ });
+ }
+
+ @Override
+ public void onCopyProgress(final int progress) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ if (progress == 0) {
+ TextView tv1 = (TextView) mInflater.inflate(R.layout.medium_text,
+ null);
+ tv1.setText(R.string.install_ota_output_copying);
+ mOutputField.addView(tv1);
+ } else if (progress == 100) {
+ TextView tv = (TextView) mInflater.inflate(R.layout.medium_text,
+ null);
+ tv.setText(R.string.install_ota_output_copy_ok);
+ mOutputField.addView(tv);
+ tv = (TextView) mInflater.inflate(R.layout.medium_text,
+ null);
+ tv.setText(R.string.install_ota_output_restart);
+ mOutputField.addView(tv);
+ }
+
+ mProgressBar.setProgress(50 + (progress / 2));
+ }
+ });
+ }
+
+ @Override
+ public void onCopyFailed(int errorCode, Object object) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ TextView tv = (TextView) mInflater.inflate(R.layout.medium_text,
+ null);
+ tv.setText(R.string.install_ota_output_copy_failed);
+ mOutputField.addView(tv);
+ mDismiss.setEnabled(true);
+ mUpdateUtils.unregistBattery();
+ }
+ });
+ }
+
+ @Override
+ public void onStopProgress(int reason) {
+ final int failreason = reason;
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ TextView tv = (TextView) mInflater.inflate(R.layout.medium_text,
+ null);
+
+ if (failreason == OtaUpgradeUtils.FAIL_REASON_BATTERY) {
+ tv.setText(R.string.stop_low_battery);
+ }
+
+ mOutputField.addView(tv);
+ mDismiss.setEnabled(true);
+ mUpdateUtils.unregistBattery();
+ }
+ });
+ }
+
+ /**
+ * @param b
+ */
+ public void deleteSource(boolean b) {
+ }
+}
diff --git a/src/com/droidlogic/otaupgrade/LoaderReceiver.java b/src/com/droidlogic/otaupgrade/LoaderReceiver.java
new file mode 100755
index 0000000..f19340b
--- a/dev/null
+++ b/src/com/droidlogic/otaupgrade/LoaderReceiver.java
@@ -0,0 +1,174 @@
+/**
+ * Description:
+ * @Copyright: Copyright (c) 2012
+ * @Company: Amlogic
+ * @version: 1.0
+ */
+package com.droidlogic.otaupgrade;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+
+import android.net.wifi.WifiManager;
+
+import android.os.Environment;
+import android.os.SystemProperties;
+
+import android.util.Log;
+
+import com.amlogic.update.Backup;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.IOException;
+
+
+public class LoaderReceiver extends BroadcastReceiver {
+ private static final String TAG = PrefUtils.TAG;
+ public static final String UPDATE_GET_NEW_VERSION = "com.android.update.UPDATE_GET_NEW_VERSION";
+ public static final String CHECKING_TASK_COMPLETED = "com.android.update.CHECKING_TASK_COMPLETED";
+ public static final String RESTOREDATA = "com.android.amlogic.restoredata";
+ public static final String BACKUPDATA = "com.android.amlogic.backupdata";
+ public static String BACKUP_FILE = "/storage/external_storage/sdcard1/BACKUP";
+ private PrefUtils mPref;
+ private Context mContext;
+
+ private static void getBackUpFileName() {
+ File devDir = new File(PrefUtils.DEV_PATH);
+ File[] devs = devDir.listFiles();
+
+ for (File dev : devs) {
+ if (dev.isDirectory() && dev.canWrite()) {
+ BACKUP_FILE = dev.getAbsolutePath();
+ BACKUP_FILE += "/BACKUP";
+
+ break;
+ }
+ }
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ getBackUpFileName();
+ mContext = context;
+ mPref = new PrefUtils(mContext);
+
+ if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) ||
+ intent.getAction().equals(RESTOREDATA)) {
+ mPref.setBoolean("Boot_Checked", true);
+ afterReboot();
+ } else if (intent.getAction().equals(BACKUPDATA)) {
+ if (PrefUtils.DEBUG) {
+ Log.d(TAG, "backup");
+ }
+
+ backup();
+ }
+
+ //Log.d(TAG,"getAction:"+intent.getAction());
+ if ((ConnectivityManager.CONNECTIVITY_ACTION).equals(intent.getAction())) {
+ NetworkInfo netInfo = (NetworkInfo) intent.getExtra(WifiManager.EXTRA_NETWORK_INFO,
+ null);
+
+ if (PrefUtils.DEBUG) {
+ Log.d(TAG,
+ "BootCompleteFlag" +
+ (mPref.getBooleanVal("Boot_Checked", false)) + "" +
+ (netInfo != null) + "" +
+ mPref.getBooleanVal(PrefUtils.PREF_AUTO_CHECK, false) +
+ (netInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED));
+ }
+
+ if (mPref.getBooleanVal("Boot_Checked", false) &&
+ (netInfo != null) &&
+ (netInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED)) {
+ mPref.setBoolean("Boot_Checked", false);
+
+ if (mPref.getBooleanVal(PrefUtils.PREF_AUTO_CHECK, false)) {
+ mContext.startService(new Intent(
+ UpdateService.ACTION_AUTOCHECK));
+
+ return;
+ } else if (("true").equals(SystemProperties.getBoolean(
+ "ro.product.update.autocheck", false))) {
+ mPref.setBoolean(PrefUtils.PREF_AUTO_CHECK, true);
+ mContext.startService(new Intent(
+ UpdateService.ACTION_AUTOCHECK));
+ }
+ }
+ }
+ }
+
+ private void afterReboot() {
+ final String[] args = { BACKUP_FILE, "restore", "-apk", "-system", "-all" };
+ new Thread() {
+ public void run() {
+ try {
+ Thread.sleep(5000);
+ } catch (InterruptedException e) {
+ } finally {
+ //boolean ismounted = Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorage2State());
+ File flagFile = new File(new File(BACKUP_FILE).getParentFile(),
+ PrefUtils.FlagFile);
+
+ //if (ismounted) {
+ File bkfile = new File(BACKUP_FILE);
+
+ if (flagFile.exists()) {
+ try {
+ String files = null;
+ BufferedReader input = new BufferedReader(new FileReader(
+ flagFile));
+
+ while ((files = input.readLine()) != null) {
+ File temp = new File(files);
+
+ if (temp.exists()) {
+ temp.delete();
+ }
+ }
+
+ flagFile.delete();
+ } catch (IOException ex) {
+ }
+ }
+
+ if (bkfile.exists() &&
+ !mPref.getBooleanVal(
+ PrefUtils.PREF_START_RESTORE, false)) {
+ mPref.setBoolean(PrefUtils.PREF_START_RESTORE, true);
+
+ try {
+ FileInputStream fis = new FileInputStream(bkfile);
+
+ if (fis.available() <= 0) {
+ bkfile.delete();
+ } else {
+ Backup mBackup = new Backup(mContext);
+ mBackup.main(args);
+ }
+ } catch (Exception ex) {
+ }
+ } else if (bkfile.exists()) {
+ mPref.setBoolean(PrefUtils.PREF_START_RESTORE, false);
+ bkfile.delete();
+ }
+
+ // }
+ }
+ }
+ }.start();
+ }
+
+ private void backup() {
+ final String[] args = { BACKUP_FILE, "backup", "-apk", "-system", "-all" };
+ Backup mBackup = new Backup(mContext);
+ mBackup.main(args);
+ }
+}
diff --git a/src/com/amlapp/update/otaupgrade/MainActivity.java b/src/com/droidlogic/otaupgrade/MainActivity.java
index 37df8b7..60db134 100755
--- a/src/com/amlapp/update/otaupgrade/MainActivity.java
+++ b/src/com/droidlogic/otaupgrade/MainActivity.java
@@ -1,5 +1,5 @@
/**
- * @Package com.amlogic.otauicase
+ * @Package com.amlogic.otauicase
* @Description
*
* Copyright (c) Inspur Group Co., Ltd. Unpublished
@@ -13,53 +13,68 @@
* conditions of the Non-Disclosure Agreement pursuant to which this
* source code was originally received.
*/
-package com.amlapp.update.otaupgrade;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Locale;
-
-import org.apache.http.util.EncodingUtils;
-
-import com.amlogic.update.OtaUpgradeUtils;
+package com.droidlogic.otaupgrade;
import android.app.Activity;
import android.app.AlertDialog;
+
import android.app.AlertDialog.Builder;
+
import android.app.Dialog;
+
import android.content.DialogInterface;
import android.content.Intent;
+
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
+
import android.os.Bundle;
import android.os.Environment;
import android.os.SystemProperties;
+
import android.util.Log;
+
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+
import android.view.View.OnClickListener;
+
import android.view.ViewGroup;
+
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
-/**
- * @ClassName UpdateActivity
+import com.amlogic.update.OtaUpgradeUtils;
+
+import org.apache.http.util.EncodingUtils;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.Locale;
+
+
+/**
+ * @ClassName UpdateActivity
* @Description TODO
- * @Date 2013-7-16
- * @Email
- * @Author
+ * @Date 2013-7-16
+ * @Email
+ * @Author
* @Version V1.0
*/
-public class MainActivity extends Activity implements OnClickListener {
+public class MainActivity extends Activity implements OnClickListener {
private static final String TAG = UpdateService.TAG;
private static final String ENCODING = "UTF-8";
private static final String VERSION_NAME = "version";
+ private static final int queryReturnOk = 0;
+ private static final int queryUpdateFile = 1;
+ private static int UpdateMode = OtaUpgradeUtils.UPDATE_UPDATE;
private Button mOnlineUpdateBtn;
private Button mLocalUpdateBtn;
private Button mBackupBtn;
@@ -67,13 +82,12 @@ public class MainActivity extends Activity implements OnClickListener {
private Button mUpdateCertern;
private CheckBox mWipeDate;
private CheckBox mWipeMedia;
+
//private CheckBox mWipeCache;
private TextView filepath;
private TextView filename;
- private static final int queryReturnOk = 0;
- private static final int queryUpdateFile = 1;
- private static int UpdateMode = OtaUpgradeUtils.UPDATE_UPDATE;
private PrefUtils mPreference;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -95,30 +109,37 @@ public class MainActivity extends Activity implements OnClickListener {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
+
MenuItem item = menu.findItem(R.id.settings);
- if (PrefUtils.getAutoCheck()){
+
+ if (PrefUtils.getAutoCheck()) {
item.setVisible(false);
- mPreference.setBoolean(PrefUtils.PREF_AUTO_CHECK,true);
- }else{
- if(mPreference.getBooleanVal(PrefUtils.PREF_AUTO_CHECK,false)){
- item.setTitle(R.string.auto_check_close);
- }else{
- item.setTitle(R.string.auto_check);
- }
+ mPreference.setBoolean(PrefUtils.PREF_AUTO_CHECK, true);
+ } else {
+ if (mPreference.getBooleanVal(PrefUtils.PREF_AUTO_CHECK, false)) {
+ item.setTitle(R.string.auto_check_close);
+ } else {
+ item.setTitle(R.string.auto_check);
+ }
}
+
return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
+
if (data != null) {
- if (requestCode == queryUpdateFile && resultCode == queryReturnOk) {
- Bundle bundle = data.getExtras();
- String file = bundle.getString(FileSelector.FILE);
+ if ((requestCode == queryUpdateFile) &&
+ (resultCode == queryReturnOk)) {
+ Bundle bundle = data.getExtras();
+ String file = bundle.getString(FileSelector.FILE);
+
if (file != null) {
filepath.setText(file);
- filename.setText(file.substring(file.lastIndexOf("/")+1, file.length()));
+ filename.setText(file.substring(file.lastIndexOf("/") + 1,
+ file.length()));
}
}
}
@@ -128,42 +149,47 @@ public class MainActivity extends Activity implements OnClickListener {
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.about) {
AlertDialog.Builder builder = new Builder(MainActivity.this);
- if (getResources().getConfiguration().locale.getCountry().equals("CN")) {
- builder.setMessage(getFromAssets(VERSION_NAME+"_cn"));
+
+ if (getResources().getConfiguration().locale.getCountry()
+ .equals("CN")) {
+ builder.setMessage(getFromAssets(VERSION_NAME + "_cn"));
} else {
builder.setMessage(getFromAssets(VERSION_NAME));
}
- builder.setTitle(R.string.version_info);
- builder.setPositiveButton(R.string.sure, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- }
- });
+
+ builder.setTitle(R.string.version_info);
+ builder.setPositiveButton(R.string.sure,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ }
+ });
builder.create().show();
- }else if(item.getItemId() == R.id.settings) {
- if(MainActivity.this.getResources().getString(R.string.auto_check).equals(item.getTitle().toString())){
- mPreference.setBoolean(PrefUtils.PREF_AUTO_CHECK,true);
+ } else if (item.getItemId() == R.id.settings) {
+ if (MainActivity.this.getResources().getString(R.string.auto_check)
+ .equals(item.getTitle().toString())) {
+ mPreference.setBoolean(PrefUtils.PREF_AUTO_CHECK, true);
item.setTitle(R.string.auto_check_close);
- }else{
- mPreference.setBoolean(PrefUtils.PREF_AUTO_CHECK,false);
+ } else {
+ mPreference.setBoolean(PrefUtils.PREF_AUTO_CHECK, false);
item.setTitle(R.string.auto_check);
}
}
+
return super.onOptionsItemSelected(item);
}
private void UpdateDialog(String filename) {
final Dialog dlg = new Dialog(this, R.style.Theme_dialog);
LayoutInflater inflater = LayoutInflater.from(this);
- InstallPackage dlgView = (InstallPackage) inflater.inflate(
- R.layout.install_ota, null, false);
+ InstallPackage dlgView = (InstallPackage) inflater.inflate(R.layout.install_ota,
+ null, false);
dlgView.setPackagePath(filename);
dlgView.setParamter(UpdateMode);
dlg.setContentView(dlgView);
dlg.setCancelable(false);
- dlg.findViewById(R.id.confirm_cancel).setOnClickListener(
- new View.OnClickListener() {
+ dlg.findViewById(R.id.confirm_cancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dlg.dismiss();
@@ -175,23 +201,30 @@ public class MainActivity extends Activity implements OnClickListener {
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
- if(filepath != null) {
- savedInstanceState.putString("filepath", filepath.getText().toString());
+
+ if (filepath != null) {
+ savedInstanceState.putString("filepath",
+ filepath.getText().toString());
}
- if(filename != null) {
- savedInstanceState.putString("filename", filename.getText().toString());
+
+ if (filename != null) {
+ savedInstanceState.putString("filename",
+ filename.getText().toString());
}
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
+
String strPath = savedInstanceState.getString("filepath");
String strName = savedInstanceState.getString("filename");
- if(filepath!= null && strPath != null) {
+
+ if ((filepath != null) && (strPath != null)) {
filepath.setText(strPath);
}
- if(filename!= null && strName != null) {
+
+ if ((filename != null) && (strName != null)) {
filename.setText(strName);
}
}
@@ -209,8 +242,10 @@ public class MainActivity extends Activity implements OnClickListener {
mBackupBtn.setOnClickListener(this);
mRestoreBtn.setOnClickListener(this);
mUpdateCertern.setOnClickListener(this);
+
if (PrefUtils.isUserVer()) {
- ViewGroup vg= (ViewGroup)findViewById(R.id.update_locale_layer);
+ ViewGroup vg = (ViewGroup) findViewById(R.id.update_locale_layer);
+
if (vg != null) {
vg.setVisibility(View.GONE);
}
@@ -226,56 +261,72 @@ public class MainActivity extends Activity implements OnClickListener {
public void onClick(View v) {
switch (v.getId()) {
case R.id.backup:
+
Intent intent = new Intent(LoaderReceiver.BACKUPDATA);
intent.setClass(this, BackupActivity.class);
startActivity(intent);
this.finish();
+
break;
+
case R.id.restore:
+
Intent intent2 = new Intent(LoaderReceiver.RESTOREDATA);
intent2.setClass(this, BackupActivity.class);
startActivity(intent2);
this.finish();
+
break;
+
case R.id.btn_update_locale:
+
Intent intent0 = new Intent(this, FileSelector.class);
Activity activity = (Activity) this;
startActivityForResult(intent0, queryUpdateFile);
+
break;
+
case R.id.btn_locale_certern:
+
String fullname = filepath.getText().toString();
- if (filename != null && filename.length() > 0) {
+
+ if ((filename != null) && (filename.length() > 0)) {
createAmlScript();
UpdateDialog(fullname);
} else {
Toast.makeText(this, getString(R.string.file_not_exist), 2000)
- .show();
+ .show();
}
+
break;
+
case R.id.updatebtn:
+
if (!checkInternet()) {
- Toast.makeText(this, getString(R.string.net_error), 2000)
- .show();
+ Toast.makeText(this, getString(R.string.net_error), 2000).show();
+
return;
}
+
Intent intent1 = new Intent();
intent1.setAction(UpdateService.ACTION_CHECK);
intent1.setClass(this, UpdateActivity.class);
startActivity(intent1);
this.finish();
- break;
+ break;
}
}
private boolean checkInternet() {
- ConnectivityManager cm = (ConnectivityManager) this
- .getSystemService(this.CONNECTIVITY_SERVICE);
+ ConnectivityManager cm = (ConnectivityManager) this.getSystemService(this.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
- if (info != null && info.isConnected()) {
+
+ if ((info != null) && info.isConnected()) {
return true;
} else {
Log.v(TAG, "It's can't connect the Internet!");
+
return false;
}
}
@@ -284,43 +335,54 @@ public class MainActivity extends Activity implements OnClickListener {
File file;
String res = "";
String fullpath = filepath.getText().toString();
+
//String filedir = fullpath.substring(0,fullpath.lastIndexOf("/"));
if (fullpath.lastIndexOf("/") < 0) {
- Toast.makeText(this, getString(R.string.file_not_exist), 2000)
- .show();
+ Toast.makeText(this, getString(R.string.file_not_exist), 2000).show();
+
return false;
}
+
file = new File("/cache/recovery/command");
- try{
+
+ try {
File parent = file.getParentFile();
- if(!parent.exists()){
+
+ if (!parent.exists()) {
parent.mkdirs();
}
- if(!file.exists()){
+
+ if (!file.exists()) {
file.createNewFile();
}
- }catch(IOException e){
+ } catch (IOException e) {
e.printStackTrace();
}
+
res += "--update_package=";
- if (Environment.MEDIA_MOUNTED.equals(Environment
- .getExternalStorage2State()) && FileSelector.isSdcard(fullpath)) {
+
+ if (Environment.MEDIA_MOUNTED.equals(
+ Environment.getExternalStorageState()) &&
+ FileSelector.isSdcard(fullpath)) {
res += "/sdcard/";
- }else if(FileSelector.isUdisk(fullpath)) {
+ } else if (FileSelector.isUdisk(fullpath)) {
res += "/udisk/";
- }else if(FileSelector.isMediaPart(fullpath)) {
+ } else if (FileSelector.isMediaPart(fullpath)) {
res += "/media/";
UpdateMode = OtaUpgradeUtils.UPDATE_RECOVERY;
- }else {
+ } else {
UpdateMode = OtaUpgradeUtils.UPDATE_UPDATE;
}
- if (FileSelector.isICSupdate() && !FileSelector.isMediaPart(fullpath)){
+
+ if (FileSelector.isICSupdate() && !FileSelector.isMediaPart(fullpath)) {
UpdateMode = OtaUpgradeUtils.UPDATE_RECOVERY;
}
+
res += filename.getText().toString();
- res += "\n--locale=" + Locale.getDefault().toString();
+ res += ("\n--locale=" + Locale.getDefault().toString());
res += (mWipeDate.isChecked() ? "\n--wipe_data" : "");
res += (mWipeMedia.isChecked() ? "\n--wipe_media" : "");
+
//res += (mWipeCache.isChecked() ? "\n--wipe_cache" : "");
try {
FileOutputStream fout = new FileOutputStream(file);
@@ -329,29 +391,33 @@ public class MainActivity extends Activity implements OnClickListener {
fout.close();
} catch (IOException e) {
e.printStackTrace();
- Log.d(TAG,"IOException:"+this.getClass());
+ Log.d(TAG, "IOException:" + this.getClass());
}
+
return true;
}
- public String getFromAssets(String fileName){
+ public String getFromAssets(String fileName) {
String result = "";
+
try {
InputStream in = getResources().getAssets().open(fileName);
int lenght = in.available();
- byte[] buffer = new byte[lenght];
+ byte[] buffer = new byte[lenght];
in.read(buffer);
result = EncodingUtils.getString(buffer, ENCODING);
} catch (Exception e) {
- e.printStackTrace();
+ e.printStackTrace();
}
- return result;
+
+ return result;
}
- public void hideBackUp(){
- if(FileSelector.isICSupdate()){
- TextView tv = (TextView)findViewById(R.id.backuptitle);
- ViewGroup backupViews = (ViewGroup)findViewById(R.id.backup_layout);
- View div = (View)findViewById(R.id.divider1);
+
+ public void hideBackUp() {
+ if (FileSelector.isICSupdate()) {
+ TextView tv = (TextView) findViewById(R.id.backuptitle);
+ ViewGroup backupViews = (ViewGroup) findViewById(R.id.backup_layout);
+ View div = (View) findViewById(R.id.divider1);
div.setVisibility(View.GONE);
tv.setVisibility(View.GONE);
backupViews.setVisibility(View.GONE);
diff --git a/src/com/amlapp/update/otaupgrade/PrefUtils.java b/src/com/droidlogic/otaupgrade/PrefUtils.java
index e76302c..e1c3e2c 100755
--- a/src/com/amlapp/update/otaupgrade/PrefUtils.java
+++ b/src/com/droidlogic/otaupgrade/PrefUtils.java
@@ -8,20 +8,24 @@
* conditions of the Non-Disclosure Agreement pursuant to which
* this source code was originally received.
*/
-package com.amlapp.update.otaupgrade;
+package com.droidlogic.otaupgrade;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import android.os.Environment;
+import android.os.SystemProperties;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
+
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.Environment;
-import android.os.SystemProperties;
+
/**
* @ClassName PrefUtils
* @Description TODO
@@ -31,144 +35,161 @@ import android.os.SystemProperties;
* @Version V1.0
*/
public class PrefUtils {
- public static Boolean DEBUG = false;
- public static final String TAG = "OTA";
- private Context mContext;
+ public static Boolean DEBUG = false;
+ public static final String TAG = "OTA";
private static final String PREFS_DOWNLOAD_FILELIST = "download_filelist";
- private static final String PREFS_UPDATE_FILEPATH = "update_file_path";
- private static final String PREFS_UPDATE_SCRIPT = "update_with_script";
+ private static final String PREFS_UPDATE_FILEPATH = "update_file_path";
+ private static final String PREFS_UPDATE_SCRIPT = "update_with_script";
private static final String PREFS_UPDATE_FILESIZE = "update_file_size";
- private static final String PREFS_UPDATE_DESC ="update_desc";
- public static final String DEV_PATH ="/storage/external_storage";
- public static final String PREF_START_RESTORE = "retore_start";
+ private static final String PREFS_UPDATE_DESC = "update_desc";
+ public static final String DEV_PATH = "/storage/external_storage";
+ public static final String PREF_START_RESTORE = "retore_start";
public static final String PREF_AUTO_CHECK = "auto_check";
- static final String FlagFile = ".wipe_record";
- private SharedPreferences mPrefs;
-
+ static final String FlagFile = ".wipe_record";
+ private Context mContext;
+ private SharedPreferences mPrefs;
+
PrefUtils(Context context) {
mPrefs = context.getSharedPreferences("update", Context.MODE_PRIVATE);
mContext = context;
}
-
+
private void setString(String key, String Str) {
SharedPreferences.Editor mEditor = mPrefs.edit();
mEditor.putString(key, Str);
mEditor.commit();
}
-
+
private void setStringSet(String key, Set<String> downSet) {
SharedPreferences.Editor mEditor = mPrefs.edit();
mEditor.putStringSet(key, downSet);
mEditor.commit();
}
-
+
private void setInt(String key, int Int) {
SharedPreferences.Editor mEditor = mPrefs.edit();
mEditor.putInt(key, Int);
mEditor.commit();
}
- public void setDescrib(String desc){
- setString(PREFS_UPDATE_DESC,desc);
+
+ public void setDescrib(String desc) {
+ setString(PREFS_UPDATE_DESC, desc);
}
- public String getDescri(){
- return mPrefs.getString(PREFS_UPDATE_DESC,"");
+
+ public String getDescri() {
+ return mPrefs.getString(PREFS_UPDATE_DESC, "");
}
+
private void setLong(String key, long Long) {
SharedPreferences.Editor mEditor = mPrefs.edit();
mEditor.putLong(key, Long);
mEditor.commit();
}
-
+
void setBoolean(String key, Boolean bool) {
SharedPreferences.Editor mEditor = mPrefs.edit();
mEditor.putBoolean(key, bool);
mEditor.commit();
}
-
+
public void setScriptAsk(boolean bool) {
setBoolean(PREFS_UPDATE_SCRIPT, bool);
}
-
+
public boolean getScriptAsk() {
return mPrefs.getBoolean(PREFS_UPDATE_SCRIPT, false);
}
-
+
void setDownFileList(Set<String> downlist) {
if (downlist.size() > 0) {
setStringSet(PREFS_DOWNLOAD_FILELIST, downlist);
}
}
-
+
Set<String> getDownFileSet() {
return mPrefs.getStringSet(PREFS_DOWNLOAD_FILELIST, null);
}
-
+
boolean getBooleanVal(String key, boolean def) {
return mPrefs.getBoolean(key, def);
}
-
+
public void setUpdatePath(String path) {
setString(PREFS_UPDATE_FILEPATH, path);
}
-
+
public String getUpdatePath() {
return mPrefs.getString(PREFS_UPDATE_FILEPATH, null);
}
- public long getFileSize(){
+
+ public long getFileSize() {
return mPrefs.getLong(PREFS_UPDATE_FILESIZE, 0);
}
- public void saveFileSize(long fileSize){
- setLong(PREFS_UPDATE_FILESIZE,fileSize);
+
+ public void saveFileSize(long fileSize) {
+ setLong(PREFS_UPDATE_FILESIZE, fileSize);
}
-
+
static boolean isUserVer() {
- String userVer = SystemProperties.get("ro.secure","");
- String userDebug = SystemProperties.get("ro.debuggable","");
- String hideLocalUp = SystemProperties.get("ro.otaupdate.local","");
- if (hideLocalUp != null && hideLocalUp.equals("1")) {
- if (userVer != null && userVer.length() > 0) {
+ String userVer = SystemProperties.get("ro.secure", "");
+ String userDebug = SystemProperties.get("ro.debuggable", "");
+ String hideLocalUp = SystemProperties.get("ro.otaupdate.local", "");
+
+ if ((hideLocalUp != null) && hideLocalUp.equals("1")) {
+ if ((userVer != null) && (userVer.length() > 0)) {
return (userVer.trim().equals("1")) && (userDebug.equals("0"));
}
}
+
return false;
}
public static boolean getAutoCheck() {
- return ("true").equals(SystemProperties.get("ro.product.update.autocheck"));
+ return ("true").equals(SystemProperties.get(
+ "ro.product.update.autocheck"));
}
+
void write2File() {
- String flagParentPath=Environment
- .getExternalStorage2Directory().getAbsolutePath()+"/";
+ String flagParentPath = "/storage/external_storage/sdcard1/";
File devDir = new File(DEV_PATH);
- File[] devs = devDir.listFiles();
- for(File dev:devs){
- if(dev.isDirectory()&&dev.canWrite()){
+ File[] devs = devDir.listFiles();
+
+ for (File dev : devs) {
+ if (dev.isDirectory() && dev.canWrite()) {
flagParentPath = dev.getAbsolutePath();
flagParentPath += "/";
+
break;
}
}
- File flagFile = new File(flagParentPath,FlagFile);
+
+ File flagFile = new File(flagParentPath, FlagFile);
+
if (!flagFile.exists()) {
try {
flagFile.createNewFile();
} catch (IOException excep) {
}
}
- if (!flagFile.canWrite())
- {
+
+ if (!flagFile.canWrite()) {
return;
}
+
FileWriter fw = null;
+
try {
fw = new FileWriter(flagFile);
} catch (IOException excep) {
}
+
BufferedWriter output = new BufferedWriter(fw);
Set<String> downfiles = mPrefs.getStringSet(PREFS_DOWNLOAD_FILELIST,
null);
- if (downfiles != null && downfiles.size() > 0) {
+
+ if ((downfiles != null) && (downfiles.size() > 0)) {
String[] downlist = downfiles.toArray(new String[0]);
+
for (int i = 0; i < downlist.length; i++) {
try {
output.write(downlist[i]);
@@ -177,6 +198,7 @@ public class PrefUtils {
}
}
}
+
try {
output.close();
} catch (IOException e) {
diff --git a/src/com/droidlogic/otaupgrade/UpdateActivity.java b/src/com/droidlogic/otaupgrade/UpdateActivity.java
new file mode 100755
index 0000000..ce449f2
--- a/dev/null
+++ b/src/com/droidlogic/otaupgrade/UpdateActivity.java
@@ -0,0 +1,709 @@
+/**
+ * @Package com.amlogic.otauicase
+ * @Description Copyright (c) Inspur Group Co., Ltd. Unpublished Inspur Group
+ * Co., Ltd. Proprietary & Confidential This source code and the
+ * algorithms implemented therein constitute confidential
+ * information and may comprise trade secrets of Inspur or its
+ * associates, and any use thereof is subject to the terms and
+ * conditions of the Non-Disclosure Agreement pursuant to which
+ * this source code was originally received.
+ */
+package com.droidlogic.otaupgrade;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.app.Service;
+
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.ServiceConnection;
+
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.Uri;
+
+import android.os.Bundle;
+import android.os.Environment;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.StatFs;
+
+import android.util.Log;
+
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import android.view.View.OnClickListener;
+
+import android.widget.Button;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.amlogic.update.CheckUpdateTask;
+
+import com.amlogic.update.CheckUpdateTask.CheckUpdateResult;
+
+import com.amlogic.update.DownloadUpdateTask;
+
+import com.amlogic.update.DownloadUpdateTask.DownloadResult;
+
+import com.amlogic.update.OtaUpgradeUtils;
+
+import com.amlogic.update.OtaUpgradeUtils.ProgressListener;
+
+import com.amlogic.update.UpdateTasks;
+
+import com.droidlogic.otaupgrade.UpdateService.uiBinder;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import java.util.HashSet;
+import java.util.Set;
+
+
+/**
+ * @ClassName UpdateActivity
+ * @Description TODO
+ * @Date 2013-7-17
+ * @Email
+ * @Author
+ * @Version V1.0
+ */
+public class UpdateActivity extends Activity {
+ private static final String TAG = "UpdateActivity";
+ public static final String WIFI_STATUS_INTENT = "android.net.conn.CONNECTIVITY_CHANGE";
+ private TextView mDescription;
+ private boolean sdcardFlag = true;
+ private boolean networkFlag = true;
+ private Button mCancel;
+ private boolean enableBtn;
+ private Button mCombineBtn;
+ private ProgressBar mProgress;
+ private ProgressBar mCheckProgress;
+ private TextView mCheckingStatus;
+ private TextView mPercent;
+ private uiBinder mServiceBinder;
+ private QueryThread[] mQueryThread = new QueryThread[2];
+ private PrefUtils mPreference;
+ private Handler mHandler = new Handler();
+ private int mDownSize = 0;
+ private Button mCheckBtn;
+ private BroadcastReceiver sdcardListener = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+
+ if (Intent.ACTION_MEDIA_REMOVED.equals(action) ||
+ Intent.ACTION_MEDIA_EJECT.equals(action) ||
+ Intent.ACTION_MEDIA_UNMOUNTED.equals(action) ||
+ Intent.ACTION_MEDIA_BAD_REMOVAL.equals(action)) {
+ if ((mServiceBinder != null) && (mCombineBtn != null) &&
+ mCombineBtn.getTag()
+ .equals(Integer.valueOf(
+ R.string.download_pause))) {
+ mServiceBinder.setTaskPause(UpdateService.TASK_ID_DOWNLOAD);
+ Toast.makeText(UpdateActivity.this,
+ R.string.sdcard_info, 20000).show();
+ UpdateActivity.this.finish();
+ }
+ }
+ }
+ };
+
+ /** -----------------Internal Class-------------------------- */
+ private ServiceConnection mConn = new ServiceConnection() {
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ mServiceBinder = (uiBinder) service;
+
+ Intent extrasIntent = getIntent();
+ String action = extrasIntent.getAction();
+ boolean b = mServiceBinder.getTaskRunnningStatus(UpdateService.TASK_ID_DOWNLOAD) == UpdateTasks.RUNNING_STATUS_UNSTART;
+ int lastDownSize = mServiceBinder.getTaskProgress(UpdateService.TASK_ID_DOWNLOAD);
+
+ if ((lastDownSize == 0) && b) {
+ mServiceBinder.startTask(UpdateService.TASK_ID_CHECKING);
+ setCheckView();
+ } else {
+ setDownloadView(mPreference.getDescri());
+ }
+
+ if (UpdateService.ACTION_DOWNLOAD_FAILED.equals(action)) {
+ setDownloadView(UpdateActivity.this.getResources()
+ .getString(R.string.download_suc));
+ mPercent.setVisibility(View.VISIBLE);
+ mPercent.setText(R.string.download_error);
+ } else if (UpdateService.ACTION_DOWNLOAD_SUCCESS.equals(action)) {
+ setDownloadView(UpdateActivity.this.getResources()
+ .getString(R.string.download_err));
+ mPercent.setVisibility(View.VISIBLE);
+ mPercent.setText(getString(R.string.Download_succeed));
+ mCombineBtn.setText(R.string.download_update);
+ mCombineBtn.setTag(Integer.valueOf(R.string.download_update));
+ }
+ }
+
+ public void onServiceDisconnected(ComponentName name) {
+ }
+ };
+
+ private BroadcastReceiver WifiReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent.getAction()
+ .equals("android.net.conn.CONNECTIVITY_CHANGE")) {
+ ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+
+ /*NetworkInfo mobileInfo = manager
+ .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
+ NetworkInfo wifiInfo = manager
+ .getNetworkInfo(ConnectivityManager.TYPE_WIFI);*/
+ NetworkInfo activeInfo = manager.getActiveNetworkInfo();
+
+ if ((activeInfo != null) && !activeInfo.isConnected()) {
+ if (activeInfo.getState() != NetworkInfo.State.CONNECTED) {
+ Toast.makeText(context, R.string.net_status_change,
+ 1).show();
+ }
+ }
+
+ /*
+ if (!wifiInfo
+ .isConnectedOrConnecting()
+ && Integer
+ .valueOf(
+ R.string.download_resume)
+ .equals(mCombineBtn
+ .getTag())) {
+ mCombineBtn
+ .setText(R.string.download_pause);
+ mCombineBtn
+ .setTag(Integer
+ .valueOf(R.string.download_pause));
+ } else if (Integer
+ .valueOf(
+ R.string.download_pause)
+ .equals(mCombineBtn
+ .getTag())) {
+ mCombineBtn
+ .setText(R.string.download_resume);
+ mCombineBtn
+ .setTag(Integer
+ .valueOf(R.string.download_resume));
+ }*/
+ }
+ }
+ };
+
+ /** ------------------------------------------------------ */
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ Intent mIntent = new Intent(this, UpdateService.class);
+ bindService(mIntent, mConn, Service.BIND_AUTO_CREATE);
+ mPreference = new PrefUtils(this);
+ mQueryThread[0] = new QueryCheck();
+ mQueryThread[1] = new QueryDownload();
+ enableBtn = false;
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle savedInstanceState) {
+ super.onSaveInstanceState(savedInstanceState);
+
+ if (mDescription != null) {
+ savedInstanceState.putString("message",
+ mDescription.getText().toString());
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+ // super.onBackPressed();
+ if ((mServiceBinder != null) &&
+ (mServiceBinder.getTaskRunnningStatus(
+ UpdateService.TASK_ID_DOWNLOAD) == DownloadUpdateTask.RUNNING_STATUS_RUNNING)) {
+ Intent i = new Intent(Intent.ACTION_MAIN);
+ i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ i.addCategory(Intent.CATEGORY_HOME);
+ startActivity(i);
+ } else {
+ super.onBackPressed();
+ }
+ }
+
+ @Override
+ public void onRestoreInstanceState(Bundle savedInstanceState) {
+ super.onRestoreInstanceState(savedInstanceState);
+
+ String message = savedInstanceState.getString("message");
+
+ if ((message != null) && (mDescription != null)) {
+ mDescription.setText(message);
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ mQueryThread[0].stop();
+ mQueryThread[1].stop();
+ unbindService(mConn);
+
+ if (!sdcardFlag) {
+ unregisterReceiver(sdcardListener);
+ }
+
+ if (!networkFlag) {
+ unregisterReceiver(WifiReceiver);
+ }
+ }
+
+ private void setCheckView() {
+ setContentView(R.layout.update_checking);
+ mCheckBtn = (Button) findViewById(R.id.check_update);
+ mCheckBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mServiceBinder.startTask(UpdateService.TASK_ID_CHECKING);
+ mCheckProgress.setVisibility(View.VISIBLE);
+ mCheckBtn.setVisibility(View.GONE);
+ }
+ });
+ mCheckProgress = (ProgressBar) findViewById(R.id.checking_progress);
+ mCheckingStatus = (TextView) findViewById(R.id.checking_status);
+ mCheckingStatus.setText(R.string.check_connecting);
+ mQueryThread[0].start();
+ }
+
+ private String setStr(long size, long status) {
+ String str = null;
+ int block = 1024;
+ long k = (size / 1024);
+ // if(k > block){
+ str = (status / 1024) + "KB/" + k + "KB";
+
+ // }
+ /*
+ * if (k <( block * block)){ showInt = (int)(status/block/block*100.0);
+ * str = (showInt/100.0)+"MB/"+(k/block)+"MB"; }
+ */
+ return str;
+ }
+
+ private boolean handleSDcardSituation() {
+ boolean isScriptAsk = mPreference.getScriptAsk();
+
+ if (isScriptAsk) {
+ String filePath = mPreference.getUpdatePath();
+ File saveFilePath = new File(filePath).getParentFile();
+
+ if (saveFilePath.canWrite()) {
+ StatFs statFs = new StatFs(saveFilePath.getAbsolutePath());
+ int blockSize = statFs.getBlockSize();
+ int avaliableBlocks = statFs.getAvailableBlocks();
+ int totalBlocks = statFs.getBlockCount();
+ mDownSize = (int) mPreference.getFileSize();
+
+ if ((mDownSize > 0) &&
+ ((mDownSize / blockSize) > avaliableBlocks)) {
+ Toast.makeText(UpdateActivity.this,
+ R.string.capacty_not_enough, Toast.LENGTH_LONG).show();
+ } else {
+ if (sdcardFlag && isScriptAsk) {
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addDataScheme("file");
+ intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);
+ intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
+ intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
+ intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
+ registerReceiver(sdcardListener, intentFilter);
+ sdcardFlag = false;
+ }
+ }
+ } else {
+ enableBtn = true;
+
+ Intent intent0 = new Intent(this, BadMovedSDcard.class);
+ Activity activity = (Activity) this;
+ startActivityForResult(intent0, 1);
+
+ return false;
+ }
+ }
+
+ if (networkFlag) {
+ registerReceiver(WifiReceiver, new IntentFilter(WIFI_STATUS_INTENT));
+ networkFlag = false;
+ }
+
+ return true;
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+
+ if ((data != null) && (requestCode == 1)) {
+ if (resultCode == BadMovedSDcard.SDCANCEL) {
+ Intent startMain = new Intent(UpdateActivity.this,
+ MainActivity.class);
+ startActivity(startMain);
+ this.finish();
+ } else if (resultCode == BadMovedSDcard.SDOK) {
+ enableBtn = false;
+
+ if (sdcardFlag && mPreference.getScriptAsk()) {
+ IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addDataScheme("file");
+ intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);
+ intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
+ intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
+ intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
+ registerReceiver(sdcardListener, intentFilter);
+
+ if (PrefUtils.DEBUG) {
+ Log.d(TAG, "register sdcard listener");
+ }
+
+ sdcardFlag = false;
+ }
+ }
+ }
+ }
+
+ private void setDownloadView(String desc) {
+ setContentView(R.layout.update_download);
+ mDescription = (TextView) findViewById(R.id.new_version_description);
+ mCombineBtn = (Button) findViewById(R.id.download_pause_and_update);
+ mCancel = (Button) findViewById(R.id.cancel);
+ mProgress = (ProgressBar) findViewById(R.id.download_progress);
+ mPercent = (TextView) findViewById(R.id.percent);
+ mCombineBtn.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Object tag = v.getTag();
+
+ if (Integer.valueOf(R.string.download_download).equals(tag) &&
+ !enableBtn) {
+ if (handleSDcardSituation()) {
+ mServiceBinder.startTask(UpdateService.TASK_ID_DOWNLOAD);
+ }
+ } else if (Integer.valueOf(R.string.download_pause)
+ .equals(tag) && !enableBtn) {
+ mServiceBinder.setTaskPause(UpdateService.TASK_ID_DOWNLOAD);
+ } else if (Integer.valueOf(R.string.download_resume)
+ .equals(tag) && !enableBtn) {
+ if (handleSDcardSituation()) {
+ mServiceBinder.setTaskResume(UpdateService.TASK_ID_DOWNLOAD);
+ }
+ } else if (Integer.valueOf(R.string.download_update)
+ .equals(tag) && !enableBtn) {
+ int UpdateMode = OtaUpgradeUtils.UPDATE_OTA;
+
+ if (mPreference.getScriptAsk()) {
+ if (FileSelector.isICSupdate()) {
+ UpdateMode = OtaUpgradeUtils.UPDATE_REBOOT;
+ } else {
+ UpdateMode = OtaUpgradeUtils.UPDATE_UPDATE;
+ }
+ }
+
+ final Dialog dlg = new Dialog(UpdateActivity.this);
+ dlg.setTitle(R.string.confirm_update);
+
+ LayoutInflater inflater = LayoutInflater.from(UpdateActivity.this);
+ InstallPackage dlgView = (InstallPackage) inflater.inflate(R.layout.install_ota,
+ null, false);
+ dlgView.setPackagePath(mPreference.getUpdatePath());
+ dlgView.setParamter(UpdateMode);
+ dlg.setCancelable(false);
+ dlg.setContentView(dlgView);
+ dlg.findViewById(R.id.confirm_cancel).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dlg.dismiss();
+ }
+ });
+ dlg.show();
+ }
+ }
+ });
+
+ mDownSize = (int) mPreference.getFileSize();
+
+ mCancel.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ if (!mCombineBtn.getTag()
+ .equals(Integer.valueOf(
+ R.string.download_pause))) {
+ mServiceBinder.resetTask(UpdateService.TASK_ID_DOWNLOAD);
+
+ Intent startMain = new Intent(UpdateActivity.this,
+ MainActivity.class);
+ startActivity(startMain);
+ UpdateActivity.this.finish();
+ } else {
+ Toast.makeText(UpdateActivity.this,
+ R.string.stop_download_first, Toast.LENGTH_SHORT)
+ .show();
+ }
+ }
+ });
+ mDescription.setText(desc.replace("\\n", "\n"));
+ mQueryThread[1].start();
+ }
+
+ private class QueryDownload extends QueryThread {
+ long lastProgress = -1;
+
+ protected void loop() {
+ int status = mServiceBinder.getTaskRunnningStatus(UpdateService.TASK_ID_DOWNLOAD);
+
+ switch (status) {
+ case DownloadUpdateTask.RUNNING_STATUS_UNSTART:
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mPercent.setVisibility(View.GONE);
+ mCombineBtn.setText(R.string.download_download);
+ mCombineBtn.setTag(Integer.valueOf(
+ R.string.download_download));
+ }
+ });
+
+
+ break;
+
+ case DownloadUpdateTask.RUNNING_STATUS_RUNNING:
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCombineBtn.setText(R.string.download_pause);
+ mCombineBtn.setTag(Integer.valueOf(
+ R.string.download_pause));
+ }
+ });
+
+
+ long progress = mServiceBinder.getTaskProgress(UpdateService.TASK_ID_DOWNLOAD);
+
+ if (lastProgress < progress) {
+ lastProgress = progress;
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ if (PrefUtils.DEBUG) {
+ Log.d(TAG,
+ "progress fileSize:" + mDownSize +
+ " lastProgress:" + lastProgress);
+ }
+
+ if (mDownSize > 0) {
+ mProgress.setVisibility(View.VISIBLE);
+ mProgress.setMax((int) mDownSize);
+ mPercent.setVisibility(View.VISIBLE);
+
+ if (lastProgress < mDownSize) {
+ mPercent.setText(setStr(mDownSize,
+ lastProgress));
+ }
+
+ if (lastProgress == mDownSize) {
+ mPercent.setText(getString(
+ R.string.Download_succeed));
+ }
+ }
+
+ mProgress.setProgress((int) lastProgress);
+ }
+ });
+ }
+
+ break;
+
+ case DownloadUpdateTask.RUNNING_STATUS_PAUSE:
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCombineBtn.setText(R.string.download_resume);
+ mCombineBtn.setTag(Integer.valueOf(
+ R.string.download_resume));
+ }
+ });
+
+
+ break;
+
+ case DownloadUpdateTask.RUNNING_STATUS_FINISH:
+
+ int errorCode = mServiceBinder.getTaskErrorCode(UpdateService.TASK_ID_DOWNLOAD);
+
+ if (errorCode == DownloadUpdateTask.NO_ERROR) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mProgress.setProgress(mProgress.getMax());
+ mPercent.setVisibility(View.GONE);
+ mCombineBtn.setText(R.string.download_update);
+ mCombineBtn.setTag(Integer.valueOf(
+ R.string.download_update));
+ }
+ });
+ } else {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(UpdateActivity.this,
+ R.string.download_error, Toast.LENGTH_SHORT)
+ .show();
+ mServiceBinder.resetTask(UpdateService.TASK_ID_DOWNLOAD);
+ mPercent.setText(R.string.download_error);
+ }
+ });
+ }
+
+ stop();
+
+ break;
+ }
+ }
+ }
+
+ private class QueryCheck extends QueryThread {
+ protected void loop() {
+ int status = mServiceBinder.getTaskRunnningStatus(UpdateService.TASK_ID_CHECKING);
+
+ switch (status) {
+ case CheckUpdateTask.RUNNING_STATUS_UNSTART:
+ stop();
+
+ break;
+
+ case CheckUpdateTask.RUNNING_STATUS_RUNNING:
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCheckingStatus.setText(R.string.check_now);
+ }
+ });
+
+
+ break;
+
+ case CheckUpdateTask.RUNNING_STATUS_FINISH:
+
+ int errorCode = mServiceBinder.getTaskErrorCode(UpdateService.TASK_ID_CHECKING);
+ measureError(errorCode);
+
+ if ((mCheckBtn != null) && (mCheckBtn.VISIBLE == View.GONE)) {
+ mCheckBtn.setVisibility(View.VISIBLE);
+ }
+
+ break;
+ }
+ }
+
+ private void measureError(int errorCode) {
+ switch (errorCode) {
+ case CheckUpdateTask.ERROR_UNDISCOVERY_NEW_VERSION:
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCheckProgress.setVisibility(View.INVISIBLE);
+ mCheckingStatus.setText(R.string.check_failed);
+ }
+ });
+
+
+ break;
+
+ case CheckUpdateTask.ERROR_UNKNOWN:
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCheckProgress.setVisibility(View.INVISIBLE);
+ mCheckingStatus.setText(R.string.check_unknown);
+ }
+ });
+
+
+ break;
+
+ case CheckUpdateTask.NO_ERROR:
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ CheckUpdateResult result = (CheckUpdateResult) mServiceBinder.getTaskResult(UpdateService.TASK_ID_CHECKING);
+ mPreference.saveFileSize(result.getMemoryAsk());
+ mPreference.setScriptAsk(result.ismIsScriptAsk());
+ mPreference.setUpdatePath(result.getmUpdateFileName());
+
+ String desc = result.getmUpdateDescript();
+ mPreference.setDescrib(desc);
+ setDownloadView(desc);
+ }
+ });
+
+
+ stop();
+
+ break;
+
+ case CheckUpdateTask.ERROR_NETWORK_UNAVAIBLE:
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCheckingStatus.setText(R.string.net_error);
+ }
+ });
+
+
+ break;
+ }
+
+ mServiceBinder.resetTask(UpdateService.TASK_ID_CHECKING);
+ }
+ }
+
+ class QueryThread implements Runnable {
+ private boolean mStop = false;
+
+ public void start() {
+ mStop = false;
+ new Thread(this).start();
+ }
+
+ @Override
+ public void run() {
+ while (!mStop) {
+ try {
+ Thread.sleep(500);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ loop();
+ }
+ }
+
+ public void stop() {
+ mStop = true;
+ }
+
+ protected void loop() {
+ }
+ }
+}
diff --git a/src/com/amlapp/update/otaupgrade/UpdateService.java b/src/com/droidlogic/otaupgrade/UpdateService.java
index 2efb708..2460b96 100755
--- a/src/com/amlapp/update/otaupgrade/UpdateService.java
+++ b/src/com/droidlogic/otaupgrade/UpdateService.java
@@ -8,26 +8,30 @@
* conditions of the Non-Disclosure Agreement pursuant to which
* this source code was originally received.
*/
-package com.amlapp.update.otaupgrade;
-
-import java.util.Timer;
-import java.util.TimerTask;
-
-import com.amlogic.update.CheckUpdateTask;
-import com.amlogic.update.DownloadUpdateTask;
-import com.amlogic.update.Notifier;
-import com.amlogic.update.UpdateTasks;
+package com.droidlogic.otaupgrade;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
+
import android.content.Context;
import android.content.Intent;
+
import android.os.Binder;
import android.os.IBinder;
+
import android.util.Log;
+import com.amlogic.update.CheckUpdateTask;
+import com.amlogic.update.DownloadUpdateTask;
+import com.amlogic.update.Notifier;
+import com.amlogic.update.UpdateTasks;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+
/**
* @ClassName UpdateService
* @Description TODO
@@ -39,210 +43,265 @@ import android.util.Log;
public class UpdateService extends Service {
/*
* (non-Javadoc)
- *
+ *
* @see android.app.Service#onBind(android.content.Intent)
*/
- public static final String TAG = "otaupgrade";
+ public static final String TAG = "otaupgrade";
public static final String KEY_START_COMMAND = "start_command";
public static final String ACTION_CHECK = "com.android.update.check";
public static final String ACTION_DOWNLOAD = "com.android.update.download";
public static final String ACTION_AUTOCHECK = "com.android.update.action.autocheck";
public static final String ACTION_DOWNLOAD_OK = "com.android.update.DOWNLOAD_OK";
-
public static final String ACTION_DOWNLOAD_SUCCESS = "com.android.update.downloadsuccess";
public static final String ACTION_DOWNLOAD_FAILED = "com.android.update.downloadfailed";
public static final int CHECK_UPGRADE_OK = 103;
- public static final int TASK_ID_CHECKING = 101;
- public static final int TASK_ID_DOWNLOAD = 102;
+ public static final int TASK_ID_CHECKING = 101;
+ public static final int TASK_ID_DOWNLOAD = 102;
private Timer timer = null;
- private UpdateTasks mCheckingTask, mDownloadTask;
+ private UpdateTasks mCheckingTask;
+ private UpdateTasks mDownloadTask;
private Notifier notice = new DownloadNotify();
+ private Context mContext = null;
+ private TimerTask autoCheckTask = new TimerTask() {
+ public void run() {
+ if ((mDownloadTask.getRunningStatus() != UpdateTasks.RUNNING_STATUS_RUNNING) &&
+ (mCheckingTask.getRunningStatus() != UpdateTasks.RUNNING_STATUS_RUNNING)) {
+ mCheckingTask.start();
+ }
+ }
+ };
+
@Override
public IBinder onBind(Intent arg0) {
return new uiBinder();
}
+
public int onStartCommand(Intent intent, int paramInt1, int paramInt2) {
- if(intent == null)
+ if (intent == null) {
return 0;
+ }
+
String act = intent.getAction();
+
if (PrefUtils.DEBUG) {
Log.i(TAG, "get a start cmd : " + act);
- }
+ }
+
if (act.equals(ACTION_CHECK)) {
- if (PrefUtils.DEBUG) Log.v(TAG, "status=" + mCheckingTask.getRunningStatus());
+ if (PrefUtils.DEBUG) {
+ Log.v(TAG, "status=" + mCheckingTask.getRunningStatus());
+ }
+
if (mCheckingTask.getRunningStatus() != UpdateTasks.RUNNING_STATUS_RUNNING) {
mCheckingTask.start();
}
- }else if (act.equals(ACTION_DOWNLOAD)) {
- if (PrefUtils.DEBUG) Log.v(TAG, "status=" + mDownloadTask.getRunningStatus());
+ } else if (act.equals(ACTION_DOWNLOAD)) {
+ if (PrefUtils.DEBUG) {
+ Log.v(TAG, "status=" + mDownloadTask.getRunningStatus());
+ }
+
if (mDownloadTask.getRunningStatus() != UpdateTasks.RUNNING_STATUS_RUNNING) {
mDownloadTask.start();
}
- }else if (act.equals(ACTION_AUTOCHECK)) {
- if(timer == null) {
+ } else if (act.equals(ACTION_AUTOCHECK)) {
+ if (timer == null) {
timer = new Timer();
- timer.schedule(autoCheckTask,0,60000*30);//period=30min
+ timer.schedule(autoCheckTask, 0, 60000 * 30); //period=30min
}
}
+
return 0;
}
+
+ private void initInstance() {
+ if (mCheckingTask == null) {
+ mCheckingTask = new CheckUpdateTask(this);
+ }
+
+ if (mDownloadTask == null) {
+ mDownloadTask = new DownloadUpdateTask(this);
+ ((DownloadUpdateTask) mDownloadTask).setNotify(notice);
+ }
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ mContext = getBaseContext();
+ initInstance();
+ }
+
public class uiBinder extends Binder {
public boolean resetTask(int taskId) {
boolean b = false;
+
switch (taskId) {
- case TASK_ID_CHECKING:
- b = mCheckingTask.reset();
- break;
- case TASK_ID_DOWNLOAD:
- b = mDownloadTask.reset();
- break;
+ case TASK_ID_CHECKING:
+ b = mCheckingTask.reset();
+
+ break;
+
+ case TASK_ID_DOWNLOAD:
+ b = mDownloadTask.reset();
+
+ break;
}
+
return b;
}
-
+
public void setTaskPause(int taskId) {
switch (taskId) {
- case TASK_ID_CHECKING:
- mCheckingTask.pause();
- break;
- case TASK_ID_DOWNLOAD:
- mDownloadTask.pause();
- break;
+ case TASK_ID_CHECKING:
+ mCheckingTask.pause();
+
+ break;
+
+ case TASK_ID_DOWNLOAD:
+ mDownloadTask.pause();
+
+ break;
}
}
-
+
public void setTaskResume(int taskId) {
switch (taskId) {
- case TASK_ID_CHECKING:
- mCheckingTask.resume();
- break;
- case TASK_ID_DOWNLOAD:
- mDownloadTask.resume();
- break;
+ case TASK_ID_CHECKING:
+ mCheckingTask.resume();
+
+ break;
+
+ case TASK_ID_DOWNLOAD:
+ mDownloadTask.resume();
+
+ break;
}
}
-
+
public int getTaskRunnningStatus(int taskId) {
int status = -1;
+
switch (taskId) {
- case TASK_ID_CHECKING:
- status = mCheckingTask.getRunningStatus();
- break;
- case TASK_ID_DOWNLOAD:
- status = mDownloadTask.getRunningStatus();
- break;
+ case TASK_ID_CHECKING:
+ status = mCheckingTask.getRunningStatus();
+
+ break;
+
+ case TASK_ID_DOWNLOAD:
+ status = mDownloadTask.getRunningStatus();
+
+ break;
}
+
return status;
}
-
+
public Object getTaskResult(int taskId) {
Object result = null;
+
switch (taskId) {
- case TASK_ID_CHECKING:
- result = mCheckingTask.getResult();
- break;
- case TASK_ID_DOWNLOAD:
- result = mDownloadTask.getResult();
- break;
+ case TASK_ID_CHECKING:
+ result = mCheckingTask.getResult();
+
+ break;
+
+ case TASK_ID_DOWNLOAD:
+ result = mDownloadTask.getResult();
+
+ break;
}
+
return result;
}
-
+
public int getTaskErrorCode(int taskId) {
int errorCode = -1;
+
switch (taskId) {
- case TASK_ID_CHECKING:
- errorCode = mCheckingTask.getErrorCode();
- break;
- case TASK_ID_DOWNLOAD:
- errorCode = mDownloadTask.getErrorCode();
- break;
+ case TASK_ID_CHECKING:
+ errorCode = mCheckingTask.getErrorCode();
+
+ break;
+
+ case TASK_ID_DOWNLOAD:
+ errorCode = mDownloadTask.getErrorCode();
+
+ break;
}
+
return errorCode;
}
-
+
public int getTaskProgress(int taskId) {
int progress = -1;
+
switch (taskId) {
- case TASK_ID_CHECKING:
- progress = mCheckingTask.getProgress();
- break;
- case TASK_ID_DOWNLOAD:
- progress = mDownloadTask.getProgress();
- break;
+ case TASK_ID_CHECKING:
+ progress = mCheckingTask.getProgress();
+
+ break;
+
+ case TASK_ID_DOWNLOAD:
+ progress = mDownloadTask.getProgress();
+
+ break;
}
+
return progress;
}
- public void startTask(int taskId){
+
+ public void startTask(int taskId) {
switch (taskId) {
- case TASK_ID_CHECKING:
- Log.v(TAG, "status=" + mDownloadTask.getRunningStatus());
- if (mDownloadTask.getRunningStatus()!=UpdateTasks.RUNNING_STATUS_UNSTART){
- mDownloadTask.reset();
- }
- if (mCheckingTask.getRunningStatus() == UpdateTasks.RUNNING_STATUS_UNSTART) {
- mCheckingTask.start();
- }
- break;
- case TASK_ID_DOWNLOAD:
- if (mDownloadTask.getRunningStatus() != UpdateTasks.RUNNING_STATUS_RUNNING) {
- mDownloadTask.start();
- }
- break;
+ case TASK_ID_CHECKING:
+ Log.v(TAG, "status=" + mDownloadTask.getRunningStatus());
+
+ if (mDownloadTask.getRunningStatus() != UpdateTasks.RUNNING_STATUS_UNSTART) {
+ mDownloadTask.reset();
+ }
+
+ if (mCheckingTask.getRunningStatus() == UpdateTasks.RUNNING_STATUS_UNSTART) {
+ mCheckingTask.start();
+ }
+
+ break;
+
+ case TASK_ID_DOWNLOAD:
+
+ if (mDownloadTask.getRunningStatus() != UpdateTasks.RUNNING_STATUS_RUNNING) {
+ mDownloadTask.start();
+ }
+
+ break;
}
}
- };
-
- private void initInstance() {
- if (mCheckingTask == null) {
- mCheckingTask = new CheckUpdateTask(this);
- }
- if (mDownloadTask == null) {
- mDownloadTask = new DownloadUpdateTask(this);
- ((DownloadUpdateTask) mDownloadTask).setNotify(notice);
- }
- }
-
- private Context mContext = null;
-
- @Override
- public void onCreate() {
- super.onCreate();
- mContext = getBaseContext();
- initInstance();
}
- public class DownloadNotify implements Notifier{
+ public class DownloadNotify implements Notifier {
/* (non-Javadoc)
* @see com.amlogic.update.Notifier#Failednotify()
*/
@Override
- public void Failednotify() {}
+ public void Failednotify() {
+ }
/* (non-Javadoc)
* @see com.amlogic.update.Notifier#Successnotify()
*/
@Override
public void Successnotify() {
- NotificationManager notificationManager = (NotificationManager)mContext.getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
Intent intent = new Intent(mContext, UpdateActivity.class);
intent.setAction(ACTION_DOWNLOAD_SUCCESS);
- PendingIntent contentItent = PendingIntent.getActivity(mContext, 0, intent, 0);
+
+ PendingIntent contentItent = PendingIntent.getActivity(mContext, 0,
+ intent, 0);
Notification notification = new Notification();
notification.icon = R.drawable.ic_icon;
notification.tickerText = "Downlaod Success";
- notification.defaults = Notification.DEFAULT_SOUND;
- notification.setLatestEventInfo(mContext, "Upgrade", "downlaod notify", contentItent);
+ notification.defaults = Notification.DEFAULT_SOUND;
+ notification.setLatestEventInfo(mContext, "Upgrade",
+ "downlaod notify", contentItent);
notificationManager.notify(0, notification);
}
-
}
-
- private TimerTask autoCheckTask = new TimerTask() {
- public void run() {
- if(mDownloadTask.getRunningStatus() != UpdateTasks.RUNNING_STATUS_RUNNING && mCheckingTask.getRunningStatus() != UpdateTasks.RUNNING_STATUS_RUNNING) {
- mCheckingTask.start();
- }
- }
- };
}