From 67a68246c7ce99599f332b590b4da7ca2c7f0242 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Wed, 13 Apr 2016 00:38:51 -0400 Subject: [PATCH] use a material design allows resetting the emulator --- .../app/src/main/AndroidManifest.xml | 9 +-- .../acardemulator/MainActivity.java | 24 +++++-- .../acardemulator/SettingsActivity.java | 2 +- .../acardemulator/SimulatorService.java | 24 +++++++ .../app/src/main/res/layout/activity_main.xml | 63 ++++++++++++++---- .../app/src/main/res/mipmap-hdpi/ic_reset.png | Bin 0 -> 598 bytes .../app/src/main/res/mipmap-mdpi/ic_reset.png | Bin 0 -> 390 bytes .../src/main/res/mipmap-xhdpi/ic_reset.png | Bin 0 -> 842 bytes .../src/main/res/mipmap-xxhdpi/ic_reset.png | Bin 0 -> 1498 bytes .../src/main/res/mipmap-xxxhdpi/ic_reset.png | Bin 0 -> 2389 bytes .../app/src/main/res/values/colors.xml | 6 ++ .../app/src/main/res/values/dimens.xml | 9 ++- .../app/src/main/res/values/styles.xml | 12 ++++ 13 files changed, 120 insertions(+), 29 deletions(-) create mode 100644 ACardEmulator/app/src/main/res/mipmap-hdpi/ic_reset.png create mode 100644 ACardEmulator/app/src/main/res/mipmap-mdpi/ic_reset.png create mode 100644 ACardEmulator/app/src/main/res/mipmap-xhdpi/ic_reset.png create mode 100644 ACardEmulator/app/src/main/res/mipmap-xxhdpi/ic_reset.png create mode 100644 ACardEmulator/app/src/main/res/mipmap-xxxhdpi/ic_reset.png create mode 100644 ACardEmulator/app/src/main/res/values/colors.xml diff --git a/ACardEmulator/app/src/main/AndroidManifest.xml b/ACardEmulator/app/src/main/AndroidManifest.xml index 8caceb7..82f43bb 100644 --- a/ACardEmulator/app/src/main/AndroidManifest.xml +++ b/ACardEmulator/app/src/main/AndroidManifest.xml @@ -13,8 +13,10 @@ android:label="@string/app_name" android:theme="@style/AppTheme" > + android:name="com.vsmartcard.acardemulator.MainActivity" + android:label="@string/app_name" + android:theme="@style/AppTheme.NoActionBar" + > @@ -25,10 +27,9 @@ - > - diff --git a/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/MainActivity.java b/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/MainActivity.java index d372412..e922600 100644 --- a/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/MainActivity.java +++ b/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/MainActivity.java @@ -29,20 +29,21 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; import android.support.v4.content.LocalBroadcastManager; -import android.support.v7.app.ActionBarActivity; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; -public class MainActivity extends ActionBarActivity { +public class MainActivity extends AppCompatActivity { private TextView textViewVPCDStatus; - private ScrollView scrollView; private BroadcastReceiver bReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -60,7 +61,6 @@ public class MainActivity extends ActionBarActivity { textViewVPCDStatus.append(getResources().getString(R.string.status_error) + ": " + error + "\n"); if (rapdu != null) { textViewVPCDStatus.append(getResources().getString(R.string.status_rapdu) + ": " + rapdu + "\n"); - scrollView.fullScroll(View.FOCUS_DOWN); } if (deselect != null) textViewVPCDStatus.append(getResources().getString(R.string.status_disconnected) + ": " + deselect + "\n"); @@ -88,9 +88,21 @@ public class MainActivity extends ActionBarActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + assert fab != null; + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "Scheduled re-installation of all applets...", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + SimulatorService.destroySimulator(getApplicationContext()); + } + }); textViewVPCDStatus = (TextView) findViewById(R.id.textViewLog); - scrollView = (ScrollView) findViewById(R.id.scrollView); SharedPreferences settings = getSharedPreferences(PREFS, 0); if (settings.getInt(PREF_LASTVERSION, 0) != BuildConfig.VERSION_CODE) { showStartupMessage(); diff --git a/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/SettingsActivity.java b/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/SettingsActivity.java index c21d0e2..2329571 100644 --- a/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/SettingsActivity.java +++ b/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/SettingsActivity.java @@ -120,7 +120,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity { CharSequence aid = switchPreference.getSwitchTextOn(); preference.setSummary("Selectable with AID " + aid); } else { - preference.setSummary("Deactivated"); + preference.setSummary("Will not be installed"); } } else { // For all other preferences, set the summary to the value's diff --git a/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/SimulatorService.java b/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/SimulatorService.java index 0d10f2c..ae8b7c3 100644 --- a/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/SimulatorService.java +++ b/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/SimulatorService.java @@ -19,6 +19,7 @@ package com.vsmartcard.acardemulator; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.nfc.cardemulation.HostApduService; @@ -63,6 +64,7 @@ public class SimulatorService extends HostApduService { public static final String EXTRA_INSTALL = "MSG_INSTALL"; private static Simulator simulator = null; + private static boolean do_destroy = false; private void createSimulator() { String aid, name, extra_install = "", extra_error = ""; @@ -148,6 +150,8 @@ public class SimulatorService extends HostApduService { @Override public void onCreate () { super.onCreate(); + // force reloading applets if requested + do_destroy(); Log.d("", "Begin transaction"); if (useVPCD) { @@ -170,6 +174,26 @@ public class SimulatorService extends HostApduService { } } + public static void destroySimulator(Context context) { + do_destroy = true; + } + + private void do_destroy() { + if (do_destroy) { + simulator = null; + do_destroy = false; + Intent i = new Intent(TAG); + i.putExtra(EXTRA_DESELECT, "Uninstalled all applets."); + LocalBroadcastManager.getInstance(this).sendBroadcast(i); + } + } + + @Override + public void onDestroy() { + do_destroy(); + super.onDestroy(); + } + @Override public byte[] processCommandApdu(byte[] capdu, Bundle extras) { Intent i = new Intent(TAG); diff --git a/ACardEmulator/app/src/main/res/layout/activity_main.xml b/ACardEmulator/app/src/main/res/layout/activity_main.xml index 3ebc32e..8b0042d 100644 --- a/ACardEmulator/app/src/main/res/layout/activity_main.xml +++ b/ACardEmulator/app/src/main/res/layout/activity_main.xml @@ -1,21 +1,58 @@ - + android:fitsSystemWindows="true" + tools:context="com.vsmartcard.smartcardemulator.MainActivity"> - - + + - + android:fitsSystemWindows="true" + app:contentScrim="?attr/colorPrimary" + app:layout_scrollFlags="scroll|exitUntilCollapsed"> - \ No newline at end of file + + + + + + + + + + + + \ No newline at end of file diff --git a/ACardEmulator/app/src/main/res/mipmap-hdpi/ic_reset.png b/ACardEmulator/app/src/main/res/mipmap-hdpi/ic_reset.png new file mode 100644 index 0000000000000000000000000000000000000000..8219b833337b9cd71f485d5b33cf8c5c1582779d GIT binary patch literal 598 zcmV-c0;&CpP)mK}J}DjIab5VF@zATL}X8fcBPkXpEr+90m0KUVC*A)GqnFi-(e4 z`@lW$7SOYZb~J*>E^%H0dbx;05O4sz2lTOsM$mmg4&Rb~V$k$#_-{bpSg1R30z642-1WAwtNl;~iE*$xbqy+)jz=tFM z3EU(p2sq0HSge5aqy&*&e?1vuHhBhGDGBOXMhZAhNzkRK<0qFX2^v~93K*s&C}fKD zQWDexrk0Tnrlhn;=eYsdPq@Vj7&!XGDJak0;+C`mZjB!C3d-{Xil^HY$C;Cipu9(m zY~db~{RQYzvgQZq}6ow;_s53o5m5D2K&yu}a+Y@BX(DndafvICJ!yE~*cIF8AI$$KrGIo+eY^U#& z-u8h16WEe@i-jOe3y=dP&;nf~)v8RnFZ?4=6E8I`33|)eDP00>=yYe$x&%6-`2cJJ z*TKltT_Uh?E}9#lBt#$>lL`P^`kiX5_Lh4-10SC2^xDoT;M-BG! zvIv}jUDN`=5@;;p2O3}*vq0epKTwFki~HHkC_-GXpAzkb7go`)41od5s;07*qoM6N<$g6}A!_y7O^ literal 0 HcmV?d00001 diff --git a/ACardEmulator/app/src/main/res/mipmap-xhdpi/ic_reset.png b/ACardEmulator/app/src/main/res/mipmap-xhdpi/ic_reset.png new file mode 100644 index 0000000000000000000000000000000000000000..e261f0785eff087e9a1f12dcc7b310820a32478d GIT binary patch literal 842 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U>5XraSW-L^LFlDKWRr1w?L<6 z7S|;nFB4Ahanw@wnxZj9;j@TMlYGO4<3gYu(uuHkjOS%X49?s^kxhb`%eD< zA`%LFcpCiH9p2BRcF_KUni1o=qCd}Gf4Dqz!Y_{nd!E1Ew%Lj~Xr8dfd>rDaR^UI6A=iTY@InS%YvRa_ z#*F7=&wXz5V=Z|1T;}(A)s^4=Zfp!^l&Sv7@~7~}vOlbPbMjaXY>ppjK5TkkxZu$T z?S_XxAAQhyeC}a*gVb@s4=;dhP79-T3mHuN`VJ=s{#LXUS#a%QsfEt2W2PbtjupNw zh=`HC9?&4wp66)#rRV*5!3PtzOkWTz*WmnEiYuWaPj+7F9jiY;mY+wp<}VHz>pxr% zZk%TQ@aBVWrCYvhO1<$rru)hd1)o0*k7Lc)usr$H^A=bCGyGStpSgW*PB5d;w=$2P zLR+KP@*P_}S86(wOB2%(G<2wsJ>yqmm)SMHdWYoT07Q(zA}>vu`N@yzsjoMgy^o*v zR)|ZWhlyn|!$A!P12FS)7(=hY$Mw~Z*GzJokvGMMo*~Sq+=186Qb=VvF*&9 zk|=k{O)^Z-Dr3fTttI@Q=X5S8+?Kh` z)3v&$GcUe<>309qnzPMMk~aCzfA3O~U%KyeOibE=viMIqj||UCSS;&j&fcY5Cds~g z>(j{N>t7{5nlS5m=LPbb^~}IBwT-_ao^8fr z5!O`!2JI&`jccqA@R$ZH;9@PFp>y&-&yVZ|$t;N4$Vvb2GW^^Ml{-;4|A)SR)FQAk zkrVz3t}b2l!9-+*(?JA`m?b$ao&SRP%GRv`1N<>GD;|J3Z-5I~l>KWog zXE=j|ggAZ({ji=Uh%T zwk}Vx%NJqI3Ni>^VEyIuo$Hc6>+3y$=A02-ao+ysrumkWnM^e##5i_%?dRvSV_TPY zW+_nrGmaAL850k`?b#`^!ttO?<2!caq8;-Mrvuf_P`=Qd;Ks*q^ehNywetD+?ZI#huzQ z8SI3JB16;XY@06s;M_3>DqwxwbXT-N)<>otVFvv`n(Dq$B!trF zwd~&$bM>jRzO;ypF(`q}2n43p<2}IiW03|*eTIvHDY8!zn8XUsXaux2CA$Ih0jkou z6E+&_zqG1-o3dx0c(lSxaqRgIC1)<$>To&Xhu~X%i(UWr_f30uW48}5w+rx0|9l>p z+rLF^pLnn`B6z{tYq==}+p@T}@a@UD>%sO|AY#4Rg_uQmudPinC|iBXSUf}6BJZwG z)pLm(YxIB;xxXs!tysfmY&5T0UND3AMt)4tug8X>^2u907V%nj)~N5YIP>CL$>Q+J zdy_JH-#tE)yy)|J!@Hj^Tw|N4E|@v_-R+x+m!~@vSuDA|yN+*0v(nnjb93%2-u=dK x>28MCQFB3s;o+ZgS8dNL!-`9#O&$LkY;0CuG@Sam4p?S0c)I$ztaD0e0szfle!u_# literal 0 HcmV?d00001 diff --git a/ACardEmulator/app/src/main/res/mipmap-xxxhdpi/ic_reset.png b/ACardEmulator/app/src/main/res/mipmap-xxxhdpi/ic_reset.png new file mode 100644 index 0000000000000000000000000000000000000000..3802ec30bd8b5679aee098f9549a1d7e0aab3fb7 GIT binary patch literal 2389 zcmb_ec~lcu7k@JeSujKh6$2s!1Zj)1qeQkKVM&oiKmkRBLPZ2^5Uj{Lf)y216j>BZ zEY)Jawt|QPvN(vMqGhj!h&Z%X6bKST2#cl@pkKe!({sLm`p%h|bMCwEF2CQs_svls zFE0q7L zPnMmrLWq8T8@DZ?GG3dogM568@;hJWe5^)#@aptf>#IDckKFqGHI`VjieceShhshb z#+H%RH&grjh96DxR=C{s8?Tqww~2d}M}FC>s`mF4MBuB7$T|dX#1WKoq+^Lq`;?1; zTV>=9-Rhtj?M!G7fs9&W@Ts9#$nKK8NA2~tcUzFxeQZkGkGHLC5gmn80kE3*G! zI94%O7|{~kDY#lM9(XSYBfxa9)pf@mO@8S_&8^tqn&ou)+ZMv9DQU4-t-WDbYILjn zSEcJA^p3t!od6x=zPa_D?5H>Q>-+P>!SLcthuJFWPhOgf2WV4lNJ3WE5C1jva#LFF zgnGy+bLkm9ouUgV4o&x#MZ^Sy8E4{X^~7f``J+3J06}-irTdH%hbh>_iBDbf`4(JI zdOhHiibGv`@W<4W$%C~aA!XYpUwilDgONSK{x_7xly*Afojjw<+vi_?%jBRmIE1FH*KE^+64bWlJ1RUDoz)qw!Q|Wzvw*;Ja%$Uz+%mU*$3f_j_6-Ms6;(P)N^f6} zyjqwE5w&lu0oZCR6W#u4ZKS&3Ze9(OgN79m5_DyeyQM0se@cuA7v4XRSBX29>04#3 zebfwK`qrgDQuTVnyU`5jP~j$kKHVUH8o%!6&+lf_SXlXPsIKj+`qH%J|CLxnU_0z^ zW%W7`9eH(!7fF>b`VKVQvup4UldO9D=mBo>=|`w(voVfnpQm0p38uC;8e(@~*uqFI8B{2dVyB`JBzIB~1b?Jo>G$EOvJz6vWP=C+z}I zW;Rgfi{4H*Yqc$A*a;02uGD^(9@!P=t-```)X=a__ss`V3$dwwAjqT&JiW=d7bfRQ zDMaLYq+f>O?}3})0HWu*RSO`sgfCvGIXI-#%*Yp*;Wkyi@E z?>9q`4CqCo7Kc-5a72rNUr zA_Q_T{$R@hNJ!>?w>w+#Bx5{ zonK=@=0)RdDyZ-UwcQ7_r?o|%TW|&yaYVp@GCQJ)dhyM@R6FYQSi69?3G($5`!zE&kf~JY67)4hwArBbU{h66rQ@Y* z>~KP6T7S$uBt1YQHL0?!%W_Y)>C&`-!G{9lh6Q@)q5aj)Gb292D)+X7WP`p@lh}n4 zNd{##Bb}*%6VzuqMb&|`x5x(dZO+~Hr9w5K9uIVESo}O87LYm zlp6~4=6YuZOrRW9v=RJJp5P%{8qS zQ|g-Io(DznkKpFOnS^Xo^@V=|KI>kuISVY~!iAq=#7QOyv6}<>`CaXzC+I zb9dLbdT>IpLX=>|1v99NB=1;oKP=MKM~cvEEm=!yTKuq=&4fTM-zVw1et-@0#i%JP zQfiGZ3yf%Fm)iz{EQ$_XkhjzXFKXtvViP)HY#Q={Dbln!3yF+j`<#1x16Zh}y#yL4$)S(UptE3kA?-Jm-cyX_+4^96Au2|sE literal 0 HcmV?d00001 diff --git a/ACardEmulator/app/src/main/res/values/colors.xml b/ACardEmulator/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..b68f24c --- /dev/null +++ b/ACardEmulator/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #3F51B5 + #303F9F + #fdd017 + diff --git a/ACardEmulator/app/src/main/res/values/dimens.xml b/ACardEmulator/app/src/main/res/values/dimens.xml index a0171a7..da62b5f 100644 --- a/ACardEmulator/app/src/main/res/values/dimens.xml +++ b/ACardEmulator/app/src/main/res/values/dimens.xml @@ -1,6 +1,5 @@ - - 16dp - 16dp - - + 180dp + 16dp + 16dp + diff --git a/ACardEmulator/app/src/main/res/values/styles.xml b/ACardEmulator/app/src/main/res/values/styles.xml index 766ab99..545b9c6 100644 --- a/ACardEmulator/app/src/main/res/values/styles.xml +++ b/ACardEmulator/app/src/main/res/values/styles.xml @@ -3,6 +3,18 @@ + + +