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 0000000..8219b83 Binary files /dev/null and b/ACardEmulator/app/src/main/res/mipmap-hdpi/ic_reset.png differ diff --git a/ACardEmulator/app/src/main/res/mipmap-mdpi/ic_reset.png b/ACardEmulator/app/src/main/res/mipmap-mdpi/ic_reset.png new file mode 100644 index 0000000..cf68f38 Binary files /dev/null and b/ACardEmulator/app/src/main/res/mipmap-mdpi/ic_reset.png differ 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 0000000..e261f07 Binary files /dev/null and b/ACardEmulator/app/src/main/res/mipmap-xhdpi/ic_reset.png differ diff --git a/ACardEmulator/app/src/main/res/mipmap-xxhdpi/ic_reset.png b/ACardEmulator/app/src/main/res/mipmap-xxhdpi/ic_reset.png new file mode 100644 index 0000000..bf2d18a Binary files /dev/null and b/ACardEmulator/app/src/main/res/mipmap-xxhdpi/ic_reset.png differ 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 0000000..3802ec3 Binary files /dev/null and b/ACardEmulator/app/src/main/res/mipmap-xxxhdpi/ic_reset.png differ 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 @@ + + +