From b9455046f40ac3371b9b1bdd39cfd14068d49679 Mon Sep 17 00:00:00 2001 From: Julian Schmuckli Date: Wed, 8 Aug 2018 10:42:09 +0800 Subject: [PATCH 1/3] Added back button for settings screen #21 --- app/src/main/AndroidManifest.xml | 4 +++- .../com/coderbunker/kioskapp/KioskActivity.java | 1 - .../coderbunker/kioskapp/SettingsActivity.java | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e86234e..2abe272 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,7 +20,9 @@ android:screenOrientation="landscape"> - + diff --git a/app/src/main/java/com/coderbunker/kioskapp/KioskActivity.java b/app/src/main/java/com/coderbunker/kioskapp/KioskActivity.java index 684608b..eda4504 100644 --- a/app/src/main/java/com/coderbunker/kioskapp/KioskActivity.java +++ b/app/src/main/java/com/coderbunker/kioskapp/KioskActivity.java @@ -15,7 +15,6 @@ import android.view.Window; import android.view.WindowManager; import android.webkit.SslErrorHandler; -import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; diff --git a/app/src/main/java/com/coderbunker/kioskapp/SettingsActivity.java b/app/src/main/java/com/coderbunker/kioskapp/SettingsActivity.java index 35eebb5..6fc92ea 100644 --- a/app/src/main/java/com/coderbunker/kioskapp/SettingsActivity.java +++ b/app/src/main/java/com/coderbunker/kioskapp/SettingsActivity.java @@ -2,12 +2,14 @@ import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.KeyEvent; +import android.view.MenuItem; import android.view.View; import android.webkit.URLUtil; import android.widget.Button; @@ -40,6 +42,8 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); + getActionBar().setDisplayHomeAsUpEnabled(true); + prefs = this.getSharedPreferences( "com.coderbunker.kioskapp", Context.MODE_PRIVATE); @@ -111,4 +115,17 @@ private void generateQRCode(String uri) { e.printStackTrace(); } } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + Intent intent = new Intent(SettingsActivity.this, MainActivity.class); + startActivity(intent); + finish(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } } From 50346872f1a514d0f7ea03e4ddcc01d7c0e5053a Mon Sep 17 00:00:00 2001 From: Julian Schmuckli Date: Thu, 9 Aug 2018 14:10:14 +0800 Subject: [PATCH 2/3] Added HOTP implementation #5 --- .idea/caches/build_file_checksums.ser | Bin 536 -> 536 bytes app/build.gradle | 1 + .../coderbunker/kioskapp/KioskActivity.java | 20 +++- .../kioskapp/SettingsActivity.java | 33 +++++- .../com/coderbunker/kioskapp/lib/HOTP.java | 100 ++++++++++++++++++ app/src/main/res/layout/activity_settings.xml | 67 +++++++++--- build.gradle | 2 +- 7 files changed, 203 insertions(+), 20 deletions(-) create mode 100644 app/src/main/java/com/coderbunker/kioskapp/lib/HOTP.java diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 595be42bb13139df3cd233f4b8f5cb8b61bcb44a..6cb64b4e9844ebde380fa615da121b1e994a9036 100644 GIT binary patch delta 53 zcmV-50LuTE1egSnm;@YZfya@Y;}9gOQ)ag!I~y>-Vgn{3B6X9G0eBIVs~%D>r;k!` LF7Upta^z%qBJ&k| delta 53 zcmV-50LuTE1egSnm;?;{07j9V;}9dule1= 0; i--) { + counter[i] = (byte) (movingFactor & 0xff); + movingFactor >>= 8; + } + byte[] seed = new byte[0]; + try { + seed = Base32.decode(seedString); + } catch (Base32.DecodingException e) { + e.printStackTrace(); + } + + + byte[] hash = HMAC(seed, counter); + int offset = hash[hash.length - 1] & 0xf; + + int otpBinary = ((hash[offset] & 0x7f) << 24) + | ((hash[offset + 1] & 0xff) << 16) + | ((hash[offset + 2] & 0xff) << 8) + | (hash[offset + 3] & 0xff); + + int otp = otpBinary % DIGITS_POWER[6]; + String result = Integer.toString(otp); + + while (result.length() < 6) { + result = "0" + result; + } + return result; + + } + + private static byte[] HMAC(byte[] seed, byte[] counter) { + + try { + Mac hmac = Mac.getInstance("HmacSHA1"); + SecretKeySpec macKey = new SecretKeySpec(seed, "RAW"); + hmac.init(macKey); + return hmac.doFinal(counter); + + } catch (GeneralSecurityException ex) { + throw new UndeclaredThrowableException(ex); + } + } + } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index becf23a..b846515 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -19,21 +19,62 @@ android:orientation="vertical"> - + android:layout_height="match_parent" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + Date: Thu, 9 Aug 2018 14:32:43 +0800 Subject: [PATCH 3/3] Added additional label to settings for current counter HOTP --- .idea/caches/build_file_checksums.ser | Bin 536 -> 536 bytes app/build.gradle | 1 - .../coderbunker/kioskapp/KioskActivity.java | 8 ++++++-- .../coderbunker/kioskapp/SettingsActivity.java | 7 +++++-- app/src/main/res/layout/activity_settings.xml | 17 +++++++++++++++++ 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 6cb64b4e9844ebde380fa615da121b1e994a9036..74f562175d3065126e0825f8155fd25b07ba8c16 100644 GIT binary patch delta 33 pcmbQiGJ|Ep3>Mh{SE-G2vKa+`u!>}O2z1McYxS`uc<#7U0RXZ_3jF{8 delta 33 pcmbQiGJ|Ep3>KNJ#^W33WHSm*SuGc&zq~)FQ18RObwy87Dgfae4v+u< diff --git a/app/build.gradle b/app/build.gradle index fc7d618..48983f6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,7 +24,6 @@ dependencies { implementation 'com.android.support.constraint:constraint-layout:1.1.2' implementation 'com.android.support:support-v4:27.1.1' implementation 'com.journeyapps:zxing-android-embedded:3.6.0' - implementation "com.google.guava:guava:16+" testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' diff --git a/app/src/main/java/com/coderbunker/kioskapp/KioskActivity.java b/app/src/main/java/com/coderbunker/kioskapp/KioskActivity.java index 7ca2479..fce8873 100644 --- a/app/src/main/java/com/coderbunker/kioskapp/KioskActivity.java +++ b/app/src/main/java/com/coderbunker/kioskapp/KioskActivity.java @@ -87,11 +87,16 @@ protected void onCreate(Bundle savedInstanceState) { webView = findViewById(R.id.webview); webView.setWebViewClient(new WebViewClient() { @Override - public void onPageFinished(WebView view, String url) { + public void onPageFinished(final WebView view, String url) { super.onPageFinished(view, url); TimerTask lock = new TimerTask() { @Override public void run() { + runOnUiThread(new Runnable() { + public void run() { + Toast.makeText(context, "Kioskmode locked", Toast.LENGTH_SHORT).show(); + } + }); locked = true; } }; @@ -136,7 +141,6 @@ public boolean onTouch(View view, MotionEvent motionEvent) { }); numbers = new ArrayList