From 638001a552ef938c2a57264bcbb1c93c28051cca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20L=C3=A4nge?= Date: Mon, 17 Jul 2023 15:23:49 +0200 Subject: [PATCH 1/8] Update build tools to run on on newer Android Studio --- BaseGameUtils/build.gradle | 7 +- app/build.gradle | 11 ++-- app/src/main/res/values/strings.xml | 6 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 49896 -> 54413 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 78 +++++++++++++---------- gradlew.bat | 14 ++-- 8 files changed, 60 insertions(+), 61 deletions(-) diff --git a/BaseGameUtils/build.gradle b/BaseGameUtils/build.gradle index 9bdda3d..c3ef682 100644 --- a/BaseGameUtils/build.gradle +++ b/BaseGameUtils/build.gradle @@ -11,17 +11,16 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.1.1' + classpath 'com.android.tools.build:gradle:3.2.1' } } dependencies { - compile 'com.android.support:appcompat-v7:20.0.+' - compile 'com.android.support:support-v4:20.0.+' + api 'com.android.support:appcompat-v7:20.0.+' + api 'com.android.support:support-v4:20.0.+' } android { compileSdkVersion 20 - buildToolsVersion '27.0.3' } diff --git a/app/build.gradle b/app/build.gradle index 1915059..d0c86cd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,6 @@ apply plugin: 'com.android.application' android { compileSdkVersion 21 - buildToolsVersion '25.0.0' defaultConfig { applicationId 'de.tudarmstadt.informatik.secuso.phishedu2' minSdkVersion 10 @@ -21,9 +20,9 @@ android { } dependencies { - compile 'com.android.support:support-v4:21.0.2' - compile project(':BaseGameUtils') - compile 'com.google.code.gson:gson:2.3' - compile files('libs/android-json-rpc-0.2.jar') - compile 'com.android.support:appcompat-v7:21.0.2' + implementation 'com.android.support:support-v4:21.0.2' + implementation project(':BaseGameUtils') + implementation 'com.google.code.gson:gson:2.3' + implementation files('libs/android-json-rpc-0.2.jar') + implementation 'com.android.support:appcompat-v7:21.0.2' } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 92cd209..4e61cf8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -109,7 +109,7 @@ Skip - Now it's your turn\n\n1. Click on the button \"Click here\", to open a practice website.\n\n2. Wait until the website is fully loaded.\n\n3. Solve the task on the website. When you have completed the task, you will be automatically redirected to the app. + Now it\'s your turn\n\n1. Click on the button \"Click here\", to open a practice website.\n\n2. Wait until the website is fully loaded.\n\n3. Solve the task on the website. When you have completed the task, you will be automatically redirected to the app. Click here @@ -166,7 +166,7 @@ Sender E-Mail: Optional free text: Not arrived at Google?\n\nYou probably thought you were getting to Google\'s website. Unfortunately, you can but the links in an e-mail or. In general, trust links as well as the given email sender and the rest of the email content. - General information:\n\n1.) It is easy to fake the sender of an e-mail. Anyone can do this, even without much prior knowledge. Accordingly, you should be careful when evaluating the trustworthiness of news (Emails, Skype, Social Networks etc.). This is especially true if they contain a link. Not only for links that seem to be familiar to you, but also for those who, for example. �Click Here� mean, you should be careful.\n\n2.) Furthermore, clicking on links does not necessarily lead to the web address specified in the link. Most e-mail applications do not provide a way to see the real goal of links at first glance. \n\nThe real goal of a link is experienced by letting your finger on the link. Depending on the mail program, the destination is then displayed either in a small window directly next to the mouse pointer, or in the status bar at the bottom of the opened mail.\n\nPhishing-Emails and phishing websites you can just based on the web address (of the link) recognize. Therefore, in this app, we'll explain how to verify the authenticity of web addresses before clicking. + General information:\n\n1.) It is easy to fake the sender of an e-mail. Anyone can do this, even without much prior knowledge. Accordingly, you should be careful when evaluating the trustworthiness of news (Emails, Skype, Social Networks etc.). This is especially true if they contain a link. Not only for links that seem to be familiar to you, but also for those who, for example. �Click Here� mean, you should be careful.\n\n2.) Furthermore, clicking on links does not necessarily lead to the web address specified in the link. Most e-mail applications do not provide a way to see the real goal of links at first glance. \n\nThe real goal of a link is experienced by letting your finger on the link. Depending on the mail program, the destination is then displayed either in a small window directly next to the mouse pointer, or in the status bar at the bottom of the opened mail.\n\nPhishing-Emails and phishing websites you can just based on the web address (of the link) recognize. Therefore, in this app, we\'ll explain how to verify the authenticity of web addresses before clicking. By the way, that does not just apply to e-mails!\n\nDangers do not just lurk behind links in emails, but generally whenever you click on a link (e.g., on another website, in an SMS or in messages on Facebook or Twitter). Anyone can create web addresses and website copies!\n\nAnyone can create web addresses and website copies. Displaying an identical copy of a web page there is almost effortless and involves almost no cost. That, if you land on a website, the displayed website may look correct at first glance, but is actually the copy of a familiar website, which was created to harm you. Original\n\nIn the following we show you a part of the original Website of Facebook. At the web address https://m.facebook.com/ (outlined in green) you can tell that this website is the original. @@ -219,7 +219,7 @@ Done!\n\nCongratulations! You have completed the level successfully. On to the next Level! - Attack by IP address as the who area\n\nPhishers use various deceptions, to make web addresses trustworthy, although they are not.\n\nYou will gradually learn with which tricks they try, to fool you.\n\nIn this level, we'll cover one of the simplest tricks of using IP addresses instead of terms in the who's area of the web address. + Attack by IP address as the who area\n\nPhishers use various deceptions, to make web addresses trustworthy, although they are not.\n\nYou will gradually learn with which tricks they try, to fool you.\n\nIn this level, we\'ll cover one of the simplest tricks of using IP addresses instead of terms in the who\'s area of the web address. IP-Addresses\n\nJust as our homes are addressed by street names, computers are identified on the Internet with so-called IP-Address. An IP address is a sequence of 4 blocks of numbers separated by dots. Example: 192.168.10.15 diff --git a/build.gradle b/build.gradle index 2a7b3ba..ecb9c92 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.1' + classpath 'com.android.tools.build:gradle:3.2.1' } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 8c0fb64a8698b08ecc4158d828ca593c4928e9dd..1948b9074f1016d15d505d185bc3f73deb82d8c8 100644 GIT binary patch delta 48305 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

vkfa(`H8;wS?=t=Sb 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⪚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

7CvMY^Kvtutg| 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4917a6b..2d80b69 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Mon Jul 02 16:05:46 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.8.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip diff --git a/gradlew b/gradlew index 91a7e26..cccdd3d 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,20 +6,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,31 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -90,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -114,6 +113,7 @@ fi if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` @@ -154,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index aec9973..e95643d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line From 31c865a3b422b4f313d03e3cea8ce351ddb628c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20L=C3=A4nge?= Date: Wed, 8 May 2024 11:55:43 +0200 Subject: [PATCH 2/8] Update dependencies and migrate to androidx - Attempt to fix some bugs --- BaseGameUtils/build.gradle | 7 ++-- app/build.gradle | 19 +++++++--- app/src/main/AndroidManifest.xml | 1 + .../phishedu2/LevelSelectorActivity.java | 3 +- .../secuso/phishedu2/MainActivity.java | 7 ++-- .../secuso/phishedu2/PhishBaseActivity.java | 38 ++++++++++--------- .../secuso/phishedu2/SwipeActivity.java | 10 +++-- app/src/main/res/layout/fragment_pager.xml | 2 +- build.gradle | 5 ++- gradle.properties | 2 + gradle/wrapper/gradle-wrapper.properties | 5 ++- 11 files changed, 61 insertions(+), 38 deletions(-) create mode 100644 gradle.properties diff --git a/BaseGameUtils/build.gradle b/BaseGameUtils/build.gradle index c3ef682..9643458 100644 --- a/BaseGameUtils/build.gradle +++ b/BaseGameUtils/build.gradle @@ -1,4 +1,4 @@ -apply plugin: 'android-library' +apply plugin: 'com.android.library' repositories { mavenCentral() @@ -11,13 +11,12 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.2.1' + classpath 'com.android.tools.build:gradle:7.4.2' } } dependencies { - api 'com.android.support:appcompat-v7:20.0.+' - api 'com.android.support:support-v4:20.0.+' + api 'androidx.appcompat:appcompat:1.6.1' } android { diff --git a/app/build.gradle b/app/build.gradle index d0c86cd..0920a8b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,11 +1,11 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 21 + compileSdkVersion 33 defaultConfig { applicationId 'de.tudarmstadt.informatik.secuso.phishedu2' - minSdkVersion 10 - targetSdkVersion 19 + minSdkVersion 19 + targetSdkVersion 33 versionCode 31 versionName "1.4.0" } @@ -20,9 +20,18 @@ android { } dependencies { - implementation 'com.android.support:support-v4:21.0.2' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation project(':BaseGameUtils') implementation 'com.google.code.gson:gson:2.3' implementation files('libs/android-json-rpc-0.2.jar') - implementation 'com.android.support:appcompat-v7:21.0.2' + implementation 'androidx.appcompat:appcompat:1.0.0' + + constraints { + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version") { + because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib") + } + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version") { + because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib") + } + } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed1ff0e..00a9f0a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ android:theme="@style/AppTheme" > diff --git a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/LevelSelectorActivity.java b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/LevelSelectorActivity.java index d5f7dd0..64c4a9d 100644 --- a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/LevelSelectorActivity.java +++ b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/LevelSelectorActivity.java @@ -21,12 +21,13 @@ package de.tudarmstadt.informatik.secuso.phishedu2; import android.os.Bundle; -import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import androidx.viewpager.widget.ViewPager; + import de.tudarmstadt.informatik.secuso.phishedu2.backend.BackendControllerImpl; import de.tudarmstadt.informatik.secuso.phishedu2.backend.NoPhishLevelInfo; diff --git a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/MainActivity.java b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/MainActivity.java index 5efd52d..7f9db6a 100644 --- a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/MainActivity.java +++ b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/MainActivity.java @@ -29,8 +29,9 @@ import android.net.Uri; import android.os.Bundle; import android.os.Vibrator; -import android.support.v4.app.Fragment; -import android.support.v7.app.ActionBarActivity; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -53,7 +54,7 @@ //import com.google.android.gms.common.api.GoogleApiClient; //import com.google.android.gms.games.Games; -public class MainActivity extends ActionBarActivity implements FrontendController, OnLevelChangeListener, BackendInitListener, OnLevelstateChangeListener { +public class MainActivity extends AppCompatActivity implements FrontendController, OnLevelChangeListener, BackendInitListener, OnLevelstateChangeListener { Map fragCache = new HashMap(); String current_frag; diff --git a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/PhishBaseActivity.java b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/PhishBaseActivity.java index 7b9119c..512188d 100644 --- a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/PhishBaseActivity.java +++ b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/PhishBaseActivity.java @@ -24,8 +24,10 @@ import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.app.ActionBarActivity; + +import androidx.appcompat.app.ActionBar; +import androidx.fragment.app.Fragment; +import androidx.appcompat.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -149,7 +151,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa } private void setTitles(){ - android.support.v7.app.ActionBar ab = ((ActionBarActivity)getActivity()).getSupportActionBar(); + ActionBar ab = ((AppCompatActivity)getActivity()).getSupportActionBar(); //ab.setDisplayUseLogoEnabled(true); ab.setDisplayHomeAsUpEnabled(enableHomeButton()); ab.setDisplayShowHomeEnabled(true); @@ -312,21 +314,21 @@ int getLevel(){ return BackendControllerImpl.getInstance().getLevel(); } - @Override - public void onDetach() { - super.onDetach(); - - try { - Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager"); - childFragmentManager.setAccessible(true); - childFragmentManager.set(this, null); - - } catch (NoSuchFieldException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } +// @Override +// public void onDetach() { +// super.onDetach(); +// +// try { +// Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager"); +// childFragmentManager.setAccessible(true); +// childFragmentManager.set(this, null); +// +// } catch (NoSuchFieldException e) { +// throw new RuntimeException(e); +// } catch (IllegalAccessException e) { +// throw new RuntimeException(e); +// } +// } protected void switchToFragment(Class target){ ((MainActivity)getActivity()).switchToFragment(target); diff --git a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/SwipeActivity.java b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/SwipeActivity.java index b549f83..c893ce2 100644 --- a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/SwipeActivity.java +++ b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/SwipeActivity.java @@ -22,9 +22,10 @@ import android.app.Activity; import android.os.Bundle; -import android.support.v4.app.FragmentManager; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; +import androidx.fragment.app.FragmentManager; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; @@ -104,6 +105,9 @@ void updateUI(Activity v){ super.updateUI(v); final ViewPager mPager= (ViewPager) v.findViewById(R.id.pager); + if(mPager == null) { + return; + } mPager.setAdapter(new SwipePageAdapter(getFragmentManager(),this)); mPager.setOnPageChangeListener(this); diff --git a/app/src/main/res/layout/fragment_pager.xml b/app/src/main/res/layout/fragment_pager.xml index f878dea..a8a83c9 100644 --- a/app/src/main/res/layout/fragment_pager.xml +++ b/app/src/main/res/layout/fragment_pager.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" android:orientation="vertical" > - Date: Wed, 8 May 2024 16:02:44 +0200 Subject: [PATCH 3/8] Disable some broken activities --- .../secuso/phishedu2/AwarenessActivity.java | 2 +- .../secuso/phishedu2/LevelIntroActivity.java | 6 +- .../backend/networkTasks/GetUrlsTask.java | 76 ++++++++----------- 3 files changed, 37 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/AwarenessActivity.java b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/AwarenessActivity.java index cbabb7a..3765959 100644 --- a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/AwarenessActivity.java +++ b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/AwarenessActivity.java @@ -120,7 +120,7 @@ public void sendEmail(View view) { } else { // Input is OK send email // invoke Backendcontroller - BackendControllerImpl.getInstance().sendMail(from, to, userMessage); + //BackendControllerImpl.getInstance().sendMail(from, to, userMessage); // Pop up with go to E-Mail on your Smartphone showAlertDialog(); diff --git a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/LevelIntroActivity.java b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/LevelIntroActivity.java index 06bad51..142dea1 100644 --- a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/LevelIntroActivity.java +++ b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/LevelIntroActivity.java @@ -133,10 +133,12 @@ protected void onStartClick() { Class next_activity = URLTaskActivity.class; if (this.getLevel() == 0) { BackendControllerImpl.getInstance().skipLevel0(); - next_activity = AwarenessActivity.class; + BackendControllerImpl.getInstance().startLevel(1); + next_activity = LevelIntroActivity.class; } else if (this.getLevel() == 1) { - next_activity = FindAddressBarActivity.class; BackendControllerImpl.getInstance().skipLevel1(); + BackendControllerImpl.getInstance().startLevel(2); + next_activity = LevelIntroActivity.class; } else if (this.getLevel() == BackendControllerImpl.getInstance() .getLevelCount() - 1) { next_activity = AppEndActivity.class; diff --git a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/backend/networkTasks/GetUrlsTask.java b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/backend/networkTasks/GetUrlsTask.java index 97ca6cd..6e800c0 100644 --- a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/backend/networkTasks/GetUrlsTask.java +++ b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/backend/networkTasks/GetUrlsTask.java @@ -22,18 +22,6 @@ import android.os.AsyncTask; -import org.apache.http.HttpResponse; -import org.apache.http.HttpStatus; -import org.apache.http.StatusLine; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.DefaultHttpClient; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Arrays; - -import de.tudarmstadt.informatik.secuso.phishedu2.backend.BackendControllerImpl; -import de.tudarmstadt.informatik.secuso.phishedu2.backend.BasePhishURL; import de.tudarmstadt.informatik.secuso.phishedu2.backend.PhishAttackType; import de.tudarmstadt.informatik.secuso.phishedu2.backend.PhishURL; @@ -56,38 +44,38 @@ public GetUrlsTask(UrlsLoadedListener controller){ protected PhishURL[] doInBackground(Integer... params) { - if(false){ - int count = params[0]; - this.type = PhishAttackType.NoPhish; - for(PhishAttackType type : PhishAttackType.values()){ - if(type.getValue() == params[1]){ - this.type=type; - break; - } - } - try { - String url = "https://api.no-phish.de/urls/"+this.type.toString()+".json"; - HttpResponse response = new DefaultHttpClient().execute(new HttpGet(url)); - StatusLine statusLine = response.getStatusLine(); - if(statusLine.getStatusCode() == HttpStatus.SC_OK){ - ByteArrayOutputStream out = new ByteArrayOutputStream(); - response.getEntity().writeTo(out); - out.close(); - BasePhishURL[] result = BackendControllerImpl.deserializeURLs(out.toString()); - if(result.length > count){ - result = Arrays.copyOf(result, count); - } - return result; - } else{ - //Closes the connection. - response.getEntity().getContent().close(); - throw new IOException(statusLine.getReasonPhrase()); - } - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } +// if(false){ +// int count = params[0]; +// this.type = PhishAttackType.NoPhish; +// for(PhishAttackType type : PhishAttackType.values()){ +// if(type.getValue() == params[1]){ +// this.type=type; +// break; +// } +// } +// try { +// String url = "https://api.no-phish.de/urls/"+this.type.toString()+".json"; +// HttpResponse response = new DefaultHttpClient().execute(new HttpGet(url)); +// StatusLine statusLine = response.getStatusLine(); +// if(statusLine.getStatusCode() == HttpStatus.SC_OK){ +// ByteArrayOutputStream out = new ByteArrayOutputStream(); +// response.getEntity().writeTo(out); +// out.close(); +// BasePhishURL[] result = BackendControllerImpl.deserializeURLs(out.toString()); +// if(result.length > count){ +// result = Arrays.copyOf(result, count); +// } +// return result; +// } else{ +// //Closes the connection. +// response.getEntity().getContent().close(); +// throw new IOException(statusLine.getReasonPhrase()); +// } +// } catch (IOException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } return new PhishURL[0]; } From 31fb3bdccaf6370546b35f2cf52be72268bc2eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20L=C3=A4nge?= Date: Fri, 4 Oct 2024 11:18:22 +0200 Subject: [PATCH 4/8] Add github workflows --- .github/workflows/android-test.yml | 99 ++++++++++++++++++++++++++++++ .github/workflows/changelog.yml | 24 ++++++++ .github/workflows/ci.yml | 67 ++++++++++++++++++++ 3 files changed, 190 insertions(+) create mode 100644 .github/workflows/android-test.yml create mode 100644 .github/workflows/changelog.yml create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/android-test.yml b/.github/workflows/android-test.yml new file mode 100644 index 0000000..e499e2f --- /dev/null +++ b/.github/workflows/android-test.yml @@ -0,0 +1,99 @@ +name: Android Emulator Tests +on: [ push, pull_request ] + +jobs: + check-if-tests-exist: + runs-on: ubuntu-latest + outputs: + status: ${{ steps.check-androidTest.outputs.NOT_EMPTY }} + min-sdk-version: ${{ steps.get-sdk-version.outputs.MIN_SDK_VERSION }} + target-sdk-version: ${{ steps.get-sdk-version.outputs.TARGET_SDK_VERSION }} + app-id: ${{ steps.get-app-id.outputs.APP_ID }} + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: "recursive" + - name: Check if androidTest folder is not empty + run: | + echo "NOT_EMPTY=$([ "$(ls -A app/src/androidTest)" ] && echo 'true' || echo 'false')" + echo "NOT_EMPTY=$([ "$(ls -A app/src/androidTest)" ] && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT + id: check-androidTest + - name: Get min and target sdk + if: steps.check-androidTest.outputs.NOT_EMPTY == 'true' + id: get-sdk-version + run: | + echo "MIN_SDK_VERSION=$(cat app/build.gradle | grep minSdkVersion | rev | cut -d' ' -f 1 | rev)" >> $GITHUB_OUTPUT + echo "TARGET_SDK_VERSION=$(cat app/build.gradle | grep targetSdkVersion | rev | cut -d' ' -f 1 | rev)" >> $GITHUB_OUTPUT + - name: Get app ID + id: get-app-id + run: | + echo "APP_ID=$(cat app/build.gradle | grep applicationId | rev | cut -d' ' -f 1 | rev | tr -d '"')" >> $GITHUB_OUTPUT + + test: + needs: check-if-tests-exist + if: needs.check-if-tests-exist.outputs.status == 'true' + runs-on: ubuntu-latest + strategy: + matrix: + api-level: [34, "${{ needs.check-if-tests-exist.outputs.min-sdk-version }}", "${{ needs.check-if-tests-exist.outputs.target-sdk-version }}"] + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: 'recursive' + + - name: Enable KVM group perms + run: | + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --name-match=kvm + + - name: Gradle cache + uses: gradle/gradle-build-action@v3 + + - name: AVD cache + uses: actions/cache@v4 + id: avd-cache + with: + path: | + ~/.android/avd/* + ~/.android/adb* + key: avd-${{ matrix.api-level }} + + - name: Set up JDK environment + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 17 + + - name: create AVD and generate snapshot for caching + if: steps.avd-cache.outputs.cache-hit != 'true' + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: ${{ matrix.api-level }} + target: ${{ matrix.api-level >= 30 && 'google_apis' || 'default' }} + arch: ${{ matrix.api-level < 21 && 'x86' || 'x86_64' }} + force-avd-creation: false + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: false + script: echo "Generated AVD snapshot for caching." + + - name: Run connected tests + uses: ReactiveCircus/android-emulator-runner@v2 + with: + api-level: ${{ matrix.api-level }} + target: ${{ matrix.api-level >= 30 && 'google_apis' || 'default' }} + arch: ${{ matrix.api-level < 21 && 'x86' || 'x86_64' }} + force-avd-creation: false + emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: true + script: | + adb uninstall ${{needs.check-if-tests-exist.outputs.app-id}} || true + adb uninstall ${{needs.check-if-tests-exist.outputs.app-id}}.test || true + adb uninstall ${{needs.check-if-tests-exist.outputs.app-id}}.androidTest || true + chmod +x gradlew + ./gradlew :app:connectedCheck --stacktrace + adb uninstall ${{needs.check-if-tests-exist.outputs.app-id}} || true + adb uninstall ${{needs.check-if-tests-exist.outputs.app-id}}.test || true + adb uninstall ${{needs.check-if-tests-exist.outputs.app-id}}.androidTest || true diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml new file mode 100644 index 0000000..6e50db1 --- /dev/null +++ b/.github/workflows/changelog.yml @@ -0,0 +1,24 @@ +name: Changelog Generation + +on: + release: + types: [published] + workflow_dispatch: + +jobs: + changelog: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + submodules: 'recursive' + ref: master + - uses: rhysd/changelog-from-release/action@v3 + with: + file: CHANGELOG.md + pull_request: true + github_token: ${{ secrets.GITHUB_TOKEN }} + commit_summary_template: 'update changelog for %s changes' + args: -l 2 + header: | + # Changelog diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..fe5b0a9 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,67 @@ +name: Continuous Integration +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-20.04 + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: "recursive" + + - name: Set up JDK environment + uses: actions/setup-java@v3 + with: + distribution: "zulu" + java-version: 17 + + - name: Make gradlew executable + run: chmod +x ./gradlew + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + + - name: Run local unit tests + run: bash ./gradlew test --stacktrace + + build: + runs-on: ubuntu-20.04 + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: "recursive" + + - name: Set up JDK environment + uses: actions/setup-java@v3 + with: + distribution: "zulu" + java-version: 17 + + - name: Make gradlew executable + run: chmod +x ./gradlew + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + + - name: Run lint check + run: bash ./gradlew lint + + - name: Upload lint result + uses: actions/upload-artifact@v4 + with: + name: lint-results-debug + path: app/build/reports/lint-results-debug.html + + - name: Build the app + run: bash ./gradlew build --stacktrace + + - name: Build debug apk + run: bash ./gradlew assembleDebug + + - name: Upload debug apk + uses: actions/upload-artifact@v4 + with: + name: debug-apk + path: app/build/outputs/apk/debug/*.apk \ No newline at end of file From 2f1ea6fcb0446ee036196ee6f384b10d0a286018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20L=C3=A4nge?= Date: Fri, 4 Oct 2024 13:59:29 +0200 Subject: [PATCH 5/8] Fix/Suppress some lint errors --- BaseGameUtils/build.gradle | 5 +- app/build.gradle | 7 +- app/lint.xml | 14 +++- .../secuso/phishedu2/GooglePlusActivity.java | 4 +- .../secuso/phishedu2/MainActivity.java | 4 +- .../secuso/phishedu2/PhishBaseActivity.java | 82 +++++++++---------- .../secuso/phishedu2/SwipeActivity.java | 3 +- app/src/main/res/layout/awareness.xml | 6 +- app/src/main/res/layout/google_plus.xml | 2 + 9 files changed, 74 insertions(+), 53 deletions(-) diff --git a/BaseGameUtils/build.gradle b/BaseGameUtils/build.gradle index 9643458..a18c7c0 100644 --- a/BaseGameUtils/build.gradle +++ b/BaseGameUtils/build.gradle @@ -20,6 +20,9 @@ dependencies { } android { - compileSdkVersion 20 + defaultConfig{ + minSdkVersion 14 + compileSdk 20 + } } diff --git a/app/build.gradle b/app/build.gradle index 0920a8b..4b48c2b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,10 +1,10 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 33 defaultConfig { applicationId 'de.tudarmstadt.informatik.secuso.phishedu2' minSdkVersion 19 + compileSdk 33 targetSdkVersion 33 versionCode 31 versionName "1.4.0" @@ -17,6 +17,9 @@ android { } productFlavors { } + lint { + lintConfig = file("lint.xml") + } } dependencies { @@ -24,7 +27,7 @@ dependencies { implementation project(':BaseGameUtils') implementation 'com.google.code.gson:gson:2.3' implementation files('libs/android-json-rpc-0.2.jar') - implementation 'androidx.appcompat:appcompat:1.0.0' + implementation 'androidx.appcompat:appcompat:1.6.1' constraints { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version") { diff --git a/app/lint.xml b/app/lint.xml index 8423c0e..5477ac9 100644 --- a/app/lint.xml +++ b/app/lint.xml @@ -1,3 +1,13 @@ - + - \ No newline at end of file + + + + + + + + + + + diff --git a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/GooglePlusActivity.java b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/GooglePlusActivity.java index 6f9f6a5..b09bdb5 100644 --- a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/GooglePlusActivity.java +++ b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/GooglePlusActivity.java @@ -33,7 +33,7 @@ public void setShowSignIn(boolean showsignin){ void updateUI(Activity v){ // show sign-out button, hide the sign-in button - v.findViewById(R.id.sign_in_button).setVisibility(showSignIn ? View.VISIBLE : View.GONE); + //v.findViewById(R.id.sign_in_button).setVisibility(showSignIn ? View.VISIBLE : View.GONE); v.findViewById(R.id.sign_out_button).setVisibility(showSignIn ? View.GONE : View.VISIBLE); // findViewById(R.id.button_show_leaderboard_rate).setVisibility(View.VISIBLE); @@ -89,7 +89,7 @@ public int getLayout() { @Override public int[] getClickables() { return new int[] { - R.id.sign_in_button, + //R.id.sign_in_button, R.id.sign_out_button, R.id.button_show_online_achievement, R.id.button_show_leaderboard_rate, diff --git a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/MainActivity.java b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/MainActivity.java index 7f9db6a..0d1342f 100644 --- a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/MainActivity.java +++ b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/MainActivity.java @@ -20,6 +20,7 @@ package de.tudarmstadt.informatik.secuso.phishedu2; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -293,7 +294,8 @@ private GoogleApiClient getApiClient(){ return BackendControllerImpl.getInstance().getGameHelper().getApiClient(); }*/ - @Override + @SuppressLint("MissingSuperCall") + @Override protected void onSaveInstanceState(Bundle outState) { //No call for super(). Bug on API Level > 11. outState.putString("current_frag", current_frag); diff --git a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/PhishBaseActivity.java b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/PhishBaseActivity.java index 512188d..e2682b9 100644 --- a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/PhishBaseActivity.java +++ b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/PhishBaseActivity.java @@ -24,10 +24,6 @@ import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; - -import androidx.appcompat.app.ActionBar; -import androidx.fragment.app.Fragment; -import androidx.appcompat.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -39,7 +35,9 @@ import android.widget.RelativeLayout; import android.widget.TextView; -import java.lang.reflect.Field; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; import de.tudarmstadt.informatik.secuso.phishedu2.backend.BackendController.Levelstate; import de.tudarmstadt.informatik.secuso.phishedu2.backend.BackendController.OnLevelChangeListener; @@ -48,46 +46,46 @@ import de.tudarmstadt.informatik.secuso.phishedu2.backend.FrontendController; public abstract class PhishBaseActivity extends Fragment implements OnClickListener, OnLevelChangeListener, OnLevelstateChangeListener { - + public void updateUI(){ if(getActivity()!=null){ - + for (int i : getClickables()) { View clickview = getActivity().findViewById(i); if(clickview != null){ - clickview.setOnClickListener(this); + clickview.setOnClickListener(this); } } - + setTitles(); updateScore(); - + updateUI(getActivity()); } } - + FrontendController getFrontedController(){ return (FrontendController) getActivity(); } - + void updateUI(Activity activity){}; - + /** * Get the id of the Layout of this fragment. * You have to implement one of this and {@link #getLayout(LayoutInflater, ViewGroup, Bundle)} - * @return the base layout + * @return the base layout */ public int getLayout(){ return 0; } - + public View getLayout(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ return null; } - + /** * If the fragment wants to react on the backpressed button it can implements this function - * @return return true to continue with the back event. False otherwise. + * @return return true to continue with the back event. False otherwise. */ public void onBackPressed(){ if(enableHomeButton()){ @@ -107,22 +105,22 @@ int getSubTitle(){ int getIcon(){return 0;} boolean enableHomeButton(){return true;}; boolean enableRestartButton(){return false;}; - + public void onSwitchTo(){}; - + @Override public void onResume() { super.onResume(); updateUI(); } - + /** * If there are clickable elements on this page you must list them here and implement {@link #onClick(View)} * @return the list of resource IDs of the clickable elements. */ public int[] getClickables(){return new int[0];}; public void onClick(View view){}; - + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v; if(getLayout()!=0){ @@ -144,12 +142,12 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa // } // }); // } - + setHasOptionsMenu(true); - return v; + return v; } - + private void setTitles(){ ActionBar ab = ((AppCompatActivity)getActivity()).getSupportActionBar(); //ab.setDisplayUseLogoEnabled(true); @@ -177,7 +175,7 @@ private void setTitles(){ ab.setSubtitle(getString(R.string.level_11_splash_subtitle)); } } - + protected void updateScore(){ Activity view = getActivity(); if(view != null){ @@ -201,9 +199,9 @@ protected void updateScore(View view){ urlsText.setText(Integer.toString(BackendControllerImpl.getInstance().getCorrectlyFoundURLs())); urlsGoalText.setText(Integer.toString(BackendControllerImpl.getInstance().getLevelInfo().levelCorrectURLs())); LevelScoreText.setText(Integer.toString(BackendControllerImpl.getInstance().getLevelPoints())); - + int remaininLives = BackendControllerImpl.getInstance().getLifes(); - + //now hide hearts if required switch (remaininLives) { case 0: @@ -225,8 +223,8 @@ protected void updateScore(View view){ } } } - - + + protected void levelRestartWarning() { AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); @@ -237,7 +235,7 @@ protected void levelRestartWarning() { alertDialog.setMessage(getString(R.string.level_restart_text)); alertDialog.setPositiveButton(R.string.level_restart_positive_button, new DialogInterface.OnClickListener() { - + @Override public void onClick(DialogInterface dialog, int which) { BackendControllerImpl.getInstance().restartLevel(); @@ -255,7 +253,7 @@ public void onClick(DialogInterface dialog, int which) { // Showing Alert Message alertDialog.show(); } - + protected void levelCanceldWarning() { AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity()); @@ -266,7 +264,7 @@ protected void levelCanceldWarning() { alertDialog.setMessage(getString(R.string.level_cancel_text)); alertDialog.setPositiveButton(R.string.level_cancel_positive_button, new DialogInterface.OnClickListener() { - + @Override public void onClick(DialogInterface dialog, int which) { BackendControllerImpl.getInstance().abortLevel(); @@ -284,20 +282,20 @@ public void onClick(DialogInterface dialog, int which) { // Showing Alert Message alertDialog.show(); } - + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.urltask_menu, menu); } - + @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); MenuItem restart = menu.findItem(R.id.restart_level); restart.setVisible(enableRestartButton()); } - + @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); @@ -309,11 +307,11 @@ public boolean onOptionsItemSelected(MenuItem item) { } return super.onOptionsItemSelected(item); } - + int getLevel(){ return BackendControllerImpl.getInstance().getLevel(); } - + // @Override // public void onDetach() { // super.onDetach(); @@ -329,24 +327,24 @@ int getLevel(){ // throw new RuntimeException(e); // } // } - + protected void switchToFragment(Class target){ ((MainActivity)getActivity()).switchToFragment(target); } - + protected void switchToFragment(Class target, Bundle args){ ((MainActivity)getActivity()).switchToFragment(target,args); } - + @Override public void onLevelChange(int new_levelid, boolean showRepeat) {} @Override public void onLevelstateChange(Levelstate new_state, int level) {} - + @Override public void onSaveInstanceState(Bundle outState) { //No call for super(). Bug on API Level > 11. } - + } diff --git a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/SwipeActivity.java b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/SwipeActivity.java index c893ce2..f3d4c65 100644 --- a/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/SwipeActivity.java +++ b/app/src/main/java/de/tudarmstadt/informatik/secuso/phishedu2/SwipeActivity.java @@ -20,6 +20,7 @@ package de.tudarmstadt.informatik.secuso.phishedu2; +import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import androidx.fragment.app.FragmentManager; @@ -210,7 +211,7 @@ public SwipePageAdapter(FragmentManager fragmentManager, SwipeActivity activity) @Override public Object instantiateItem(ViewGroup container, int position) { - View view = activity.getPage(position, activity.getLayoutInflater(getArguments()), container, getArguments()); + @SuppressLint("RestrictedApi") View view = activity.getPage(position, activity.getLayoutInflater(getArguments()), container, getArguments()); view.setOnClickListener(new ClickListener(position)); updateScore(view); for (int i : getClickables()) { diff --git a/app/src/main/res/layout/awareness.xml b/app/src/main/res/layout/awareness.xml index d843611..7486485 100644 --- a/app/src/main/res/layout/awareness.xml +++ b/app/src/main/res/layout/awareness.xml @@ -121,7 +121,8 @@ android:onClick="sendEmail" android:contentDescription="@string/content_desc_button_send" android:layout_marginTop="@dimen/margin_standard" - android:text="@string/btn_send" /> + android:text="@string/btn_send" + tools:ignore="UsingOnClickInXml" />