From d637531ab719eac932f7d8172954b26ecbc52876 Mon Sep 17 00:00:00 2001 From: Neil Fuller Date: Wed, 14 Jun 2017 14:17:37 +0100 Subject: [PATCH 01/42] Track move of tzdata: bionic to system/timezone Track the movement of the tzdata file from bionic to system/timezone. Bug: 31008728 Bug: 36882778 Test: make -j30 sdk Change-Id: I6cff023cb8b6eb7fec81a5ea61f3c06343f462f3 --- build/sdk.atree | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/sdk.atree b/build/sdk.atree index 658de57d4..cbad2bd99 100644 --- a/build/sdk.atree +++ b/build/sdk.atree @@ -216,7 +216,7 @@ docs/features.txt platforms/${PLATFORM_NAME}/data/featur ${FONT_OUT} platforms/${PLATFORM_NAME}/data/fonts # timezone data for layoutlib -bionic/libc/zoneinfo/tzdata platforms/${PLATFORM_NAME}/data/tzdata +system/timezone/output_data/iana/tzdata platforms/${PLATFORM_NAME}/data/tzdata # NOTICE files are copied by build/core/Makefile from sdk.git development/sdk/sdk_files_NOTICE.txt platforms/${PLATFORM_NAME}/templates/NOTICE.txt From 2859eb925ad2fba0b334c04bee7dc963ff9b64f5 Mon Sep 17 00:00:00 2001 From: Michal Karpinski Date: Mon, 19 Jun 2017 12:58:59 +0100 Subject: [PATCH 02/42] Add a rule for android-common-ex tests in testrunner Some tests were moved from frameworks/base 7 years ago (ag/54455), but the rule was never added so they couldn't have been run with testrunner. Test: testClass can be run with "runtest -c testClass android-common-ex" Bug: 62161211 Change-Id: Ie70f0fc32ceec59c3d89be75415adff34c1402ed --- testrunner/test_defs.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/testrunner/test_defs.xml b/testrunner/test_defs.xml index 75edadb62..377f80634 100644 --- a/testrunner/test_defs.xml +++ b/testrunner/test_defs.xml @@ -143,6 +143,12 @@ See test_defs.xsd for more information. coverage_target="framework" continuous="true" /> + + Date: Thu, 22 Jun 2017 18:30:03 +0100 Subject: [PATCH 03/42] Monkey: Dump the most recent ANR trace. Don't assume a single global trace file. /data/anr might contain multiple files - always dump the most recent. Test: Manual Bug: 32064548 Change-Id: Ib24e7364cac9e3fd105dafb40d6e399d46759770 --- .../com/android/commands/monkey/Monkey.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/cmds/monkey/src/com/android/commands/monkey/Monkey.java b/cmds/monkey/src/com/android/commands/monkey/Monkey.java index 440f71052..0e45c2050 100644 --- a/cmds/monkey/src/com/android/commands/monkey/Monkey.java +++ b/cmds/monkey/src/com/android/commands/monkey/Monkey.java @@ -395,7 +395,7 @@ public class Monkey { } /** - * Run "cat /data/anr/traces.txt". Wait about 5 seconds first, to let the + * Dump the most recent ANR trace. Wait about 5 seconds first, to let the * asynchronous report writing complete. */ private void reportAnrTraces() { @@ -403,7 +403,25 @@ public class Monkey { Thread.sleep(5 * 1000); } catch (InterruptedException e) { } - commandLineReport("anr traces", "cat /data/anr/traces.txt"); + + // The /data/anr directory might have multiple files, dump the most + // recent of those files. + File[] recentTraces = new File("/data/anr/").listFiles(); + if (recentTraces != null) { + File mostRecent = null; + long mostRecentMtime = 0; + for (File trace : recentTraces) { + final long mtime = trace.lastModified(); + if (mtime > mostRecentMtime) { + mostRecentMtime = mtime; + mostRecent = trace; + } + } + + if (mostRecent != null) { + commandLineReport("anr traces", "cat " + mostRecent.getAbsolutePath()); + } + } } /** From c27bcaea5d751cc5a4b25894af5eabde7bab6a81 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Tue, 11 Jul 2017 10:17:04 -0700 Subject: [PATCH 04/42] Sample authenticator that creates a "DPM-whitelisted" account. This account will not prevent a test-only DO/PO from being activated. Test: Manual test Change-Id: I6407c8c85b4476436db3379752488557d58bc617 --- .../DeviceAdminWhitelistedAccount/Android.mk | 33 +++++ .../AndroidManifest.xml | 53 ++++++++ .../DeviceAdminWhitelistedAccount/README.md | 24 ++++ .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3074 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1869 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3821 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6052 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8602 bytes .../res/values/strings.xml | 20 +++ .../res/xml/authenticator.xml | 18 +++ .../whitelistedaccount/MyAuthenticator.java | 122 ++++++++++++++++++ .../app/admin/whitelistedaccount/MyMain.java | 48 +++++++ 12 files changed, 318 insertions(+) create mode 100644 samples/DeviceAdminWhitelistedAccount/Android.mk create mode 100644 samples/DeviceAdminWhitelistedAccount/AndroidManifest.xml create mode 100644 samples/DeviceAdminWhitelistedAccount/README.md create mode 100644 samples/DeviceAdminWhitelistedAccount/res/mipmap-hdpi/ic_launcher.png create mode 100644 samples/DeviceAdminWhitelistedAccount/res/mipmap-mdpi/ic_launcher.png create mode 100644 samples/DeviceAdminWhitelistedAccount/res/mipmap-xhdpi/ic_launcher.png create mode 100644 samples/DeviceAdminWhitelistedAccount/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 samples/DeviceAdminWhitelistedAccount/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 samples/DeviceAdminWhitelistedAccount/res/values/strings.xml create mode 100644 samples/DeviceAdminWhitelistedAccount/res/xml/authenticator.xml create mode 100644 samples/DeviceAdminWhitelistedAccount/src/com/example/android/app/admin/whitelistedaccount/MyAuthenticator.java create mode 100644 samples/DeviceAdminWhitelistedAccount/src/com/example/android/app/admin/whitelistedaccount/MyMain.java diff --git a/samples/DeviceAdminWhitelistedAccount/Android.mk b/samples/DeviceAdminWhitelistedAccount/Android.mk new file mode 100644 index 000000000..03d618c3e --- /dev/null +++ b/samples/DeviceAdminWhitelistedAccount/Android.mk @@ -0,0 +1,33 @@ +# +# Copyright (C) 2017 The Android Open Source Project +# +# 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. +# + +# We build two apps from the same source + +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_PACKAGE_NAME := DeviceAdminWhitelistedAccount + +LOCAL_MODULE_TAGS := samples tests + +LOCAL_SRC_FILES := $(call all-java-files-under, src) + +LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res + +LOCAL_SDK_VERSION := current + +include $(BUILD_PACKAGE) diff --git a/samples/DeviceAdminWhitelistedAccount/AndroidManifest.xml b/samples/DeviceAdminWhitelistedAccount/AndroidManifest.xml new file mode 100644 index 000000000..6ce9f8997 --- /dev/null +++ b/samples/DeviceAdminWhitelistedAccount/AndroidManifest.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/DeviceAdminWhitelistedAccount/README.md b/samples/DeviceAdminWhitelistedAccount/README.md new file mode 100644 index 000000000..bebb4f5df --- /dev/null +++ b/samples/DeviceAdminWhitelistedAccount/README.md @@ -0,0 +1,24 @@ +# DeviceAdmin Whitelisted Account + +This application creates an account that will *not* prevent test-only DO/PO from being activated. + +## Build and install: + +``` +croot +mmma -j development/samples/DeviceAdminWhitelistedAccount +adb install -r -g $OUT/data/app/DeviceAdminWhitelistedAccount/DeviceAdminWhitelistedAccount.apk +``` + + +## Create a whitelisted account + +- Launch the "DA Whitelisted Account" app from the launcher. + +## Remove a whitelisted account + +- Just uninstall the app. i.e. + +``` +adb uninstall com.example.android.app.admin.whitelistedaccount +``` diff --git a/samples/DeviceAdminWhitelistedAccount/res/mipmap-hdpi/ic_launcher.png b/samples/DeviceAdminWhitelistedAccount/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..1cb2a39b1d75c1d00cc2bd842c445d64bc51d46f GIT binary patch literal 3074 zcmV+d4E^(oP)br686`Ab>3ck~k!g6c8W@9eZ!5-puq)&+N|3E?TW9!BA9b zR=wS?zy9Cr*F8NV@aWPdKpyeYC-4Z6fkGY#Kqt?gODQe8{(fCU<0P~#nv(p{l3CM!`p^S9c=YJN(-*FnQc5j63_^(W z$-#XyUYIzsydxoXw1UX)!=J9ZR8_mmAB6O@-W%pWH+eMxFmZ*Qm0v(x_Sa_IX>`qQ zxaUf8xWE&PRaB=l)Z<%KuY~Ghgf#V}l$t!$BiKU-p@a|*r3p7{@1=f&_ks-`ZB8C4 zmGNUNrP|+%FoUUkg5_>Xcgz0V*}cD0f87Vr%5B%z{I|Sy)xBm{jKUtS5p{b$_gpK! zWtGM%?o|EIs~4Nlt6Po4hY??Z0CbIuu#OlK_jZ16+B$`+^EYdET+cc7b<+-qiz>l& zVmLgf2s5Em#w0FS_gdN>#)SuA8oRi(q}d816f%2A;E0N(kPvGsIkk7#D0FDS-5HFG zjEuzfIOQ#WN;)F&Wi^#;{d>+05oUWM}scj9d^m9o`(~T(EW=CGvfgO#o|>E zdGVFs53aP2DHTdQ#Bi|dmkwoi1%O5cpr7RAXH>h#f74NLERiOd^h~1A{E>e(g2O4N z1fiO(d}lV*j4It;I+WQB02+8erfKuGWYp4$=b4Lzb1EM?AO?24@i@dpnS|y`E1KZ- zO&8&IQ%uOF@<8EW`-XtR2?q`O$M$sSnWR{0z>$-;A$Q9~Fh`==#fwk)g2{7&frDks z^b{0sIN0&i`!c|6Ql?(Db#@rP=-&bugcL3~*q$b!8jtK^s#q212qV`q<#lM&8I^mBS1O2v9he50ghHLhj4GASqFFvpWq=ShTJb zzPsGa^_PIjlAwU7w|ux?H~}droN!o=lVV%p+2KjT?eWuh;dZ@40f*USjuaua7aXj& z{IJF>hAtK=I2N-BGSj2w5mzrn6*TA5Kvp;U?Zt1k+6Dh4}Lu?%AcFfQ@TaMz_eIhRh3t@z^%I&kF+;G zf3>*`8k=3-%1MN>&S2nR*^0kt#2|FBP{3h9)a?+mbvdYVeMCd1W~IRT*9YkWTDh$Z zijLPQ%W&IOvb|#E42H=fLJAfRen%6~4K4FZ6Hb4kT;p&_XKKYcMi(PlAml~nnU{@$faC@LlGyU5X7v#IkBrW|jelzy1}Oq8*Lw&FC8d5|*C zF^W0NtrU?#NH@fKOy(GWY=qAO0;F)!HpCn)IQV&9PAa@OL0ouN)>xsus#S|RtkV_i!q4Vai7XzaJ=rO0m%?hIN+d>YjRTIB?-{3!fM#Gr&6#zcV0ipnU<;m z6lyp`QY0~RI}Q>#T|nW2gB{LWCiC`@ozkbY^R7^HU=RKupd7=wtUAPG=@ zg`l8dr*d^b)>4jFHqsBMByB(r)iiIgO{%wU)7!BVo*09zFyWnD8KsADbuW6)LGcD^&=GZQ%lvbD1L32Pss(`=x*GlejcWVgZH6?gH2y4 z(g@O5ZDY9;X3AdO?;xQx-V3|BpU^kRJk) zHeNbqzXR@+7ND*ZW-YuMa4ns?_@u7a6Hh)hq|czCOPXx9ADPW&%m+IC z<#xO4nsarP8+HvouCOZ#3zVsba1XSC1HoHO-S zQ|oNEbo7=dXtFlEed3>ADAsi0BK&Oj_@VBY#5L5<%fCJ1qyAiU@Iay3md3hzYgN@1 zR12O0#khkU%`deU#Dx>Nl*T%;u8!-deT9k6n1c8tuhZGJGjyK;imwIpe&cu2_BCC8{*8cfBouZzm?wB3+i?95FkSv z>=5&o!|H5u)8Bj9 z`fZ0Iqho%6Uv@ej-rb34i=}wovRB5j_!3CvK>_NYogF=M`pfkI#OFvv40Zk?@0W|$ z006G%jkS_}gey@rBq^NLq-0Sm`QyF2N;=5BSbv2$G-K|9k&i#|^rt`w0uwHrOgxm@H|H+Kn*d-7q~UffgX-?NV#C%COwn-)JKffn zzi;~WFJ`hgngg*RSU?F`f8w>W~T+5RMKel6Yo?9XiGY3-^&Q!Rl!B zu&y#YajC?P*&`I3K!UO}SU_k1Hje6H0gxqF4+t9$#F786bTgsAEBh73yZw=b#HU-z2EM4AIq}qtzf3_A20Xr_nqJGoZmU$ zO9nc4V>&o~_@@Z4`;Ppwq@?nXchErzy}Pe_`Pq?60D#lmVgCq$6>B$jt>+D;E}n}( zz(EXKAI`Yq7tEP)vm+2NaLKrZ#S+Z408 z?7D3<$MYd*gy$tw)I*r!%oZ4d=G&wlCRa z8Kxz^SICh^!fU2~o|SwDUlRgBnb}tkoU5=u@AeJ>B?Bsc)iy?fB7;0YUm19595URX zzQ%()m-U+f08T<6bZC01#l?f*dEx?kkk&o*?|~P*&hxg5dlI7opotJLC#99vbp-Id z5+eb?N(e+IrIpsUch3{>$f4}J#3%r$^AMQ&d#x;SsU!|W^C@FG!R(2#LQvQ2 zx&ym^zDFgeT5_#vUc@E#A-~fkpr_`~Y>x+Hkm#SQx0+!5oFXs;N4kN~#lTRg0EtqLPCUqI}h3bo&Z1+G;yB1X`oPs21z{+P8fq`$3nK80T=76cYK-9_cO+B<1`rAPsd*X%sbby;3{Ni%7`&9$z!=0$qc#B@z~kU@0t^)AKP5z9 zc*fa)JWs$A_ag~4fmAAq{YY3$5)m6 zljJ+H0TKa!SEO3&`NAFXV6i&jh1ur?%^zAn04((mcy)e>VulS2Jd)HTpa*!OLeA0f zKnbgqjjWC`3{?IwL>_^}6j4HLEtPHANpa35T{N!*FGN6#fS%w<-DHF1moycD z{*#IW-V?VL4XpPV31zbL5*X}D>bx)6cp|~TRb>+QpHw6}R%vTAX!j~}h$iN8h$I9e z)ZQTw@Yttvf3iFWo=ctXj(|*a?evesdAa`+_)lY_j=-d8w}EBEg+_aC9B(_k`|Hm1 z*{C^n=G?tC*88K|J9fkuV-7!>m$Uj6`gA&U*r-vD_vn+j@=r@`G5{k#QfN1AN# zQKxQ{70)|){P;!segIFWOaOqF2DlM55X`;e;!I;F&p6oJ+#EqlX4jaA{H61=zSQy7 zkzKxa!@CvLHIvEykp;MaWZ%wl*UHPqV>_|o{aPacSOB1bzM;X7NCG{NXN6?SV>j-| z&nm0F`!VNof!%Jyvrb3j&GNC^H*YEi0EbS&F{Y%aC&b1LJY;KWHj>TG6Fs}En4K|& zb`(xeXw#11(YCK^){r&ZzByQJu|6YAKs*m2EPrNMR_2S67lc7{Xc+P6#p`l^Y<6%- zc3X=Oh%TMX1q(8#jsXDa_)l%Abpo-mVGBRVz74>jyoA;*GVH5aX(=B{A*3hl2jPJ@ zOzXGq%C4$woP&;XIvwb-#+C2S!fJzZ(QK^~h>nhUZ_)A_27>|bqk!XF4duTUjQIZB zJlw5&^-6$DLMFVP+AnVC(L;I3Y`09;YKdrJhWH3C# zb}@%;nfG@3QmnsvUsy|pBXZ@2EsLwIP3b(tbKT6Q&2ux;J^=tak!2)&5x`>rJjfTX zRRF92a1Q`l0`#)4ZhqVIMF7vpNo7Lgqyp&vpEe|Be%t#SG5X|f!7P{c00000NkvXX Hu0mjf#j0<( literal 0 HcmV?d00001 diff --git a/samples/DeviceAdminWhitelistedAccount/res/mipmap-xhdpi/ic_launcher.png b/samples/DeviceAdminWhitelistedAccount/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..41ffbcbf8fc538b3614105684b750216d9149bf2 GIT binary patch literal 3821 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 e*7YfBf&T~Z+iHP4hVjDy0000L literal 0 HcmV?d00001 diff --git a/samples/DeviceAdminWhitelistedAccount/res/mipmap-xxxhdpi/ic_launcher.png b/samples/DeviceAdminWhitelistedAccount/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..fd74afc7563ff80c860dd60127c0501b288492ad GIT binary patch literal 8602 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 + + + + DA Whitelisted Account + DA Whitelisted Account + diff --git a/samples/DeviceAdminWhitelistedAccount/res/xml/authenticator.xml b/samples/DeviceAdminWhitelistedAccount/res/xml/authenticator.xml new file mode 100644 index 000000000..7fd89cd73 --- /dev/null +++ b/samples/DeviceAdminWhitelistedAccount/res/xml/authenticator.xml @@ -0,0 +1,18 @@ + + + + diff --git a/samples/DeviceAdminWhitelistedAccount/src/com/example/android/app/admin/whitelistedaccount/MyAuthenticator.java b/samples/DeviceAdminWhitelistedAccount/src/com/example/android/app/admin/whitelistedaccount/MyAuthenticator.java new file mode 100644 index 000000000..db88db390 --- /dev/null +++ b/samples/DeviceAdminWhitelistedAccount/src/com/example/android/app/admin/whitelistedaccount/MyAuthenticator.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * 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. + */ + +package com.example.android.app.admin.whitelistedaccount; + +import android.accounts.AbstractAccountAuthenticator; +import android.accounts.Account; +import android.accounts.AccountAuthenticatorResponse; +import android.accounts.AccountManager; +import android.accounts.NetworkErrorException; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.IBinder; + +public class MyAuthenticator extends Service { + private static final String TAG = "TestAuthenticator"; + + private static final String ACCOUNT_TYPE = "com.example.android.app.admin.whitelistedaccount"; + + private static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED = + "android.account.DEVICE_OR_PROFILE_OWNER_ALLOWED"; + + private static Authenticator sInstance; + + @Override + public IBinder onBind(Intent intent) { + if (sInstance == null) { + sInstance = new Authenticator(getApplicationContext()); + + } + return sInstance.getIBinder(); + } + + public static boolean setUpAccount(Context context) { + final AccountManager am = AccountManager.get(context); + if (am.getAccountsByType(ACCOUNT_TYPE).length > 0) { + return false; // Already set up. + } + + // Add a new account. + final Account account = new Account( + context.getResources().getString(R.string.account_name), ACCOUNT_TYPE); + am.addAccountExplicitly(account, null, null); + return true; + } + + public static class Authenticator extends AbstractAccountAuthenticator { + + private final Context mContxet; + + public Authenticator(Context context) { + super(context); + mContxet = context; + } + + @Override + public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, + String authTokenType, String[] requiredFeatures, Bundle options) + throws NetworkErrorException { + return new Bundle(); + } + + @Override + public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) { + return new Bundle(); + } + + @Override + public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, + String authTokenType, Bundle options) throws NetworkErrorException { + return new Bundle(); + } + + @Override + public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, + Bundle options) throws NetworkErrorException { + return new Bundle(); + } + + @Override + public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, + String authTokenType, Bundle options) throws NetworkErrorException { + return new Bundle(); + } + + @Override + public String getAuthTokenLabel(String authTokenType) { + return "token_label"; + } + + @Override + public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, + String[] features) throws NetworkErrorException { + + boolean hasAll = false; + + if ((features != null) && (features.length == 1) + && ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED.equals(features[0])) { + hasAll = true; + } + + Bundle result = new Bundle(); + result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, hasAll); + return result; + } + } +} diff --git a/samples/DeviceAdminWhitelistedAccount/src/com/example/android/app/admin/whitelistedaccount/MyMain.java b/samples/DeviceAdminWhitelistedAccount/src/com/example/android/app/admin/whitelistedaccount/MyMain.java new file mode 100644 index 000000000..3f444899b --- /dev/null +++ b/samples/DeviceAdminWhitelistedAccount/src/com/example/android/app/admin/whitelistedaccount/MyMain.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * 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. + */ +package com.example.android.app.admin.whitelistedaccount; + +import android.app.Activity; +import android.content.Context; +import android.os.AsyncTask; +import android.os.Bundle; +import android.widget.Toast; + +public class MyMain extends Activity { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + final Context context = getApplicationContext(); + + new AsyncTask() { + @Override + protected Boolean doInBackground(Void... voids) { + return MyAuthenticator.setUpAccount(context); + } + + @Override + protected void onPostExecute(Boolean ret) { + Toast.makeText(context, + (ret ? "Account created" : "Account already exists"), + Toast.LENGTH_SHORT).show(); + + } + }.execute(); + + finish(); + } +} From 2bf50179b3e5811e36f18d54fe523074b460ca60 Mon Sep 17 00:00:00 2001 From: Willie Koomson Date: Fri, 30 Jun 2017 16:11:29 -0700 Subject: [PATCH 05/42] The base files for the project & activities and XML resources Test: build and run manually Change-Id: I6eb7f1a444703e99f592ac9106261f9c6bd90127 --- samples/IntentPlayground/Android.mk | 19 ++ samples/IntentPlayground/AndroidManifest.xml | 78 ++++++++ .../res/drawable/card_background.xml | 20 ++ .../IntentPlayground/res/drawable/divider.xml | 19 ++ .../res/drawable/expand_less_mtrl.xml | 24 +++ .../res/drawable/expand_more_mtrl.xml | 24 +++ .../res/drawable/expander_group_material.xml | 19 ++ .../res/drawable/info_icon.xml | 24 +++ .../res/drawable/success_card_background.xml | 20 ++ .../res/layout/activity_main.xml | 31 +++ .../res/layout/activity_node.xml | 72 +++++++ .../res/layout/activity_radio_list_item.xml | 38 ++++ .../res/layout/checkbox_list_item.xml | 23 +++ .../res/layout/dialog_list_item.xml | 27 +++ .../res/layout/fragment_build_intent.xml | 79 ++++++++ .../res/layout/fragment_current_task.xml | 117 +++++++++++ .../res/layout/fragment_intent.xml | 186 ++++++++++++++++++ .../res/layout/fragment_intent_dialog.xml | 50 +++++ .../res/layout/fragment_tree.xml | 42 ++++ .../res/layout/section_header.xml | 27 +++ .../res/layout/simple_list_item.xml | 20 ++ .../IntentPlayground/res/layout/task_node.xml | 58 ++++++ .../res/layout/tree_node_composite.xml | 60 ++++++ .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4208 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2555 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6114 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10056 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10486 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 14696 bytes .../IntentPlayground/res/values/colors.xml | 43 ++++ .../IntentPlayground/res/values/dimens.xml | 17 ++ .../IntentPlayground/res/values/strings.xml | 65 ++++++ .../IntentPlayground/res/values/styles.xml | 29 +++ .../intentplayground/BaseActivity.java | 126 ++++++++++++ .../ClearTaskOnLaunchActivity.java | 22 +++ .../DocumentLaunchAlwaysActivity.java | 22 +++ .../DocumentLaunchIntoActivity.java | 22 +++ .../DocumentLaunchNeverActivity.java | 22 +++ .../intentplayground/LauncherActivity.java | 64 ++++++ .../intentplayground/NoHistoryActivity.java | 22 +++ .../android/intentplayground/Shims.java | 76 +++++++ .../SingleInstanceActivity.java | 22 +++ .../intentplayground/SingleTaskActivity.java | 22 +++ .../intentplayground/SingleTopActivity.java | 22 +++ .../TaskAffinity1Activity.java | 22 +++ .../TaskAffinity2Activity.java | 22 +++ .../TaskAffinity3Activity.java | 22 +++ 51 files changed, 1739 insertions(+) create mode 100644 samples/IntentPlayground/Android.mk create mode 100644 samples/IntentPlayground/AndroidManifest.xml create mode 100644 samples/IntentPlayground/res/drawable/card_background.xml create mode 100644 samples/IntentPlayground/res/drawable/divider.xml create mode 100644 samples/IntentPlayground/res/drawable/expand_less_mtrl.xml create mode 100644 samples/IntentPlayground/res/drawable/expand_more_mtrl.xml create mode 100644 samples/IntentPlayground/res/drawable/expander_group_material.xml create mode 100644 samples/IntentPlayground/res/drawable/info_icon.xml create mode 100644 samples/IntentPlayground/res/drawable/success_card_background.xml create mode 100644 samples/IntentPlayground/res/layout/activity_main.xml create mode 100644 samples/IntentPlayground/res/layout/activity_node.xml create mode 100644 samples/IntentPlayground/res/layout/activity_radio_list_item.xml create mode 100644 samples/IntentPlayground/res/layout/checkbox_list_item.xml create mode 100644 samples/IntentPlayground/res/layout/dialog_list_item.xml create mode 100644 samples/IntentPlayground/res/layout/fragment_build_intent.xml create mode 100644 samples/IntentPlayground/res/layout/fragment_current_task.xml create mode 100644 samples/IntentPlayground/res/layout/fragment_intent.xml create mode 100644 samples/IntentPlayground/res/layout/fragment_intent_dialog.xml create mode 100644 samples/IntentPlayground/res/layout/fragment_tree.xml create mode 100644 samples/IntentPlayground/res/layout/section_header.xml create mode 100644 samples/IntentPlayground/res/layout/simple_list_item.xml create mode 100644 samples/IntentPlayground/res/layout/task_node.xml create mode 100644 samples/IntentPlayground/res/layout/tree_node_composite.xml create mode 100644 samples/IntentPlayground/res/mipmap-hdpi/ic_launcher.png create mode 100644 samples/IntentPlayground/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 samples/IntentPlayground/res/mipmap-mdpi/ic_launcher.png create mode 100644 samples/IntentPlayground/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 samples/IntentPlayground/res/mipmap-xhdpi/ic_launcher.png create mode 100644 samples/IntentPlayground/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 samples/IntentPlayground/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 samples/IntentPlayground/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 samples/IntentPlayground/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 samples/IntentPlayground/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 samples/IntentPlayground/res/values/colors.xml create mode 100644 samples/IntentPlayground/res/values/dimens.xml create mode 100644 samples/IntentPlayground/res/values/strings.xml create mode 100644 samples/IntentPlayground/res/values/styles.xml create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/BaseActivity.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/ClearTaskOnLaunchActivity.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/DocumentLaunchAlwaysActivity.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/DocumentLaunchIntoActivity.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/DocumentLaunchNeverActivity.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/LauncherActivity.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/NoHistoryActivity.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/Shims.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/SingleInstanceActivity.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/SingleTaskActivity.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/SingleTopActivity.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/TaskAffinity1Activity.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/TaskAffinity2Activity.java create mode 100644 samples/IntentPlayground/src/com/example/android/intentplayground/TaskAffinity3Activity.java diff --git a/samples/IntentPlayground/Android.mk b/samples/IntentPlayground/Android.mk new file mode 100644 index 000000000..7cd3b5a94 --- /dev/null +++ b/samples/IntentPlayground/Android.mk @@ -0,0 +1,19 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := samples tests + +# Only compile source java files in this apk. +LOCAL_SRC_FILES := $(call all-java-files-under, src) + +LOCAL_STATIC_JAVA_LIBRARIES = android-support-v13 + +LOCAL_PACKAGE_NAME := IntentPlayground + +LOCAL_SDK_VERSION := current + + +include $(BUILD_PACKAGE) + +# Use the folloing include to make our test apk. +include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/samples/IntentPlayground/AndroidManifest.xml b/samples/IntentPlayground/AndroidManifest.xml new file mode 100644 index 000000000..210df6692 --- /dev/null +++ b/samples/IntentPlayground/AndroidManifest.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/IntentPlayground/res/drawable/card_background.xml b/samples/IntentPlayground/res/drawable/card_background.xml new file mode 100644 index 000000000..001247aaa --- /dev/null +++ b/samples/IntentPlayground/res/drawable/card_background.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/samples/IntentPlayground/res/drawable/divider.xml b/samples/IntentPlayground/res/drawable/divider.xml new file mode 100644 index 000000000..0a0dec325 --- /dev/null +++ b/samples/IntentPlayground/res/drawable/divider.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/samples/IntentPlayground/res/drawable/expand_less_mtrl.xml b/samples/IntentPlayground/res/drawable/expand_less_mtrl.xml new file mode 100644 index 000000000..ee5cddf1c --- /dev/null +++ b/samples/IntentPlayground/res/drawable/expand_less_mtrl.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/samples/IntentPlayground/res/drawable/expand_more_mtrl.xml b/samples/IntentPlayground/res/drawable/expand_more_mtrl.xml new file mode 100644 index 000000000..55def3d1f --- /dev/null +++ b/samples/IntentPlayground/res/drawable/expand_more_mtrl.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/samples/IntentPlayground/res/drawable/expander_group_material.xml b/samples/IntentPlayground/res/drawable/expander_group_material.xml new file mode 100644 index 000000000..1b497da64 --- /dev/null +++ b/samples/IntentPlayground/res/drawable/expander_group_material.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/samples/IntentPlayground/res/drawable/info_icon.xml b/samples/IntentPlayground/res/drawable/info_icon.xml new file mode 100644 index 000000000..77ef9f3cb --- /dev/null +++ b/samples/IntentPlayground/res/drawable/info_icon.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/samples/IntentPlayground/res/drawable/success_card_background.xml b/samples/IntentPlayground/res/drawable/success_card_background.xml new file mode 100644 index 000000000..bc48008e6 --- /dev/null +++ b/samples/IntentPlayground/res/drawable/success_card_background.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/samples/IntentPlayground/res/layout/activity_main.xml b/samples/IntentPlayground/res/layout/activity_main.xml new file mode 100644 index 000000000..d74e44038 --- /dev/null +++ b/samples/IntentPlayground/res/layout/activity_main.xml @@ -0,0 +1,31 @@ + + + + + + + diff --git a/samples/IntentPlayground/res/layout/activity_node.xml b/samples/IntentPlayground/res/layout/activity_node.xml new file mode 100644 index 000000000..bd35d8f72 --- /dev/null +++ b/samples/IntentPlayground/res/layout/activity_node.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + diff --git a/samples/IntentPlayground/res/layout/activity_radio_list_item.xml b/samples/IntentPlayground/res/layout/activity_radio_list_item.xml new file mode 100644 index 000000000..18cccf025 --- /dev/null +++ b/samples/IntentPlayground/res/layout/activity_radio_list_item.xml @@ -0,0 +1,38 @@ + + + + + + + + diff --git a/samples/IntentPlayground/res/layout/checkbox_list_item.xml b/samples/IntentPlayground/res/layout/checkbox_list_item.xml new file mode 100644 index 000000000..9ffc93c6f --- /dev/null +++ b/samples/IntentPlayground/res/layout/checkbox_list_item.xml @@ -0,0 +1,23 @@ + + + diff --git a/samples/IntentPlayground/res/layout/dialog_list_item.xml b/samples/IntentPlayground/res/layout/dialog_list_item.xml new file mode 100644 index 000000000..6be9d74e3 --- /dev/null +++ b/samples/IntentPlayground/res/layout/dialog_list_item.xml @@ -0,0 +1,27 @@ + + + + + \ No newline at end of file diff --git a/samples/IntentPlayground/res/layout/fragment_build_intent.xml b/samples/IntentPlayground/res/layout/fragment_build_intent.xml new file mode 100644 index 000000000..5cc5f47e4 --- /dev/null +++ b/samples/IntentPlayground/res/layout/fragment_build_intent.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + +