├── .gitignore ├── .idea ├── $CACHE_FILE$ ├── .gitignore ├── .name ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── compiler.xml ├── jarRepositories.xml └── misc.xml ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── trianguloy │ │ └── isUserAMonkey │ │ ├── MainActivity.java │ │ └── tools │ │ ├── Animations.java │ │ └── ClickableLinks.java │ ├── play │ ├── contact-email.txt │ ├── contact-website.txt │ ├── listings │ │ └── en-US │ │ │ ├── full-description.txt │ │ │ ├── graphics │ │ │ ├── feature-graphic │ │ │ │ └── featured.png │ │ │ ├── icon │ │ │ │ └── ic_launcher-playstore.png │ │ │ └── phone-screenshots │ │ │ │ ├── 1.png │ │ │ │ └── 2.png │ │ │ ├── short-description.txt │ │ │ └── title.txt │ └── release-notes │ │ └── en-US │ │ └── default.txt │ └── res │ ├── drawable │ └── ic_launcher_foreground.xml │ ├── layout │ └── activity_main.xml │ ├── mipmap-anydpi-v26 │ └── ic_launcher.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── values-v14 │ └── styles.xml │ └── values │ ├── ic_launcher_background.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.aar 4 | *.ap_ 5 | *.aab 6 | 7 | # Files for the ART/Dalvik VM 8 | *.dex 9 | 10 | # Java class files 11 | *.class 12 | 13 | # Generated files 14 | bin/ 15 | gen/ 16 | out/ 17 | # Uncomment the following line in case you need and you don't have the release build type files in your app 18 | # release/ 19 | 20 | # Gradle files 21 | .gradle/ 22 | build/ 23 | 24 | # Local configuration file (sdk path, etc) 25 | local.properties 26 | 27 | # Proguard folder generated by Eclipse 28 | proguard/ 29 | 30 | # Log Files 31 | *.log 32 | 33 | # Android Studio Navigation editor temp files 34 | .navigation/ 35 | 36 | # Android Studio captures folder 37 | captures/ 38 | 39 | # IntelliJ 40 | *.iml 41 | .idea/workspace.xml 42 | .idea/tasks.xml 43 | .idea/gradle.xml 44 | .idea/assetWizardSettings.xml 45 | .idea/dictionaries 46 | .idea/libraries 47 | # Android Studio 3 in .gitignore file. 48 | .idea/caches 49 | .idea/modules.xml 50 | # Comment next line if keeping position of elements in Navigation Editor is relevant for you 51 | .idea/navEditor.xml 52 | 53 | # Keystore files 54 | # Uncomment the following lines if you do not want to check your keystore files in. 55 | #*.jks 56 | #*.keystore 57 | 58 | # External native build folder generated in Android Studio 2.2 and later 59 | .externalNativeBuild 60 | .cxx/ 61 | 62 | # Google Services (e.g. APIs or Firebase) 63 | # google-services.json 64 | 65 | # Freeline 66 | freeline.py 67 | freeline/ 68 | freeline_project_description.json 69 | 70 | # fastlane 71 | fastlane/report.xml 72 | fastlane/Preview.html 73 | fastlane/screenshots 74 | fastlane/test_output 75 | fastlane/readme.md 76 | 77 | # Version control 78 | vcs.xml 79 | 80 | # lint 81 | lint/intermediates/ 82 | lint/generated/ 83 | lint/outputs/ 84 | lint/tmp/ 85 | # lint/reports/ 86 | 87 | # Android Profiling 88 | *.hprof -------------------------------------------------------------------------------- /.idea/$CACHE_FILE$: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Spelling 10 | 11 | 12 | 13 | 14 | SpellCheckingInspection 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | isUserAMonkey & isUserAGoat -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 20 | 21 | 22 | 134 | 135 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # isUserAMonkey & isUserAGoat 2 | 3 | Android app made by TrianguloY 4 | 5 | Get it on Google Play:\ 6 | https://play.google.com/store/apps/details?id=com.trianguloy.isUserAMonkey \ 7 | [Get it on Google Play](https://play.google.com/store/apps/details?id=com.trianguloy.isUserAMonkey) 10 | 11 | Get it on F-Droid:\ 12 | https://f-droid.org/packages/com.trianguloy.isUserAMonkey/ \ 13 | [Get it on F-Droid](https://f-droid.org/packages/com.trianguloy.isUserAMonkey/) 16 | 17 | You can use parts of this project in your own ones, create pull request, or upload modified versions of it AS LONG AS you credit me. 18 | 19 | How to credit: 20 | - You must add my nick (TrianguloY) in an 'about' or 'acknowledgments' section visible to the user. 21 | - You must add a link to this GitHub main page (https://github.com/TrianguloY/isUserAMonkey) or subpage (if you used a part of the code or an asset) in an 'about' or 'acknowledgments' section visible to the user. 22 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | } 4 | 5 | android { 6 | compileSdkVersion 30 7 | buildToolsVersion "29.0.3" 8 | 9 | defaultConfig { 10 | applicationId "com.trianguloy.isUserAMonkey" 11 | minSdkVersion 8 12 | targetSdkVersion 30 13 | versionCode 1 14 | versionName "1.0" 15 | 16 | } 17 | 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | compileOptions { 25 | sourceCompatibility JavaVersion.VERSION_1_8 26 | targetCompatibility JavaVersion.VERSION_1_8 27 | } 28 | } 29 | 30 | dependencies { 31 | 32 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/trianguloy/isUserAMonkey/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.trianguloy.isUserAMonkey; 2 | 3 | 4 | import android.annotation.TargetApi; 5 | import android.app.Activity; 6 | import android.app.ActivityManager; 7 | import android.content.Context; 8 | import android.content.Intent; 9 | import android.content.res.Resources; 10 | import android.net.Uri; 11 | import android.os.Build; 12 | import android.os.Bundle; 13 | import android.os.UserManager; 14 | import android.util.Log; 15 | import android.view.View; 16 | import android.view.ViewGroup; 17 | import android.widget.TextView; 18 | import android.widget.Toast; 19 | 20 | import com.trianguloy.isUserAMonkey.tools.Animations; 21 | import com.trianguloy.isUserAMonkey.tools.ClickableLinks; 22 | 23 | import java.util.HashMap; 24 | 25 | /** 26 | * The main, and only, activity 27 | */ 28 | public class MainActivity extends Activity implements ClickableLinks.OnUrlListener { 29 | 30 | // ------------------- data ------------------- 31 | 32 | /** 33 | * tags to urls map 34 | */ 35 | private static final HashMap links = new HashMap<>(); 36 | 37 | static { 38 | links.put("TrianguloY", "https://github.com/TrianguloY"); 39 | links.put("GitHub", "https://github.com/TrianguloY/isUserAMonkey"); 40 | 41 | links.put("isUserAMonkey", "https://developer.android.com/reference/android/app/ActivityManager.html#isUserAMonkey()"); 42 | links.put("monkey", "https://developer.android.com/studio/test/monkey.html"); 43 | 44 | links.put("isUserAGoat", "https://developer.android.com/reference/android/os/UserManager.html#isUserAGoat()"); 45 | links.put("Goat Simulator", "https://play.google.com/store/apps/details?id=com.coffeestainstudios.goatsimulator"); 46 | 47 | links.put("strange-function-in-activitymanager-isuseramonkey-what-does-this-mean-what-is", "https://stackoverflow.com/a/7792165"); 48 | links.put("proper-use-cases-for-android-usermanager-isuseragoat", "https://stackoverflow.com/a/13375461"); 49 | links.put("Android-Documentation-Easter-Eggs", "https://github.com/vitorOta/Android-Documentation-Easter-Eggs"); 50 | links.put("Noto Emoji", "https://github.com/googlefonts/noto-emoji/blob/f2a4f72/svg/emoji_u1f412.svg"); 51 | } 52 | 53 | // ------------------- initialization ------------------- 54 | 55 | /** 56 | * App initialization 57 | */ 58 | @Override 59 | protected void onCreate(Bundle savedInstanceState) { 60 | super.onCreate(savedInstanceState); 61 | setContentView(R.layout.activity_main); 62 | ViewGroup parent = findViewById(R.id.parent); 63 | 64 | // init animations 65 | Animations.enable(parent); 66 | 67 | // init links 68 | ClickableLinks.linkifyAll(parent, this); 69 | } 70 | 71 | // ------------------- listeners ------------------- 72 | 73 | /** 74 | * A button was clicked 75 | */ 76 | public void onButtonClick(View view) { 77 | switch (view.getId()) { 78 | case R.id.m_run: 79 | // run the isUserAMonkey function 80 | runMonkey(); 81 | break; 82 | case R.id.g_run: 83 | // run the isUserAGoat function 84 | runGoat(); 85 | break; 86 | case R.id.m_expand: 87 | // show details for the isUserAMonkey function 88 | swap(view, R.id.m_details); 89 | break; 90 | case R.id.g_expand: 91 | // show details for the isUserAGoat function 92 | swap(view, R.id.g_details); 93 | break; 94 | } 95 | } 96 | 97 | /** 98 | * A link (in a textview) was clicked 99 | */ 100 | @Override 101 | public void onLinkClick(String tag) { 102 | if (!links.containsKey(tag)) { 103 | // link not present, error 104 | String msg = "The entry '" + tag + "' wasn't present in the links hashmap"; 105 | Log.d("NotFoundException", msg); 106 | if (BuildConfig.DEBUG) // crash in development 107 | throw new Resources.NotFoundException(msg); 108 | return; // ignore in production 109 | } 110 | 111 | try { 112 | // open 113 | startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(links.get(tag)))); 114 | } catch (Exception e) { 115 | // can't open 116 | Toast.makeText(this, R.string.no_browser, Toast.LENGTH_LONG).show(); 117 | } 118 | } 119 | 120 | // ------------------- functions ------------------- 121 | 122 | /** 123 | * Just a (hopefully) inlined function to hide one view and show another 124 | * 125 | * @param hide view to hide 126 | * @param show identifier of view to show 127 | */ 128 | private void swap(View hide, int show) { 129 | hide.setVisibility(View.GONE); 130 | findViewById(show).setVisibility(View.VISIBLE); 131 | } 132 | 133 | /** 134 | * Run the isUserAMonkey function, and update the ui accordingly 135 | */ 136 | private void runMonkey() { 137 | 138 | // views 139 | TextView result = this.findViewById(R.id.m_result); 140 | TextView comment = this.findViewById(R.id.m_comment); 141 | 142 | try { 143 | 144 | // run 145 | boolean isUserAMonkey = ActivityManager.isUserAMonkey(); // <-- This! 146 | 147 | // result 148 | result.setText(Boolean.toString(isUserAMonkey)); 149 | 150 | // comment 151 | if (isUserAMonkey) { 152 | comment.setText(R.string.m_true); 153 | } else { 154 | comment.setText(R.string.m_false); 155 | } 156 | 157 | } catch (Throwable e) { 158 | 159 | // unavailable (unexpected) 160 | result.setText(R.string.unavailable); 161 | comment.setText(R.string.m_crash); 162 | comment.append("\n\n"); 163 | comment.append(e.toString()); 164 | } 165 | 166 | // update 167 | ClickableLinks.linkify(result, this); 168 | ClickableLinks.linkify(comment, this); 169 | } 170 | 171 | /** 172 | * Run the isUserAGoat function, and update the ui accordingly 173 | */ 174 | @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) // to suppress the wanted unavailable error 175 | private void runGoat() { 176 | 177 | // views 178 | TextView result = this.findViewById(R.id.g_result); 179 | TextView comment = this.findViewById(R.id.g_comment); 180 | 181 | try { 182 | 183 | // run 184 | boolean isUserAGoat = ((UserManager) getSystemService(Context.USER_SERVICE)).isUserAGoat(); // <-- This! 185 | 186 | // result 187 | result.setText(Boolean.toString(isUserAGoat)); 188 | 189 | // comment 190 | if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 191 | // pre lollipop, always return false 192 | if (isUserAGoat) { 193 | comment.setText(R.string.g_lollipop_true); 194 | } else { 195 | comment.setText(R.string.g_lollipop_false); 196 | } 197 | } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { 198 | // post lollipop and pre R, checks for goat simulator 199 | if (isUserAGoat) { 200 | comment.setText(R.string.g_true); 201 | } else { 202 | comment.setText(R.string.g_false); 203 | } 204 | } else { 205 | // post R, always return false 206 | if (isUserAGoat) { 207 | comment.setText(R.string.g_r_true); 208 | } else { 209 | comment.setText(R.string.g_r_false); 210 | } 211 | } 212 | 213 | } catch (Throwable e) { 214 | // unavailable 215 | 216 | // result 217 | result.setText(R.string.unavailable); 218 | 219 | // comment 220 | if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { 221 | // pre jelly bean, expected crash, function unavailable 222 | comment.setText(R.string.g_unavailable); 223 | } else { 224 | // unexpected crash 225 | comment.setText(R.string.g_crash); 226 | } 227 | comment.append("\n\n"); 228 | comment.append(e.toString()); 229 | } 230 | 231 | // update 232 | ClickableLinks.linkify(result, this); 233 | ClickableLinks.linkify(comment, this); 234 | 235 | } 236 | 237 | } -------------------------------------------------------------------------------- /app/src/main/java/com/trianguloy/isUserAMonkey/tools/Animations.java: -------------------------------------------------------------------------------- 1 | package com.trianguloy.isUserAMonkey.tools; 2 | 3 | import android.animation.LayoutTransition; 4 | import android.os.Build; 5 | import android.view.ViewGroup; 6 | 7 | /** 8 | * Enables the animations for changing components 9 | */ 10 | public class Animations { 11 | static public void enable(ViewGroup view) { 12 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 13 | view.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/trianguloy/isUserAMonkey/tools/ClickableLinks.java: -------------------------------------------------------------------------------- 1 | package com.trianguloy.isUserAMonkey.tools; 2 | 3 | import android.text.SpannableStringBuilder; 4 | import android.text.method.LinkMovementMethod; 5 | import android.text.style.ClickableSpan; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.TextView; 9 | 10 | import java.util.ArrayList; 11 | import java.util.regex.Matcher; 12 | import java.util.regex.Pattern; 13 | 14 | /** 15 | * Container for {@link #linkify(TextView, OnUrlListener)} 16 | */ 17 | public class ClickableLinks { 18 | 19 | /** 20 | * Listener for when a link is clicked. The link's tag specify which link was clicked. 21 | */ 22 | public interface OnUrlListener { 23 | void onLinkClick(String tag); 24 | } 25 | 26 | /** 27 | * Converts a TextView with custom tags into clickable links to use in a custom listener.
28 | * Pattern: "[[tag|display text]]" or "[[tag and display text]]" (similar to wikipedia linking)
29 | *
30 | * For example, a TextView with text "Press [[main|here]] to open or [[reset]]."
31 | * will be converted into "Press here to open or reset."
32 | * so that when clicked in the 'here' word: listener.onClick("main") will be called,
33 | * and when clicked in the 'reset' word: listener.onClick("reset") will be called.
34 | * (note: all spaces are kept in both tag and display text) 35 | * 36 | * @param textView TextView to convert 37 | * @param listener Listener for when a link is clicked. The link's tag specify which link was clicked. 38 | */ 39 | public static void linkify(TextView textView, final OnUrlListener listener) { 40 | ArrayList matches = new ArrayList<>(); // keeps matches, reverse order 41 | SpannableStringBuilder text = new SpannableStringBuilder(textView.getText()); // final text 42 | 43 | // search all matches 44 | final Matcher matcher = PATTERN.matcher(text); 45 | while (matcher.find()) { 46 | matches.add(0, new Match(matcher.start(), matcher.end(), matcher.group(1), matcher.group(2))); 47 | } 48 | 49 | // replace matches (in reverse order) 50 | for (final Match match : matches) { 51 | ClickableSpan clickable = new ClickableSpan() { 52 | public void onClick(View view) { 53 | listener.onLinkClick(match.tag); 54 | } 55 | }; 56 | text.setSpan(clickable, match.start, match.end, 0); // first set span 57 | text.replace(match.start, match.end, match.text); // then replace (span is automatically adapted) 58 | } 59 | 60 | // finish conversion 61 | textView.setText(text); 62 | textView.setLinksClickable(true); 63 | textView.setMovementMethod(LinkMovementMethod.getInstance()); 64 | } 65 | 66 | /** 67 | * Runs the {@link #linkify(TextView, OnUrlListener)} on all textviews of the hierarchy recursively 68 | * 69 | * @param container parent where to search 70 | * @param listener listener to apply to all textviews 71 | */ 72 | public static void linkifyAll(ViewGroup container, OnUrlListener listener) { 73 | for (int i = 0; i < container.getChildCount(); i++) { 74 | View view = container.getChildAt(i); 75 | 76 | if (view instanceof TextView) linkify((TextView) view, listener); 77 | else if (view instanceof ViewGroup) linkifyAll((ViewGroup) view, listener); 78 | } 79 | } 80 | 81 | // ------------------- private ------------------- 82 | 83 | /** 84 | * Pattern: "[[tag|display text]]" or "[[tag and display text]]" (similar to wikipedia linking) 85 | */ 86 | private static final Pattern PATTERN = Pattern.compile("\\[\\[([^|\\]]*)(?:\\|([^]]*))?]]"); 87 | 88 | /** 89 | * Just a container 90 | */ 91 | private static class Match { 92 | final int start; 93 | final int end; 94 | final String tag; 95 | final String text; 96 | 97 | Match(int start, int end, String tag, String text) { 98 | this.start = start; 99 | this.end = end; 100 | this.tag = tag; 101 | this.text = text == null ? tag : text; 102 | } 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /app/src/main/play/contact-email.txt: -------------------------------------------------------------------------------- 1 | correo--correo+iuam@hotmail.com -------------------------------------------------------------------------------- /app/src/main/play/contact-website.txt: -------------------------------------------------------------------------------- 1 | https://triangularapps.blogspot.com/ -------------------------------------------------------------------------------- /app/src/main/play/listings/en-US/full-description.txt: -------------------------------------------------------------------------------- 1 | Did you know that in the Android SDK there is a function called 'isUserAMonkey' and another called 'isUserAGoat'? 2 | https://developer.android.com/reference/android/app/ActivityManager.html#isUserAMonkey() 3 | https://developer.android.com/reference/android/os/UserManager.html#isUserAGoat() 4 | 5 | What are they? What do they do? With this app you can test them and learn a bit about their purpose. 6 | 7 | As usual, this app is extremely small (less than a standard picture), totally free, contains no ads, has no permissions, and their sole purpose it to act as an interactive explanation of two strange easter eggs in the Android SDK. 8 | 9 | The more you know. 10 | 11 | ------------------------------------------------------------ 12 | 13 | App developed by TrianguloY (https://github.com/TrianguloY). 14 | The source code of the app is available on GitHub (https://github.com/TrianguloY/isUserAMonkey). 15 | Special thanks to StackOverflow https://stackoverflow.com/a/7792165 and https://stackoverflow.com/a/13375461 for the detailed information. 16 | The monkey emoji in the icon was extracted from the Noto Emoji font (https://www.google.com/get/noto/help/emoji/). -------------------------------------------------------------------------------- /app/src/main/play/listings/en-US/graphics/feature-graphic/featured.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TrianguloY/isUserAMonkey/78818e6a28056baa92307f741057d67aa809244e/app/src/main/play/listings/en-US/graphics/feature-graphic/featured.png -------------------------------------------------------------------------------- /app/src/main/play/listings/en-US/graphics/icon/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TrianguloY/isUserAMonkey/78818e6a28056baa92307f741057d67aa809244e/app/src/main/play/listings/en-US/graphics/icon/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/play/listings/en-US/graphics/phone-screenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TrianguloY/isUserAMonkey/78818e6a28056baa92307f741057d67aa809244e/app/src/main/play/listings/en-US/graphics/phone-screenshots/1.png -------------------------------------------------------------------------------- /app/src/main/play/listings/en-US/graphics/phone-screenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TrianguloY/isUserAMonkey/78818e6a28056baa92307f741057d67aa809244e/app/src/main/play/listings/en-US/graphics/phone-screenshots/2.png -------------------------------------------------------------------------------- /app/src/main/play/listings/en-US/short-description.txt: -------------------------------------------------------------------------------- 1 | The android sdk has strange functions called 'isUserAMonkey' and 'isUserAGoat' -------------------------------------------------------------------------------- /app/src/main/play/listings/en-US/title.txt: -------------------------------------------------------------------------------- 1 | isUserAMonkey & isUserAGoat [curiosity] -------------------------------------------------------------------------------- /app/src/main/play/release-notes/en-US/default.txt: -------------------------------------------------------------------------------- 1 | V 1.0 2 | - First release -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 11 | 14 | 17 | 20 | 23 | 26 | 29 | 32 | 35 | 38 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 21 | 22 | 31 | 32 | 40 | 41 | 46 | 47 | 52 | 53 | 60 | 61 | 67 | 68 | 69 | 75 | 76 | 83 | 84 | 89 | 90 | 99 | 100 | 108 | 109 | 114 | 115 | 120 | 121 | 128 | 129 | 135 | 136 | 137 | 143 | 144 | 151 | 152 | 157 | 158 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TrianguloY/isUserAMonkey/78818e6a28056baa92307f741057d67aa809244e/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TrianguloY/isUserAMonkey/78818e6a28056baa92307f741057d67aa809244e/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TrianguloY/isUserAMonkey/78818e6a28056baa92307f741057d67aa809244e/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TrianguloY/isUserAMonkey/78818e6a28056baa92307f741057d67aa809244e/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-v14/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |