From 5263ac1f1a91f008ae7da3b7ee11a57608b7b1de Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Fri, 21 Jun 2013 11:56:59 -0700 Subject: [PATCH] Theme Support 1) Broke out the UI elements of the major Activites into stylable attributes. 2) Created a 'light' and 'dark' theme for the newly stylable attrs. 3) Touched up some of the UI spacing. 4) Implemented dynamic theme switching support. --- AndroidManifest.xml | 26 ++++---- res/drawable-hdpi/divet_left_dark.png | Bin 0 -> 312 bytes .../{divet_left.png => divet_left_light.png} | Bin res/drawable-hdpi/divet_right_dark.png | Bin 0 -> 319 bytes ...{divet_right.png => divet_right_light.png} | Bin res/drawable-hdpi/ic_send_holo_dark.png | Bin 0 -> 2113 bytes .../ic_send_holo_dark_encrypted.png | Bin 0 -> 4285 bytes .../ic_sms_mms_delivered_dark.png | Bin 0 -> 827 bytes ...red.png => ic_sms_mms_delivered_light.png} | Bin .../list_selected_holo_dark.9.png | Bin 0 -> 156 bytes res/drawable-mdpi/divet_left_dark.png | Bin 0 -> 245 bytes .../{divet_left.png => divet_left_light.png} | Bin res/drawable-mdpi/divet_right_dark.png | Bin 0 -> 246 bytes ...{divet_right.png => divet_right_light.png} | Bin res/drawable-mdpi/ic_send_holo_dark.png | Bin 0 -> 1273 bytes .../ic_send_holo_dark_encrypted.png | Bin 0 -> 3607 bytes .../ic_sms_mms_delivered_dark.png | Bin 0 -> 609 bytes ...red.png => ic_sms_mms_delivered_light.png} | Bin .../list_selected_holo_dark.9.png | Bin 0 -> 151 bytes res/drawable-xhdpi/divet_left_dark.png | Bin 0 -> 372 bytes .../{divet_left.png => divet_left_light.png} | Bin res/drawable-xhdpi/divet_right_dark.png | Bin 0 -> 375 bytes ...{divet_right.png => divet_right_light.png} | Bin res/drawable-xhdpi/ic_send_holo_dark.png | Bin 0 -> 1699 bytes .../ic_send_holo_dark_encrypted.png | Bin 0 -> 4725 bytes res/drawable-xhdpi/ic_send_holo_light.png | Bin 1472 -> 1758 bytes .../ic_sms_mms_delivered_dark.png | Bin 0 -> 1049 bytes ...red.png => ic_sms_mms_delivered_light.png} | Bin .../list_selected_holo_dark.9.png | Bin 0 -> 160 bytes ...conversation_list_item_background_read.xml | 26 -------- ...rsation_list_item_background_read_dark.xml | 11 ++++ ...sation_list_item_background_read_light.xml | 11 ++++ ...nversation_list_item_background_unread.xml | 26 -------- ...ation_list_item_background_unread_dark.xml | 11 ++++ ...tion_list_item_background_unread_light.xml | 11 ++++ res/layout/conversation_activity.xml | 31 +++++---- res/layout/conversation_item_received.xml | 51 +++++++++------ res/layout/conversation_item_sent.xml | 53 ++++++++------- res/layout/conversation_list_item_view.xml | 28 ++++---- res/layout/icon_list_item.xml | 2 +- res/layout/recipients_panel.xml | 2 +- res/values-v11/colors.xml | 5 ++ res/values-v8/colors.xml | 5 ++ res/values/arrays.xml | 10 +++ res/values/attrs.xml | 19 ++++++ res/values/colors.xml | 14 ++-- res/values/strings.xml | 5 +- res/values/themes.xml | 41 ++++++++++++ res/xml/preferences.xml | 9 +++ .../ApplicationPreferencesActivity.java | 36 ++++++++++- .../securesms/ContactSelectionActivity.java | 10 +++ .../securesms/ConversationActivity.java | 15 ++++- .../securesms/ConversationItem.java | 4 ++ .../securesms/ConversationListActivity.java | 10 +++ .../securesms/ConversationListItem.java | 21 ++++-- .../securesms/CountrySelectionActivity.java | 1 + .../securesms/KeyScanningActivity.java | 16 +++++ .../securesms/ReviewIdentitiesActivity.java | 12 ++++ .../securesms/components/ImageDivet.java | 12 +++- .../securesms/mms/ImageSlide.java | 3 + .../securesms/util/DynamicTheme.java | 61 ++++++++++++++++++ src/org/thoughtcrime/securesms/util/Util.java | 1 - 62 files changed, 443 insertions(+), 156 deletions(-) create mode 100644 res/drawable-hdpi/divet_left_dark.png rename res/drawable-hdpi/{divet_left.png => divet_left_light.png} (100%) create mode 100644 res/drawable-hdpi/divet_right_dark.png rename res/drawable-hdpi/{divet_right.png => divet_right_light.png} (100%) create mode 100644 res/drawable-hdpi/ic_send_holo_dark.png create mode 100644 res/drawable-hdpi/ic_send_holo_dark_encrypted.png create mode 100644 res/drawable-hdpi/ic_sms_mms_delivered_dark.png rename res/drawable-hdpi/{ic_sms_mms_delivered.png => ic_sms_mms_delivered_light.png} (100%) create mode 100644 res/drawable-hdpi/list_selected_holo_dark.9.png create mode 100644 res/drawable-mdpi/divet_left_dark.png rename res/drawable-mdpi/{divet_left.png => divet_left_light.png} (100%) create mode 100644 res/drawable-mdpi/divet_right_dark.png rename res/drawable-mdpi/{divet_right.png => divet_right_light.png} (100%) create mode 100644 res/drawable-mdpi/ic_send_holo_dark.png create mode 100644 res/drawable-mdpi/ic_send_holo_dark_encrypted.png create mode 100644 res/drawable-mdpi/ic_sms_mms_delivered_dark.png rename res/drawable-mdpi/{ic_sms_mms_delivered.png => ic_sms_mms_delivered_light.png} (100%) create mode 100644 res/drawable-mdpi/list_selected_holo_dark.9.png create mode 100644 res/drawable-xhdpi/divet_left_dark.png rename res/drawable-xhdpi/{divet_left.png => divet_left_light.png} (100%) create mode 100644 res/drawable-xhdpi/divet_right_dark.png rename res/drawable-xhdpi/{divet_right.png => divet_right_light.png} (100%) create mode 100644 res/drawable-xhdpi/ic_send_holo_dark.png create mode 100644 res/drawable-xhdpi/ic_send_holo_dark_encrypted.png create mode 100644 res/drawable-xhdpi/ic_sms_mms_delivered_dark.png rename res/drawable-xhdpi/{ic_sms_mms_delivered.png => ic_sms_mms_delivered_light.png} (100%) create mode 100644 res/drawable-xhdpi/list_selected_holo_dark.9.png delete mode 100644 res/drawable/conversation_list_item_background_read.xml create mode 100644 res/drawable/conversation_list_item_background_read_dark.xml create mode 100644 res/drawable/conversation_list_item_background_read_light.xml delete mode 100644 res/drawable/conversation_list_item_background_unread.xml create mode 100644 res/drawable/conversation_list_item_background_unread_dark.xml create mode 100644 res/drawable/conversation_list_item_background_unread_light.xml create mode 100644 res/values-v11/colors.xml create mode 100644 res/values-v8/colors.xml create mode 100644 res/values/attrs.xml create mode 100644 res/values/themes.xml create mode 100644 src/org/thoughtcrime/securesms/util/DynamicTheme.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 5c5ffff9e8..4353ed97ec 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -10,19 +10,19 @@ android:label="Access to TextSecure Secrets" android:protectionLevel="signature" /> - - - - - - + + + + + + - - - - - - + + + + + + @@ -40,7 +40,7 @@ + android:theme="@style/TextSecure.LightTheme"> o^p;ugnt(z_JzX3_G|u;4_T+0e;9(7DXHZJ| z^jzW&XXosNVS9yT&s}Vsx_d!LredCM>UR;#Z~cOTmsVxY>T^-4VAxVQ@4o4SRjaI| zlMih-_^j8LthnfbZtS#F;~P#4w-#yS<$vg9*s*I}f1pTbTbqifU1L8($+?}T5dsa{ zbWXokQ<(KT;n~F~Z7HcsCcMl_ogF7Gt!D}__`IX4Y{AF&uDA{1?hg*`werc=RZsSj zsN|j(vgONix1-#59eL-9-|v=+f3NKGtY81CJ>wlc-538O%q^P`8sMw<@8pD4#Tu( z-$j`e&h7ktxqsR5{!3AZEzJckT5&QuTsGNo?VaeUrIYP7mp<4l-;wcoaz!3XZRU*Q zPYgOeoH)|c-u;XJATrfXQgrRsBNF~gf5c6fJMApd-9F({#e4Pu^^~Yjx(hx6{l(zv L>gTe~DWM4ff82YM literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/divet_right.png b/res/drawable-hdpi/divet_right_light.png similarity index 100% rename from res/drawable-hdpi/divet_right.png rename to res/drawable-hdpi/divet_right_light.png diff --git a/res/drawable-hdpi/ic_send_holo_dark.png b/res/drawable-hdpi/ic_send_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..decbd30e5f60d4dde357b28bb9892a7f5244a395 GIT binary patch literal 2113 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 literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/ic_sms_mms_delivered_dark.png b/res/drawable-hdpi/ic_sms_mms_delivered_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a371ec8819080fb39c1fda6c52266b2b5a114b01 GIT binary patch literal 827 zcmV-B1H}A^P)8 z$N+nQ*FZj80T4g{6ufT%jGMa(+yt_~Em?t=0u&u!u?)NyxZ%xrn??xY9ZN&&yx;5k zO5lIo+#v8&ve|51k}uysvU<~~-EwHk2BEzU^gFl0&3BslOH=ehb-W`KnT+D~BpnzhC5&UGVg zQxmPdwkZ7$H~{j%Ne3SKC2YJFxW!5>1LQ?$Yuk|P>R9`>?fa*eUR#ttK&<7WF${?i zc1KH55$^y|)${JV;L5PvN(wb@yvkapjp51TM=$2vk6r5&VI?Evk9} z$N~4`IL-r%jg2j#tE!3PxR@kK1ats%K(n<>FaF95U+FnBd-}wsbs{X>dw4qyjOER% z_y4?8)z}@@2iHr52=YKXu*r=r(1hj3;(R#T+>&k+!?Sbe;@=|69Sl8n?yONoC6Wct zfjNZM=GL?e$XQD&6;u_v+~$Bgl~Pnqd;m$3WPnpu&Td%*2H2V;Nx?f*>O@qEJn-~T zl^_6iSIB=|k-IA*U+rK2Jy=-5dt*HeTaCb!gOFHjS3-1Q;w4jA{Mu(b}nRDl&sE{Y;lHKVF$RrRu}Ms7|@CAm@ylO&Nij{Ovk z#Bn^9B#D&QeWSKa$qt;!$;klFfq{YXY&KgWr4ixPvcF808`g1qHP!$C002ovPDHLk FV1o5BZ&UyP literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/ic_sms_mms_delivered.png b/res/drawable-hdpi/ic_sms_mms_delivered_light.png similarity index 100% rename from res/drawable-hdpi/ic_sms_mms_delivered.png rename to res/drawable-hdpi/ic_sms_mms_delivered_light.png diff --git a/res/drawable-hdpi/list_selected_holo_dark.9.png b/res/drawable-hdpi/list_selected_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..e20b02d52c4f1bedb988cd9f76844d22329ffc3a GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhEX7WqAsj$Z!;#Vf2?p zbb>IW`N`93fr56PE{-7*QBRJJkl{&7FVVepxUS$WFDwsp+ROJ<)*QCh*lIbqEY wd&kfxvwS8c9cwISV>V&?FMP!Kya5BlyH?Sev!Y6afhI9{y85}Sb4q9e02#|HCjbBd literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/divet_left_dark.png b/res/drawable-mdpi/divet_left_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..063aee848db80f44209922c1fe1991057b300ff1 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Ol)0U}ME`Obj^lDyqr82*Fcg1yTp14TFsJR*x3 z7`TN&n2}-D90{Nxdx@v7EBjqG5fMvC=l*@~fkI85E{-7*mun{kay1+9wEZtxx@F3= zWye4GHJKN0aOSn?$n(G1?3c5e?bD}PMMe8gj#sBFzY9!UG;`)jINmqLPnxXSB2t=2Zobj^ONxKfWnAohCe zl0w#o6>HNS%&}s literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/divet_right.png b/res/drawable-mdpi/divet_right_light.png similarity index 100% rename from res/drawable-mdpi/divet_right.png rename to res/drawable-mdpi/divet_right_light.png diff --git a/res/drawable-mdpi/ic_send_holo_dark.png b/res/drawable-mdpi/ic_send_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..fa212f02bcacf729169327b2875f973e0e3bd2cd GIT binary patch literal 1273 zcmVy2_1;7O zjI7N$XHLB!@jDdyOHk565Gs^}3eg~MM5uQi$M(J+m__U00trd`q><&Fk-p#g&YSOh zBdW^(8EJr0sl>Hw*T`nG)a!MYmzQZan*>3Ch#(@{$3Rs%cI+4n3k!$l=jY!W9UUc~ z&oeSILN=TIZxqO6GK68+8;0T3%*@Os;LPOYWW3*Z=78e%@f`D4Bwmk%_#B;!7 z;4pBoTrSU9BDaQyhPI7}s4A0_lg!S}GBY#t74QMD24sK+@S7!a-Eo{PCz1xJR4TCw zzXAsV1y%vEgvQF{@;q=>Rp*Q`(N+;j14L0ov)M#dZ;Hs@KsOL2hyWY__KV0Z&-2cz z>Q!S*v(;+h`#wucOPeB+2B=o6_`Z*-J`|C=zDkyV5D^-U2C8~P zL_$mAc{aIbf8PPV6p>Fn&%2+v{-=|uwvfldJr1pIuV@%5)Lu!Nh)BtM00PvZJeB*iE(Q>)Gb6{YA zd_K?c@GyOSeQnmBZadt1J)XP{9JTXN?Ak9lk~o@{%r0PDL=KlqrAxqUp-`wKkEU9! zwiBq;Y6L+*6h-$O$C(G-wo_e}Otm!Y8{N~Kaakh8#D))~8jo(?0MSQD=suqwoaQg&_y_zCzfilV#e z_4=)@KJlH2iHWu6CE@Yo#~lmWolqwS^je^UmPAsKRp52tBVbKL?ma`GzrQ~QI0U?D zLE>HJ61$9dnz3t~#7J4-HG4!UyLJUQr>bX+F-wg`qdf<5xg4(R;(6XK;0xe2%RHHU zn%Gs8n2WzhHW4+UkPlo^)pN#}O0(G{3_~6~c+gJ3aU9a=G$Jx$cU^sj8q*Ct1TL!T ztTARe3B0nh^6WKqT{kw01BvY3NW{10FJM+xFB)T3Istd|fgL+`Fg-op2fT0Z@9{e?WHPb*V=t(N zBn;`UZBl+V#;k6pH%J3?b#<|4&mN|yr*pR6camQ$umZP%Gf@;>Ef$MwuhNvH0eX6R zV)+MwH|#Z94;%qEfzweG%@vEqW)K7fL9pp=sI4te$e*?fh&7p}?G;Z&QFNnNEJiW# z;^HE&`m##L?swwEiA)%VqtrwWC_O%Y)$fuBi2;9c8hg}^Vs=|Z9KyND2m z;g$n;@_~K8kE;6Z)YR0%b_2H&sMqV{a=8oRj$8{cR|!%AGrRc=YHI jsZ{Fet2nL=+a3P^iIk=7v9X5S00000NkvXXu0mjf)zwh| literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/ic_send_holo_dark_encrypted.png b/res/drawable-mdpi/ic_send_holo_dark_encrypted.png new file mode 100644 index 0000000000000000000000000000000000000000..2650c17dc9a0964b435f93a289e9f8cddba2c38a GIT binary patch literal 3607 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 literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/ic_sms_mms_delivered_dark.png b/res/drawable-mdpi/ic_sms_mms_delivered_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a3201ec088dec00c81f24ea83dd4d9bbb619c486 GIT binary patch literal 609 zcmV-n0-pVeP)jvmEbFEgdoILc!f5C zMVb^THDVzaK_npVfga)?494a{QeBAnk~8n!SlnK`94Gq0FtZCY`+eW6&;^g&u4CYH z=Iaa?1TF%PE&oR5vjtLM0GI*B0V}0aNjf`fwHk*;UYU{NT9(!s2Mq8M$OBJ+F`xoW zNVg{^&t|6Z&^AyGn?Ngo09S!qp86_q9{4QIxeJ{GR57a5XJ?0J3CZIlcW}xH{{kD4S%>2qSQ`%sfCf{qoT+0&+Yyv%PZZ{#Ms&e$;m-0k! zA-uQzk-e(?__fKL39#>9kcP$PlwRNs@ZHxfHa#MY8LNZ&io1OL=j}U7OILzVUl;An zgN<~%9uO9vW83zcZ)2gp-X{WLI5E(FzppUNdbPT~c=Ggo3NSg^WDo#rKo!XOX7Txh zms2-JhY*HUb)k_8-VZF$0QUO^+hL~oND&SITdFFwE#Cs$z!6}m%Qkjx7ue{$w7?$E zB59cibo*ci=u=hc9PrF*KL_*!4p{k%oXj)+gD?zn&h4nJ zaCd?*qxs3xYk`86o-U3d5>t~CW>mH@a{g&g;s7!l1y6Y-A7H!Wn`V?a)q%-J!|hRk p!vz+%E}w*ks?YXeHlKNz8T^a{r?)m+oC6xd;OXk;vd$@?2>>ldDLeoG literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/divet_left_dark.png b/res/drawable-xhdpi/divet_left_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..698a83930128ea753d41d33a870cc04fcb99b01c GIT binary patch literal 372 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 DIl1{C literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/ic_send_holo_light.png b/res/drawable-xhdpi/ic_send_holo_light.png index be98080c5eba2e2fc2826f013ae3667dcfb55db9..7797e3b28ef0b68584eff9427ba09bcc192eca5b 100644 GIT binary patch delta 1753 zcmV;~1}6Ey3*HTo8Gi-<0063Kaozv`00v@9M??Vs0RI60puMM)00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-sm6#y>6JP-pWqCRL$crjk$lRo%jeDU()qy9-oAAh*tFF7tMpy48m0s}S~?JmD$GTU}L)89GYbNQZg2JWxOuTj*_zBnq6g)xQw)0ZpBj8mL*$3=a z)m!~4h@eh5900xr76FwMAyt903Fs2A1303pfBWIIAAbZ9q~!vtS{0EGf!BZu4+;LN z*!M$V0EmGDz)n^Dr(X~e))7h-IBwCP-f}{@YtC{Bum#vCB71@Ts(Q&oM9_;4GfeQ_8-aD6AWkPy*Apg?Fo#cpwZP;IkdPKW3zk&f27WO?oamMyiWwU(#Bp4WqG%9U zXAUlCQP}SL?pjX*>!T=I5k=8N9LHB2*_y4IM1Pp$e@+9}fI(ooMIrb;qH3vj0ayd9 z7LgN{R2_9F=rkgN90igB@R_m0n@vW8W}-%5LcRl>F}^X{X$D%%`Y?*3g4GC?0ME7& z0rkvd%8>CmupW3WiXx&YidA*G6E%r2hvUL(1aErK?bLGUnzZ{215X2+MZ_`CiFWdh zTz}fMn|%!|Z;%ys$}~!*tTE#odptq3WEy$Gpd&|b0q+9i9r6QtLg)hf&6k0lz+qLr z+6p4VoIH-R~80aQrpa)bn zZia8<^#P6?y>B&wv~U>AG zM}R>c)2J9{83Nt_Hi*bUE7$#zm1Z}kB@rnBtAWLqLp)?c95U87XvAs2KJ#;pqTR2M za(3ah;(7nH*FK-fLPXIJaUJ*(*kKIx9%tEBn0lF`I~T34Sn$pdnSd6Wz{>VsV1Mrw zQqF^3>8)tmZuHwL-gj zSO66-^$jd--3=U4)hVCRwJZH@SQIsg4SUH-(7}zn-or`im&M!KBM5R7L6!nv(cZ>L zlBksJ+P|4|)7ff_Or?H)ntxgn{nF}dZI{eLxTi6@!aRp5JS zGsPF1VP?G|0H>Xi23q%-S((~MUDlvvPYz3FjmmywrLSZJNMmNZOyhkwDjU`zKf_kj z^E1CBGaECF?`{_}>je{V_P@q7oE(>jT7$ISxP0F|I}oIJ|3Tn$Y7b0IdQd+N?6I=b zoOxg(?U9+Kz!SFVl2TF99mdQi`(5K%0&sS_hFTNjuq80}FtfR^@zf|_kIikNHl{W@ vA0C@atNoE6DD!WLNTJOQ&-?5C>e2Nt9^!*B9?+-200000NkvXXu0mjfM$s;^ literal 1472 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+yeRz&J0!C&U%VH68_nH3Xs=j%@?R zP*+KiUoZm$6C+EIVd(NgQXQ&`UmPixF*#1&W=gW+#I)QTtpZ)?NyW@XX1>)jjdt7~K1)1>)%+!+ruK_3ofaeK z>=qJ{T3X+lq;2i!otafq*3hHMC8eavp}?+TY2f6VG9kFxfj7O&tHwf0I5e7pf!W>D z#W5t}@Y3*~(U%j8yQw>?MMyC7pi+RN;8P8`7*>`mi^RHRl;RdV=&bmE z{oS`MneWbg|Jwd7JMP}OGqY=hgCAQv@G^XP%-p~x&TxR;p~2BW=7Hb>vkIjN=?^&@ zg;rQsuA2AxOq1PphRTH-_nlPcKBaI)M=8*%cG*c`?r#CyZY-WjJHD&z`&4nA2-#m(lv?k2vfQzsps|6W?_9ysGYaRO!r0r_iCyBH zGw0zfHf`pU61?UjrD^deUkhDS6ksuw+4+#8>EBY*zJ$;KjEtv3HSI6Yurpa2h2Xi|eGME%UmU{)6u00&9 z^?WAUM?@MuMg7m7o3UMesljxo3ra5zJg|N)ekS6=XWdgQQEq;#zWXehC7oll$t@x1 zY4Sl;<&~R6^u4t^*cK)-E~>*6vaMEa-8~&B;4? z_TuQ<=Z$r(^~>V-aqaI@f}<&2!CI#DNXo^%N8*Ja~UHE7dupH=baZ~Ik`&GM@RS1&wu$!g`S-qN^@ zvahd+dvCkKUE{IvVkwKl7HqtTZ47ZMEm?6r0K z+*qdn{DkM z-^!W(cHfh;@5IIV{`s#y-nw|hr$4q|_I*nEqZ_+mo8GJJx1aY{{EDspt9Re-vHX@h WvqEByl{y16I)kUHpUXO@geCywqbFnl diff --git a/res/drawable-xhdpi/ic_sms_mms_delivered_dark.png b/res/drawable-xhdpi/ic_sms_mms_delivered_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..31ef9d0f950cdf298b6e2dccf02cf3e49c3e71b3 GIT binary patch literal 1049 zcmV+!1m^pRP)J>60Z|QPhW;Lan~2*%@C%TB<08b_*?uEp1k^+1=|y&n>sp>1KA5^umRi zJA3bU&Ue0Z&RxY4jySpO)dO0tqvn0Qds9QP$rBcBw`1P5~z8*?Qg(@GpUWpbmt<1)%ILkZDfa2J8crilV4v7NX%Q<>6Dt7}fxLfDQ8L z5b!iG1w06hOUzrsjt}e-1AL(6mr5lg9}Ca#_U$%*eE*NSf76L4fY*fD7O)OjFW&AI z@TTkwfX{%JoRl;wNs_gl#@)2kzfV5?>hz0azxxAsoO>JCAwb#GHUi`WKLNwQc_)0R zBuQTBLU`wl;lPKVY(Dkrp1;_ivIBV69_onGit-5X5KwizN0%?Y)H;+gY75<1Q0T0h<9H1AcT0 z61sdjo!NL5nTXJO{lE-OPHuCV*zVMT=L9@(G;&2eaZ;qW;Or40HGp2vGeh4V++EtV z`YG;=cpvx(cxOdF`U%ii$JdTwp3d13&5EUiqINy;1Uy+${Q2IE6!B+o<025 z>25d0U>a* z6AjFxk3ryWzyv}2hMU#Ex|~Zzr!Cq5tK`giFFdXW27p@@=}K4!=877ClS*@oWPoa; zkz51pCdD-#K~BzlS5bDSx+qdl2&A^VV>ah^%e!F5EAqc10FGwDaI2$c%f{bb=)>x& zEpvg^`d}u9UjUXlC3jM5oh+FK;yCtl3X^^QRcoEbaon{)wbrfqXd;Rt(ljMWk^p!X zxDNQ)0Y__X0Mfjcw!kdN>vX?Za0|Q?;8z$>tJORp9UUG0ZES2z)oL}C5**-vC?s7U Tb0}~S00000NkvXXu0mjfDsWUrH)Z5HFY31}LFr>mdKI;Vst0R1#C AM*si- literal 0 HcmV?d00001 diff --git a/res/drawable/conversation_list_item_background_read.xml b/res/drawable/conversation_list_item_background_read.xml deleted file mode 100644 index dfc7f7820c..0000000000 --- a/res/drawable/conversation_list_item_background_read.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - diff --git a/res/drawable/conversation_list_item_background_read_dark.xml b/res/drawable/conversation_list_item_background_read_dark.xml new file mode 100644 index 0000000000..1487e00e4d --- /dev/null +++ b/res/drawable/conversation_list_item_background_read_dark.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/res/drawable/conversation_list_item_background_read_light.xml b/res/drawable/conversation_list_item_background_read_light.xml new file mode 100644 index 0000000000..8b5229099f --- /dev/null +++ b/res/drawable/conversation_list_item_background_read_light.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/res/drawable/conversation_list_item_background_unread.xml b/res/drawable/conversation_list_item_background_unread.xml deleted file mode 100644 index 042face305..0000000000 --- a/res/drawable/conversation_list_item_background_unread.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - diff --git a/res/drawable/conversation_list_item_background_unread_dark.xml b/res/drawable/conversation_list_item_background_unread_dark.xml new file mode 100644 index 0000000000..8ac65e5d01 --- /dev/null +++ b/res/drawable/conversation_list_item_background_unread_dark.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/res/drawable/conversation_list_item_background_unread_light.xml b/res/drawable/conversation_list_item_background_unread_light.xml new file mode 100644 index 0000000000..3312ee937c --- /dev/null +++ b/res/drawable/conversation_list_item_background_unread_light.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/res/layout/conversation_activity.xml b/res/layout/conversation_activity.xml index 61c07af708..d4bcac9f6b 100644 --- a/res/layout/conversation_activity.xml +++ b/res/layout/conversation_activity.xml @@ -18,7 +18,7 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" - android:background="@drawable/white_background" + android:background="?conversation_background" android:gravity="bottom"> + android:background="?conversation_background"> + android:layout_weight="1" + android:contentDescription="Attachment Thumbnail"/> - + + android:textColor="?conversation_editor_text_color" /> - -" + - + diff --git a/res/layout/conversation_item_received.xml b/res/layout/conversation_item_received.xml index 9b74ce2c04..1b4bd8659e 100644 --- a/res/layout/conversation_item_received.xml +++ b/res/layout/conversation_item_received.xml @@ -9,8 +9,9 @@ + android:layout_height="fill_parent" + android:orientation="horizontal" + android:background="?conversation_card_background"> @@ -54,7 +58,8 @@ android:scaleType="centerInside" android:adjustViewBounds="true" android:background="@android:drawable/picture_frame" - android:visibility="gone" /> + android:visibility="gone" + android:contentDescription="Message Media"/> + android:visibility="gone" + android:contentDescription="Play Button"/> @@ -91,16 +97,18 @@ + android:src="?conversation_delivered_indicator" + android:visibility="gone" + android:contentDescription="Delivered Indicator"/> @@ -120,7 +128,7 @@ android:linksClickable="false" android:textAppearance="?android:attr/textAppearanceSmall" android:layout_gravity="left" - android:textColor="#ffcccccc" + android:textColor="?conversation_text_secondary_color" android:paddingTop="1dip"/> @@ -128,34 +136,35 @@ + android:layout_alignParentRight="true" + android:gravity="center_vertical" + android:background="?conversation_background"> + android:visibility="gone" + android:contentDescription="Key Exchange Indicator"/> + android:visibility="gone" + android:contentDescription="Secure Message Indicator"/> + android:visibility="gone" + android:contentDescription="Send Failed Indicator"/> diff --git a/res/layout/conversation_item_sent.xml b/res/layout/conversation_item_sent.xml index be4defe5db..ec1f6c021a 100644 --- a/res/layout/conversation_item_sent.xml +++ b/res/layout/conversation_item_sent.xml @@ -7,48 +7,51 @@ android:paddingLeft="10dip" android:orientation="horizontal"> - + + android:layout_alignParentLeft="true" + android:gravity="center_vertical" + android:background="?conversation_background"> + android:visibility="gone" + android:contentDescription="Key Exchange Indicator"/> + android:visibility="gone" + android:contentDescription="Secure Message Indicator"/> + android:visibility="gone" + android:contentDescription="Send Failed Indicator"/> @@ -76,7 +80,8 @@ android:scaleType="centerInside" android:adjustViewBounds="true" android:background="@android:drawable/picture_frame" - android:visibility="gone" /> + android:visibility="gone" + android:contentDescription="Media Message"/> + android:visibility="gone" + android:contentDescription="Play Button"/> @@ -113,16 +119,18 @@ + android:src="?conversation_delivered_indicator" + android:visibility="gone" + android:contentDescription="Delivered Indicator"/> @@ -142,7 +150,7 @@ android:linksClickable="false" android:textAppearance="?android:attr/textAppearanceSmall" android:layout_gravity="right" - android:textColor="#ffcccccc" + android:textColor="?conversation_text_secondary_color" android:paddingTop="1dip"/> @@ -158,7 +166,6 @@ android:layout_width="60dp" android:layout_height="60dp" android:cropToPadding="true" - android:layout_marginLeft="10dip" android:layout_marginRight="0dip" android:padding="0dip" android:scaleType="centerCrop" /> diff --git a/res/layout/conversation_list_item_view.xml b/res/layout/conversation_list_item_view.xml index 2bfff12f2c..3553eb773f 100644 --- a/res/layout/conversation_list_item_view.xml +++ b/res/layout/conversation_list_item_view.xml @@ -1,9 +1,8 @@ - + + @@ -20,7 +20,8 @@ android:layout_height="60dp" android:cropToPadding="true" android:scaleType="centerCrop" - android:visibility="gone" /> + android:visibility="gone" + android:contentDescription="Contact Photo Image"/> @@ -37,18 +38,19 @@ android:singleLine="true" android:layout_marginTop="6dip" android:layout_marginRight="5dip" - android:layout_marginLeft="5dip" + android:layout_marginLeft="10dip" + android:layout_marginBottom="10dip" android:layout_alignTop="@id/contact_photo_frame" android:layout_toRightOf="@id/contact_photo_frame" android:layout_alignWithParentIfMissing="true" - android:ellipsize="marquee" - android:textColor="#000000"/> + android:ellipsize="marquee"/> + android:src="@drawable/ic_list_alert_sms_failed" + android:contentDescription="Error Alert"/> + android:src="@drawable/ic_attachment_universal_small" + android:contentDescription="Attachment Indicator"/> diff --git a/res/layout/recipients_panel.xml b/res/layout/recipients_panel.xml index 7b520576b6..e11f630acd 100644 --- a/res/layout/recipients_panel.xml +++ b/res/layout/recipients_panel.xml @@ -8,7 +8,7 @@ android:paddingBottom="5dip" android:paddingLeft="5dip" android:paddingRight="5dip" - android:background="@drawable/white_background" + android:background="?conversation_background" android:orientation="vertical" > + + #ff000000 + #ffeeeeee + \ No newline at end of file diff --git a/res/values-v8/colors.xml b/res/values-v8/colors.xml new file mode 100644 index 0000000000..56da2fcde2 --- /dev/null +++ b/res/values-v8/colors.xml @@ -0,0 +1,5 @@ + + + #ff000000 + #ff000000 + \ No newline at end of file diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 5cdce2b73f..a24008290e 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -6,6 +6,16 @@ @string/preferences__hours + + @string/preferences__light_theme + @string/preferences__dark_theme + + + + light + dark + + @string/preferences__green @string/preferences__red diff --git a/res/values/attrs.xml b/res/values/attrs.xml new file mode 100644 index 0000000000..5097450f27 --- /dev/null +++ b/res/values/attrs.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/values/colors.xml b/res/values/colors.xml index 37fd0fb398..4d79eea23d 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -1,8 +1,12 @@ - #ffffffff - #ff000000 - - #ffffffff - #ffeeeeee + + #ffffffff + #ff000000 + + #ffeeeeee + #ffffffff + #ff000000 + #ff333333 + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 0c37c3a38c..14298b8443 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -457,7 +457,8 @@ Conversation length limit Trim all threads now Scan through all conversation threads and enforce conversation length limits - + Light Theme + Dark Theme @@ -527,6 +528,8 @@ Verified + Appearance + Theme diff --git a/res/values/themes.xml b/res/values/themes.xml new file mode 100644 index 0000000000..3e29c835b4 --- /dev/null +++ b/res/values/themes.xml @@ -0,0 +1,41 @@ + + + + + + + \ No newline at end of file diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index b7ea2c4831..3970a7b42f 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -62,6 +62,15 @@ android:summary="@string/preferences__also_vibrate_when_notified" /> + + + + + 0) { mmsThumbnail.setVisibility(View.VISIBLE); + mmsContainer.setVisibility(View.VISIBLE); mmsThumbnail.setImageDrawable(new ColorDrawable(Color.TRANSPARENT)); } else { mmsThumbnail.setVisibility(View.GONE); + mmsContainer.setVisibility(View.GONE); } slideDeck = messageRecord.getSlideDeck(); diff --git a/src/org/thoughtcrime/securesms/ConversationListActivity.java b/src/org/thoughtcrime/securesms/ConversationListActivity.java index a3cd168e39..f43ec1edc1 100644 --- a/src/org/thoughtcrime/securesms/ConversationListActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationListActivity.java @@ -21,18 +21,22 @@ import org.thoughtcrime.securesms.recipients.RecipientFactory; import org.thoughtcrime.securesms.recipients.Recipients; import org.thoughtcrime.securesms.service.KeyCachingService; import org.thoughtcrime.securesms.service.SendReceiveService; +import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.MemoryCleaner; public class ConversationListActivity extends PassphraseRequiredSherlockFragmentActivity implements ConversationListFragment.ConversationSelectedListener { + private final DynamicTheme dynamicTheme = new DynamicTheme(); private ConversationListFragment fragment; private MasterSecret masterSecret; @Override public void onCreate(Bundle icicle) { + dynamicTheme.onCreate(this); super.onCreate(icicle); + setContentView(R.layout.conversation_list_activity); getSupportActionBar().setTitle("TextSecure"); @@ -41,6 +45,12 @@ public class ConversationListActivity extends PassphraseRequiredSherlockFragment initializeContactUpdatesReceiver(); } + @Override + public void onResume() { + super.onResume(); + dynamicTheme.onResume(this); + } + @Override public void onDestroy() { Log.w("ConversationListActivity", "onDestroy..."); diff --git a/src/org/thoughtcrime/securesms/ConversationListItem.java b/src/org/thoughtcrime/securesms/ConversationListItem.java index 50665ee7b0..51a42a7e27 100644 --- a/src/org/thoughtcrime/securesms/ConversationListItem.java +++ b/src/org/thoughtcrime/securesms/ConversationListItem.java @@ -18,6 +18,7 @@ package org.thoughtcrime.securesms; import android.content.Context; import android.content.Intent; +import android.content.res.TypedArray; import android.graphics.Color; import android.graphics.Typeface; import android.net.Uri; @@ -148,13 +149,21 @@ public class ConversationListItem extends RelativeLayout } private void setBackground(boolean read, boolean batch) { + int[] attributes = new int[]{R.attr.conversation_list_item_background_selected, + R.attr.conversation_list_item_background_read, + R.attr.conversation_list_item_background_unread}; + + TypedArray drawables = context.obtainStyledAttributes(attributes); + if (batch && selectedThreads.contains(threadId)) { - setBackgroundResource(R.drawable.list_selected_holo_light); + setBackgroundDrawable(drawables.getDrawable(0)); } else if (read) { - setBackgroundResource(R.drawable.conversation_list_item_background_read); + setBackgroundDrawable(drawables.getDrawable(1)); } else { - setBackgroundResource(R.drawable.conversation_list_item_background_unread); + setBackgroundDrawable(drawables.getDrawable(2)); } + + drawables.recycle(); } private boolean isBadgeEnabled() { @@ -162,12 +171,15 @@ public class ConversationListItem extends RelativeLayout } private CharSequence formatFrom(Recipients from, long count, boolean read) { + int attributes[] = new int[] {R.attr.conversation_list_item_count_color}; + TypedArray colors = context.obtainStyledAttributes(attributes); + String fromString = from.toShortString(); SpannableStringBuilder builder = new SpannableStringBuilder(fromString); if (count > 0) { builder.append(" " + count); - builder.setSpan(new ForegroundColorSpan(Color.parseColor("#66333333")), + builder.setSpan(new ForegroundColorSpan(colors.getColor(0,0)), fromString.length(), builder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } @@ -177,6 +189,7 @@ public class ConversationListItem extends RelativeLayout Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } + colors.recycle(); return builder; } diff --git a/src/org/thoughtcrime/securesms/CountrySelectionActivity.java b/src/org/thoughtcrime/securesms/CountrySelectionActivity.java index 30b945e3a0..b0a0f07d0e 100644 --- a/src/org/thoughtcrime/securesms/CountrySelectionActivity.java +++ b/src/org/thoughtcrime/securesms/CountrySelectionActivity.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.os.Bundle; import com.actionbarsherlock.app.SherlockFragmentActivity; +import org.thoughtcrime.securesms.util.DynamicTheme; public class CountrySelectionActivity extends SherlockFragmentActivity implements CountrySelectionFragment.CountrySelectedListener diff --git a/src/org/thoughtcrime/securesms/KeyScanningActivity.java b/src/org/thoughtcrime/securesms/KeyScanningActivity.java index 88d5977fd8..a0fce06d20 100644 --- a/src/org/thoughtcrime/securesms/KeyScanningActivity.java +++ b/src/org/thoughtcrime/securesms/KeyScanningActivity.java @@ -17,11 +17,13 @@ package org.thoughtcrime.securesms; import android.content.Intent; +import android.os.Bundle; import android.widget.Toast; import org.thoughtcrime.securesms.crypto.SerializableKey; import org.thoughtcrime.securesms.util.Base64; import org.thoughtcrime.securesms.util.Dialogs; +import org.thoughtcrime.securesms.util.DynamicTheme; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; @@ -36,6 +38,20 @@ import com.google.zxing.integration.android.IntentResult; */ public abstract class KeyScanningActivity extends PassphraseRequiredSherlockActivity { + private final DynamicTheme dynamicTheme = new DynamicTheme(); + + @Override + protected void onCreate(Bundle bundle) { + dynamicTheme.onCreate(this); + super.onCreate(bundle); + } + + @Override + public void onResume() { + super.onResume(); + dynamicTheme.onResume(this); + } + @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); diff --git a/src/org/thoughtcrime/securesms/ReviewIdentitiesActivity.java b/src/org/thoughtcrime/securesms/ReviewIdentitiesActivity.java index 9c657117c7..4611c75fc0 100644 --- a/src/org/thoughtcrime/securesms/ReviewIdentitiesActivity.java +++ b/src/org/thoughtcrime/securesms/ReviewIdentitiesActivity.java @@ -20,14 +20,26 @@ import android.os.Bundle; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.MenuItem; +import org.thoughtcrime.securesms.util.DynamicTheme; public class ReviewIdentitiesActivity extends SherlockFragmentActivity { + + private final DynamicTheme dynamicTheme = new DynamicTheme(); + + @Override public void onCreate(Bundle bundle) { + dynamicTheme.onCreate(this); super.onCreate(bundle); setContentView(R.layout.review_identities); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } + @Override + public void onResume() { + super.onResume(); + dynamicTheme.onResume(this); + } + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { diff --git a/src/org/thoughtcrime/securesms/components/ImageDivet.java b/src/org/thoughtcrime/securesms/components/ImageDivet.java index 3f3e580217..92cf7d95a6 100644 --- a/src/org/thoughtcrime/securesms/components/ImageDivet.java +++ b/src/org/thoughtcrime/securesms/components/ImageDivet.java @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.components; import android.content.Context; import android.content.res.Resources; +import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; @@ -45,19 +46,24 @@ public class ImageDivet extends ImageView { } private void setDrawable() { - Resources r = getContext().getResources(); + int attributes[] = new int[] {R.attr.conversation_avatar_divet_left, + R.attr.conversation_avatar_divet_right}; + + TypedArray drawables = getContext().obtainStyledAttributes(attributes); switch (position) { case 0: - drawable = r.getDrawable(R.drawable.divet_right); + drawable = drawables.getDrawable(1); break; case 1: - drawable = r.getDrawable(R.drawable.divet_left); + drawable = drawables.getDrawable(0); break; } drawableIntrinsicWidth = drawable.getIntrinsicWidth(); drawableIntrinsicHeight = drawable.getIntrinsicHeight(); + + drawables.recycle(); } @Override diff --git a/src/org/thoughtcrime/securesms/mms/ImageSlide.java b/src/org/thoughtcrime/securesms/mms/ImageSlide.java index 09089e60d2..f993b059b5 100644 --- a/src/org/thoughtcrime/securesms/mms/ImageSlide.java +++ b/src/org/thoughtcrime/securesms/mms/ImageSlide.java @@ -103,6 +103,9 @@ public class ImageSlide extends Slide { imageView.setImageDrawable(temporaryDrawable); + if (maxWidth == 0 || maxHeight == 0) + return; + MmsDatabase.slideResolver.execute(new Runnable() { @Override public void run() { diff --git a/src/org/thoughtcrime/securesms/util/DynamicTheme.java b/src/org/thoughtcrime/securesms/util/DynamicTheme.java new file mode 100644 index 0000000000..183b1403f9 --- /dev/null +++ b/src/org/thoughtcrime/securesms/util/DynamicTheme.java @@ -0,0 +1,61 @@ +package org.thoughtcrime.securesms.util; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.preference.PreferenceManager; + +import org.thoughtcrime.securesms.ApplicationPreferencesActivity; +import org.thoughtcrime.securesms.R; + +public class DynamicTheme { + + private int currentTheme; + + public void onCreate(Activity activity) { + currentTheme = getSelectedTheme(activity); + activity.setTheme(currentTheme); + } + + public void onResume(Activity activity) { + if (currentTheme != getSelectedTheme(activity)) { + Intent intent = activity.getIntent(); + intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + + activity.startActivity(intent); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { + OverridePendingTransition.invoke(activity); + } + + activity.finish(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { + OverridePendingTransition.invoke(activity); + } + + } + } + + public static int getSelectedTheme(Context context) { + String theme = PreferenceManager.getDefaultSharedPreferences(context) + .getString(ApplicationPreferencesActivity.THEME_PREF, "light"); + + return getSelectedTheme(theme); + } + + public static int getSelectedTheme(String theme) { + if (theme.equals("light")) { + return R.style.TextSecure_LightTheme; + } else if (theme.equals("dark")) { + return R.style.TextSecure_DarkTheme; + } + + return R.style.TextSecure_LightTheme; + } + + private static final class OverridePendingTransition { + static void invoke(Activity activity) { + activity.overridePendingTransition(0, 0); + } + } +} diff --git a/src/org/thoughtcrime/securesms/util/Util.java b/src/org/thoughtcrime/securesms/util/Util.java index d52c647480..dc3a0617e3 100644 --- a/src/org/thoughtcrime/securesms/util/Util.java +++ b/src/org/thoughtcrime/securesms/util/Util.java @@ -184,7 +184,6 @@ public class Util { return new String(bout.toByteArray()); } - // public static Bitmap loadScaledBitmap(InputStream src, int targetWidth, int targetHeight) { // return BitmapFactory.decodeStream(src); //// BitmapFactory.Options options = new BitmapFactory.Options();