From 23f07cec5cb6f0c7b88fab7913e5dcda21000737 Mon Sep 17 00:00:00 2001 From: David Vavra Date: Tue, 30 Dec 2014 18:39:14 +0100 Subject: [PATCH] preparing release 2.0.0 and rebranding from invite to avast --- build.gradle | 12 +- demo/build.gradle | 4 +- demo/src/main/AndroidManifest.xml | 2 +- .../avast}/dialogs/DemoActivity.java | 10 +- .../dialogs/JayneHatDialogFragment.java | 10 +- .../main/res/drawable-hdpi/ic_launcher.png | Bin 9397 -> 2607 bytes .../main/res/drawable-ldpi/ic_launcher.png | Bin 2729 -> 0 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 5237 -> 1570 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 14383 -> 3540 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 6149 bytes .../main/res/drawable-xxxhdpi/ic_launcher.png | Bin 0 -> 8569 bytes demo/src/main/res/values/styles.xml | 3 +- gradle.properties | 14 - gradlew | 0 library/android-release-aar.gradle | 53 ++ library/build.gradle | 11 +- library/src/main/AndroidManifest.xml | 2 +- .../dialogs/core}/BaseDialogBuilder.java | 4 +- .../dialogs/core}/BaseDialogFragment.java | 4 +- .../fragment}/DatePickerDialogFragment.java | 466 +++++++++--------- .../dialogs/fragment}/ListDialogFragment.java | 9 +- .../fragment}/ProgressDialogFragment.java | 9 +- .../fragment}/SimpleDialogFragment.java | 9 +- .../fragment}/TimePickerDialogFragment.java | 95 ++-- .../iface}/IDateDialogCancelListener.java | 2 +- .../dialogs/iface}/IDateDialogListener.java | 2 +- .../dialogs/iface}/IListDialogListener.java | 2 +- .../iface}/ISimpleDialogCancelListener.java | 2 +- .../dialogs/iface}/ISimpleDialogListener.java | 2 +- maven_push.gradle | 114 ----- 30 files changed, 398 insertions(+), 443 deletions(-) rename demo/src/main/java/{eu/inmite/demo => com/avast}/dialogs/DemoActivity.java (96%) rename demo/src/main/java/{eu/inmite/demo => com/avast}/dialogs/JayneHatDialogFragment.java (81%) mode change 100644 => 100755 demo/src/main/res/drawable-hdpi/ic_launcher.png delete mode 100644 demo/src/main/res/drawable-ldpi/ic_launcher.png mode change 100644 => 100755 demo/src/main/res/drawable-mdpi/ic_launcher.png mode change 100644 => 100755 demo/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100755 demo/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100755 demo/src/main/res/drawable-xxxhdpi/ic_launcher.png delete mode 100644 gradle.properties mode change 100644 => 100755 gradlew create mode 100644 library/android-release-aar.gradle rename library/src/main/java/{eu/inmite/android/lib/dialogs => com/avast/android/dialogs/core}/BaseDialogBuilder.java (96%) rename library/src/main/java/{eu/inmite/android/lib/dialogs => com/avast/android/dialogs/core}/BaseDialogFragment.java (99%) rename library/src/main/java/{eu/inmite/android/lib/dialogs => com/avast/android/dialogs/fragment}/DatePickerDialogFragment.java (93%) rename library/src/main/java/{eu/inmite/android/lib/dialogs => com/avast/android/dialogs/fragment}/ListDialogFragment.java (93%) rename library/src/main/java/{eu/inmite/android/lib/dialogs => com/avast/android/dialogs/fragment}/ProgressDialogFragment.java (90%) rename library/src/main/java/{eu/inmite/android/lib/dialogs => com/avast/android/dialogs/fragment}/SimpleDialogFragment.java (94%) rename library/src/main/java/{eu/inmite/android/lib/dialogs => com/avast/android/dialogs/fragment}/TimePickerDialogFragment.java (82%) rename library/src/main/java/{eu/inmite/android/lib/dialogs => com/avast/android/dialogs/iface}/IDateDialogCancelListener.java (94%) rename library/src/main/java/{eu/inmite/android/lib/dialogs => com/avast/android/dialogs/iface}/IDateDialogListener.java (95%) rename library/src/main/java/{eu/inmite/android/lib/dialogs => com/avast/android/dialogs/iface}/IListDialogListener.java (81%) rename library/src/main/java/{eu/inmite/android/lib/dialogs => com/avast/android/dialogs/iface}/ISimpleDialogCancelListener.java (94%) rename library/src/main/java/{eu/inmite/android/lib/dialogs => com/avast/android/dialogs/iface}/ISimpleDialogListener.java (95%) delete mode 100644 maven_push.gradle diff --git a/build.gradle b/build.gradle index 15a299f..880e076 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - mavenCentral() + jcenter() } dependencies { @@ -9,12 +9,14 @@ buildscript { } allprojects { - version = VERSION_NAME - group = GROUP - repositories { - mavenCentral() + jcenter() } } +ext { + VERSION_NAME = "2.0.0" + VERSION_CODE = 5 +} + apply plugin: 'android-reporting' \ No newline at end of file diff --git a/demo/build.gradle b/demo/build.gradle index 89f7552..f1a1c78 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -8,10 +8,10 @@ android { minSdkVersion 8 targetSdkVersion 21 versionName project.VERSION_NAME - versionCode Integer.parseInt(project.VERSION_CODE) + versionCode project.VERSION_CODE } } dependencies { - compile project(':library') + compile "com.avast:android-styled-dialogs:2.0.0" } \ No newline at end of file diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml index 6629ed0..c2282bd 100644 --- a/demo/src/main/AndroidManifest.xml +++ b/demo/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.avast.dialogs"> Q;v$gNgim|~ntuRt(2!_=^uAfRPh$hG zF1+qqKAW#$1wpSf%jT9;bt%X~T3X}6r>?FJ<(1Vanzb&QIQ-89$%;ZcKWtIWa)8&@0E%T{!+$m?#Q@4^3AFA9WV8ZmE&}JbadTWv%FCn{K-qM)y`KQ?dKAbhi~w@^ zAW-%He(%Ha?g|0zL4S-tr1;#ERI31lAUR4P! z7zA89>D-nrZVy1|cQE9-=4yhj8jboh(Cw41nuZ$f{(lj$<(sbB2MbW=DZt%NGB)o8 zT-?Knz5<-$FYiT~=KzmTEA;GEt{w;G_h<4z1MVQf0o46dv=M(`oUZI8EVWE;Rz3n8 zf75B6v9Gtg516nr@%~H30ToLf`vnKk==nh5hwD%1=wE=<1TR@B{wgr+XNmV-Ih_XP zUyl8P1Al1ZYM@|b{Ry3X3s`0Yoa5Blp!uEDp5;K^FgLAlZnI=8HE5Y*zu*8G`V-op zuh*Z@=@r1@(T)?X*Fal!@XJ8orxWj6&HUj_dOmry_l*t8Yz++mEzsp5PRT+T)G_~C zcn@>stxj`|TyIqj455K9q|r}Cb`jXE-*MG5IDZY&bed%XT|Wwxyl!j{Q?8z1@J1U| zL&_zS)Jrzmg$!LMk$L?RpzC_n)&MPga}3%Kr4h-qTO2e}pPc%S{h zB-kX(e3alcXcTjU2i@(Awo}S7oJHF2?`;3q91f@Yk=%M;r7(5YW zTfSv1MB7P(S9%s{P^JM($t^2xk)$!zP`uQSZd5JN%Cf{qd*~%Mf5S(3g3_S-SaK=)L}cO{9tZaS%6P9WG;xjb+Kww0l{zEr#ZIys zv23!@R<$nyq{P+~#Zn3qeUxA{X!vh{o}Y_M+qzZcy{0o$mq$9!E%VL;v_CY;rlb>~ znKl3^9GFU8TL#+{*&o>jBE`YS@_Ug2=3|Ujg1CO?qjc@tL;SXcG6) z`BwSA$yd)Z01_9pn&6l`vR$d?5M!g#&-;fCNAeFKF^0KCM!id}IDdx~&O+J?m4aK` zRe#bl(lXYjbecf7&Cf)LNt8ASkjhemM>0(*$q@#din{a3K#pVJ7+vbQw4cB;&r7ln zZ-=aRfMhHOaZ7Y%`9}6cS$GvW-z+kN&FH#giGchsnL!y|Q{<7f)ikCOSJl*`MXAa- zmTTJGZ$I)HYTOYP5`TRXZvY99(X=Pg*}2=v$r!Ky0&vt4M8@kYExnhafYl>Lw-+@l zEpkD~yP2jpfQJ5hjOuPq+bubW^mH6q}?c1G3dt4$U5HYRERA7EKsdOVcsNp zfK*?f!iZPy)(^S3n@3dsVGw4Q8Q&-k(Uxn)5^)i?Zztw%%75_P%GvddiC7Xky~=G5 z+jhwVBw(h|C|XO&@uqV55cyzc<`QW^R-9wA@>sHEAwWDFJ(hN!TEvP8i<9D_FKlN$ zo;h9uk~~1N2UGc_+3n+hoovDCkCU!g5osqQJn#j2I7ZaXG7^}s$EMQCN@~=0ez%-} z3rQXz4L*`tcYk+!jab5i*eGQVc9`UOJ)vfZYyQA@nUCG;VyZqik!C4xQ{rp#Q89-1 z22dLo;KovgV`-5hU%6eA*07s|wo!MIWSyrP{7$^B=Oad;p$;+yQeGIR;^7S-eM$QV z3{4U#W{LngO05y~kccNy?9}pZV=U1h*BL9-^4HE`G=H8?Ela4n;Ra1=xDHb7rZ>JN z8e|Tt#pIV55wik7?QfIVax+i2ZNwd^vN3=*#L8{E?Qhpk^PSg|^F3udigyk2GPz{? z7L%hMLUPP610RRWZkPbc^@mDGUrQF^oBKtx3zn-56dLM^yGyvh|amj9vc ztF2#&ZGX4`2^1Zk(m5foq7-Kyi;-32prWK<1ElDGXGs3=sd|oTzc(NQWGGTi+9tk2_OfQngH?( zpnop(ppER_CJ?1w&eEFWjRn>{i;9ln1gh{~yUAF@^DFg2Dg*002ov JPDHLkV1nEN@ALow literal 9397 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 diff --git a/demo/src/main/res/drawable-mdpi/ic_launcher.png b/demo/src/main/res/drawable-mdpi/ic_launcher.png old mode 100644 new mode 100755 index 359047dfa4ed206e41e2354f9c6b307e713efe32..949128046b48a4ac6ef752180aaba07bc4480f5e GIT binary patch delta 1554 zcmV+t2JQLvD54CIBYy?yNklqi38I!aL=i;9M0-TMhzP=uTGqQup zoWH~#S8pTgR-n@1{)7G_@NPuX_dneML=!+oCjro%&Y%AuK)V$zIuRIf8xR%;RG$Qn zeG63V_j=n#3SH|RVCW@23XFaU2##oWxb`BD{~}QE1{%oj!JGl$x&^?Lm6Q-qibuyc z-w7P~x`P39;eReBJrDFq2Ff-9`(Fp@YOJv;V;#_MM%!agWdc9n)WHD8ybO$buK6L` z?gtKi>>EH(7;x(`plh$T$6h)OtYlo&*R~qtKMGC$3W&eG`2hvof!rs30~m4-FyRyL zp%eUcL0+kg${oGpxl4iDnkX~6jR zfXJa-EoSyo243}Xpi566gvnAdQGE)y!kiO566imls?*Io$eMHH|5Ttn_a6YDM%{U%=r12spcopB*gG zE_t2fUw;5`bAhyP=xA4Y4VsuAmd`_5>hIvwPU9@0UJrHnhM`Q z8%OvLKv*m=i!0Wxzv23>$AO~vJt_x!UJp$E5{Me!?5K8V-9)qMHq3tjl3xIlnf7IQ z{GLxLNs;0g@k51D5dX1_3GOxE@>!regLwKD27kE97}|wGVATk-b2iLB08|3Z-ean^(=X(B8m8mIWtP16lJJ)C7LZZ;b$yZ3ozN-(Ne>=SK3G z3L@L{EU@ntV9;I6%%1^;Zv#1xnQNlZBC65vKLHz9ys7@5N7f%=r2es0&D`Qd7|3)3H;L0K^zcd z{bMRSRCZFjmdd0QHH`AO(**AXX6fC}aK#S-8Eb*q>1Li} z^oLPKjck~`9gxOPWaZdbwYit$7N!0y?urtUYMqE7RHsACs@2V|NqwY3u2w+R%71;z zhWmD6Knjz-hKJy{C4sATWnnjxP9`$Z1?V`(#RPEcy`~7XXx4WilB;;L zq|(dE*GcPL>K*-FMwvXzQbNv&W-2#A`?T$znwBD}SMf5^@PMI~7qbq)RqNevsNj_H zTr8#jj|aw5Mx&Kg+hHmI)yRmB#eW1;)~IrBx3msGoLA7fQ%H6C`bjOT#*k=I;Y(+8a~j-XeG7VrfxUfLQ*`8jY*821h^oYkvU%b_?Fa*iW* zKu!!^%60oi+VOj2G&H&KlR1fyj!`R6w$>}sthq`51rZ!Tq z?ZKP{z*h|X=K$0$M@68sUlXH_9cb`kcz#E=Bm>sZ_^x96{WWD-re^?p+s1S9hL^}r zwn{pu2ygYGn literal 5237 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 diff --git a/demo/src/main/res/drawable-xhdpi/ic_launcher.png b/demo/src/main/res/drawable-xhdpi/ic_launcher.png old mode 100644 new mode 100755 index 71c6d760f05183ef8a47c614d8d13380c8528499..8b6882cdd453402ada8384288cdff847c0ab5ad5 GIT binary patch delta 3539 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 diff --git a/demo/src/main/res/drawable-xxhdpi/ic_launcher.png b/demo/src/main/res/drawable-xxhdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..e141f4de6159079b482a7e7dfb5bcffbc82b988b GIT binary patch literal 6149 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 literal 0 HcmV?d00001 diff --git a/demo/src/main/res/drawable-xxxhdpi/ic_launcher.png b/demo/src/main/res/drawable-xxxhdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..c466224ca786548c05f889031e221254f535e549 GIT binary patch literal 8569 zcmZX4WmMG98}D~_VabIhl!iqFq)WPy21yCYMG&OBq?T@_yAcqSkPeZQ5G0jG7U}L3 z*vs$y&%JN%i<$Y%oSA3NJauNCXQH(&}C0RRM` zA}{;G$866O&quG{lRj*$n+5(#$-2J}34uCv4nW&9T6^P@o1bSrt<3$km{h7V*QY_& zi0Q?>AlFj~%)C zb|E>|=54*7d37+HBf23CNr`$>z+jJ*kq-3o^%zHy0t1N6X=*rdy0f1iNdXK{{(n7O zFbZ*TZeKFgqf`{k5vY2`ANA9IsN?n*$3+yhdkTezI(F`V>j7wqp|1{(F?HZvx9&hB zo90t3v6&%EB{o)5u>GBx_AkMXE52YYBHS&~aTycp8tTIvWAmdPufrws`L#qMU>M{~ zbT@IJgBVbU8%(Q7>W41TUY0DeApAiE9xlY3->z_~?vB5@lPT$ay0%EIXnb2hjfOIA zagNJ`Q8$MaF8&U9nJYE_i70nl-#cjicj3oppov`&h*tt{Jhicxi4zh?*s2oc2svM?8D^H}Ata(7kF9DTbhiWiWq z$xuyaJhu7hF98t%aa`a|e5^UOf{C?J3@mWLG@c5b z0LUm>7(GRTP|p10_)cuhv)reP_=>pFsk08qrL|W z=oY5NGS>mZJvWzGAk}G%paQV_02t_0i-mFmyp^~>NP#~C+8&BN?#}_)@j>eGfQgCQ z2_gbOJyO4w^Bfdx4S-N_4KM6ufP^1TiHhG#Kp+{DthBc}<@bQSO@aDBIur|VwKdvS zDY*ybyAN$&nB41IZ;5R=YwA7tP;1OT^Ra?N6_y=bcgJ^lNBv4dhG%$dv47cl;oaz$ z7g8wzB6Tq-SP|BZU}!ffk6>1X<-aDp>pEomL>*njN`L)~yC=7FgOHYh_fp*4V0)KF zHP?qK-&57Jdr21oMv;5Sm1cD|`K`32wC?w(P-8T{?or8Z%5q!ki!>^hLogAe9RRMg zU$f|q8aA-J^R$C`Do$s+&s^7Tou{+I+oxt@x4q!S{1SV^iJBoj9iF~Estp?erA${l zBJO)4* z-CEb3Mue*_-n}1pe7jihMpD+l!=SZ&7}RD;b?FU4nLjwLcYpG?EYiegruQFQ>g~}J z4GGsdU$(rhdFM&fgSN9#UdT<+&g(?8&S$l0@Bco&a`^BY7r6Q84IU1e41ziVYOXiZ zcsK79LMG{R?DFQ`IQ*T%P)!lio?AUv_Bb)4Rsa1?t#Pd#&F+7vlp=Pg^I;DT_-G%< zI1rWvD3`b7f6va}r4o{prpR;qb{DCd8|llV#!p@^a#oT0#<;AedB3#G?kK=?aRZ-F^c zw$F;+VpTon)<06m{!61&OIHw;>%!m}rk0gtOov9vao;m%7Nj;t+--WD@UKCt8V)qG zy|W%kUDCB%^>5=!R8QL!$nbK~Vc7;&kR z)Cr9f<;d%5y%d^ObL82Cw0Q}nQQ+`)POvw1Uaa?xe)!}`w-o#Ucd7|j!5R==Ba%s? z;f9s=q-+_y0k6@c5otQMDR@zP?R(X*rgu*Vo#YD~`)1X`?j@tWZ-s^8xfO4R@U|Tr z(f4j0CW|$E_xsuWK$R=vKyxwvXzG*hJoKxFQQ-xy0#H!AV5b$pDf>ak619~vu8|$2 zSJrr0wOqhj6Uuo|WXH9rVs>efQ`#i2_pHzagsOUr!$g_0KE~(0`N#FllS1>!+0$

nAc^NrO<<{@5J*(9r4p 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 OKt(}AzDf=m@_zt_zVfjE literal 0 HcmV?d00001 diff --git a/demo/src/main/res/values/styles.xml b/demo/src/main/res/values/styles.xml index c9a2dbd..6aababa 100644 --- a/demo/src/main/res/values/styles.xml +++ b/demo/src/main/res/values/styles.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/gradle.properties b/gradle.properties deleted file mode 100644 index a3a2be7..0000000 --- a/gradle.properties +++ /dev/null @@ -1,14 +0,0 @@ -VERSION_NAME=1.2.0 -VERSION_CODE=4 -GROUP=eu.inmite.android.lib - -POM_DESCRIPTION=Android library for creating styleable dialogs easily -POM_URL=https://github.com/inmite/android-styled-dialogs -POM_SCM_URL=https://github.com/inmite/android-styled-dialogs -POM_SCM_CONNECTION=scm:git@github.com:inmite/android-styled-dialogs.git -POM_SCM_DEV_CONNECTION=scm:git@github.com:inmite/android-styled-dialogs.git -POM_LICENCE_NAME=The Apache Software License, Version 2.0 -POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt -POM_LICENCE_DIST=repo -POM_DEVELOPER_ID=david@inmite.eu -POM_DEVELOPER_NAME=David Vavra \ No newline at end of file diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/library/android-release-aar.gradle b/library/android-release-aar.gradle new file mode 100644 index 0000000..93cb76d --- /dev/null +++ b/library/android-release-aar.gradle @@ -0,0 +1,53 @@ +// ./gradlew clean build generateRelease +apply plugin: 'maven' + +def groupId = project.PUBLISH_GROUP_ID +def artifactId = project.PUBLISH_ARTIFACT_ID +def version = project.PUBLISH_VERSION + +def localReleaseDest = "${buildDir}/release/${version}" + +task androidJavadocs(type: Javadoc) { + source = android.sourceSets.main.java.srcDirs + classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) +} + +task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { + classifier = 'javadoc' + from androidJavadocs.destinationDir +} + +task androidSourcesJar(type: Jar) { + classifier = 'sources' + from android.sourceSets.main.java.srcDirs +} + +uploadArchives { + repositories.mavenDeployer { + pom.groupId = groupId + pom.artifactId = artifactId + pom.version = version + // Add other pom properties here if you want (developer details / licenses) + repository(url: "file://${localReleaseDest}") + } +} + +task zipRelease(type: Zip) { + from localReleaseDest + destinationDir buildDir + archiveName "release-${version}.zip" +} + +task generateRelease << { + println "Release ${version} can be found at ${localReleaseDest}/" + println "Release ${version} zipped can be found ${buildDir}/release-${version}.zip" +} + +generateRelease.dependsOn(uploadArchives) +generateRelease.dependsOn(zipRelease) + + +artifacts { + archives androidSourcesJar + //archives androidJavadocs doesn't work for some reason +} diff --git a/library/build.gradle b/library/build.gradle index 5525db9..2a07efa 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -1,7 +1,9 @@ apply plugin: 'com.android.library' -repositories { - mavenCentral() +ext { + PUBLISH_GROUP_ID = 'com.avast' + PUBLISH_ARTIFACT_ID = 'android-styled-dialogs' + PUBLISH_VERSION = '2.0.0' } android { @@ -12,7 +14,7 @@ android { minSdkVersion 8 targetSdkVersion 21 versionName project.VERSION_NAME - versionCode Integer.parseInt(project.VERSION_CODE) + versionCode project.VERSION_CODE } } @@ -20,5 +22,4 @@ dependencies { compile 'com.android.support:appcompat-v7:21.0.3' } -// Used to push in maven -apply from: '../maven_push.gradle' \ No newline at end of file +apply from: 'android-release-aar.gradle' \ No newline at end of file diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml index e3f59b5..cc9ee9d 100644 --- a/library/src/main/AndroidManifest.xml +++ b/library/src/main/AndroidManifest.xml @@ -1,2 +1,2 @@ - + diff --git a/library/src/main/java/eu/inmite/android/lib/dialogs/BaseDialogBuilder.java b/library/src/main/java/com/avast/android/dialogs/core/BaseDialogBuilder.java similarity index 96% rename from library/src/main/java/eu/inmite/android/lib/dialogs/BaseDialogBuilder.java rename to library/src/main/java/com/avast/android/dialogs/core/BaseDialogBuilder.java index 38f0c9c..28c69c5 100644 --- a/library/src/main/java/eu/inmite/android/lib/dialogs/BaseDialogBuilder.java +++ b/library/src/main/java/com/avast/android/dialogs/core/BaseDialogBuilder.java @@ -1,4 +1,4 @@ -package eu.inmite.android.lib.dialogs; +package com.avast.android.dialogs.core; import android.content.Context; import android.os.Bundle; @@ -11,7 +11,7 @@ * * @author Tomas Vondracek */ -abstract class BaseDialogBuilder> { +public abstract class BaseDialogBuilder> { public final static String ARG_REQUEST_CODE = "request_code"; public final static String ARG_CANCELABLE_ON_TOUCH_OUTSIDE = "cancelable_oto"; diff --git a/library/src/main/java/eu/inmite/android/lib/dialogs/BaseDialogFragment.java b/library/src/main/java/com/avast/android/dialogs/core/BaseDialogFragment.java similarity index 99% rename from library/src/main/java/eu/inmite/android/lib/dialogs/BaseDialogFragment.java rename to library/src/main/java/com/avast/android/dialogs/core/BaseDialogFragment.java index f8503e6..95a41a2 100644 --- a/library/src/main/java/eu/inmite/android/lib/dialogs/BaseDialogFragment.java +++ b/library/src/main/java/com/avast/android/dialogs/core/BaseDialogFragment.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package eu.inmite.android.lib.dialogs; +package com.avast.android.dialogs.core; import android.app.Dialog; import android.content.Context; @@ -30,6 +30,8 @@ import android.view.ViewGroup; import android.widget.*; +import com.avast.android.dialogs.R; + /** * Base dialog fragment for all your dialogs, stylable and same design on Android 2.2+. * diff --git a/library/src/main/java/eu/inmite/android/lib/dialogs/DatePickerDialogFragment.java b/library/src/main/java/com/avast/android/dialogs/fragment/DatePickerDialogFragment.java similarity index 93% rename from library/src/main/java/eu/inmite/android/lib/dialogs/DatePickerDialogFragment.java rename to library/src/main/java/com/avast/android/dialogs/fragment/DatePickerDialogFragment.java index 292666f..72a4913 100644 --- a/library/src/main/java/eu/inmite/android/lib/dialogs/DatePickerDialogFragment.java +++ b/library/src/main/java/com/avast/android/dialogs/fragment/DatePickerDialogFragment.java @@ -1,230 +1,236 @@ -package eu.inmite.android.lib.dialogs; - -import java.util.Calendar; -import java.util.Date; -import java.util.TimeZone; - -import android.content.Context; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.DatePicker; - -/** - * Dialog with a date picker. Implement {@link eu.inmite.android.lib.dialogs.IDateDialogListener} or {@link eu.inmite.android.lib.dialogs.IDateDialogCancelListener} to handle events. - */ -public class DatePickerDialogFragment extends BaseDialogFragment { - - protected static final String ARG_ZONE = "zone"; - protected static final String ARG_TITLE = "title"; - protected static final String ARG_POSITIVE_BUTTON = "positive_button"; - protected static final String ARG_NEGATIVE_BUTTON = "negative_button"; - protected static final String ARG_DATE = "date"; - protected static final String ARG_24H = "24h"; - - DatePicker mDatePicker; - Calendar mCalendar; - - private int mRequestCode; - - - public static SimpleDialogBuilder createBuilder(Context context, FragmentManager fragmentManager) { - return new SimpleDialogBuilder(context, fragmentManager, DatePickerDialogFragment.class); - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - final Fragment targetFragment = getTargetFragment(); - if (targetFragment != null) { - mRequestCode = getTargetRequestCode(); - } else { - Bundle args = getArguments(); - if (args != null) { - mRequestCode = args.getInt(BaseDialogBuilder.ARG_REQUEST_CODE, 0); - } - } - } - - protected IDateDialogListener getDialogListener() { - final Fragment targetFragment = getTargetFragment(); - if (targetFragment != null) { - if (targetFragment instanceof IDateDialogListener) { - return (IDateDialogListener) targetFragment; - } - } else { - if (getActivity() instanceof IDateDialogListener) { - return (IDateDialogListener) getActivity(); - } - } - return null; - } - - protected IDateDialogCancelListener getCancelListener() { - final Fragment targetFragment = getTargetFragment(); - if (targetFragment != null) { - if (targetFragment instanceof IDateDialogCancelListener) { - return (IDateDialogCancelListener) targetFragment; - } - } else { - if (getActivity() instanceof IDateDialogCancelListener) { - return (IDateDialogCancelListener) getActivity(); - } - } - return null; - } - - @Override - protected BaseDialogFragment.Builder build(BaseDialogFragment.Builder builder) { - final String title = getTitle(); - if (!TextUtils.isEmpty(title)) { - builder.setTitle(title); - } - - final String positiveButtonText = getPositiveButtonText(); - if (!TextUtils.isEmpty(positiveButtonText)) { - builder.setPositiveButton(positiveButtonText, new View.OnClickListener() { - - @Override - public void onClick(View view) { - IDateDialogListener listener = getDialogListener(); - if (listener != null) { - listener.onPositiveButtonClicked(mRequestCode, getDate()); - } - dismiss(); - } - }); - } - - final String negativeButtonText = getNegativeButtonText(); - if (!TextUtils.isEmpty(negativeButtonText)) { - builder.setNegativeButton(negativeButtonText, new View.OnClickListener() { - - @Override - public void onClick(View view) { - IDateDialogListener listener = getDialogListener(); - if (listener != null) { - listener.onNegativeButtonClicked(mRequestCode, getDate()); - } - dismiss(); - } - }); - } - mDatePicker = (DatePicker) LayoutInflater.from(getActivity()).inflate(R.layout.sdl_datepicker, null); - builder.setView(mDatePicker); - - TimeZone zone = TimeZone.getTimeZone(getArguments().getString(ARG_ZONE)); - mCalendar = Calendar.getInstance(zone); - mCalendar.setTimeInMillis(getArguments().getLong(ARG_DATE, System.currentTimeMillis())); - mDatePicker.updateDate(mCalendar.get(Calendar.YEAR) - , mCalendar.get(Calendar.MONTH) - , mCalendar.get(Calendar.DAY_OF_MONTH)); - return builder; - } - - protected String getTitle() { - return getArguments().getString(ARG_TITLE); - } - - protected String getPositiveButtonText() { - return getArguments().getString(ARG_POSITIVE_BUTTON); - } - - protected String getNegativeButtonText() { - return getArguments().getString(ARG_NEGATIVE_BUTTON); - } - - public Date getDate() { - mCalendar.set(Calendar.YEAR, mDatePicker.getYear()); - mCalendar.set(Calendar.MONTH, mDatePicker.getMonth()); - mCalendar.set(Calendar.DAY_OF_MONTH, mDatePicker.getDayOfMonth()); - return mCalendar.getTime(); - } - - public static class SimpleDialogBuilder extends BaseDialogBuilder { - Date mDate = new Date(); - String mTimeZone = null; - - private String mTitle; - private String mPositiveButtonText; - private String mNegativeButtonText; - - private boolean mShowDefaultButton = true; - private boolean m24h; - - protected SimpleDialogBuilder(Context context, FragmentManager fragmentManager, Class clazz) { - super(context, fragmentManager, clazz); - } - - public SimpleDialogBuilder setTitle(int titleResourceId) { - mTitle = mContext.getString(titleResourceId); - return this; - } - - - public SimpleDialogBuilder setTitle(String title) { - mTitle = title; - return this; - } - - public SimpleDialogBuilder setPositiveButtonText(int textResourceId) { - mPositiveButtonText = mContext.getString(textResourceId); - return this; - } - - public SimpleDialogBuilder setPositiveButtonText(String text) { - mPositiveButtonText = text; - return this; - } - - public SimpleDialogBuilder setNegativeButtonText(int textResourceId) { - mNegativeButtonText = mContext.getString(textResourceId); - return this; - } - - public SimpleDialogBuilder setNegativeButtonText(String text) { - mNegativeButtonText = text; - return this; - } - - public SimpleDialogBuilder setDate(Date date) { - mDate = date; - return this; - } - - public SimpleDialogBuilder setTimeZone(String zone) { - mTimeZone = zone; - return this; - } - - public SimpleDialogBuilder set24hour(boolean state) { - m24h = state; - return this; - } - - @Override - protected Bundle prepareArguments() { - Bundle args = new Bundle(); - args.putString(SimpleDialogFragment.ARG_TITLE, mTitle); - args.putString(SimpleDialogFragment.ARG_POSITIVE_BUTTON, mPositiveButtonText); - args.putString(SimpleDialogFragment.ARG_NEGATIVE_BUTTON, mNegativeButtonText); - - args.putLong(ARG_DATE, mDate.getTime()); - args.putBoolean(ARG_24H, m24h); - if (mTimeZone != null) { - args.putString(ARG_ZONE, mTimeZone); - } else { - args.putString(ARG_ZONE, "GMT"); - } - return args; - } - - @Override - protected SimpleDialogBuilder self() { - return this; - } - } -} +package com.avast.android.dialogs.fragment; + +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +import android.content.Context; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.DatePicker; + +import com.avast.android.dialogs.R; +import com.avast.android.dialogs.core.BaseDialogBuilder; +import com.avast.android.dialogs.core.BaseDialogFragment; +import com.avast.android.dialogs.iface.IDateDialogCancelListener; +import com.avast.android.dialogs.iface.IDateDialogListener; + +/** + * Dialog with a date picker. Implement {@link com.avast.android.dialogs.iface.IDateDialogListener} or {@link com.avast.android.dialogs.iface.IDateDialogCancelListener} to handle events. + */ +public class DatePickerDialogFragment extends BaseDialogFragment { + + protected static final String ARG_ZONE = "zone"; + protected static final String ARG_TITLE = "title"; + protected static final String ARG_POSITIVE_BUTTON = "positive_button"; + protected static final String ARG_NEGATIVE_BUTTON = "negative_button"; + protected static final String ARG_DATE = "date"; + protected static final String ARG_24H = "24h"; + + DatePicker mDatePicker; + Calendar mCalendar; + + private int mRequestCode; + + + public static SimpleDialogBuilder createBuilder(Context context, FragmentManager fragmentManager) { + return new SimpleDialogBuilder(context, fragmentManager, DatePickerDialogFragment.class); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + final Fragment targetFragment = getTargetFragment(); + if (targetFragment != null) { + mRequestCode = getTargetRequestCode(); + } else { + Bundle args = getArguments(); + if (args != null) { + mRequestCode = args.getInt(BaseDialogBuilder.ARG_REQUEST_CODE, 0); + } + } + } + + protected IDateDialogListener getDialogListener() { + final Fragment targetFragment = getTargetFragment(); + if (targetFragment != null) { + if (targetFragment instanceof IDateDialogListener) { + return (IDateDialogListener) targetFragment; + } + } else { + if (getActivity() instanceof IDateDialogListener) { + return (IDateDialogListener) getActivity(); + } + } + return null; + } + + protected IDateDialogCancelListener getCancelListener() { + final Fragment targetFragment = getTargetFragment(); + if (targetFragment != null) { + if (targetFragment instanceof IDateDialogCancelListener) { + return (IDateDialogCancelListener) targetFragment; + } + } else { + if (getActivity() instanceof IDateDialogCancelListener) { + return (IDateDialogCancelListener) getActivity(); + } + } + return null; + } + + @Override + protected BaseDialogFragment.Builder build(BaseDialogFragment.Builder builder) { + final String title = getTitle(); + if (!TextUtils.isEmpty(title)) { + builder.setTitle(title); + } + + final String positiveButtonText = getPositiveButtonText(); + if (!TextUtils.isEmpty(positiveButtonText)) { + builder.setPositiveButton(positiveButtonText, new View.OnClickListener() { + + @Override + public void onClick(View view) { + IDateDialogListener listener = getDialogListener(); + if (listener != null) { + listener.onPositiveButtonClicked(mRequestCode, getDate()); + } + dismiss(); + } + }); + } + + final String negativeButtonText = getNegativeButtonText(); + if (!TextUtils.isEmpty(negativeButtonText)) { + builder.setNegativeButton(negativeButtonText, new View.OnClickListener() { + + @Override + public void onClick(View view) { + IDateDialogListener listener = getDialogListener(); + if (listener != null) { + listener.onNegativeButtonClicked(mRequestCode, getDate()); + } + dismiss(); + } + }); + } + mDatePicker = (DatePicker) LayoutInflater.from(getActivity()).inflate(R.layout.sdl_datepicker, null); + builder.setView(mDatePicker); + + TimeZone zone = TimeZone.getTimeZone(getArguments().getString(ARG_ZONE)); + mCalendar = Calendar.getInstance(zone); + mCalendar.setTimeInMillis(getArguments().getLong(ARG_DATE, System.currentTimeMillis())); + mDatePicker.updateDate(mCalendar.get(Calendar.YEAR) + , mCalendar.get(Calendar.MONTH) + , mCalendar.get(Calendar.DAY_OF_MONTH)); + return builder; + } + + protected String getTitle() { + return getArguments().getString(ARG_TITLE); + } + + protected String getPositiveButtonText() { + return getArguments().getString(ARG_POSITIVE_BUTTON); + } + + protected String getNegativeButtonText() { + return getArguments().getString(ARG_NEGATIVE_BUTTON); + } + + public Date getDate() { + mCalendar.set(Calendar.YEAR, mDatePicker.getYear()); + mCalendar.set(Calendar.MONTH, mDatePicker.getMonth()); + mCalendar.set(Calendar.DAY_OF_MONTH, mDatePicker.getDayOfMonth()); + return mCalendar.getTime(); + } + + public static class SimpleDialogBuilder extends BaseDialogBuilder { + Date mDate = new Date(); + String mTimeZone = null; + + private String mTitle; + private String mPositiveButtonText; + private String mNegativeButtonText; + + private boolean mShowDefaultButton = true; + private boolean m24h; + + protected SimpleDialogBuilder(Context context, FragmentManager fragmentManager, Class clazz) { + super(context, fragmentManager, clazz); + } + + public SimpleDialogBuilder setTitle(int titleResourceId) { + mTitle = mContext.getString(titleResourceId); + return this; + } + + + public SimpleDialogBuilder setTitle(String title) { + mTitle = title; + return this; + } + + public SimpleDialogBuilder setPositiveButtonText(int textResourceId) { + mPositiveButtonText = mContext.getString(textResourceId); + return this; + } + + public SimpleDialogBuilder setPositiveButtonText(String text) { + mPositiveButtonText = text; + return this; + } + + public SimpleDialogBuilder setNegativeButtonText(int textResourceId) { + mNegativeButtonText = mContext.getString(textResourceId); + return this; + } + + public SimpleDialogBuilder setNegativeButtonText(String text) { + mNegativeButtonText = text; + return this; + } + + public SimpleDialogBuilder setDate(Date date) { + mDate = date; + return this; + } + + public SimpleDialogBuilder setTimeZone(String zone) { + mTimeZone = zone; + return this; + } + + public SimpleDialogBuilder set24hour(boolean state) { + m24h = state; + return this; + } + + @Override + protected Bundle prepareArguments() { + Bundle args = new Bundle(); + args.putString(SimpleDialogFragment.ARG_TITLE, mTitle); + args.putString(SimpleDialogFragment.ARG_POSITIVE_BUTTON, mPositiveButtonText); + args.putString(SimpleDialogFragment.ARG_NEGATIVE_BUTTON, mNegativeButtonText); + + args.putLong(ARG_DATE, mDate.getTime()); + args.putBoolean(ARG_24H, m24h); + if (mTimeZone != null) { + args.putString(ARG_ZONE, mTimeZone); + } else { + args.putString(ARG_ZONE, "GMT"); + } + return args; + } + + @Override + protected SimpleDialogBuilder self() { + return this; + } + } +} diff --git a/library/src/main/java/eu/inmite/android/lib/dialogs/ListDialogFragment.java b/library/src/main/java/com/avast/android/dialogs/fragment/ListDialogFragment.java similarity index 93% rename from library/src/main/java/eu/inmite/android/lib/dialogs/ListDialogFragment.java rename to library/src/main/java/com/avast/android/dialogs/fragment/ListDialogFragment.java index 10e9a14..fc0462d 100644 --- a/library/src/main/java/eu/inmite/android/lib/dialogs/ListDialogFragment.java +++ b/library/src/main/java/com/avast/android/dialogs/fragment/ListDialogFragment.java @@ -1,4 +1,4 @@ -package eu.inmite.android.lib.dialogs; +package com.avast.android.dialogs.fragment; import android.content.Context; import android.content.DialogInterface; @@ -12,8 +12,13 @@ import android.widget.ArrayAdapter; import android.widget.ListAdapter; +import com.avast.android.dialogs.R; +import com.avast.android.dialogs.core.BaseDialogBuilder; +import com.avast.android.dialogs.core.BaseDialogFragment; +import com.avast.android.dialogs.iface.IListDialogListener; + /** - * Dialog with a list of options. Implement {@link eu.inmite.android.lib.dialogs.IListDialogListener} to handle selection. + * Dialog with a list of options. Implement {@link com.avast.android.dialogs.iface.IListDialogListener} to handle selection. */ public class ListDialogFragment extends BaseDialogFragment { diff --git a/library/src/main/java/eu/inmite/android/lib/dialogs/ProgressDialogFragment.java b/library/src/main/java/com/avast/android/dialogs/fragment/ProgressDialogFragment.java similarity index 90% rename from library/src/main/java/eu/inmite/android/lib/dialogs/ProgressDialogFragment.java rename to library/src/main/java/com/avast/android/dialogs/fragment/ProgressDialogFragment.java index 670f1af..38889e3 100644 --- a/library/src/main/java/eu/inmite/android/lib/dialogs/ProgressDialogFragment.java +++ b/library/src/main/java/com/avast/android/dialogs/fragment/ProgressDialogFragment.java @@ -1,4 +1,4 @@ -package eu.inmite.android.lib.dialogs; +package com.avast.android.dialogs.fragment; import android.content.Context; import android.content.DialogInterface; @@ -9,13 +9,18 @@ import android.view.View; import android.widget.TextView; +import com.avast.android.dialogs.R; +import com.avast.android.dialogs.core.BaseDialogBuilder; +import com.avast.android.dialogs.core.BaseDialogFragment; +import com.avast.android.dialogs.iface.ISimpleDialogCancelListener; + /** * Simple progress dialog that shows indeterminate progress bar together with message and dialog title (optional).
*

* To show the dialog, start with {@link #createBuilder(android.content.Context, android.support.v4.app.FragmentManager)}. *

*

- * Dialog can be cancelable - to listen to cancellation, activity or target fragment must implement {@link ISimpleDialogCancelListener} + * Dialog can be cancelable - to listen to cancellation, activity or target fragment must implement {@link com.avast.android.dialogs.iface.ISimpleDialogCancelListener} *

* * @author Tomas Vondracek diff --git a/library/src/main/java/eu/inmite/android/lib/dialogs/SimpleDialogFragment.java b/library/src/main/java/com/avast/android/dialogs/fragment/SimpleDialogFragment.java similarity index 94% rename from library/src/main/java/eu/inmite/android/lib/dialogs/SimpleDialogFragment.java rename to library/src/main/java/com/avast/android/dialogs/fragment/SimpleDialogFragment.java index 7dc9e6b..ded52df 100644 --- a/library/src/main/java/eu/inmite/android/lib/dialogs/SimpleDialogFragment.java +++ b/library/src/main/java/com/avast/android/dialogs/fragment/SimpleDialogFragment.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package eu.inmite.android.lib.dialogs; +package com.avast.android.dialogs.fragment; import android.content.Context; import android.content.DialogInterface; @@ -26,9 +26,14 @@ import android.text.TextUtils; import android.view.View; +import com.avast.android.dialogs.core.BaseDialogBuilder; +import com.avast.android.dialogs.core.BaseDialogFragment; +import com.avast.android.dialogs.iface.ISimpleDialogCancelListener; +import com.avast.android.dialogs.iface.ISimpleDialogListener; + /** * Dialog for displaying simple message, message with title or message with title and two buttons. Implement {@link - * ISimpleDialogListener} in your Fragment or Activity to rect on positive and negative button clicks. This class can + * com.avast.android.dialogs.iface.ISimpleDialogListener} in your Fragment or Activity to rect on positive and negative button clicks. This class can * be extended and more parameters can be added in overridden build() method. * * @author David Vávra (david@inmite.eu) diff --git a/library/src/main/java/eu/inmite/android/lib/dialogs/TimePickerDialogFragment.java b/library/src/main/java/com/avast/android/dialogs/fragment/TimePickerDialogFragment.java similarity index 82% rename from library/src/main/java/eu/inmite/android/lib/dialogs/TimePickerDialogFragment.java rename to library/src/main/java/com/avast/android/dialogs/fragment/TimePickerDialogFragment.java index f3fc026..28efe90 100644 --- a/library/src/main/java/eu/inmite/android/lib/dialogs/TimePickerDialogFragment.java +++ b/library/src/main/java/com/avast/android/dialogs/fragment/TimePickerDialogFragment.java @@ -1,46 +1,49 @@ -package eu.inmite.android.lib.dialogs; - -import java.util.Calendar; -import java.util.Date; -import java.util.TimeZone; - -import android.content.Context; -import android.support.v4.app.FragmentManager; -import android.view.LayoutInflater; -import android.widget.TimePicker; - -/** - * Dialog with a time picker. Implement {@link eu.inmite.android.lib.dialogs.IDateDialogListener} or {@link eu.inmite.android.lib.dialogs.IDateDialogCancelListener} to handle events. - */ -public class TimePickerDialogFragment extends DatePickerDialogFragment { - - TimePicker mTimePicker; - Calendar mCalendar; - - - public static SimpleDialogBuilder createBuilder(Context context, FragmentManager fragmentManager) { - return new SimpleDialogBuilder(context, fragmentManager, TimePickerDialogFragment.class); - } - - @Override - protected BaseDialogFragment.Builder build(BaseDialogFragment.Builder builder) { - builder = super.build(builder); - mTimePicker = (TimePicker) LayoutInflater.from(getActivity()).inflate(R.layout.sdl_timepicker, null); - mTimePicker.setIs24HourView(getArguments().getBoolean(ARG_24H)); - builder.setView(mTimePicker); - - TimeZone zone = TimeZone.getTimeZone(getArguments().getString(ARG_ZONE)); - mCalendar = Calendar.getInstance(zone); - mCalendar.setTimeInMillis(getArguments().getLong(ARG_DATE, System.currentTimeMillis())); - - mTimePicker.setCurrentHour(mCalendar.get(Calendar.HOUR_OF_DAY)); - mTimePicker.setCurrentMinute(mCalendar.get(Calendar.MINUTE)); - return builder; - } - - public Date getDate() { - mCalendar.set(Calendar.HOUR_OF_DAY, mTimePicker.getCurrentHour()); - mCalendar.set(Calendar.MINUTE, mTimePicker.getCurrentMinute()); - return mCalendar.getTime(); - } -} +package com.avast.android.dialogs.fragment; + +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +import android.content.Context; +import android.support.v4.app.FragmentManager; +import android.view.LayoutInflater; +import android.widget.TimePicker; + +import com.avast.android.dialogs.R; +import com.avast.android.dialogs.core.BaseDialogFragment; + +/** + * Dialog with a time picker. Implement {@link com.avast.android.dialogs.iface.IDateDialogListener} or {@link com.avast.android.dialogs.iface.IDateDialogCancelListener} to handle events. + */ +public class TimePickerDialogFragment extends DatePickerDialogFragment { + + TimePicker mTimePicker; + Calendar mCalendar; + + + public static SimpleDialogBuilder createBuilder(Context context, FragmentManager fragmentManager) { + return new SimpleDialogBuilder(context, fragmentManager, TimePickerDialogFragment.class); + } + + @Override + protected BaseDialogFragment.Builder build(BaseDialogFragment.Builder builder) { + builder = super.build(builder); + mTimePicker = (TimePicker) LayoutInflater.from(getActivity()).inflate(R.layout.sdl_timepicker, null); + mTimePicker.setIs24HourView(getArguments().getBoolean(ARG_24H)); + builder.setView(mTimePicker); + + TimeZone zone = TimeZone.getTimeZone(getArguments().getString(ARG_ZONE)); + mCalendar = Calendar.getInstance(zone); + mCalendar.setTimeInMillis(getArguments().getLong(ARG_DATE, System.currentTimeMillis())); + + mTimePicker.setCurrentHour(mCalendar.get(Calendar.HOUR_OF_DAY)); + mTimePicker.setCurrentMinute(mCalendar.get(Calendar.MINUTE)); + return builder; + } + + public Date getDate() { + mCalendar.set(Calendar.HOUR_OF_DAY, mTimePicker.getCurrentHour()); + mCalendar.set(Calendar.MINUTE, mTimePicker.getCurrentMinute()); + return mCalendar.getTime(); + } +} diff --git a/library/src/main/java/eu/inmite/android/lib/dialogs/IDateDialogCancelListener.java b/library/src/main/java/com/avast/android/dialogs/iface/IDateDialogCancelListener.java similarity index 94% rename from library/src/main/java/eu/inmite/android/lib/dialogs/IDateDialogCancelListener.java rename to library/src/main/java/com/avast/android/dialogs/iface/IDateDialogCancelListener.java index 2a996f0..a4035a4 100644 --- a/library/src/main/java/eu/inmite/android/lib/dialogs/IDateDialogCancelListener.java +++ b/library/src/main/java/com/avast/android/dialogs/iface/IDateDialogCancelListener.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package eu.inmite.android.lib.dialogs; +package com.avast.android.dialogs.iface; import java.util.Date; diff --git a/library/src/main/java/eu/inmite/android/lib/dialogs/IDateDialogListener.java b/library/src/main/java/com/avast/android/dialogs/iface/IDateDialogListener.java similarity index 95% rename from library/src/main/java/eu/inmite/android/lib/dialogs/IDateDialogListener.java rename to library/src/main/java/com/avast/android/dialogs/iface/IDateDialogListener.java index f4cee37..c04b632 100644 --- a/library/src/main/java/eu/inmite/android/lib/dialogs/IDateDialogListener.java +++ b/library/src/main/java/com/avast/android/dialogs/iface/IDateDialogListener.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package eu.inmite.android.lib.dialogs; +package com.avast.android.dialogs.iface; import java.util.Date; diff --git a/library/src/main/java/eu/inmite/android/lib/dialogs/IListDialogListener.java b/library/src/main/java/com/avast/android/dialogs/iface/IListDialogListener.java similarity index 81% rename from library/src/main/java/eu/inmite/android/lib/dialogs/IListDialogListener.java rename to library/src/main/java/com/avast/android/dialogs/iface/IListDialogListener.java index bd58b48..e58d75b 100644 --- a/library/src/main/java/eu/inmite/android/lib/dialogs/IListDialogListener.java +++ b/library/src/main/java/com/avast/android/dialogs/iface/IListDialogListener.java @@ -1,4 +1,4 @@ -package eu.inmite.android.lib.dialogs; +package com.avast.android.dialogs.iface; /** * Interface for ListDialogFragment diff --git a/library/src/main/java/eu/inmite/android/lib/dialogs/ISimpleDialogCancelListener.java b/library/src/main/java/com/avast/android/dialogs/iface/ISimpleDialogCancelListener.java similarity index 94% rename from library/src/main/java/eu/inmite/android/lib/dialogs/ISimpleDialogCancelListener.java rename to library/src/main/java/com/avast/android/dialogs/iface/ISimpleDialogCancelListener.java index 87f3280..639ca9b 100644 --- a/library/src/main/java/eu/inmite/android/lib/dialogs/ISimpleDialogCancelListener.java +++ b/library/src/main/java/com/avast/android/dialogs/iface/ISimpleDialogCancelListener.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package eu.inmite.android.lib.dialogs; +package com.avast.android.dialogs.iface; /** * @author Tomáš Kypta diff --git a/library/src/main/java/eu/inmite/android/lib/dialogs/ISimpleDialogListener.java b/library/src/main/java/com/avast/android/dialogs/iface/ISimpleDialogListener.java similarity index 95% rename from library/src/main/java/eu/inmite/android/lib/dialogs/ISimpleDialogListener.java rename to library/src/main/java/com/avast/android/dialogs/iface/ISimpleDialogListener.java index 8ef36a4..ae2c4a6 100644 --- a/library/src/main/java/eu/inmite/android/lib/dialogs/ISimpleDialogListener.java +++ b/library/src/main/java/com/avast/android/dialogs/iface/ISimpleDialogListener.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package eu.inmite.android.lib.dialogs; +package com.avast.android.dialogs.iface; /** * Implement this interface in Activity or Fragment to react to positive and negative buttons. diff --git a/maven_push.gradle b/maven_push.gradle deleted file mode 100644 index 096d73f..0000000 --- a/maven_push.gradle +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2013 Chris Banes - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -apply plugin: 'maven' -apply plugin: 'signing' - -def isReleaseBuild() { - return VERSION_NAME.contains("SNAPSHOT") == false -} - -def getReleaseRepositoryUrl() { - return hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL - : "https://oss.sonatype.org/service/local/staging/deploy/maven2/" -} - -def getSnapshotRepositoryUrl() { - return hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL - : "https://oss.sonatype.org/content/repositories/snapshots/" -} - -def getRepositoryUsername() { - return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : "" -} - -def getRepositoryPassword() { - return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : "" -} - -afterEvaluate { project -> - uploadArchives { - repositories { - mavenDeployer { - beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } - - pom.groupId = GROUP - pom.artifactId = POM_ARTIFACT_ID - pom.version = VERSION_NAME - - repository(url: getReleaseRepositoryUrl()) { - authentication(userName: getRepositoryUsername(), password: getRepositoryPassword()) - } - snapshotRepository(url: getSnapshotRepositoryUrl()) { - authentication(userName: getRepositoryUsername(), password: getRepositoryPassword()) - } - - pom.project { - name POM_NAME - packaging POM_PACKAGING - description POM_DESCRIPTION - url POM_URL - - scm { - url POM_SCM_URL - connection POM_SCM_CONNECTION - developerConnection POM_SCM_DEV_CONNECTION - } - - licenses { - license { - name POM_LICENCE_NAME - url POM_LICENCE_URL - distribution POM_LICENCE_DIST - } - } - - developers { - developer { - id POM_DEVELOPER_ID - name POM_DEVELOPER_NAME - } - } - } - } - } - } - - signing { - required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") } - sign configurations.archives - } - - task androidJavadocs(type: Javadoc) { - source = android.sourceSets.main.java - classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) - } - - task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { - classifier = 'javadoc' - from androidJavadocs.destinationDir - } - - task androidSourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java - } - - artifacts { - archives androidSourcesJar - archives androidJavadocsJar - } -} \ No newline at end of file