From 318c00483cf2a15a1559589e32ee12ee7f6f4210 Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Thu, 8 Jul 2021 12:05:21 -0400 Subject: [PATCH 1/2] AnalogClock: Allow subclasses to override the "now" instant. Allows you to use the (deprecated) AnalogClock widget to display times other than the current system clock time. While we're at it, update the AnalogClock widget assets to contemporary vector drawables. Bug: 177962166 Test: atest AnalogClockTest Change-Id: I69e9e89b8f42030e910086ee79bb5a447a00bb84 --- core/java/android/widget/AnalogClock.java | 20 +++++++++++++++--- core/res/res/drawable-hdpi/clock_dial.png | Bin 10519 -> 0 bytes .../res/res/drawable-hdpi/clock_hand_hour.png | Bin 2196 -> 0 bytes .../res/drawable-hdpi/clock_hand_minute.png | Bin 2518 -> 0 bytes core/res/res/drawable-ldpi/clock_dial.png | Bin 3086 -> 0 bytes .../res/res/drawable-ldpi/clock_hand_hour.png | Bin 820 -> 0 bytes .../res/drawable-ldpi/clock_hand_minute.png | Bin 913 -> 0 bytes core/res/res/drawable-mdpi/clock_dial.png | Bin 7384 -> 0 bytes .../res/res/drawable-mdpi/clock_hand_hour.png | Bin 1412 -> 0 bytes .../res/drawable-mdpi/clock_hand_minute.png | Bin 1550 -> 0 bytes core/res/res/drawable-nodpi/clock_dial.xml | 10 +++++++++ .../res/drawable-nodpi/clock_hand_hour.xml | 10 +++++++++ .../res/drawable-nodpi/clock_hand_minute.xml | 10 +++++++++ core/res/res/drawable-xhdpi/clock_dial.png | Bin 12539 -> 0 bytes .../res/drawable-xhdpi/clock_hand_hour.png | Bin 2642 -> 0 bytes .../res/drawable-xhdpi/clock_hand_minute.png | Bin 3115 -> 0 bytes 16 files changed, 47 insertions(+), 3 deletions(-) delete mode 100644 core/res/res/drawable-hdpi/clock_dial.png delete mode 100644 core/res/res/drawable-hdpi/clock_hand_hour.png delete mode 100644 core/res/res/drawable-hdpi/clock_hand_minute.png delete mode 100644 core/res/res/drawable-ldpi/clock_dial.png delete mode 100644 core/res/res/drawable-ldpi/clock_hand_hour.png delete mode 100644 core/res/res/drawable-ldpi/clock_hand_minute.png delete mode 100644 core/res/res/drawable-mdpi/clock_dial.png delete mode 100644 core/res/res/drawable-mdpi/clock_hand_hour.png delete mode 100644 core/res/res/drawable-mdpi/clock_hand_minute.png create mode 100644 core/res/res/drawable-nodpi/clock_dial.xml create mode 100644 core/res/res/drawable-nodpi/clock_hand_hour.xml create mode 100644 core/res/res/drawable-nodpi/clock_hand_minute.xml delete mode 100644 core/res/res/drawable-xhdpi/clock_dial.png delete mode 100644 core/res/res/drawable-xhdpi/clock_hand_hour.png delete mode 100644 core/res/res/drawable-xhdpi/clock_hand_minute.png diff --git a/core/java/android/widget/AnalogClock.java b/core/java/android/widget/AnalogClock.java index 9c1285064afb6..3df09c24ca302 100644 --- a/core/java/android/widget/AnalogClock.java +++ b/core/java/android/widget/AnalogClock.java @@ -740,8 +740,22 @@ public class AnalogClock extends View { } } - private void onTimeChanged() { - Instant now = mClock.instant(); + /** + * Return the current Instant to be used for drawing the clockface. Protected to allow + * subclasses to override this to show a different time from the system clock. + * + * @return the Instant to be shown on the clockface + * @hide + */ + protected Instant now() { + return mClock.instant(); + } + + /** + * @hide + */ + protected void onTimeChanged() { + Instant now = now(); onTimeChanged(now.atZone(mClock.getZone()).toLocalTime(), now.toEpochMilli()); } @@ -789,7 +803,7 @@ public class AnalogClock extends View { return; } - Instant now = mClock.instant(); + Instant now = now(); ZonedDateTime zonedDateTime = now.atZone(mClock.getZone()); LocalTime localTime = zonedDateTime.toLocalTime(); diff --git a/core/res/res/drawable-hdpi/clock_dial.png b/core/res/res/drawable-hdpi/clock_dial.png deleted file mode 100644 index 9de29bc0e53e1402558c51815c1cdcb8bb7d1598..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10519 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 HFyMay?v7~y diff --git a/core/res/res/drawable-hdpi/clock_hand_hour.png b/core/res/res/drawable-hdpi/clock_hand_hour.png deleted file mode 100644 index 9f7e5c02d49cf8109eb59dce0e70e1f3474b1251..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2196 zcmbVO`#Tc~1KuWvqLN#r+|4A{a-F8nFb+1fHso%YB8&aNh`UjBZLeqO%Op?!X)0D#~%q=mV2)bvK)P{=te z@m_ztT+B}mBsx1QQ_<$BA!C$p!lr#UVN59=j{a3lf3pnAv8fVQP{@Ri%qyZ0P>B$i~-lY%0%^K z|2zE3V5m$W)&15^y0w!cloNs`s>$~TcOLKYF#7Km9xINLHe528am@iJj`lKut0(Q8 zE%inpR6Ht~xzZ1Ufl^bD){K0vK@6s?}kOuw3ze0Xzq*DFrd{?o10lpz>r!~q!=AYu zEsvu(JpM}?hr@9wf{4|)x9|Iq$v?|Xe*b!z1I&F68|8Zvn>0FUA@N6aD&>;~t-su|NI_LqmCd=OuF}6;#~des2DMg&Q6qFg zYoYHhbaAx!!dp>PJ(WsT6inRX0f*LijHmN1W&#`6s|*n8kO~>ls*v?dY~TEYMI)#% zVdyyp?&iUKsakmB-v5fLAV65*cri~s6*Y!wbcE6f(nZebRr7iN|0?}+eEheLuft7&Uew&=Qrv!mgl4|8?n_CtNF<%REa|sW4}UF5B$Q<;W( zWCkP=RGd(o$++_#2(8;LDatO3f+8kb;ZF{9;uK6}ghJQs(19!*Kt3WF31XSU7i*+A zq=V8c7{NMYA`8OL`qS|1>*5f^fiwRw)Sh+)arR;x#LA#hL6wU`3cHOEfGiQ z&v2yI9-aarCX&W2HPO-i)LOSo8oA;{OvuAWm8KGf0S-8neuIfxn~p*~Rq-eD7J|l& zLse#-pg?^%b$B(L#iyBItt8rTJF>dB$3mmRGPJW_aOxIa{#p>SUMvFE6AEH(4y_815 zWRXUIRdix-b5lzQd=+v3VWck;7w~Qn>BBHV^HmB^PCcWLh z!i3r7AKgFBRw1IGoBPy$T<*iBs7UYwFWr6-cY0z$1*=}7(c5_+G%(9OQ6GPmrlLK=qAR zk0!fuNcM_#Ae?tqM!!61i@om|7N&cI9XUGG^Q)Blj7vd9+nj?K=U;nz2NmVMwMbeC z6J@@r2rLCx)J!l4(XEFKI@92j58{L+?AA%f3lqH4FwLx~TCwc%lKd5Jptu0e4v@V> zupu45c|D?Y&;3$$IwbcHz>O0vpRiJ49R4Md1V(y4J5ugQ};I~B|l$omcK=H zo~s0F$d*f8=XuNh6gUV93X1QD;(^AIC2Na|g$bQ!U0q#k7AMba?q)Y>-s}Yt#<~qA zV-A1tJRAzlZpUx0KJ7XqUHWByo{n{Qm(+gaXSjoTJM&{&f#LHQy|kMyFvmX=x4SV_ z(;Pe}CMzrZ+7--Nrm8t~CxK6Q|2)_WdB>3xA!*wq+AK!WI}8&$T4MIT4t?wC)Vgwo za$J5V({Rb}-XPwuM2X()3|$g1I|A`qC`lGIzWkbgX=px5V{Jo2!?se#)L%JToh|nk z6T1eg1F)0kp}cR4|9M?krzr3IEO?=#U9g5+B{5eoMu0GhDoHm#a75kQuItWB^1_P( zYaPChFXMwVv*@b=Ic5sKK1t-?j6F4IPT)nR-YwM3R+XYg}NE=O%i8m^qzxiKh)5#Jj?- qdH7KeYyAJ^w*KF->-)R{03QI$l_kju$~GR~3;+^gZ&7{2Gw~l;@($Mk diff --git a/core/res/res/drawable-hdpi/clock_hand_minute.png b/core/res/res/drawable-hdpi/clock_hand_minute.png deleted file mode 100644 index 2eec38060c45dfb8a413aa5a60e1b54dbcaecff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2518 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 TJeg_(RK(!v>gTe~DWM4fVs=_B diff --git a/core/res/res/drawable-ldpi/clock_hand_minute.png b/core/res/res/drawable-ldpi/clock_hand_minute.png deleted file mode 100644 index 5c73d45ada5c007d0fdc668c8c5d230d022559b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 913 zcmeAS@N?(olHy`uVBq!ia0vp^qCi~2!2%=?Y}@z-U!5 z-`!zu{wLqry46KVaEi}NqqlCVZ0+uaM=ix;o^8llIO~Yp#?J-iCYJg;lP-NbE4m}t zroQsW!kWSt^NMC)s7sYQwxRC($9Lb1=jGh5K4N9Xf5Xl6|np|bXtcSWqO1<}_V zT5cX$yeq~r(Pv@<)AqhR@wCP0LtP9)qH`Hk?yW1jdhi@m#r5_k7gcNi4VOZXa+%hya9KDxb7$G~ z)HTzKL)LRlm^Ayp&t`^A+@XdcD<&T++sVapiOo7bD(Qvp>C_C4z3a~HmfFhAo_6qR zMf~D(-%A}b<+HBn$jsQbddoT|+p=f7R2m!>ZOILIT=hF^?&-j*R~b8d_Em{p*rxsZ z&-+UYj+Lgec5*_c`Kx)BwXVtw z*&cAaeO1VG)lS>UsTTsx*R{Hq=Q;M2hH^}DeL6RH=dl+?{ifPJ`?mTXS3Q-kQ6c!~ z(;A_d&V6jxx@>YEYX#V~ip{$AxoqpET>{1?g59Z+jt#|@Q38)XO%4sx$~3x?B=Xd# zt)m->P;-Tmj?yF2_OWNUue%)55_@8k8qduD_v&RQL~ z;CRz){&)EbJDw=7zgK(v@r27-PIcYWeD=%ynep$&AGv$~tNxa~=e7TNct?@w%+-p8 z&ARK7cRuL2FH?Ap40zvD=alGbkZ>5k28yiz6^7Z%hn+HdnW zf5|2OC7#SEE=o%X88W@Eb8d@2cSQ(q@8kk!d7)%sj zbsI%PZhlH;S|x4`54?mxc|sCoLvVgtNqJ&XDuZK6ep0G}XKrG8YEWuoN@d~6R2!fo N22WQ%mvv4FO#o#Whsyu} diff --git a/core/res/res/drawable-mdpi/clock_dial.png b/core/res/res/drawable-mdpi/clock_dial.png deleted file mode 100644 index 82f73fec042300b7fdf1697c25bb1be70a6522c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7384 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 EKk|1g$p8QV diff --git a/core/res/res/drawable-mdpi/clock_hand_hour.png b/core/res/res/drawable-mdpi/clock_hand_hour.png deleted file mode 100644 index 1f0aec80ba14a422226c1db0b3c1774f3b0447b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1412 zcmV-~1$+95P)e?S4AHP~(U;ow?f3@-!qs za8{t)M(dlBovf&qy2dU|kz_?t4EsPiBW)XBiV&YHP^F!iT}EJta(pPngi9Lcv;BKk)(pmg@Jt8#jKOt8Gc2j~ zFrQE$JWC^eqnn14q}%OwXk&Pm)PXhCP-8Dcyp5hjL&f;h5u3CoFwL07G-G=@aOh$+ z3~B1@u)_d5V2802Uh^rnCZHIzQ15C=$ELL=P*-WG1BYMk7pFGTkF6m*OCvTsWaygH zsUj~vx<>y-cBs)wjk}VVhpFS*up>71?DBDl26d*wc{g@#W_fveHUxw^Gs!Nk@-o3G zWgK{P4OIl3%*@P8g@90(M6|2irF1RK>gwvV5D@B2pzlO$=!{-hyk^H7c#E6T#=&=z zAglwYZVEOlD=Qy{fKX=weJ7hz8)(xI5bFN%ltv>(!-%088NQ8sk3vAGt7rIuGztB+ z2|nV}3+j@{7!MIczk^88C}QXu#|!_G8oSa8ryX={94y=3-u@y+gEmwO8 zCIO*Ml>+tCmsM`9Nt+O`BzL{IxcE_QAZVilW3WIj8|bnR$-=_I2QeVDNl=oH%|>ZP zJDN!FMb=OG``aG2`s)?5#aWeQ%3DTlw9}pH|+0TtP<4B?0qilRfl#wkecrbMnM( z#=X70uY0|oJHwPGCnqoV_xFFaq2g= z1%q87jjmCW&p+#94UNl3Lx?KThUqi8?Rx~kncsV8e}^D^yZ-IZ zc}o6OP=Epypa2CZKmiI+fC3bt00k&O0SZun0u-PC1t>rP3Q&Lo{I3H45?}x=_U+od SF{ot#0000n+GoRE-_IODH4A$MrW88S$a-HG5N z+p>WJmYs3;UiGTBwjVXi>7pK~G_%u>Z>zexx@T%sUDx7kiV|P>$iNKDz=@-X6-skV z(`jvIcoQH2$-sHkKRvtlK5!9%$%HsaP;6fm8ZxQtR0RYBtAJpw{Xn9f?N|o{0|y=v z0G-gXh-jyw+)9bA3j%yb(kEq-Y8e7L)7kPC5(idD3kP~aunOwbO@L0b86+(@Yp83@ z_XseBG@@h40%`<&Wn>o4n?_ck?gt}(8u^5@9)Q-$GleFAl4$5Ovaq(1rIVABpAHTV zzPFXn&dz>6Iy(BxTz>SJxR3g)W1)?jw1rIi&cJ@?^?L8D*lT-_m>iF@OvO@3OzNN` z@L(`-<0s%6gB(mFpiBjC?4=Z1m?jR8FVYMubuSR6-iY)=aiZ>9t;2S(&4i;hs*kje4mMZ0nVKdwX5l0o*H5U((YLOT!5<(_kXl z!#&A0Ytu0lFRiZ2zAOGTe)KYGbEyfw|n=+-o)w8vDDM!djFMbk**U4-Z6<|cwS+*8xeLm4qkVH{-E<218m z2mi&ECzW_P!PhXdpK0Pi(bdB3Ynp_%BJnn4sy$6eyJCBLdnrVNvLd2oa9V^WezCE! zu^0kESrM7|k{jAYY-tKCQKCs`3p$Q((g#+I=vXR_haoLu8glkUe5YAkTbmC7p=@fW z@%`4_Zue~n2xXenm*Pel#u&1q4L7t222eB!-l>fccjuk#D>e`DpR!L*?GO#hbRv*6 zi!{s2%dbN~D4ROcu=XYm_Cl;_(G(U7jb05?&jn3GTd*(1^tQq{#!SR%W+G$Aa+-;k z39GBCWe5mmn&Sg1k}`-s=QVh)l=#&QH_A8J(?q?M6WUZNgM;=ps>!}I6po7h{rzr= z26c*509TA{ezCBy&`trNPLbN~v!3x|t9@eCZ?y9kFNieB2hxxyx*eNlXsA>D2*ztk z`}$w^dcAK`K&YdA2`&s)5zxpA=8Y>6|(ixJdvXYlqIG9F!8{ z8P3|1I~v%GT+&-U*BOwuHA#5Y)C3jE0lE~O1y&4TMcbi2P=`!PVOAb)Zf-uNfKcaw zv~~TBw8ZbSTaZ1o5u;=M0M6go2c(OOi=Wrm*S!(v^78V|JVE_pE-#GyZRB4g|AE{= z_RXgJ20D@$!RgoM>+9>m&d$zvi;Igb3OhVJ{PpVU>JRhtA0zhw_=IwceW$4}eP`X< z?!w-HwBfv9clF1|$3L1~ntcGR&(F`_pPrunX0G2Gv1z?q(C8NA9?bj%Ca!3TphTv9 z4bq15E07LkV+3?|i!{0i;2pX*reQIhWS>|48ad1pi9!`LasZrIcKP2&k13y#(+nqc zLA=ztcAvlo&_OBuS#Ae?0N5ka3eU%}l^g@{J*RaGWznRk{0W(_?*Wds1p>?}kVb-N z=Q_k0G=Za0VE&D?a~}^Bo}gWMLfo_Pr&;MxR3yBG^Z3Mh1PQ=2!zRg!K;!0E3=Mu7 z;R@W>DUqit-%>`;yw6)`MKrcGXO9v4ct>#do2d?(9{H=U49vg`%)kuHzzod549vg` z%)kuHzzod549vg`%)kuHzzod549r08@xK5A0ITm{kG+Po#Q*>R07*qoM6N<$f + + + diff --git a/core/res/res/drawable-nodpi/clock_hand_hour.xml b/core/res/res/drawable-nodpi/clock_hand_hour.xml new file mode 100644 index 0000000000000..de165a429a578 --- /dev/null +++ b/core/res/res/drawable-nodpi/clock_hand_hour.xml @@ -0,0 +1,10 @@ + + + + diff --git a/core/res/res/drawable-nodpi/clock_hand_minute.xml b/core/res/res/drawable-nodpi/clock_hand_minute.xml new file mode 100644 index 0000000000000..72cac6e88597a --- /dev/null +++ b/core/res/res/drawable-nodpi/clock_hand_minute.xml @@ -0,0 +1,10 @@ + + + + diff --git a/core/res/res/drawable-xhdpi/clock_dial.png b/core/res/res/drawable-xhdpi/clock_dial.png deleted file mode 100644 index 6cb60a296ed8b7e86a0cd3ae89d8c0ea9687691c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12539 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 t@ZG`O)x*fy3?O3aU~EPrZD(X*rebDf>g6{wF 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 C0JPlz From 28f8033d8065d14a362ea26aa77272ea18dd6df4 Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Fri, 9 Jul 2021 02:27:18 -0400 Subject: [PATCH 2/2] Bubbling up some of these great new colors. Bug: 177962166 Test: adb shell am start -n android/com.android.internal.app.PlatLogoActivity Change-Id: I92cfe3f9e2294d888dfaa5f30591885804d8302b --- .../internal/app/PlatLogoActivity.java | 490 +++++++++--------- core/res/AndroidManifest.xml | 4 +- core/res/res/drawable-nodpi/platlogo.xml | 82 ++- 3 files changed, 272 insertions(+), 304 deletions(-) diff --git a/core/java/com/android/internal/app/PlatLogoActivity.java b/core/java/com/android/internal/app/PlatLogoActivity.java index 986bbc8628ec1..b7f6a615a4521 100644 --- a/core/java/com/android/internal/app/PlatLogoActivity.java +++ b/core/java/com/android/internal/app/PlatLogoActivity.java @@ -16,9 +16,9 @@ package com.android.internal.app; +import static android.graphics.PixelFormat.TRANSLUCENT; + import android.animation.ObjectAnimator; -import android.annotation.NonNull; -import android.annotation.Nullable; import android.app.ActionBar; import android.app.Activity; import android.content.ActivityNotFoundException; @@ -26,22 +26,21 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.ColorFilter; -import android.graphics.LinearGradient; import android.graphics.Paint; -import android.graphics.PixelFormat; import android.graphics.Rect; -import android.graphics.Shader; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.provider.Settings; -import android.util.AttributeSet; +import android.util.DisplayMetrics; import android.util.Log; +import android.view.Gravity; import android.view.HapticFeedbackConstants; import android.view.MotionEvent; import android.view.View; -import android.view.animation.PathInterpolator; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.OvershootInterpolator; +import android.widget.AnalogClock; import android.widget.FrameLayout; import android.widget.ImageView; @@ -49,17 +48,22 @@ import com.android.internal.R; import org.json.JSONObject; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; + /** * @hide */ public class PlatLogoActivity extends Activity { - private static final boolean WRITE_SETTINGS = true; + private static final String TAG = "PlatLogoActivity"; - private static final String R_EGG_UNLOCK_SETTING = "egg_mode_r"; + private static final String S_EGG_UNLOCK_SETTING = "egg_mode_s"; - private static final int UNLOCK_TRIES = 3; - - BigDialView mDialView; + private SettableAnalogClock mClock; + private ImageView mLogo; + private BubblesDrawable mBg; @Override protected void onPause() { @@ -69,42 +73,81 @@ public class PlatLogoActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - final float dp = getResources().getDisplayMetrics().density; - getWindow().getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); getWindow().setNavigationBarColor(0); getWindow().setStatusBarColor(0); final ActionBar ab = getActionBar(); if (ab != null) ab.hide(); - mDialView = new BigDialView(this, null); - if (Settings.System.getLong(getContentResolver(), - R_EGG_UNLOCK_SETTING, 0) == 0) { - mDialView.setUnlockTries(UNLOCK_TRIES); - } else { - mDialView.setUnlockTries(0); - } - final FrameLayout layout = new FrameLayout(this); - layout.setBackgroundColor(0xFFFF0000); - layout.addView(mDialView, FrameLayout.LayoutParams.MATCH_PARENT, - FrameLayout.LayoutParams.MATCH_PARENT); + + mClock = new SettableAnalogClock(this); + + final DisplayMetrics dm = getResources().getDisplayMetrics(); + final float dp = dm.density; + final int minSide = Math.min(dm.widthPixels, dm.heightPixels); + final int widgetSize = (int) (minSide * 0.75); + final FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(widgetSize, widgetSize); + lp.gravity = Gravity.CENTER; + layout.addView(mClock, lp); + + mLogo = new ImageView(this); + mLogo.setVisibility(View.GONE); + mLogo.setImageResource(R.drawable.platlogo); + layout.addView(mLogo, lp); + + mBg = new BubblesDrawable(); + mBg.setLevel(0); + mBg.avoid = widgetSize / 2; + mBg.padding = 0.5f * dp; + mBg.minR = 1 * dp; + layout.setBackground(mBg); + setContentView(layout); } + private boolean shouldWriteSettings() { + return getPackageName().equals("android"); + } + private void launchNextStage(boolean locked) { + mClock.animate() + .alpha(0f).scaleX(0.5f).scaleY(0.5f) + .withEndAction(() -> mClock.setVisibility(View.GONE)) + .start(); + + mLogo.setAlpha(0f); + mLogo.setScaleX(0.5f); + mLogo.setScaleY(0.5f); + mLogo.setVisibility(View.VISIBLE); + mLogo.animate() + .alpha(1f) + .scaleX(1f) + .scaleY(1f) + .setInterpolator(new OvershootInterpolator()) + .start(); + + mLogo.postDelayed(() -> { + final ObjectAnimator anim = ObjectAnimator.ofInt(mBg, "level", 0, 10000); + anim.setInterpolator(new DecelerateInterpolator(1f)); + anim.start(); + }, + 500 + ); + final ContentResolver cr = getContentResolver(); try { - if (WRITE_SETTINGS) { + if (shouldWriteSettings()) { + Log.v(TAG, "Saving egg unlock=" + locked); + syncTouchPressure(); Settings.System.putLong(cr, - R_EGG_UNLOCK_SETTING, + S_EGG_UNLOCK_SETTING, locked ? 0 : System.currentTimeMillis()); } } catch (RuntimeException e) { - Log.e("com.android.internal.app.PlatLogoActivity", "Can't write settings", e); + Log.e(TAG, "Can't write settings", e); } try { @@ -151,7 +194,7 @@ public class PlatLogoActivity extends Activity { if (mPressureMax >= 0) { touchData.put("min", mPressureMin); touchData.put("max", mPressureMax); - if (WRITE_SETTINGS) { + if (shouldWriteSettings()) { Settings.System.putString(getContentResolver(), TOUCH_STATS, touchData.toString()); } @@ -173,44 +216,35 @@ public class PlatLogoActivity extends Activity { super.onStop(); } - class BigDialView extends ImageView { - private static final int COLOR_GREEN = 0xff3ddc84; - private static final int COLOR_BLUE = 0xff4285f4; - private static final int COLOR_NAVY = 0xff073042; - private static final int COLOR_ORANGE = 0xfff86734; - private static final int COLOR_CHARTREUSE = 0xffeff7cf; - private static final int COLOR_LIGHTBLUE = 0xffd7effe; + /** + * Subclass of AnalogClock that allows the user to flip up the glass and adjust the hands. + */ + public class SettableAnalogClock extends AnalogClock { + private int mOverrideHour = -1; + private int mOverrideMinute = -1; + private boolean mOverride = false; - private static final int STEPS = 11; - private static final float VALUE_CHANGE_MAX = 1f / STEPS; - - private BigDialDrawable mDialDrawable; - private boolean mWasLocked; - - BigDialView(Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - init(); - } - - BigDialView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } - - BigDialView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, - int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - init(); - } - - private void init() { - mDialDrawable = new BigDialDrawable(); - setImageDrawable(mDialDrawable); + public SettableAnalogClock(Context context) { + super(context); } @Override - public void onDraw(Canvas c) { - super.onDraw(c); + protected Instant now() { + final Instant realNow = super.now(); + final ZoneId tz = Clock.systemDefaultZone().getZone(); + final ZonedDateTime zdTime = realNow.atZone(tz); + if (mOverride) { + if (mOverrideHour < 0) { + mOverrideHour = zdTime.getHour(); + } + return Clock.fixed(zdTime + .withHour(mOverrideHour) + .withMinute(mOverrideMinute) + .withSecond(0) + .toInstant(), tz).instant(); + } else { + return realNow; + } } double toPositiveDegrees(double rad) { @@ -221,226 +255,174 @@ public class PlatLogoActivity extends Activity { public boolean onTouchEvent(MotionEvent ev) { switch (ev.getActionMasked()) { case MotionEvent.ACTION_DOWN: - mWasLocked = mDialDrawable.isLocked(); + mOverride = true; // pass through case MotionEvent.ACTION_MOVE: + measureTouchPressure(ev); + float x = ev.getX(); float y = ev.getY(); - float cx = (getLeft() + getRight()) / 2f; - float cy = (getTop() + getBottom()) / 2f; + float cx = getWidth() / 2f; + float cy = getHeight() / 2f; float angle = (float) toPositiveDegrees(Math.atan2(x - cx, y - cy)); - final int oldLevel = mDialDrawable.getUserLevel(); - mDialDrawable.touchAngle(angle); - final int newLevel = mDialDrawable.getUserLevel(); - if (oldLevel != newLevel) { - performHapticFeedback(newLevel == STEPS - ? HapticFeedbackConstants.CONFIRM - : HapticFeedbackConstants.CLOCK_TICK); + + int minutes = (75 - (int) (angle / 6)) % 60; + int minuteDelta = minutes - mOverrideMinute; + if (minuteDelta != 0) { + if (Math.abs(minuteDelta) > 45 && mOverrideHour >= 0) { + int hourDelta = (minuteDelta < 0) ? 1 : -1; + mOverrideHour = (mOverrideHour + 24 + hourDelta) % 24; + } + mOverrideMinute = minutes; + if (mOverrideMinute == 0) { + performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + if (getScaleX() == 1f) { + setScaleX(1.05f); + setScaleY(1.05f); + animate().scaleX(1f).scaleY(1f).setDuration(150).start(); + } + } else { + performHapticFeedback(HapticFeedbackConstants.CLOCK_TICK); + } + + onTimeChanged(); + postInvalidate(); } + return true; case MotionEvent.ACTION_UP: - if (mWasLocked != mDialDrawable.isLocked()) { - launchNextStage(mDialDrawable.isLocked()); + if (mOverrideMinute == 0 && (mOverrideHour % 12) == 0) { + Log.v(TAG, "12:00 let's gooooo"); + performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); + launchNextStage(false); } return true; } return false; } + } + + static class Bubble { + public float x, y, r; + public int color; + } + + class BubblesDrawable extends Drawable { + private static final int MAX_BUBBS = 2000; + + private final int[] mColorIds = { + android.R.color.system_accent1_400, + android.R.color.system_accent1_500, + android.R.color.system_accent1_600, + + android.R.color.system_accent2_400, + android.R.color.system_accent2_500, + android.R.color.system_accent2_600, + }; + + private int[] mColors = new int[mColorIds.length]; + + private final Bubble[] mBubbs = new Bubble[MAX_BUBBS]; + private int mNumBubbs; + + private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + + public float avoid = 0f; + public float padding = 0f; + public float minR = 0f; + + BubblesDrawable() { + for (int i = 0; i < mColorIds.length; i++) { + mColors[i] = getColor(mColorIds[i]); + } + for (int j = 0; j < mBubbs.length; j++) { + mBubbs[j] = new Bubble(); + } + } @Override - public boolean performClick() { - if (mDialDrawable.getUserLevel() < STEPS - 1) { - mDialDrawable.setUserLevel(mDialDrawable.getUserLevel() + 1); - performHapticFeedback(HapticFeedbackConstants.CLOCK_TICK); + public void draw(Canvas canvas) { + final float f = getLevel() / 10000f; + mPaint.setStyle(Paint.Style.FILL); + int drawn = 0; + for (int j = 0; j < mNumBubbs; j++) { + if (mBubbs[j].color == 0 || mBubbs[j].r == 0) continue; + mPaint.setColor(mBubbs[j].color); + canvas.drawCircle(mBubbs[j].x, mBubbs[j].y, mBubbs[j].r * f, mPaint); + drawn++; } + } + + @Override + protected boolean onLevelChange(int level) { + invalidateSelf(); return true; } - void setUnlockTries(int tries) { - mDialDrawable.setUnlockTries(tries); + @Override + protected void onBoundsChange(Rect bounds) { + super.onBoundsChange(bounds); + randomize(); } - private class BigDialDrawable extends Drawable { - public final int STEPS = 10; - private int mUnlockTries = 0; - final Paint mPaint = new Paint(); - final Drawable mEleven; - private boolean mNightMode; - private float mValue = 0f; - float mElevenAnim = 0f; - ObjectAnimator mElevenShowAnimator = ObjectAnimator.ofFloat(this, "elevenAnim", 0f, - 1f).setDuration(300); - ObjectAnimator mElevenHideAnimator = ObjectAnimator.ofFloat(this, "elevenAnim", 1f, - 0f).setDuration(500); - - BigDialDrawable() { - mNightMode = getContext().getResources().getConfiguration().isNightModeActive(); - mEleven = getContext().getDrawable(R.drawable.ic_number11); - mElevenShowAnimator.setInterpolator(new PathInterpolator(0.4f, 0f, 0.2f, 1f)); - mElevenHideAnimator.setInterpolator(new PathInterpolator(0.8f, 0.2f, 0.6f, 1f)); + private void randomize() { + final float w = getBounds().width(); + final float h = getBounds().height(); + final float maxR = Math.min(w, h) / 3f; + mNumBubbs = 0; + if (avoid > 0f) { + mBubbs[mNumBubbs].x = w / 2f; + mBubbs[mNumBubbs].y = h / 2f; + mBubbs[mNumBubbs].r = avoid; + mBubbs[mNumBubbs].color = 0; + mNumBubbs++; } + for (int j = 0; j < MAX_BUBBS; j++) { + // a simple but time-tested bubble-packing algorithm: + // 1. pick a spot + // 2. shrink the bubble until it is no longer overlapping any other bubble + // 3. if the bubble hasn't popped, keep it + int tries = 5; + while (tries-- > 0) { + float x = (float) Math.random() * w; + float y = (float) Math.random() * h; + float r = Math.min(Math.min(x, w - x), Math.min(y, h - y)); - public void setUnlockTries(int count) { - if (mUnlockTries != count) { - mUnlockTries = count; - setValue(getValue()); - invalidateSelf(); - } - } - - boolean isLocked() { - return mUnlockTries > 0; - } - - public void setValue(float v) { - // until the dial is "unlocked", you can't turn it all the way to 11 - final float max = isLocked() ? 1f - 1f / STEPS : 1f; - mValue = v < 0f ? 0f : v > max ? max : v; - invalidateSelf(); - } - - public float getValue() { - return mValue; - } - - public int getUserLevel() { - return Math.round(getValue() * STEPS - 0.25f); - } - - public void setUserLevel(int i) { - setValue(getValue() + ((float) i) / STEPS); - } - - public float getElevenAnim() { - return mElevenAnim; - } - - public void setElevenAnim(float f) { - if (mElevenAnim != f) { - mElevenAnim = f; - invalidateSelf(); - } - } - - @Override - public void draw(@NonNull Canvas canvas) { - final Rect bounds = getBounds(); - final int w = bounds.width(); - final int h = bounds.height(); - final float w2 = w / 2f; - final float h2 = h / 2f; - final float radius = w / 4f; - - canvas.drawColor(mNightMode ? COLOR_NAVY : COLOR_LIGHTBLUE); - - canvas.save(); - canvas.rotate(45, w2, h2); - canvas.clipRect(w2, h2 - radius, Math.min(w, h), h2 + radius); - final int gradientColor = mNightMode ? 0x60000020 : (0x10FFFFFF & COLOR_NAVY); - mPaint.setShader( - new LinearGradient(w2, h2, Math.min(w, h), h2, gradientColor, - 0x00FFFFFF & gradientColor, Shader.TileMode.CLAMP)); - mPaint.setColor(Color.BLACK); - canvas.drawPaint(mPaint); - mPaint.setShader(null); - canvas.restore(); - - mPaint.setStyle(Paint.Style.FILL); - mPaint.setColor(COLOR_GREEN); - - canvas.drawCircle(w2, h2, radius, mPaint); - - mPaint.setColor(mNightMode ? COLOR_LIGHTBLUE : COLOR_NAVY); - final float cx = w * 0.85f; - for (int i = 0; i < STEPS; i++) { - final float f = (float) i / STEPS; - canvas.save(); - final float angle = valueToAngle(f); - canvas.rotate(-angle, w2, h2); - canvas.drawCircle(cx, h2, (i <= getUserLevel()) ? 20 : 5, mPaint); - canvas.restore(); - } - - if (mElevenAnim > 0f) { - final int color = COLOR_ORANGE; - final int size2 = (int) ((0.5 + 0.5f * mElevenAnim) * w / 14); - final float cx11 = cx + size2 / 4f; - mEleven.setBounds((int) cx11 - size2, (int) h2 - size2, - (int) cx11 + size2, (int) h2 + size2); - final int alpha = 0xFFFFFF | ((int) clamp(0xFF * 2 * mElevenAnim, 0, 0xFF) - << 24); - mEleven.setTint(alpha & color); - mEleven.draw(canvas); - } - - // don't want to use the rounded value here since the quantization will be visible - final float angle = valueToAngle(mValue); - - // it's easier to draw at far-right and rotate backwards - canvas.rotate(-angle, w2, h2); - mPaint.setColor(Color.WHITE); - final float dimple = w2 / 12f; - canvas.drawCircle(w - radius - dimple * 2, h2, dimple, mPaint); - } - - float clamp(float x, float a, float b) { - return x < a ? a : x > b ? b : x; - } - - float angleToValue(float a) { - return 1f - clamp(a / (360 - 45), 0f, 1f); - } - - // rotation: min is at 4:30, max is at 3:00 - float valueToAngle(float v) { - return (1f - v) * (360 - 45); - } - - public void touchAngle(float a) { - final int oldUserLevel = getUserLevel(); - final float newValue = angleToValue(a); - // this is how we prevent the knob from snapping from max back to min, or from - // jumping around wherever the user presses. The new value must be pretty close - // to the - // previous one. - if (Math.abs(newValue - getValue()) < VALUE_CHANGE_MAX) { - setValue(newValue); - - if (isLocked() && oldUserLevel != STEPS - 1 && getUserLevel() == STEPS - 1) { - mUnlockTries--; - } else if (!isLocked() && getUserLevel() == 0) { - mUnlockTries = UNLOCK_TRIES; + // shrink radius to fit other bubbs + for (int i = 0; i < mNumBubbs; i++) { + r = (float) Math.min(r, + Math.hypot(x - mBubbs[i].x, y - mBubbs[i].y) - mBubbs[i].r + - padding); + if (r < minR) break; } - if (!isLocked()) { - if (getUserLevel() == STEPS && mElevenAnim != 1f - && !mElevenShowAnimator.isRunning()) { - mElevenHideAnimator.cancel(); - mElevenShowAnimator.start(); - } else if (getUserLevel() != STEPS && mElevenAnim == 1f - && !mElevenHideAnimator.isRunning()) { - mElevenShowAnimator.cancel(); - mElevenHideAnimator.start(); - } + if (r >= minR) { + // we have found a spot for this bubble to live, let's save it and move on + r = Math.min(maxR, r); + + mBubbs[mNumBubbs].x = x; + mBubbs[mNumBubbs].y = y; + mBubbs[mNumBubbs].r = r; + mBubbs[mNumBubbs].color = mColors[(int) (Math.random() * mColors.length)]; + mNumBubbs++; + break; } } } + Log.v(TAG, String.format("successfully placed %d bubbles (%d%%)", + mNumBubbs, (int) (100f * mNumBubbs / MAX_BUBBS))); + } - @Override - public void setAlpha(int i) { - } + @Override + public void setAlpha(int alpha) { } - @Override - public void setColorFilter(@Nullable ColorFilter colorFilter) { - } + @Override + public void setColorFilter(ColorFilter colorFilter) { } - @Override - public int getOpacity() { - return PixelFormat.TRANSLUCENT; - } + @Override + public int getOpacity() { + return TRANSLUCENT; } } + } - - - diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 7b97902da0b18..4dec0ffccb5e2 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -5902,8 +5902,8 @@ android:process=":ui"> diff --git a/core/res/res/drawable-nodpi/platlogo.xml b/core/res/res/drawable-nodpi/platlogo.xml index b01eb3944b50c..1d67570cf4851 100644 --- a/core/res/res/drawable-nodpi/platlogo.xml +++ b/core/res/res/drawable-nodpi/platlogo.xml @@ -1,50 +1,36 @@ + - - - - - - - - - - - - - - - - + android:width="128dp" + android:height="128dp" + android:viewportWidth="128" + android:viewportHeight="128"> + + +