├── .firebaserc ├── .github └── workflows │ └── android.yml ├── .gitignore ├── .idea ├── .gitignore ├── .name ├── compiler.xml ├── gradle.xml ├── misc.xml └── vcs.xml ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ └── roms │ │ ├── QEMU,cgthree.bin │ │ ├── QEMU,tcx.bin │ │ ├── README │ │ ├── bios-256k.bin │ │ ├── bios.bin │ │ ├── efi-e1000.rom │ │ ├── efi-e1000e.rom │ │ ├── efi-eepro100.rom │ │ ├── efi-ne2k_pci.rom │ │ ├── efi-pcnet.rom │ │ ├── efi-rtl8139.rom │ │ ├── efi-virtio.rom │ │ ├── efi-vmxnet3.rom │ │ ├── etc │ │ └── resolv.conf │ │ ├── harddisk │ │ ├── hdb.qcow2 │ │ ├── hdc.qcow2 │ │ └── hdd.qcow2 │ │ ├── keymaps │ │ ├── Makefile │ │ ├── ar │ │ ├── bepo │ │ ├── common │ │ ├── cz │ │ ├── da │ │ ├── de │ │ ├── de-ch │ │ ├── en-gb │ │ ├── en-us │ │ ├── es │ │ ├── et │ │ ├── fi │ │ ├── fo │ │ ├── fr │ │ ├── fr-be │ │ ├── fr-ca │ │ ├── fr-ch │ │ ├── hr │ │ ├── hu │ │ ├── is │ │ ├── it │ │ ├── ja │ │ ├── lt │ │ ├── lv │ │ ├── mk │ │ ├── modifiers │ │ ├── nl │ │ ├── nl-be │ │ ├── no │ │ ├── pl │ │ ├── pt │ │ ├── pt-br │ │ ├── ru │ │ ├── sl │ │ ├── sv │ │ ├── th │ │ └── tr │ │ ├── kvmvapic.bin │ │ ├── linuxboot.bin │ │ ├── linuxboot_dma.bin │ │ ├── multiboot.bin │ │ ├── openbios-ppc │ │ ├── openbios-sparc32 │ │ ├── openbios-sparc64 │ │ ├── ppc_rom.bin │ │ ├── pxe-e1000.rom │ │ ├── pxe-eepro100.rom │ │ ├── pxe-ne2k_pci.rom │ │ ├── pxe-pcnet.rom │ │ ├── pxe-rtl8139.rom │ │ ├── pxe-virtio.rom │ │ ├── qemu-icon.bmp │ │ ├── qemu-nsis.bmp │ │ ├── qemu-nsis.ico │ │ ├── qemu.rsrc │ │ ├── qemu_logo.svg │ │ ├── qemu_logo_no_text.svg │ │ ├── qemu_vga.ndrv │ │ ├── s390-ccw.img │ │ ├── s390-netboot.img │ │ ├── sgabios.bin │ │ ├── skiboot.lid │ │ ├── slof.bin │ │ ├── spapr-rtas.bin │ │ ├── vgabios-cirrus.bin │ │ ├── vgabios-qxl.bin │ │ ├── vgabios-stdvga.bin │ │ ├── vgabios-virtio.bin │ │ ├── vgabios-vmware.bin │ │ └── vgabios.bin │ ├── java │ ├── com │ │ └── epicstudios │ │ │ └── vectras │ │ │ ├── AboutActivity.java │ │ │ ├── Blog │ │ │ ├── AdapterBlog.java │ │ │ └── DataBlog.java │ │ │ ├── Config.java │ │ │ ├── FirstActivity.java │ │ │ ├── Fragment │ │ │ ├── ControlsFragment.java │ │ │ ├── HomeFragment.java │ │ │ ├── LoggerFragment.java │ │ │ └── SettingsFragment.java │ │ │ ├── ImagePrvActivity.java │ │ │ ├── MainActivity.java │ │ │ ├── MainRoms │ │ │ ├── AdapterMainRoms.java │ │ │ └── DataMainRoms.java │ │ │ ├── PostActivity.java │ │ │ ├── Roms │ │ │ ├── AdapterRoms.java │ │ │ └── DataRoms.java │ │ │ ├── SplashActivity.java │ │ │ ├── Store │ │ │ ├── AdapterStore.java │ │ │ └── DataStore.java │ │ │ ├── StoreActivity.java │ │ │ ├── StoreItemActivity.java │ │ │ ├── VectrasApp.java │ │ │ ├── VectrasSDLActivity.java │ │ │ ├── VectrasSDLSurfaceCompat.java │ │ │ ├── VectrasService.java │ │ │ ├── adapter │ │ │ └── LogsAdapter.java │ │ │ ├── jni │ │ │ └── VMExecutor.java │ │ │ ├── logger │ │ │ ├── LogItem.java │ │ │ ├── VMStatus.java │ │ │ └── VectrasStatus.java │ │ │ ├── utils │ │ │ ├── AppUpdater.java │ │ │ ├── FileInstaller.java │ │ │ ├── FileUtils.java │ │ │ ├── KeyboardUtils.java │ │ │ ├── QmpClient.java │ │ │ ├── RamInfo.java │ │ │ └── UIUtils.java │ │ │ └── widgets │ │ │ ├── JoystickView.java │ │ │ └── RadioGroupPlus.java │ └── org │ │ └── libsdl │ │ └── app │ │ ├── ClearRenderer.java │ │ ├── SDLActivity.java │ │ └── SDLSurface.java │ ├── jniLibs │ └── armeabi-v7a │ │ ├── libSDL2.so │ │ ├── libSDL2_image.so │ │ ├── libSDL2_mixer.so │ │ ├── libglib-2.0.so │ │ ├── libgmodule-2.0.so │ │ ├── libgobject-2.0.so │ │ ├── libgthread-2.0.so │ │ ├── libmain.so │ │ ├── libpixman.so │ │ ├── libqemu-system-x86_64.so │ │ ├── libstlport_shared.so │ │ └── libvectras.so │ ├── play_store_512.png │ ├── play_store_feature_graphic.png │ └── res │ ├── anim │ ├── slide_from_left.xml │ ├── slide_from_top.xml │ ├── slide_in_bottom.xml │ ├── slide_out_bottom.xml │ ├── slide_to_left.xml │ └── slide_to_top.xml │ ├── drawable-anydpi-v26 │ ├── access_point_network_off.xml │ ├── btn_state.xml │ ├── controls_button.xml │ ├── dialog_bg.xml │ ├── ic_facebook.xml │ ├── ic_github.xml │ ├── ic_playstore.xml │ ├── ic_telegram.xml │ ├── ic_youtube.xml │ ├── round_account_circle_24.xml │ ├── round_browser_updated_24.xml │ ├── round_build_24.xml │ ├── round_chevron_right_24.xml │ ├── round_delete_24.xml │ ├── round_download_done_24.xml │ ├── round_edit_24.xml │ ├── round_file_download_24.xml │ ├── round_home_24.xml │ ├── round_info_24.xml │ ├── round_logout_24.xml │ ├── round_menu_24.xml │ ├── round_newspaper_24.xml │ ├── round_play_arrow_24.xml │ ├── round_public_24.xml │ ├── round_save_24.xml │ ├── round_search_24.xml │ ├── round_settings_24.xml │ ├── round_share_24.xml │ ├── round_shop_24.xml │ └── round_stop_24.xml │ ├── layout │ ├── activity_about.xml │ ├── activity_splash.xml │ ├── activity_store.xml │ ├── activity_store_item.xml │ ├── container_main_roms.xml │ ├── container_post.xml │ ├── container_roms.xml │ ├── container_store.xml │ ├── content_about.xml │ ├── content_store.xml │ ├── content_store_item.xml │ ├── controls_fragment.xml │ ├── first_activity.xml │ ├── fragment_logs.xml │ ├── home_fragment.xml │ ├── iv_prv.xml │ ├── list_item_log.xml │ ├── main.xml │ ├── main_content.xml │ ├── main_sdl.xml │ ├── nav_header_main.xml │ ├── no_connection.xml │ ├── post_content.xml │ ├── rom_options_layout.xml │ └── settings_fragment.xml │ ├── menu │ ├── bottom_navigation_menu.xml │ ├── home_drawer_menu.xml │ ├── home_toolbar_menu.xml │ └── sdl_menu.xml │ ├── mipmap-anydpi-v26 │ └── ic_launcher.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ ├── ic_launcher_background.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_monochrome.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ ├── ic_launcher_background.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_monochrome.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ ├── ic_launcher_background.png │ ├── ic_launcher_foreground.png │ ├── ic_launcher_monochrome.png │ └── tv_banner.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ ├── ic_launcher_background.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_monochrome.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ ├── ic_launcher_background.png │ ├── ic_launcher_foreground.png │ └── ic_launcher_monochrome.png │ ├── raw │ ├── cairo_regular.ttf │ └── logo.json │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── database.rules.json ├── firebase.json ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── web ├── 1024.png ├── README.txt ├── apple-touch-icon.png ├── favicon.ico ├── icon-192-maskable.png ├── icon-192.png ├── icon-512-maskable.png ├── icon-512.png └── logo.png /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "vectras-1678b" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.github/workflows/android.yml: -------------------------------------------------------------------------------- 1 | name: Android CI 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | pull_request: 7 | branches: [ "master" ] 8 | 9 | jobs: 10 | build: 11 | 12 | runs-on: ubuntu-latest 13 | 14 | steps: 15 | - uses: actions/checkout@v3 16 | - name: set up JDK 11 17 | uses: actions/setup-java@v3 18 | with: 19 | java-version: '11' 20 | distribution: 'temurin' 21 | cache: gradle 22 | 23 | - name: Grant execute permission for gradlew 24 | run: chmod +x gradlew 25 | - name: Build with Gradle 26 | run: ./gradlew build 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | Vectras -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![logo](https://github.com/ahmedbarakat2007/Vectras-windows-emulator/assets/118398763/096d4a06-8d3c-489f-9fb5-d273f361200c) 2 | [![Telegram Channel][ico-telegram]][link-telegram] 3 | [![Latest Version][ico-version]][link-releases] 4 | [![Software License][ico-license]](LICENSE.md) 5 | 6 | # Vectras-VM-Android (Open Source Code) 7 | 8 | It's a Virtual Machine App for Android Which is Based on QEMU 9 | 10 | Has The Capbility to Run (ReactOS - Xp - 7 - Kali Linux) 11 | 12 | # Minimum System Requirement 13 | 14 | * Android 7.0+ 15 | 16 | * 4gb Ram (2gb free ram) 17 | 18 | * 8-Cores Snapdragon 450 (at Least) 19 | 20 | * A Phone 21 | * ![images](https://github.com/ahmedbarakat2007/Vectras-windows-emulator/assets/118398763/8e453927-4235-4489-a100-9c909153bb2f) 22 | 23 | # Recommended System Requirement 24 | 25 | * Android 11+ 26 | 27 | * 8gb Ram (4gb free ram) 28 | 29 | * 8-Cores Snapdragon 720G or better 30 | 31 | # Beta Version 32 | 33 | * https://vectras.netlify.app/download 34 | 35 | [ico-telegram]: https://raw.githubusercontent.com/epicstudios856/Vectras-windows-emulator/main/res/images/telegram.svg 36 | [ico-version]: https://raw.githubusercontent.com/epicstudios856/Vectras-windows-emulator/main/res/images/version.svg 37 | [ico-license]: https://img.shields.io/badge/License-GPL_v2-blue.svg 38 | 39 | [link-telegram]: https://t.me/vectras_os 40 | [link-repo]: https://github.com/epicstudios856/Vectras-VM-Android/ 41 | [link-releases]: https://github.com/epicstudios856/Vectras-VM-Android/releases/ 42 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | id 'com.google.gms.google-services' 4 | id 'com.google.firebase.crashlytics' 5 | } 6 | 7 | android { 8 | namespace 'com.epicstudios.vectras' 9 | compileSdk 33 10 | 11 | defaultConfig { 12 | applicationId "com.epicstudios.vectras" 13 | minSdk 24 14 | targetSdk 33 15 | versionCode 3 16 | versionName "1.2" 17 | 18 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 19 | signingConfig signingConfigs.release 20 | multiDexEnabled true 21 | } 22 | 23 | buildTypes { 24 | release { 25 | minifyEnabled false 26 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 27 | } 28 | } 29 | compileOptions { 30 | sourceCompatibility JavaVersion.VERSION_17 31 | targetCompatibility JavaVersion.VERSION_17 32 | } 33 | buildFeatures { 34 | viewBinding true 35 | } 36 | } 37 | 38 | dependencies { 39 | implementation 'androidx.appcompat:appcompat:1.5.1' 40 | implementation 'com.google.android.material:material:1.8.0' 41 | implementation 'androidx.legacy:legacy-support-v4:1.0.0' 42 | implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" 43 | implementation 'androidx.constraintlayout:constraintlayout:2.1.4' 44 | implementation 'androidx.navigation:navigation-fragment:2.5.3' 45 | implementation 'androidx.navigation:navigation-ui:2.5.3' 46 | implementation 'com.github.bumptech.glide:glide:4.16.0' 47 | implementation platform('com.google.firebase:firebase-bom:32.3.1') 48 | implementation 'com.google.firebase:firebase-analytics' 49 | implementation("com.google.firebase:firebase-auth") 50 | implementation("com.google.firebase:firebase-crashlytics") 51 | implementation("com.google.android.gms:play-services-auth:20.7.0") 52 | implementation 'com.google.android.gms:play-services-ads:22.5.0' 53 | implementation 'com.airbnb.android:lottie:6.1.0' 54 | testImplementation 'junit:junit:4.13.2' 55 | androidTestImplementation 'androidx.test.ext:junit:1.1.5' 56 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' 57 | } 58 | -------------------------------------------------------------------------------- /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 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 28 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 45 | 51 | 57 | 63 | 68 | 73 | 78 | 84 | 92 | 93 | 96 | 97 | 100 | 101 | 102 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 116 | 117 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /app/src/main/assets/roms/QEMU,cgthree.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/QEMU,cgthree.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/QEMU,tcx.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/QEMU,tcx.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/README: -------------------------------------------------------------------------------- 1 | - SeaBIOS (bios.bin) is the successor of pc bios. 2 | See http://www.seabios.org/ for more information. 3 | 4 | - The VGA BIOS and the Cirrus VGA BIOS come from the LGPL VGA bios 5 | project (http://www.nongnu.org/vgabios/). 6 | 7 | - The PowerPC Open Hack'Ware Open Firmware Compatible BIOS is 8 | available at http://repo.or.cz/w/openhackware.git. 9 | 10 | - OpenBIOS (http://www.openbios.org/) is a free (GPL v2) portable 11 | firmware implementation. The goal is to implement a 100% IEEE 12 | 1275-1994 (referred to as Open Firmware) compliant firmware. 13 | The included images for PowerPC (for 32 and 64 bit PPC CPUs), 14 | Sparc32 (including QEMU,tcx.bin and QEMU,cgthree.bin) and Sparc64 are built 15 | from OpenBIOS SVN revision 1280. 16 | 17 | - SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware 18 | implementation for certain IBM POWER hardware. The sources are at 19 | https://github.com/aik/SLOF, and the image currently in qemu is 20 | built from git tag qemu-slof-20170724. 21 | 22 | - sgabios (the Serial Graphics Adapter option ROM) provides a means for 23 | legacy x86 software to communicate with an attached serial console as 24 | if a video card were attached. The master sources reside in a subversion 25 | repository at http://sgabios.googlecode.com/svn/trunk. A git mirror is 26 | available at git://git.qemu.org/sgabios.git. 27 | 28 | - The PXE roms come from the iPXE project. Built with BANNER_TIME 0. 29 | Sources available at http://ipxe.org. Vendor:Device ID -> ROM mapping: 30 | 31 | 8086:100e -> pxe-e1000.rom 32 | 8086:1209 -> pxe-eepro100.rom 33 | 1050:0940 -> pxe-ne2k_pci.rom 34 | 1022:2000 -> pxe-pcnet.rom 35 | 10ec:8139 -> pxe-rtl8139.rom 36 | 1af4:1000 -> pxe-virtio.rom 37 | 38 | - The sources for the Alpha palcode image is available from: 39 | git://github.com/rth7680/qemu-palcode.git 40 | 41 | - The u-boot binary for e500 comes from the upstream denx u-boot project where 42 | it was compiled using the qemu-ppce500 target. 43 | A git mirror is available at: git://git.qemu.org/u-boot.git 44 | The hash used to compile the current version is: 2072e72 45 | 46 | - Skiboot (https://github.com/open-power/skiboot/) is an OPAL 47 | (OpenPower Abstraction Layer) firmware for OpenPOWER systems. It can 48 | run an hypervisor OS or simply a host OS on the "baremetal" 49 | platform, also known as the PowerNV (Non-Virtualized) platform. 50 | 51 | - QemuMacDrivers (https://github.com/ozbenh/QemuMacDrivers) is a project to 52 | provide virtualised drivers for PPC MacOS guests. 53 | -------------------------------------------------------------------------------- /app/src/main/assets/roms/bios-256k.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/bios-256k.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/bios.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/bios.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/efi-e1000.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/efi-e1000.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/efi-e1000e.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/efi-e1000e.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/efi-eepro100.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/efi-eepro100.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/efi-ne2k_pci.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/efi-ne2k_pci.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/efi-pcnet.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/efi-pcnet.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/efi-rtl8139.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/efi-rtl8139.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/efi-virtio.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/efi-virtio.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/efi-vmxnet3.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/efi-vmxnet3.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/etc/resolv.conf: -------------------------------------------------------------------------------- 1 | nameserver 8.8.8.8 2 | -------------------------------------------------------------------------------- /app/src/main/assets/roms/harddisk/hdb.qcow2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/harddisk/hdb.qcow2 -------------------------------------------------------------------------------- /app/src/main/assets/roms/harddisk/hdc.qcow2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/harddisk/hdc.qcow2 -------------------------------------------------------------------------------- /app/src/main/assets/roms/harddisk/hdd.qcow2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/harddisk/hdd.qcow2 -------------------------------------------------------------------------------- /app/src/main/assets/roms/keymaps/Makefile: -------------------------------------------------------------------------------- 1 | 2 | KEYMAP := $(shell which qemu-keymap 2>/dev/null) 3 | 4 | MAPS := ar bepo cz da de de-ch en-us en-gb es et fi fo \ 5 | fr fr-be fr-ca fr-ch \ 6 | hr hu is it ja lt lv mk nl no pl pt pt-br ru th tr 7 | 8 | ar : MAP_FLAGS := -l ar 9 | bepo : MAP_FLAGS := -l fr -v dvorak 10 | cz : MAP_FLAGS := -l cz 11 | da : MAP_FLAGS := -l dk 12 | de : MAP_FLAGS := -l de 13 | de-ch : MAP_FLAGS := -l ch 14 | en-us : MAP_FLAGS := -l us 15 | en-gb : MAP_FLAGS := -l gb 16 | es : MAP_FLAGS := -l es 17 | et : MAP_FLAGS := -l et 18 | fi : MAP_FLAGS := -l fi 19 | fo : MAP_FLAGS := -l fo 20 | fr : MAP_FLAGS := -l fr 21 | fr-be : MAP_FLAGS := -l be 22 | fr-ca : MAP_FLAGS := -l ca -v fr 23 | fr-ch : MAP_FLAGS := -l ch -v fr 24 | hr : MAP_FLAGS := -l hr 25 | hu : MAP_FLAGS := -l hu 26 | is : MAP_FLAGS := -l is 27 | it : MAP_FLAGS := -l it 28 | ja : MAP_FLAGS := -l jp -m jp106 29 | lt : MAP_FLAGS := -l lt 30 | lv : MAP_FLAGS := -l lv 31 | mk : MAP_FLAGS := -l mk 32 | nl : MAP_FLAGS := -l nl 33 | no : MAP_FLAGS := -l no 34 | pl : MAP_FLAGS := -l pl 35 | pt : MAP_FLAGS := -l pt 36 | pt-br : MAP_FLAGS := -l br 37 | ru : MAP_FLAGS := -l ru 38 | th : MAP_FLAGS := -l th 39 | tr : MAP_FLAGS := -l tr 40 | 41 | ifeq ($(KEYMAP),) 42 | 43 | all: 44 | @echo "nothing to do (qemu-keymap not found)" 45 | 46 | else 47 | 48 | all: $(MAPS) 49 | 50 | clean: 51 | rm -f $(MAPS) 52 | 53 | $(MAPS): $(KEYMAP) Makefile 54 | $(KEYMAP) -f $@ $(MAP_FLAGS) 55 | 56 | endif 57 | -------------------------------------------------------------------------------- /app/src/main/assets/roms/keymaps/common: -------------------------------------------------------------------------------- 1 | include modifiers 2 | 3 | # 4 | # Top row 5 | # 6 | 1 0x2 7 | 2 0x3 8 | 3 0x4 9 | 4 0x5 10 | 5 0x6 11 | 6 0x7 12 | 7 0x8 13 | 8 0x9 14 | 9 0xa 15 | 0 0xb 16 | BackSpace 0xe 17 | 18 | # 19 | # QWERTY first row 20 | # 21 | Tab 0xf localstate 22 | ISO_Left_Tab 0xf shift 23 | q 0x10 addupper 24 | w 0x11 addupper 25 | e 0x12 addupper 26 | r 0x13 addupper 27 | t 0x14 addupper 28 | y 0x15 addupper 29 | u 0x16 addupper 30 | i 0x17 addupper 31 | o 0x18 addupper 32 | p 0x19 addupper 33 | 34 | # 35 | # QWERTY second row 36 | # 37 | a 0x1e addupper 38 | s 0x1f addupper 39 | d 0x20 addupper 40 | f 0x21 addupper 41 | g 0x22 addupper 42 | h 0x23 addupper 43 | j 0x24 addupper 44 | k 0x25 addupper 45 | l 0x26 addupper 46 | Return 0x1c localstate 47 | 48 | # 49 | # QWERTY third row 50 | # 51 | z 0x2c addupper 52 | x 0x2d addupper 53 | c 0x2e addupper 54 | v 0x2f addupper 55 | b 0x30 addupper 56 | n 0x31 addupper 57 | m 0x32 addupper 58 | 59 | space 0x39 localstate 60 | 61 | less 0x56 62 | greater 0x56 shift 63 | bar 0x56 altgr 64 | brokenbar 0x56 shift altgr 65 | 66 | # 67 | # Esc and Function keys 68 | # 69 | Escape 0x1 localstate 70 | F1 0x3b localstate 71 | F2 0x3c localstate 72 | F3 0x3d localstate 73 | F4 0x3e localstate 74 | F5 0x3f localstate 75 | F6 0x40 localstate 76 | F7 0x41 localstate 77 | F8 0x42 localstate 78 | F9 0x43 localstate 79 | F10 0x44 localstate 80 | F11 0x57 localstate 81 | F12 0x58 localstate 82 | 83 | # Printscreen, Scrollock and Pause 84 | # Printscreen really requires four scancodes (0xe0, 0x2a, 0xe0, 0x37), 85 | # but (0xe0, 0x37) seems to work. 86 | Print 0xb7 localstate 87 | Sys_Req 0xb7 localstate 88 | Execute 0xb7 localstate 89 | Scroll_Lock 0x46 90 | 91 | # 92 | # Insert - PgDown 93 | # 94 | Insert 0xd2 localstate 95 | Delete 0xd3 localstate 96 | Home 0xc7 localstate 97 | End 0xcf localstate 98 | Page_Up 0xc9 localstate 99 | Page_Down 0xd1 localstate 100 | 101 | # 102 | # Arrow keys 103 | # 104 | Left 0xcb localstate 105 | Up 0xc8 localstate 106 | Down 0xd0 localstate 107 | Right 0xcd localstate 108 | 109 | # 110 | # Numpad 111 | # 112 | Num_Lock 0x45 113 | KP_Divide 0xb5 114 | KP_Multiply 0x37 115 | KP_Subtract 0x4a 116 | KP_Add 0x4e 117 | KP_Enter 0x9c 118 | 119 | KP_Decimal 0x53 numlock 120 | KP_Separator 0x53 numlock 121 | KP_Delete 0x53 122 | 123 | KP_0 0x52 numlock 124 | KP_Insert 0x52 125 | 126 | KP_1 0x4f numlock 127 | KP_End 0x4f 128 | 129 | KP_2 0x50 numlock 130 | KP_Down 0x50 131 | 132 | KP_3 0x51 numlock 133 | KP_Next 0x51 134 | 135 | KP_4 0x4b numlock 136 | KP_Left 0x4b 137 | 138 | KP_5 0x4c numlock 139 | KP_Begin 0x4c 140 | 141 | KP_6 0x4d numlock 142 | KP_Right 0x4d 143 | 144 | KP_7 0x47 numlock 145 | KP_Home 0x47 146 | 147 | KP_8 0x48 numlock 148 | KP_Up 0x48 149 | 150 | KP_9 0x49 numlock 151 | KP_Prior 0x49 152 | 153 | Caps_Lock 0x3a 154 | # 155 | # Inhibited keys 156 | # 157 | Multi_key 0x0 inhibit 158 | -------------------------------------------------------------------------------- /app/src/main/assets/roms/keymaps/modifiers: -------------------------------------------------------------------------------- 1 | Shift_R 0x36 2 | Shift_L 0x2a 3 | 4 | Alt_R 0xb8 5 | Mode_switch 0xb8 6 | ISO_Level3_Shift 0xb8 7 | Alt_L 0x38 8 | 9 | Control_R 0x9d 10 | Control_L 0x1d 11 | 12 | # Translate Super to Windows keys. 13 | # This is hardcoded. See documentation for details. 14 | Super_R 0xdc 15 | Super_L 0xdb 16 | 17 | # Translate Menu to the Windows Application key. 18 | Menu 0xdd 19 | -------------------------------------------------------------------------------- /app/src/main/assets/roms/keymaps/nl-be: -------------------------------------------------------------------------------- 1 | # Dutch (Belgium) 2 | map 0x813 3 | include common 4 | -------------------------------------------------------------------------------- /app/src/main/assets/roms/keymaps/sl: -------------------------------------------------------------------------------- 1 | # generated from XKB map sl 2 | include common 3 | map 0x424 4 | exclam 0x02 shift 5 | asciitilde 0x02 altgr 6 | dead_tilde 0x02 shift altgr 7 | quotedbl 0x03 shift 8 | dead_caron 0x03 altgr 9 | caron 0x03 shift altgr 10 | numbersign 0x04 shift 11 | asciicircum 0x04 altgr 12 | dead_circumflex 0x04 shift altgr 13 | dollar 0x05 shift 14 | dead_breve 0x05 altgr 15 | breve 0x05 shift altgr 16 | percent 0x06 shift 17 | degree 0x06 altgr 18 | dead_abovering 0x06 shift altgr 19 | ampersand 0x07 shift 20 | dead_ogonek 0x07 altgr 21 | ogonek 0x07 shift altgr 22 | slash 0x08 shift 23 | grave 0x08 altgr 24 | dead_grave 0x08 shift altgr 25 | parenleft 0x09 shift 26 | dead_abovedot 0x09 altgr 27 | abovedot 0x09 shift altgr 28 | parenright 0x0a shift 29 | dead_acute 0x0a altgr 30 | equal 0x0b shift 31 | dead_doubleacute 0x0b altgr 32 | doubleacute 0x0b shift altgr 33 | apostrophe 0x0c 34 | question 0x0c shift 35 | dead_diaeresis 0x0c altgr 36 | diaeresis 0x0c shift altgr 37 | plus 0x0d 38 | asterisk 0x0d shift 39 | dead_cedilla 0x0d altgr 40 | cedilla 0x0d shift altgr 41 | backslash 0x10 altgr 42 | Greek_OMEGA 0x10 shift altgr 43 | bar 0x11 altgr 44 | Lstroke 0x11 shift altgr 45 | EuroSign 0x12 altgr 46 | paragraph 0x13 altgr 47 | registered 0x13 shift altgr 48 | tslash 0x14 altgr 49 | Tslash 0x14 shift altgr 50 | z 0x15 addupper 51 | leftarrow 0x15 altgr 52 | yen 0x15 shift altgr 53 | downarrow 0x16 altgr 54 | uparrow 0x16 shift altgr 55 | rightarrow 0x17 altgr 56 | idotless 0x17 shift altgr 57 | oslash 0x18 altgr 58 | Ooblique 0x18 shift altgr 59 | thorn 0x19 altgr 60 | THORN 0x19 shift altgr 61 | scaron 0x1a 62 | Scaron 0x1a shift 63 | division 0x1a altgr 64 | dstroke 0x1b 65 | Dstroke 0x1b shift 66 | multiply 0x1b altgr 67 | dead_macron 0x1b shift altgr 68 | ae 0x1e altgr 69 | AE 0x1e shift altgr 70 | ssharp 0x1f altgr 71 | section 0x1f shift altgr 72 | eth 0x20 altgr 73 | ETH 0x20 shift altgr 74 | bracketleft 0x21 altgr 75 | ordfeminine 0x21 shift altgr 76 | bracketright 0x22 altgr 77 | ENG 0x22 shift altgr 78 | hstroke 0x23 altgr 79 | Hstroke 0x23 shift altgr 80 | lstroke 0x25 altgr 81 | Lstroke 0x26 altgr 82 | ccaron 0x27 83 | Ccaron 0x27 shift 84 | cacute 0x28 85 | Cacute 0x28 shift 86 | ssharp 0x28 altgr 87 | dead_cedilla 0x29 88 | notsign 0x29 altgr 89 | zcaron 0x2b 90 | Zcaron 0x2b shift 91 | currency 0x2b altgr 92 | y 0x2c addupper 93 | guillemotleft 0x2c altgr 94 | guillemotright 0x2d altgr 95 | cent 0x2e altgr 96 | copyright 0x2e shift altgr 97 | at 0x2f altgr 98 | braceleft 0x30 altgr 99 | braceright 0x31 altgr 100 | section 0x32 altgr 101 | masculine 0x32 shift altgr 102 | comma 0x33 103 | semicolon 0x33 shift 104 | horizconnector 0x33 altgr 105 | period 0x34 106 | colon 0x34 shift 107 | periodcentered 0x34 altgr 108 | minus 0x35 109 | underscore 0x35 shift 110 | dead_belowdot 0x35 altgr 111 | -------------------------------------------------------------------------------- /app/src/main/assets/roms/keymaps/sv: -------------------------------------------------------------------------------- 1 | map 0x0000041d 2 | include common 3 | 4 | # 5 | # Top row 6 | # 7 | section 0x29 8 | onehalf 0x29 shift 9 | 10 | # 1 11 | exclam 0x2 shift 12 | 13 | # 2 14 | quotedbl 0x3 shift 15 | at 0x3 altgr 16 | 17 | # 3 18 | numbersign 0x4 shift 19 | sterling 0x4 altgr 20 | # 4 21 | currency 0x5 shift 22 | dollar 0x5 altgr 23 | # 5 24 | percent 0x6 shift 25 | # 6 26 | ampersand 0x7 shift 27 | # 7 28 | slash 0x8 shift 29 | braceleft 0x8 altgr 30 | # 8 31 | parenleft 0x9 shift 32 | bracketleft 0x9 altgr 33 | # 9 34 | parenright 0xa shift 35 | bracketright 0xa altgr 36 | # 0 37 | equal 0xb shift 38 | braceright 0xb altgr 39 | 40 | plus 0xc 41 | question 0xc shift 42 | backslash 0xc altgr 43 | 44 | acute 0xd 45 | dead_acute 0xd 46 | grave 0xd shift 47 | dead_grave 0xd shift 48 | 49 | # 50 | # QWERTY first row 51 | # 52 | EuroSign 0x12 altgr 53 | aring 0x1a 54 | Aring 0x1a shift 55 | dead_diaeresis 0x1b 56 | dead_circumflex 0x1b shift 57 | dead_tilde 0x1b altgr 58 | 59 | # 60 | # QWERTY second row 61 | # 62 | odiaeresis 0x27 63 | Odiaeresis 0x27 shift 64 | adiaeresis 0x28 65 | Adiaeresis 0x28 shift 66 | apostrophe 0x2b 67 | asterisk 0x2b shift 68 | 69 | # 70 | # QWERTY third row 71 | # 72 | less 0x56 73 | greater 0x56 shift 74 | bar 0x56 altgr 75 | mu 0x32 altgr 76 | comma 0x33 77 | semicolon 0x33 shift 78 | period 0x34 79 | colon 0x34 shift 80 | minus 0x35 81 | underscore 0x35 shift 82 | -------------------------------------------------------------------------------- /app/src/main/assets/roms/kvmvapic.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/kvmvapic.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/linuxboot.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/linuxboot.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/linuxboot_dma.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/linuxboot_dma.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/multiboot.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/multiboot.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/openbios-ppc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/openbios-ppc -------------------------------------------------------------------------------- /app/src/main/assets/roms/openbios-sparc32: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/openbios-sparc32 -------------------------------------------------------------------------------- /app/src/main/assets/roms/openbios-sparc64: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/openbios-sparc64 -------------------------------------------------------------------------------- /app/src/main/assets/roms/ppc_rom.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/ppc_rom.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/pxe-e1000.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/pxe-e1000.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/pxe-eepro100.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/pxe-eepro100.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/pxe-ne2k_pci.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/pxe-ne2k_pci.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/pxe-pcnet.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/pxe-pcnet.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/pxe-rtl8139.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/pxe-rtl8139.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/pxe-virtio.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/pxe-virtio.rom -------------------------------------------------------------------------------- /app/src/main/assets/roms/qemu-icon.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/qemu-icon.bmp -------------------------------------------------------------------------------- /app/src/main/assets/roms/qemu-nsis.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/qemu-nsis.bmp -------------------------------------------------------------------------------- /app/src/main/assets/roms/qemu-nsis.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/qemu-nsis.ico -------------------------------------------------------------------------------- /app/src/main/assets/roms/qemu_vga.ndrv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/qemu_vga.ndrv -------------------------------------------------------------------------------- /app/src/main/assets/roms/s390-ccw.img: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/s390-ccw.img -------------------------------------------------------------------------------- /app/src/main/assets/roms/s390-netboot.img: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/s390-netboot.img -------------------------------------------------------------------------------- /app/src/main/assets/roms/sgabios.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/sgabios.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/skiboot.lid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/skiboot.lid -------------------------------------------------------------------------------- /app/src/main/assets/roms/slof.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/slof.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/spapr-rtas.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/spapr-rtas.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/vgabios-cirrus.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/vgabios-cirrus.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/vgabios-qxl.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/vgabios-qxl.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/vgabios-stdvga.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/vgabios-stdvga.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/vgabios-virtio.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/vgabios-virtio.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/vgabios-vmware.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/vgabios-vmware.bin -------------------------------------------------------------------------------- /app/src/main/assets/roms/vgabios.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/assets/roms/vgabios.bin -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/Blog/AdapterBlog.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.Blog; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.view.animation.Animation; 9 | import android.view.animation.AnimationUtils; 10 | import android.widget.ImageView; 11 | import android.widget.TextView; 12 | import androidx.cardview.widget.CardView; 13 | import androidx.fragment.app.FragmentTransaction; 14 | import androidx.recyclerview.widget.RecyclerView; 15 | import com.bumptech.glide.Glide; 16 | import com.epicstudios.vectras.R; 17 | import com.epicstudios.vectras.Fragment.HomeFragment; 18 | import com.epicstudios.vectras.PostActivity; 19 | import java.util.Collections; 20 | import java.util.List; 21 | import com.epicstudios.vectras.MainActivity; 22 | 23 | public class AdapterBlog extends RecyclerView.Adapter { 24 | 25 | private Context context; 26 | private LayoutInflater inflater; 27 | List data = Collections.emptyList(); 28 | DataBlog current; 29 | int currentPos = 0; 30 | 31 | // create constructor to innitilize context and data sent from MainActivity 32 | public AdapterBlog(Context context, List data) { 33 | this.context = context; 34 | inflater = LayoutInflater.from(context); 35 | this.data = data; 36 | } 37 | 38 | // Inflate the layout when viewholder created 39 | @Override 40 | public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 41 | View view = inflater.inflate(R.layout.container_post, parent, false); 42 | MyHolder holder = new MyHolder(view); 43 | return holder; 44 | } 45 | 46 | // Bind data 47 | @Override 48 | public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 49 | 50 | // Get current position of item in recyclerview to bind data and assign values from list 51 | MyHolder myHolder = (MyHolder) holder; 52 | final DataBlog current = data.get(position); 53 | myHolder.textTitle.setText(current.postTitle); 54 | myHolder.textDate.setText("Date: " + current.postDate); 55 | Glide.with(MainActivity.activity).load(current.postThumb).into(myHolder.ivThumb); 56 | Animation animation; 57 | animation = AnimationUtils.loadAnimation(MainActivity.activity, android.R.anim.slide_in_left); 58 | animation.setDuration(300); 59 | 60 | myHolder.cdPost.startAnimation(animation); 61 | animation = null; 62 | myHolder.cdPost.setOnClickListener(new View.OnClickListener() { 63 | public void onClick(View view) { 64 | 65 | PostActivity.title = current.postTitle; 66 | PostActivity.content = current.postContent; 67 | PostActivity.date = current.postDate; 68 | PostActivity.thumb = current.postThumb; 69 | MainActivity.activity.startActivity(new Intent(MainActivity.activity, PostActivity.class)); 70 | } 71 | }); 72 | } 73 | 74 | // return total item from List 75 | @Override 76 | public int getItemCount() { 77 | return data.size(); 78 | } 79 | 80 | class MyHolder extends RecyclerView.ViewHolder { 81 | 82 | CardView cdPost; 83 | TextView textTitle; 84 | ImageView ivThumb; 85 | TextView textDate; 86 | 87 | // create constructor to get widget reference 88 | public MyHolder(View itemView) { 89 | super(itemView); 90 | cdPost = (CardView) itemView.findViewById(R.id.cdPost); 91 | textTitle = (TextView) itemView.findViewById(R.id.textTitle); 92 | ivThumb = (ImageView) itemView.findViewById(R.id.ivThumb); 93 | textDate = (TextView) itemView.findViewById(R.id.textDate); 94 | } 95 | 96 | } 97 | 98 | } 99 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/Blog/DataBlog.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.Blog; 2 | 3 | public class DataBlog { 4 | 5 | public String postThumb; 6 | public String postTitle; 7 | public String postContent; 8 | public String postDate; 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/Config.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras; 2 | 3 | import android.os.Environment; 4 | import android.widget.ImageView.ScaleType; 5 | 6 | import java.io.File; 7 | import java.util.Hashtable; 8 | 9 | /** 10 | * 11 | * @author dev 12 | */ 13 | public class Config { 14 | 15 | // App Config 16 | public static final String vectrasWebsite = "https://vectras.netlify.com/"; 17 | public static final String vectrasRaw = "https://raw.githubusercontent.com/epicstudios856/Vectras-windows-emulator/main/"; 18 | public static final String vectrasLicense = vectrasRaw + "LICENSE.md"; 19 | public static final String vectrasPrivacy = vectrasRaw + "PRIVACYANDPOLICY.md"; 20 | public static final String vectrasTerms = vectrasRaw + "TERMSOFSERVICE.md"; 21 | public static final String vectrasInfo = vectrasRaw + "info.md"; 22 | public static final String vectrasRepo = "https://github.com/epicstudios856/Vectras-windows-emulator/tree/main/"; 23 | public static final String updateJson = vectrasRaw + "UpdateConfig.json"; 24 | public static final String blogJson = vectrasRaw + "news_list.json"; 25 | public static final String storeJson = vectrasRaw + "store_list.json"; 26 | public static final String romsJson = vectrasRaw + "roms.json"; 27 | 28 | // Constants 29 | public static final int SDL_MOUSE_LEFT = 1; 30 | public static final int SDL_MOUSE_RIGHT = 3; 31 | public static final int SETTINGS_RETURN_CODE = 1000; 32 | public static final int SDL_REQUEST_CODE = 1007; 33 | public static final String ACTION_START = "com.epicstudios.vectras.action.STARTVM"; 34 | public static final String ACTION_STOP = "com.epicstudios.vectras.action.STOPVM"; 35 | 36 | //Backend libs 37 | public static final boolean enable_iconv = false; //not needed for now 38 | 39 | public static final boolean enable_qemu_fullScreen = true; 40 | public static boolean enableSDLAlwaysFullscreen = true; 41 | 42 | // App config 43 | public static String packageName = "com.epicstudios.vectras"; 44 | public static final String datadirpath = SplashActivity.activity.getExternalFilesDir("data")+"/"; 45 | public static final String basefiledir = datadirpath + "Vectras/.qemu/"; 46 | public static final String maindirpath = datadirpath + "/Vectras/"; 47 | public static final String libqemupath = "libqemu-system-x86_64.so"; 48 | public static final String sharedFolder = datadirpath + "Vectras/ProgramFiles/"; 49 | public static final String tmpFolder = basefiledir + "tmp"; // Do not modify 50 | public static final String defaultDNSServer = "8.8.8.8"; 51 | public static String state_filename = "vm.state"; 52 | public static String notificationChannelID = "Vectras"; 53 | public static String notificationChannelName = "Vectras"; 54 | public static String QMPServer = "localhost"; 55 | public static int QMPPort = 4444; 56 | 57 | //Keyboard Layout 58 | public static String defaultKeyboardLayout = "en-us"; 59 | public static String logFilePath = maindirpath + "Vectras-logs.txt"; 60 | 61 | // Debug 62 | public static final boolean debug = true; 63 | 64 | // Class that starts when user presses notification 65 | public static Class clientClass = VectrasSDLActivity.class; 66 | } 67 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/Fragment/LoggerFragment.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.Fragment; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.content.SharedPreferences; 6 | import android.os.Bundle; 7 | import android.text.Editable; 8 | import android.text.TextWatcher; 9 | import android.view.LayoutInflater; 10 | import android.view.View; 11 | import android.view.ViewGroup; 12 | import android.widget.AdapterView; 13 | import android.widget.AdapterView.OnItemSelectedListener; 14 | import android.widget.ArrayAdapter; 15 | import android.widget.Button; 16 | import android.widget.CompoundButton; 17 | import android.widget.EditText; 18 | import android.widget.Spinner; 19 | import android.widget.Switch; 20 | import android.widget.TextView; 21 | import android.widget.Toast; 22 | import androidx.fragment.app.Fragment; 23 | import androidx.recyclerview.widget.LinearLayoutManager; 24 | import androidx.recyclerview.widget.RecyclerView; 25 | import com.epicstudios.vectras.R; 26 | import com.epicstudios.vectras.FirstActivity; 27 | import com.epicstudios.vectras.MainActivity; 28 | import com.epicstudios.vectras.adapter.LogsAdapter; 29 | import com.epicstudios.vectras.utils.UIUtils; 30 | import com.google.android.material.button.MaterialButton; 31 | import com.google.android.material.snackbar.Snackbar; 32 | import com.google.android.material.textfield.TextInputEditText; 33 | import com.google.android.material.textfield.TextInputLayout; 34 | 35 | public class LoggerFragment extends Fragment { 36 | 37 | View view; 38 | MainActivity activity = MainActivity.activity; 39 | private final String CREDENTIAL_SHARED_PREF = "settings_prefs"; 40 | private LogsAdapter mLogAdapter; 41 | private RecyclerView logList; 42 | 43 | @Override 44 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 45 | // TODO Auto-generated method stub 46 | 47 | view = inflater.inflate(R.layout.fragment_logs, container, false); 48 | LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.activity); 49 | mLogAdapter = new LogsAdapter(layoutManager, MainActivity.activity); 50 | logList = (RecyclerView) view.findViewById(R.id.recyclerLog); 51 | logList.setAdapter(mLogAdapter); 52 | logList.setLayoutManager(layoutManager); 53 | mLogAdapter.scrollToLastPosition(); 54 | return view; 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/Fragment/SettingsFragment.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.Fragment; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.content.SharedPreferences; 6 | import android.os.Bundle; 7 | import android.text.Editable; 8 | import android.text.TextWatcher; 9 | import android.view.LayoutInflater; 10 | import android.view.View; 11 | import android.view.ViewGroup; 12 | import android.widget.AdapterView; 13 | import android.widget.AdapterView.OnItemSelectedListener; 14 | import android.widget.ArrayAdapter; 15 | import android.widget.Button; 16 | import android.widget.CompoundButton; 17 | import android.widget.EditText; 18 | import android.widget.Spinner; 19 | import android.widget.Switch; 20 | import android.widget.TextView; 21 | import android.widget.Toast; 22 | import androidx.fragment.app.Fragment; 23 | import com.epicstudios.vectras.R; 24 | import com.epicstudios.vectras.FirstActivity; 25 | import com.epicstudios.vectras.MainActivity; 26 | import com.epicstudios.vectras.utils.UIUtils; 27 | import com.google.android.material.button.MaterialButton; 28 | import com.google.android.material.snackbar.Snackbar; 29 | import com.google.android.material.textfield.TextInputEditText; 30 | import com.google.android.material.textfield.TextInputLayout; 31 | 32 | public class SettingsFragment extends Fragment { 33 | 34 | View view; 35 | MainActivity activity = MainActivity.activity; 36 | private final String CREDENTIAL_SHARED_PREF = "settings_prefs"; 37 | 38 | @Override 39 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 40 | // TODO Auto-generated method stub 41 | 42 | view = inflater.inflate(R.layout.settings_fragment, container, false); 43 | 44 | return view; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/ImagePrvActivity.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras; 2 | 3 | import android.os.Bundle; 4 | import android.widget.ImageView; 5 | 6 | import androidx.appcompat.app.AppCompatActivity; 7 | 8 | import com.bumptech.glide.Glide; 9 | import com.epicstudios.vectras.R; 10 | 11 | public class ImagePrvActivity extends AppCompatActivity { 12 | public static String linkIv; 13 | public ImageView ivPrv; 14 | 15 | @Override 16 | protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(R.layout.iv_prv); 19 | ivPrv = findViewById(R.id.ivPrv); 20 | Glide.with(this).load(linkIv).into(ivPrv); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/MainRoms/AdapterMainRoms.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.MainRoms; 2 | 3 | import android.app.Dialog; 4 | import android.content.Context; 5 | import android.content.DialogInterface; 6 | import android.graphics.Bitmap; 7 | import android.graphics.BitmapFactory; 8 | import android.graphics.Color; 9 | import android.graphics.drawable.ColorDrawable; 10 | import android.view.Gravity; 11 | import android.view.LayoutInflater; 12 | import android.view.View; 13 | import android.view.ViewGroup; 14 | import android.view.Window; 15 | import android.widget.ImageView; 16 | import android.widget.LinearLayout; 17 | import android.widget.TextView; 18 | import android.widget.Toast; 19 | 20 | import androidx.appcompat.app.AlertDialog; 21 | import androidx.cardview.widget.CardView; 22 | import androidx.recyclerview.widget.LinearLayoutManager; 23 | import androidx.recyclerview.widget.RecyclerView; 24 | 25 | import com.epicstudios.vectras.Config; 26 | import com.epicstudios.vectras.Fragment.HomeFragment; 27 | import com.epicstudios.vectras.MainActivity; 28 | import com.epicstudios.vectras.R; 29 | import com.epicstudios.vectras.jni.VMExecutor; 30 | import com.epicstudios.vectras.utils.UIUtils; 31 | 32 | import java.io.BufferedWriter; 33 | import java.io.File; 34 | import java.io.FileWriter; 35 | import java.io.Writer; 36 | import java.util.Collections; 37 | import java.util.List; 38 | 39 | public class AdapterMainRoms extends RecyclerView.Adapter { 40 | 41 | private Context context; 42 | private LayoutInflater inflater; 43 | List data = Collections.emptyList(); 44 | DataMainRoms current; 45 | int currentPos = 0; 46 | private int mSelectedItem = -1; 47 | 48 | // create constructor to innitilize context and data sent from MainActivity 49 | public AdapterMainRoms(Context context, List data) { 50 | this.context = context; 51 | inflater = LayoutInflater.from(context); 52 | this.data = data; 53 | } 54 | 55 | // Inflate the layout when viewholder created 56 | @Override 57 | public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 58 | View view = inflater.inflate(R.layout.container_main_roms, parent, false); 59 | MyHolder holder = new MyHolder(view); 60 | return holder; 61 | } 62 | 63 | // Bind data 64 | @Override 65 | public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 66 | 67 | // Get current position of item in recyclerview to bind data and assign values from list 68 | final MyHolder myHolder = (MyHolder) holder; 69 | final DataMainRoms current = data.get(position); 70 | myHolder.textName.setText(current.itemName); 71 | Bitmap bmImg = BitmapFactory.decodeFile(current.itemIcon); 72 | myHolder.ivIcon.setImageBitmap(bmImg); 73 | 74 | myHolder.cdRoms.setOnClickListener(new View.OnClickListener() { 75 | public void onClick(View view) { 76 | Thread thread = new Thread(new Runnable() { 77 | public void run() { 78 | VMExecutor.extraParams = current.itemExtra; 79 | try { 80 | MainActivity.prepareParams(current.itemPath); 81 | } catch (Exception ex) { 82 | //UIUtils.toastLong(this, ex.getMessage()); 83 | } 84 | MainActivity.onStartButton(); 85 | } 86 | }); 87 | thread.setPriority(Thread.MIN_PRIORITY); 88 | thread.start(); 89 | } 90 | }); 91 | myHolder.cdRoms.setOnLongClickListener(new View.OnLongClickListener() { 92 | @Override 93 | public boolean onLongClick(View v) { 94 | showDialog(); 95 | return false; 96 | } 97 | }); 98 | } 99 | private void showDialog() { 100 | 101 | final Dialog dialog = new Dialog(MainActivity.activity, R.style.MainDialogTheme); 102 | dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 103 | dialog.setContentView(R.layout.rom_options_layout); 104 | 105 | LinearLayout removeLayout = dialog.findViewById(R.id.layoutRemove); 106 | 107 | removeLayout.setOnClickListener(new View.OnClickListener() { 108 | @Override 109 | public void onClick(View v) { 110 | dialog.dismiss(); 111 | AlertDialog ad; 112 | ad = new AlertDialog.Builder(MainActivity.activity, R.style.MainDialogTheme).create(); 113 | ad.setTitle("Remove "+current.itemName); 114 | ad.setMessage("Are you sure?"); 115 | ad.setButton(Dialog.BUTTON_POSITIVE, "REMOVE "+current.itemName, new DialogInterface.OnClickListener() { 116 | public void onClick(DialogInterface dialog, int which) { 117 | MainActivity.activity.deleteFile(current.itemPath); 118 | HomeFragment.mMainAdapter = new AdapterMainRoms(MainActivity.activity, HomeFragment.data); 119 | HomeFragment.data.remove(currentPos); 120 | HomeFragment.mRVMainRoms.setAdapter(HomeFragment.mMainAdapter); 121 | HomeFragment.mRVMainRoms.setLayoutManager(new LinearLayoutManager(MainActivity.activity)); 122 | HomeFragment.jArray.remove(currentPos); 123 | try { 124 | Writer output = null; 125 | File jsonFile = new File(Config.maindirpath + "roms-data" + ".json"); 126 | output = new BufferedWriter(new FileWriter(jsonFile)); 127 | output.write(HomeFragment.jArray.toString().replace("\\","").replace("//","/")); 128 | output.close(); 129 | } catch (Exception e) { 130 | UIUtils.toastLong(MainActivity.activity, e.toString()); 131 | } 132 | UIUtils.toastLong(MainActivity.activity, current.itemName+" are removed successfully!"); 133 | return; 134 | } 135 | }); 136 | ad.setButton(Dialog.BUTTON_POSITIVE, "CANCEL", new DialogInterface.OnClickListener() { 137 | public void onClick(DialogInterface dialog, int which) { 138 | return; 139 | } 140 | }); 141 | ad.show(); 142 | } 143 | }); 144 | 145 | dialog.show(); 146 | dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); 147 | dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 148 | dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; 149 | dialog.getWindow().setGravity(Gravity.BOTTOM); 150 | 151 | } 152 | 153 | // return total item from List 154 | @Override 155 | public int getItemCount() { 156 | return data.size(); 157 | } 158 | 159 | class MyHolder extends RecyclerView.ViewHolder { 160 | 161 | CardView cdRoms; 162 | TextView textName; 163 | ImageView ivIcon; 164 | 165 | // create constructor to get widget reference 166 | public MyHolder(View itemView) { 167 | super(itemView); 168 | cdRoms = (CardView) itemView.findViewById(R.id.cdItem); 169 | textName = (TextView) itemView.findViewById(R.id.textName); 170 | ivIcon = (ImageView) itemView.findViewById(R.id.ivIcon); 171 | } 172 | 173 | } 174 | 175 | } 176 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/MainRoms/DataMainRoms.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.MainRoms; 2 | public class DataMainRoms { 3 | public String itemIcon; 4 | public String itemName; 5 | public String itemPath; 6 | public String itemExtra; 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/PostActivity.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras; 2 | 3 | import android.text.Html; 4 | import android.util.Log; 5 | import android.view.MenuItem; 6 | import android.view.View; 7 | import android.widget.ImageView; 8 | 9 | import androidx.annotation.NonNull; 10 | import androidx.appcompat.widget.Toolbar; 11 | import com.bumptech.glide.Glide; 12 | import com.epicstudios.vectras.R; 13 | import com.epicstudios.vectras.utils.UIUtils; 14 | 15 | import android.os.Bundle; 16 | import androidx.appcompat.app.AppCompatActivity; 17 | import android.widget.TextView; 18 | 19 | import java.io.BufferedReader; 20 | import java.io.InputStreamReader; 21 | import java.net.HttpURLConnection; 22 | import java.net.URL; 23 | 24 | public class PostActivity extends AppCompatActivity { 25 | 26 | private Toolbar tb; 27 | public static TextView postTitle; 28 | public static TextView postContent; 29 | public static TextView postDate; 30 | public static ImageView postThumb; 31 | public static String title, content, contentStr, date, thumb; 32 | 33 | /** 34 | * Called when the activity is first created. 35 | */ 36 | @Override 37 | public void onCreate(Bundle savedInstanceState) { 38 | 39 | super.onCreate(savedInstanceState); 40 | this.setContentView(R.layout.post_content); 41 | postTitle = findViewById(R.id.postTitle); 42 | postContent = findViewById(R.id.postContent); 43 | postDate = findViewById(R.id.postDate); 44 | postThumb = findViewById(R.id.postThumb); 45 | tb = (Toolbar) findViewById(R.id.nnl_toolbar); 46 | setSupportActionBar(tb); 47 | 48 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 49 | getSupportActionBar().setDisplayShowHomeEnabled(true); 50 | 51 | postContent.setTextIsSelectable(true); 52 | 53 | Glide.with(this).load(thumb).into(postThumb); 54 | new Thread(new Runnable(){ 55 | 56 | public void run(){ 57 | 58 | BufferedReader reader = null; 59 | final StringBuilder builder = new StringBuilder(); 60 | 61 | try { 62 | // Create a URL for the desired page 63 | URL url = new URL(content); //My text file location 64 | //First open the connection 65 | HttpURLConnection conn=(HttpURLConnection) url.openConnection(); 66 | conn.setConnectTimeout(60000); // timing out in a minute 67 | 68 | BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 69 | 70 | //t=(TextView)findViewById(R.id.TextView1); // ideally do this in onCreate() 71 | String str; 72 | while ((str = in.readLine()) != null) { 73 | builder.append(str); 74 | } 75 | in.close(); 76 | } catch (Exception e) { 77 | postContent.setText("no internet connection"); 78 | UIUtils.toastLong(PostActivity.this, "check your internet connection"); 79 | Log.d("VECTRAS",e.toString()); 80 | } 81 | 82 | //since we are in background thread, to post results we have to go back to ui thread. do the following for that 83 | 84 | PostActivity.this.runOnUiThread(new Runnable(){ 85 | public void run(){ 86 | contentStr = builder.toString(); // My TextFile has 3 lines 87 | postContent.setText(Html.fromHtml(contentStr)); 88 | } 89 | }); 90 | 91 | } 92 | }).start(); 93 | postDate.setText(date); 94 | postTitle.setText(title); 95 | } 96 | @Override 97 | public boolean onOptionsItemSelected(@NonNull MenuItem item) { 98 | if(item.getItemId()== android.R.id.home){ 99 | finish(); 100 | } 101 | return super.onOptionsItemSelected(item); 102 | } 103 | 104 | @Override 105 | public void onBackPressed() { 106 | super.onBackPressed(); 107 | finish(); 108 | } 109 | 110 | } 111 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/Roms/AdapterRoms.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.Roms; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.net.Uri; 6 | import android.graphics.Color; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.view.animation.Animation; 11 | import android.view.animation.AnimationUtils; 12 | import android.webkit.URLUtil; 13 | import android.widget.ImageButton; 14 | import android.widget.ImageView; 15 | import android.widget.RadioButton; 16 | import android.widget.TextView; 17 | import androidx.appcompat.app.AlertDialog; 18 | import androidx.cardview.widget.CardView; 19 | import androidx.recyclerview.widget.RecyclerView; 20 | import com.epicstudios.vectras.Config; 21 | import com.bumptech.glide.Glide; 22 | import com.epicstudios.vectras.FirstActivity; 23 | import com.epicstudios.vectras.MainActivity; 24 | import com.epicstudios.vectras.R; 25 | import com.epicstudios.vectras.utils.FileUtils; 26 | import java.util.Collections; 27 | import java.util.List; 28 | import androidx.appcompat.app.AlertDialog; 29 | import android.content.DialogInterface; 30 | import android.app.Dialog; 31 | 32 | public class AdapterRoms extends RecyclerView.Adapter { 33 | 34 | private Context context; 35 | private LayoutInflater inflater; 36 | List data = Collections.emptyList(); 37 | DataRoms current; 38 | int currentPos = 0; 39 | private int mSelectedItem = -1; 40 | 41 | // create constructor to innitilize context and data sent from MainActivity 42 | public AdapterRoms(Context context, List data) { 43 | this.context = context; 44 | inflater = LayoutInflater.from(context); 45 | this.data = data; 46 | } 47 | 48 | // Inflate the layout when viewholder created 49 | @Override 50 | public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 51 | View view = inflater.inflate(R.layout.container_roms, parent, false); 52 | MyHolder holder = new MyHolder(view); 53 | return holder; 54 | } 55 | 56 | // Bind data 57 | @Override 58 | public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 59 | 60 | // Get current position of item in recyclerview to bind data and assign values from list 61 | final MyHolder myHolder = (MyHolder) holder; 62 | final DataRoms current = data.get(position); 63 | 64 | Glide.with(FirstActivity.activity).load(current.itemIcon).into(myHolder.ivIcon); 65 | myHolder.textName.setText(current.itemName + " " + current.itemArch); 66 | myHolder.textSize.setText(current.itemSize); 67 | myHolder.checkBox.setChecked(position == mSelectedItem); 68 | if (current.itemAvail) { 69 | myHolder.textAvail.setText("availability: available"); 70 | myHolder.textAvail.setTextColor(Color.GREEN); 71 | } else if (!current.itemAvail) { 72 | myHolder.textAvail.setText("availability: unavailable"); 73 | myHolder.textAvail.setTextColor(Color.RED); 74 | myHolder.checkBox.setEnabled(false); 75 | } 76 | if (current.itemAvail) 77 | myHolder.checkBox.setOnClickListener(new View.OnClickListener() { 78 | @Override 79 | public void onClick(View v) { 80 | mSelectedItem = position; 81 | notifyItemRangeChanged(0, data.size()); 82 | FirstActivity.selected = true; 83 | FirstActivity.selectedPath = current.itemPath; 84 | FirstActivity.selectedExtra = current.itemExtra; 85 | FirstActivity.selectedName = current.itemName+" "+current.itemArch; 86 | FirstActivity.selectedLink = current.itemUrl; 87 | FirstActivity.selectedIcon = current.itemIcon; 88 | } 89 | }); 90 | 91 | } 92 | 93 | // return total item from List 94 | @Override 95 | public int getItemCount() { 96 | return data.size(); 97 | } 98 | 99 | class MyHolder extends RecyclerView.ViewHolder { 100 | 101 | TextView textName, textAvail, textSize; 102 | ImageView ivIcon; 103 | 104 | RadioButton checkBox; 105 | 106 | // create constructor to get widget reference 107 | public MyHolder(View itemView) { 108 | super(itemView); 109 | textName = (TextView) itemView.findViewById(R.id.textName); 110 | ivIcon = (ImageView) itemView.findViewById(R.id.ivIcon); 111 | textSize = (TextView) itemView.findViewById(R.id.textSize); 112 | textAvail = (TextView) itemView.findViewById(R.id.textAvail); 113 | 114 | checkBox = (RadioButton) itemView.findViewById(R.id.checkBox); 115 | } 116 | 117 | } 118 | 119 | } 120 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/Roms/DataRoms.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.Roms; 2 | 3 | public class DataRoms { 4 | 5 | public String itemIcon; 6 | public String itemName; 7 | public String itemArch; 8 | public Boolean itemAvail; 9 | public String itemSize; 10 | public String itemUrl; 11 | public String itemPath; 12 | public String itemExtra; 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/SplashActivity.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras; 2 | 3 | import static android.os.Build.VERSION.SDK_INT; 4 | 5 | import android.Manifest; 6 | import android.animation.ValueAnimator; 7 | import android.app.Dialog; 8 | import android.content.*; 9 | import android.content.pm.*; 10 | import android.net.Uri; 11 | import android.os.*; 12 | import android.preference.PreferenceManager; 13 | import android.provider.Settings; 14 | import android.view.*; 15 | import android.graphics.*; 16 | 17 | import androidx.appcompat.app.AlertDialog; 18 | import androidx.appcompat.app.AppCompatActivity; 19 | import androidx.core.app.ActivityCompat; 20 | import androidx.core.content.ContextCompat; 21 | 22 | import com.airbnb.lottie.LottieAnimationView; 23 | import com.epicstudios.vectras.R; 24 | import com.epicstudios.vectras.MainActivity; 25 | import com.epicstudios.vectras.utils.UIUtils; 26 | 27 | import java.io.File; 28 | 29 | public class SplashActivity extends AppCompatActivity implements Runnable { 30 | public AlertDialog ad; 31 | public static SplashActivity activity; 32 | 33 | @Override 34 | protected void onCreate(Bundle bundle) { 35 | super.onCreate(bundle); 36 | activity = this; 37 | File baseDir = new File(Config.basefiledir); 38 | if (!baseDir.exists()) { 39 | baseDir.mkdirs(); 40 | } 41 | setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 42 | requestWindowFeature(Window.FEATURE_NO_TITLE); 43 | setContentView(R.layout.activity_splash); 44 | 45 | new Handler().postDelayed(this, 3000); 46 | File sharedDir = new File(Config.sharedFolder); 47 | if (!sharedDir.exists()) { 48 | sharedDir.mkdirs(); 49 | } 50 | File mainDir = new File(Config.maindirpath); 51 | if (!mainDir.exists()) { 52 | mainDir.mkdirs(); 53 | } 54 | 55 | } 56 | 57 | public static final String CREDENTIAL_SHARED_PREF = "settings_prefs"; 58 | 59 | @Override 60 | public void run() { 61 | SharedPreferences prefs = getSharedPreferences(CREDENTIAL_SHARED_PREF, Context.MODE_PRIVATE); 62 | 63 | boolean isAccessed = prefs.getBoolean("isFirstLaunch", false); 64 | if (!isAccessed) { 65 | startActivity(new Intent(this, FirstActivity.class)); 66 | } else { 67 | startActivity(new Intent(this, MainActivity.class)); 68 | } 69 | finish(); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/Store/AdapterStore.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.Store; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.view.animation.Animation; 9 | import android.view.animation.AnimationUtils; 10 | import android.widget.ImageView; 11 | import android.widget.TextView; 12 | import androidx.cardview.widget.CardView; 13 | import androidx.fragment.app.FragmentTransaction; 14 | import androidx.recyclerview.widget.RecyclerView; 15 | import com.bumptech.glide.Glide; 16 | import com.epicstudios.vectras.R; 17 | import com.epicstudios.vectras.Fragment.HomeFragment; 18 | import com.epicstudios.vectras.PostActivity; 19 | import java.util.Collections; 20 | import java.util.List; 21 | import com.epicstudios.vectras.MainActivity; 22 | import com.epicstudios.vectras.StoreActivity; 23 | import com.epicstudios.vectras.StoreItemActivity; 24 | 25 | public class AdapterStore extends RecyclerView.Adapter { 26 | 27 | private Context context; 28 | private LayoutInflater inflater; 29 | List data = Collections.emptyList(); 30 | DataStore current; 31 | int currentPos = 0; 32 | 33 | // create constructor to innitilize context and data sent from MainActivity 34 | public AdapterStore(Context context, List data) { 35 | this.context = context; 36 | inflater = LayoutInflater.from(context); 37 | this.data = data; 38 | } 39 | 40 | // Inflate the layout when viewholder created 41 | @Override 42 | public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 43 | View view = inflater.inflate(R.layout.container_store, parent, false); 44 | MyHolder holder = new MyHolder(view); 45 | return holder; 46 | } 47 | 48 | // Bind data 49 | @Override 50 | public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 51 | 52 | // Get current position of item in recyclerview to bind data and assign values from list 53 | MyHolder myHolder = (MyHolder) holder; 54 | final DataStore current = data.get(position); 55 | myHolder.textName.setText(current.itemName); 56 | myHolder.textSize.setText("Size: " + current.itemSize); 57 | Glide.with(MainActivity.activity).load(current.itemIcon).into(myHolder.ivIcon); 58 | Animation animation; 59 | animation = AnimationUtils.loadAnimation(MainActivity.activity, android.R.anim.slide_in_left); 60 | animation.setDuration(300); 61 | 62 | myHolder.cdItem.startAnimation(animation); 63 | animation = null; 64 | myHolder.cdItem.setOnClickListener(new View.OnClickListener() { 65 | public void onClick(View view) { 66 | StoreItemActivity.name = current.itemName; 67 | StoreItemActivity.icon = current.itemIcon; 68 | StoreItemActivity.size = current.itemSize; 69 | StoreItemActivity.desc = current.itemData; 70 | StoreItemActivity.link = current.itemLink; 71 | StoreItemActivity.prvMain = current.itemPreviewMain; 72 | StoreItemActivity.prv1 = current.itemPreview1; 73 | StoreItemActivity.prv2 = current.itemPreview2; 74 | StoreActivity.activity.startActivity(new Intent(StoreActivity.activity, StoreItemActivity.class)); 75 | } 76 | }); 77 | } 78 | 79 | // return total item from List 80 | @Override 81 | public int getItemCount() { 82 | return data.size(); 83 | } 84 | 85 | class MyHolder extends RecyclerView.ViewHolder { 86 | 87 | CardView cdItem; 88 | TextView textName; 89 | ImageView ivIcon; 90 | TextView textSize; 91 | 92 | // create constructor to get widget reference 93 | public MyHolder(View itemView) { 94 | super(itemView); 95 | cdItem = (CardView) itemView.findViewById(R.id.cdItem); 96 | textName = (TextView) itemView.findViewById(R.id.textName); 97 | ivIcon = (ImageView) itemView.findViewById(R.id.ivIcon); 98 | textSize = (TextView) itemView.findViewById(R.id.textSize); 99 | } 100 | 101 | } 102 | 103 | } 104 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/Store/DataStore.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.Store; 2 | 3 | public class DataStore { 4 | 5 | public String itemName; 6 | public String itemSize; 7 | public String itemData; 8 | public String itemIcon; 9 | public String itemLink; 10 | public String itemPreviewMain; 11 | public String itemPreview1; 12 | public String itemPreview2; 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/VectrasSDLSurfaceCompat.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras; 2 | 3 | public class VectrasSDLSurfaceCompat //extends SDLSurface 4 | //implements View.OnGenericMotionListener 5 | { 6 | // public VectrasSDLSurfaceCompat(Context context) { 7 | // super(context); 8 | //// this.setOnGenericMotionListener(this); 9 | // // TODO Auto-generated constructor stub 10 | // } 11 | 12 | // @Override 13 | // public boolean onGenericMotion(View v, MotionEvent event) { 14 | // 15 | // 16 | // if (VectrasSDLActivity.enablebluetoothmouse == 0) { 17 | // return false; 18 | // } 19 | // float x = event.getX(); 20 | // float y = event.getY(); 21 | // float p = event.getPressure(); 22 | // int action = event.getAction(); 23 | // 24 | // if (x < (VectrasSDLActivity.width - VectrasSDLActivity.vm_width) / 2) { 25 | // return true; 26 | // } else if (x > VectrasSDLActivity.width 27 | // - (VectrasSDLActivity.width - VectrasSDLActivity.vm_width) / 2) { 28 | // return true; 29 | // } 30 | // 31 | // if (y < (VectrasSDLActivity.height - VectrasSDLActivity.vm_height) / 2) { 32 | // return true; 33 | // } else if (y > VectrasSDLActivity.height 34 | // - (VectrasSDLActivity.height - VectrasSDLActivity.vm_height) / 2) { 35 | // return true; 36 | // } 37 | // 38 | // if (action == MotionEvent.ACTION_HOVER_MOVE) { 39 | //// Log.v("onGenericMotion", "Moving to (X,Y)=(" + x 40 | //// * VectrasSDLActivity.width_mult + "," + y 41 | //// * VectrasSDLActivity.height_mult + ")"); 42 | // 43 | // VectrasSDLActivity.onNativeTouch(0, 1, MotionEvent.ACTION_MOVE, x 44 | // * VectrasSDLActivity.width_mult, y * VectrasSDLActivity.height_mult, p); 45 | // } 46 | // 47 | // if (event.getButtonState() == MotionEvent.BUTTON_SECONDARY) { 48 | //// Log.v("onGenericMotion", "Right Click (X,Y)=" + x 49 | //// * VectrasSDLActivity.width_mult + "," + y 50 | //// * VectrasSDLActivity.height_mult + ")"); 51 | // rightClick(event); 52 | // } 53 | // 54 | // // save current 55 | // old_x = x * VectrasSDLActivity.width_mult; 56 | // old_y = y * VectrasSDLActivity.height_mult; 57 | // return true; 58 | // } 59 | // 60 | 61 | } 62 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/jni/VMExecutor.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.jni; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.util.Log; 7 | import com.epicstudios.vectras.Config; 8 | import com.epicstudios.vectras.MainActivity; 9 | import com.epicstudios.vectras.VectrasService; 10 | import com.epicstudios.vectras.logger.VectrasStatus; 11 | import com.epicstudios.vectras.utils.FileUtils; 12 | import com.epicstudios.vectras.utils.RamInfo; 13 | import com.epicstudios.vectras.utils.UIUtils; 14 | import java.io.File; 15 | import java.util.Arrays; 16 | 17 | import android.os.Environment; 18 | 19 | public class VMExecutor { 20 | 21 | private static Context context; 22 | private final String TAG = "VMExecutor"; 23 | public int paused; 24 | public String base_dir = Config.basefiledir; 25 | public boolean busy = false; 26 | public boolean libLoaded = false; 27 | 28 | // Default Settings 29 | private String libqemu = Config.libqemupath; 30 | private int restart = 0; 31 | private int width; 32 | private int height; 33 | 34 | public static final File fileExtra = new File(Config.basefiledir + "config_extra.txt"); 35 | public static String extraParams; 36 | 37 | /** 38 | * @throws Exception 39 | */ 40 | public VMExecutor(Context context) throws Exception { 41 | 42 | } 43 | 44 | public void loadNativeLibs() { 45 | libLoaded = true; 46 | } 47 | 48 | // Load the shared lib 49 | private void loadNativeLib(String lib, String destDir) { 50 | if (true) { 51 | String libLocation = destDir + "/" + lib; 52 | try { 53 | System.load(libLocation); 54 | } catch (Exception ex) { 55 | VectrasStatus.logInfo(String.format("failed to load native library: "+ex)); 56 | Log.e("JNIExample", "failed to load native library: " + ex); 57 | } 58 | } 59 | 60 | } 61 | 62 | public String startvm() { 63 | 64 | String res = null; 65 | 66 | Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 67 | @Override 68 | public void uncaughtException(Thread thread, Throwable e) { 69 | e.printStackTrace(); 70 | VectrasStatus.logInfo(String.format("Vectras Uncaught Exception: "+e.toString())); 71 | Log.e(TAG, "Vectras Uncaught Exception: " + e.toString()); 72 | } 73 | }); 74 | 75 | try { 76 | String Extras = null; 77 | if (extraParams == "null") { 78 | Extras = null; 79 | } else { 80 | Extras = extraParams; 81 | } 82 | if (extraParams == "error") { 83 | VectrasStatus.logInfo(String.format(" QEMU Params Error: "+extraParams)); 84 | return "error"; 85 | } 86 | VectrasStatus.logInfo(String.format("QEMU PARAMS: "+ Arrays.toString(MainActivity.params) +extraParams+" -m "+ RamInfo.vectrasMemory())); 87 | res = start(this.libqemu, MainActivity.params, extraParams+" -m "+ RamInfo.vectrasMemory(), paused, "VECTRAS"); 88 | } catch (Exception ex) { 89 | ex.printStackTrace(); 90 | VectrasStatus.logInfo(String.format("Vectras Exception: " + ex.toString())); 91 | Log.e(TAG, "Vectras Exception: " + ex.toString()); 92 | } 93 | return res; 94 | } 95 | 96 | //JNI Methods 97 | public native String start(String lib_path, Object[] params, String params_extra, int paused, String save_state); 98 | 99 | protected native String stop(int restart); 100 | 101 | protected native void scale(); 102 | 103 | protected native String getpausestate(); 104 | 105 | public native String pausevm(String uri); 106 | 107 | protected native void resize(); 108 | 109 | protected native void togglefullscreen(); 110 | 111 | protected native String getstate(); 112 | 113 | public String startvm(Context context) { 114 | VectrasService.executor = this; 115 | Intent i = new Intent(Config.ACTION_START, null, context, VectrasService.class); 116 | Bundle b = new Bundle(); 117 | // b.putString("machine_type", this.machine_type); 118 | b.putInt("ui", 1); 119 | i.putExtras(b); 120 | context.startService(i); 121 | 122 | VectrasStatus.logInfo(String.format("VMStarted")); 123 | Log.v(TAG, "startVMService"); 124 | return "startVMService"; 125 | 126 | } 127 | 128 | public String stopvm(int restart) { 129 | Log.v(TAG, "Stopping the VM"); 130 | VectrasStatus.logInfo(String.format("Stopping the VM")); 131 | this.restart = restart; 132 | return this.stop(this.restart); 133 | } 134 | 135 | public String resumevm() { 136 | // Set to delete previous snapshots after vm resumed 137 | Log.v(TAG, "Resume the VM"); 138 | VectrasStatus.logInfo(String.format("Resume the VM")); 139 | String res = startvm(); 140 | Log.d(TAG, res); 141 | return res; 142 | } 143 | 144 | public String get_pause_state() { 145 | if (this.libLoaded) 146 | return this.getpausestate(); 147 | return ""; 148 | } 149 | 150 | public String get_state() { 151 | return this.getstate(); 152 | } 153 | 154 | public void resizeScreen() { 155 | 156 | this.resize(); 157 | 158 | } 159 | 160 | public void toggleFullScreen() { 161 | 162 | this.togglefullscreen(); 163 | 164 | } 165 | 166 | public void screenScale(int width, int height) { 167 | 168 | this.width = width; 169 | this.height = height; 170 | 171 | this.scale(); 172 | 173 | } 174 | 175 | public int get_fd(String path) { 176 | int fd = FileUtils.get_fd(context, path); 177 | return fd; 178 | 179 | } 180 | 181 | public int close_fd(int fd) { 182 | int res = FileUtils.close_fd(fd); 183 | return res; 184 | 185 | } 186 | 187 | } 188 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/logger/VMStatus.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.logger; 2 | 3 | import android.os.Parcel; 4 | import android.os.Parcelable; 5 | 6 | public enum VMStatus implements Parcelable { 7 | V_STARTVM, 8 | V_STOPVM, 9 | UNKNOWN_LEVEL; 10 | 11 | @Override 12 | public void writeToParcel(Parcel dest, int flags) { 13 | dest.writeInt(ordinal()); 14 | } 15 | 16 | @Override 17 | public int describeContents() { 18 | return 0; 19 | } 20 | 21 | public static final Creator CREATOR = new Creator() { 22 | @Override 23 | public VMStatus createFromParcel(Parcel in) { 24 | return VMStatus.values()[in.readInt()]; 25 | } 26 | 27 | @Override 28 | public VMStatus[] newArray(int size) { 29 | return new VMStatus[size]; 30 | } 31 | }; 32 | } 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/utils/AppUpdater.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.utils; 2 | 3 | import android.app.ProgressDialog; 4 | import android.content.Context; 5 | import android.os.AsyncTask; 6 | import com.epicstudios.vectras.Config; 7 | import com.epicstudios.vectras.R; 8 | import java.io.BufferedReader; 9 | import java.io.InputStreamReader; 10 | import java.net.HttpURLConnection; 11 | import java.net.URL; 12 | 13 | public class AppUpdater extends AsyncTask { 14 | 15 | private Context context; 16 | private OnUpdateListener listener; 17 | private ProgressDialog progressDialog; 18 | private boolean isOnCreate; 19 | 20 | public AppUpdater(Context context, OnUpdateListener listener) { 21 | this.context = context; 22 | this.listener = listener; 23 | } 24 | 25 | public void start(boolean isOnCreate) { 26 | this.isOnCreate = isOnCreate; 27 | execute(); 28 | } 29 | 30 | public interface OnUpdateListener { 31 | void onUpdateListener(String result); 32 | } 33 | 34 | @Override 35 | protected String doInBackground(String... strings) { 36 | try { 37 | StringBuilder sb = new StringBuilder(); 38 | URL url = new URL(Config.updateJson); 39 | HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 40 | conn.setConnectTimeout(30000); 41 | conn.setReadTimeout(30000); 42 | conn.setRequestMethod("GET"); 43 | conn.connect(); 44 | 45 | BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 46 | String response; 47 | 48 | while ((response = br.readLine()) != null) { 49 | sb.append(response); 50 | } 51 | return sb.toString(); 52 | } catch (Exception e) { 53 | e.printStackTrace(); 54 | return "Error on getting data: " + e.getMessage(); 55 | 56 | } 57 | } 58 | 59 | @Override 60 | protected void onPreExecute() { 61 | super.onPreExecute(); 62 | if (isOnCreate) { 63 | progressDialog = new ProgressDialog(context, R.style.MainDialogTheme); 64 | progressDialog.setMessage("Please wait for the check"); 65 | progressDialog.setTitle("Looking for Update"); 66 | progressDialog.setCancelable(false); 67 | progressDialog.show(); 68 | } 69 | } 70 | 71 | @Override 72 | protected void onPostExecute(String s) { 73 | super.onPostExecute(s); 74 | if (isOnCreate && progressDialog != null) { 75 | progressDialog.dismiss(); 76 | } 77 | if (listener != null) { 78 | listener.onUpdateListener(s); 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/utils/FileInstaller.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.utils; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.content.res.AssetManager; 6 | import android.util.Log; 7 | 8 | import com.epicstudios.vectras.Config; 9 | 10 | import java.io.File; 11 | import java.io.FileOutputStream; 12 | import java.io.IOException; 13 | import java.io.InputStream; 14 | import java.io.OutputStream; 15 | import java.util.logging.Level; 16 | import java.util.logging.Logger; 17 | 18 | /** 19 | * 20 | * @author dev 21 | */ 22 | public class FileInstaller { 23 | 24 | public static void installFiles(Activity activity) { 25 | 26 | Log.v("Installer", "Installing files..."); 27 | File tmpDir = new File(Config.basefiledir); 28 | if (!tmpDir.exists()) { 29 | tmpDir.mkdirs(); 30 | } 31 | 32 | //Install base dir 33 | File dir = new File(Config.basefiledir); 34 | if (dir.exists() && dir.isDirectory()) { 35 | //don't create again 36 | } else if (dir.exists() && !dir.isDirectory()) { 37 | Log.v("Installer", "Could not create Dir, file found: " + Config.basefiledir); 38 | return; 39 | } else if (!dir.exists()) { 40 | dir.mkdir(); 41 | } 42 | 43 | Log.v("Installer", "Getting Files: "); 44 | //Get each file in assets under ./roms/ and install in SDCARD 45 | AssetManager am = activity.getResources().getAssets(); 46 | String[] files = null; 47 | try { 48 | files = am.list("roms"); 49 | } catch (IOException ex) { 50 | Logger.getLogger(FileInstaller.class.getName()).log(Level.SEVERE, null, ex); 51 | Log.v("Installer", "Could not install files: " + ex.getMessage()); 52 | } 53 | for (int i = 0; i < files.length; i++) { 54 | Log.v("Installer", "File: " + files[i]); 55 | String[] subfiles = null; 56 | try { 57 | subfiles = am.list("roms/" + files[i]); 58 | } catch (IOException ex) { 59 | Logger.getLogger(FileInstaller.class.getName()).log(Level.SEVERE, null, ex); 60 | } 61 | if (subfiles != null && subfiles.length > 0) { 62 | //Install base dir 63 | File dir1 = new File(Config.basefiledir + files[i]); 64 | if (dir1.exists() && dir1.isDirectory()) { 65 | //don't create again 66 | } else if (dir1.exists() && !dir1.isDirectory()) { 67 | Log.v("Installer", "Could not create Dir, file found: " + Config.basefiledir + files[i]); 68 | return; 69 | } else if (!dir1.exists()) { 70 | dir1.mkdir(); 71 | } 72 | for (int k = 0; k < subfiles.length; k++) { 73 | Log.v("Installer", "File: " + files[i] + "/" + subfiles[k]); 74 | installFile(activity, files[i] + "/" + subfiles[k], Config.basefiledir, "roms", null); 75 | } 76 | } else { 77 | installFile(activity, files[i], Config.basefiledir, "roms", null); 78 | } 79 | } 80 | // InputStream is = am.open(srcFile); 81 | 82 | } 83 | 84 | public static boolean installFile(Context activity, String srcFile, 85 | String destDir, String assetsDir, String destFile) { 86 | try { 87 | AssetManager am = activity.getResources().getAssets(); // get the local asset manager 88 | InputStream is = am.open(assetsDir + "/" + srcFile); // open the input stream for reading 89 | File destDirF = new File(destDir); 90 | if (!destDirF.exists()) { 91 | boolean res = destDirF.mkdirs(); 92 | if(!res){ 93 | UIUtils.toastLong(activity, "Could not create directory for image"); 94 | } 95 | } 96 | 97 | if(destFile==null) 98 | destFile=srcFile; 99 | OutputStream os = new FileOutputStream(destDir + "/" + destFile); 100 | byte[] buf = new byte[8092]; 101 | int n; 102 | while ((n = is.read(buf)) > 0) { 103 | os.write(buf, 0, n); 104 | } 105 | os.close(); 106 | is.close(); 107 | return true; 108 | } catch (Exception ex) { 109 | Log.e("Installer", "failed to install file: " + destFile + ", Error:" + ex.getMessage()); 110 | return false; 111 | } 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/utils/KeyboardUtils.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.utils; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.view.View; 6 | import android.view.inputmethod.InputMethodManager; 7 | import com.epicstudios.vectras.Config; 8 | 9 | public class KeyboardUtils { 10 | private static final String TAG = "KeyboardUtils"; 11 | 12 | public static boolean showKeyboard(Activity activity, View view) { 13 | 14 | InputMethodManager inputMgr = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 15 | if (view != null) { 16 | view.requestFocus(); 17 | inputMgr.showSoftInput(view, InputMethodManager.SHOW_FORCED); 18 | 19 | } else { 20 | if (view != null) { 21 | inputMgr.hideSoftInputFromWindow(view.getWindowToken(), 0); 22 | } 23 | return true; 24 | } 25 | return true; 26 | } 27 | 28 | public static void hideKeyboard(Activity activity, View view) { 29 | InputMethodManager inputMgr = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 30 | if (view != null) { 31 | inputMgr.hideSoftInputFromWindow(view.getWindowToken(), 0); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/utils/QmpClient.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.utils; 2 | 3 | import android.util.Log; 4 | import com.epicstudios.vectras.Config; 5 | import java.io.BufferedReader; 6 | import java.io.IOException; 7 | import java.io.InputStreamReader; 8 | import java.io.PrintWriter; 9 | import java.net.Socket; 10 | import org.json.JSONObject; 11 | 12 | public class QmpClient { 13 | 14 | private static final String TAG = "QMPClient"; 15 | private static String requestCommandMode = "{ \"execute\": \"qmp_capabilities\" }"; 16 | 17 | public static String sendCommand(String command) { 18 | String response = null; 19 | 20 | Socket pingSocket = null; 21 | PrintWriter out = null; 22 | BufferedReader in = null; 23 | 24 | try { 25 | pingSocket = new Socket(Config.QMPServer, Config.QMPPort); 26 | pingSocket.setSoTimeout(5000); 27 | out = new PrintWriter(pingSocket.getOutputStream(), true); 28 | in = new BufferedReader(new InputStreamReader(pingSocket.getInputStream())); 29 | 30 | sendRequest(out, QmpClient.requestCommandMode); 31 | response = getResponse(in); 32 | sendRequest(out, command); 33 | response = getResponse(in); 34 | 35 | } catch (Exception e) { 36 | // TODO Auto-generated catch block 37 | e.printStackTrace(); 38 | } finally { 39 | if (out != null) 40 | out.close(); 41 | try { 42 | if (in != null) 43 | in.close(); 44 | if (pingSocket != null) 45 | pingSocket.close(); 46 | } catch (IOException e) { 47 | // TODO Auto-generated catch block 48 | e.printStackTrace(); 49 | } 50 | 51 | } 52 | 53 | return response; 54 | } 55 | 56 | private static void sendRequest(PrintWriter out, String request) { 57 | 58 | Log.i(TAG, "QMP request" + request); 59 | out.println(request); 60 | } 61 | 62 | private static String getResponse(BufferedReader in) throws Exception { 63 | 64 | String line; 65 | StringBuilder stringBuilder = new StringBuilder(""); 66 | 67 | try { 68 | do { 69 | line = in.readLine(); 70 | if (line != null) { 71 | Log.i(TAG, "QMP response: " + line); 72 | JSONObject object = new JSONObject(line); 73 | String returnStr = null; 74 | String errStr = null; 75 | 76 | try { 77 | returnStr = object.getString("return"); 78 | } catch (Exception ex) { 79 | 80 | } 81 | 82 | if (returnStr != null) { 83 | break; 84 | } 85 | 86 | try { 87 | errStr = object.getString("error"); 88 | } catch (Exception ex) { 89 | 90 | } 91 | 92 | stringBuilder.append(line); 93 | stringBuilder.append("\n"); 94 | 95 | if (errStr != null) { 96 | break; 97 | } 98 | 99 | 100 | } else 101 | break; 102 | } while (true); 103 | } catch (Exception ex) { 104 | 105 | } 106 | return stringBuilder.toString(); 107 | } 108 | 109 | public static String migrate(boolean block, boolean inc, String uri) { 110 | 111 | // XXX: Detach should not be used via QMP according to docs 112 | // return "{\"execute\":\"migrate\",\"arguments\":{\"detach\":" + detach 113 | // + ",\"blk\":" + block + ",\"inc\":" + inc 114 | // + ",\"uri\":\"" + uri + "\"},\"id\":\"limbo\"}"; 115 | 116 | // its better not to use block (full disk copy) cause its slow (though 117 | // safer) 118 | // see qmp-commands.hx for more info 119 | return "{\"execute\":\"migrate\",\"arguments\":{\"blk\":" + block + ",\"inc\":" + inc + ",\"uri\":\"" + uri 120 | + "\"},\"id\":\"vectras\"}"; 121 | 122 | } 123 | 124 | public static String stop() { 125 | return "{ \"execute\": \"stop\" }"; 126 | 127 | } 128 | 129 | public static String cont() { 130 | return "{ \"execute\": \"cont\" }"; 131 | 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/utils/RamInfo.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.utils; 2 | 3 | import static android.content.Context.ACTIVITY_SERVICE; 4 | 5 | import android.app.ActivityManager; 6 | 7 | import com.epicstudios.vectras.MainActivity; 8 | import com.epicstudios.vectras.logger.VectrasStatus; 9 | 10 | public class RamInfo { 11 | 12 | public static int safeLongToInt(long l) { 13 | if (l < Integer.MIN_VALUE || l > Integer.MAX_VALUE) { 14 | throw new IllegalArgumentException(l + " cannot be cast to int without changing its value."); 15 | } 16 | return (int) l; 17 | } 18 | 19 | public static String vectrasMemory() { 20 | ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); 21 | ActivityManager activityManager = (ActivityManager) MainActivity.activity.getSystemService(ACTIVITY_SERVICE); 22 | activityManager.getMemoryInfo(mi); 23 | long freeMem = mi.availMem / 1048576L; 24 | long totalMem = mi.totalMem / 1048576L; 25 | long usedMem = totalMem - freeMem; 26 | int freeRamInt = safeLongToInt(freeMem); 27 | int totalRamInt = safeLongToInt(totalMem); 28 | if (freeRamInt > 16384) { 29 | return "15360"; 30 | } else if (freeRamInt > 15360) { 31 | return "14336"; 32 | } else if (freeRamInt > 14336) { 33 | return "13312"; 34 | } else if (freeRamInt > 13312) { 35 | return "12288"; 36 | } else if (freeRamInt > 12288) { 37 | return "11264"; 38 | } else if (freeRamInt > 11264) { 39 | return "10240"; 40 | } else if (freeRamInt > 10240) { 41 | return "9216"; 42 | } else if (freeRamInt > 9216) { 43 | return "8192"; 44 | } else if (freeRamInt > 8192) { 45 | return "7168"; 46 | } else if (freeRamInt > 7168) { 47 | return "6114"; 48 | } else if (freeRamInt > 6114) { 49 | return "5120"; 50 | } else if (freeRamInt > 5120) { 51 | return "4096"; 52 | } else if (freeRamInt > 4096) { 53 | return "3072"; 54 | } else if (freeRamInt > 3072) { 55 | return "2048"; 56 | } else if (freeRamInt > 2048) { 57 | return "1024"; 58 | } else if (freeRamInt > 1024) { 59 | return "786"; 60 | } else if (freeRamInt > 786) { 61 | return "512"; 62 | } else if (freeRamInt > 512) { 63 | return "256"; 64 | } else { 65 | return "256"; 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /app/src/main/java/com/epicstudios/vectras/utils/UIUtils.java: -------------------------------------------------------------------------------- 1 | package com.epicstudios.vectras.utils; 2 | 3 | import android.app.Activity; 4 | import android.app.AlertDialog; 5 | import android.content.Context; 6 | import android.content.DialogInterface; 7 | import android.content.pm.ActivityInfo; 8 | import android.content.pm.PackageInfo; 9 | import android.content.pm.PackageManager; 10 | import android.graphics.Point; 11 | import android.os.Handler; 12 | import android.os.Looper; 13 | import android.view.Display; 14 | import android.view.Gravity; 15 | import android.webkit.WebView; 16 | import android.widget.Toast; 17 | import androidx.appcompat.app.ActionBar; 18 | import androidx.appcompat.app.AppCompatActivity; 19 | import androidx.appcompat.widget.Toolbar; 20 | import com.epicstudios.vectras.R; 21 | import com.epicstudios.vectras.Config; 22 | import com.epicstudios.vectras.logger.VectrasStatus; 23 | 24 | import java.io.IOException; 25 | 26 | public class UIUtils { 27 | 28 | public static void toastLong(final Context activity, final String errStr) { 29 | new Handler(Looper.getMainLooper()).post(new Runnable() { 30 | @Override 31 | public void run() { 32 | 33 | Toast toast = Toast.makeText(activity, errStr, Toast.LENGTH_LONG); 34 | toast.show(); 35 | VectrasStatus.logInfo("[I] "+errStr+""); 36 | 37 | } 38 | }); 39 | 40 | } 41 | 42 | public static void showHints(Activity activity) { 43 | 44 | } 45 | 46 | public static void UIAlertHtml(String title, String html, Activity activity) { 47 | 48 | AlertDialog alertDialog; 49 | alertDialog = new AlertDialog.Builder(activity).create(); 50 | alertDialog.setTitle(title); 51 | WebView webview = new WebView(activity); 52 | webview.loadData(html, "text/html", "UTF-8"); 53 | alertDialog.setView(webview); 54 | alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { 55 | public void onClick(DialogInterface dialog, int which) { 56 | return; 57 | } 58 | }); 59 | alertDialog.show(); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /app/src/main/java/org/libsdl/app/ClearRenderer.java: -------------------------------------------------------------------------------- 1 | package org.libsdl.app; 2 | 3 | import javax.microedition.khronos.egl.EGLConfig; 4 | import javax.microedition.khronos.opengles.GL10; 5 | 6 | import android.opengl.GLSurfaceView; 7 | import android.util.Log; 8 | 9 | public class ClearRenderer implements GLSurfaceView.Renderer { 10 | public void onSurfaceCreated(GL10 gl, EGLConfig config) { 11 | // Do nothing special. 12 | Log.v("onSurfaceCreated", "..."); 13 | } 14 | 15 | public void onSurfaceChanged(GL10 gl, int w, int h) { 16 | Log.v("onSurfaceChanged", "..."); 17 | gl.glViewport(0, 0, w, h); 18 | } 19 | 20 | public void onDrawFrame(GL10 gl) { 21 | Log.v("onDrawFrame", "..."); 22 | gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 23 | 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libSDL2.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/jniLibs/armeabi-v7a/libSDL2.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libSDL2_image.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/jniLibs/armeabi-v7a/libSDL2_image.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libSDL2_mixer.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/jniLibs/armeabi-v7a/libSDL2_mixer.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libglib-2.0.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/jniLibs/armeabi-v7a/libglib-2.0.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libgmodule-2.0.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/jniLibs/armeabi-v7a/libgmodule-2.0.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libgobject-2.0.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/jniLibs/armeabi-v7a/libgobject-2.0.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libgthread-2.0.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/jniLibs/armeabi-v7a/libgthread-2.0.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libmain.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/jniLibs/armeabi-v7a/libmain.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libpixman.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/jniLibs/armeabi-v7a/libpixman.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libqemu-system-x86_64.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/jniLibs/armeabi-v7a/libqemu-system-x86_64.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libstlport_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/jniLibs/armeabi-v7a/libstlport_shared.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libvectras.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/jniLibs/armeabi-v7a/libvectras.so -------------------------------------------------------------------------------- /app/src/main/play_store_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/play_store_512.png -------------------------------------------------------------------------------- /app/src/main/play_store_feature_graphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ankit1057/Vectras-VM-Android/d35988d2a1155413b1cbd07dc5a4c5c2ef15c1b5/app/src/main/play_store_feature_graphic.png -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_from_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_from_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_in_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_out_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_to_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_to_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/access_point_network_off.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/btn_state.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/controls_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 16 | 17 | 18 | 19 | 20 | 22 | 23 | 26 | 27 | 32 | 33 | 34 | 35 | 37 | 38 | 41 | 42 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/dialog_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/ic_facebook.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/ic_github.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/ic_playstore.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/ic_telegram.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/ic_youtube.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_account_circle_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_browser_updated_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_build_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_chevron_right_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_delete_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_download_done_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_edit_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_file_download_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_home_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_info_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_logout_24.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_menu_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_newspaper_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_play_arrow_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_public_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_save_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_search_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_settings_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_share_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_shop_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v26/round_stop_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_about.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | 12 | 17 | 18 | 19 | 20 | 21 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_splash.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_store.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_store_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/container_main_roms.xml: -------------------------------------------------------------------------------- 1 | 4 | 18 | 19 | 24 | 25 | 30 | 31 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/res/layout/container_post.xml: -------------------------------------------------------------------------------- 1 | 13 | 14 | 18 | 19 | 24 | 25 | 30 | 31 | 39 | 40 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /app/src/main/res/layout/container_roms.xml: -------------------------------------------------------------------------------- 1 | 4 | 15 | 19 | 20 | 25 | 26 | 32 | 33 | 41 | 42 | 46 | 47 | 55 | 56 | 63 | 64 | 65 | 66 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /app/src/main/res/layout/container_store.xml: -------------------------------------------------------------------------------- 1 | 12 | 13 | 17 | 18 | 23 | 24 | 29 | 30 | 38 | 39 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /app/src/main/res/layout/content_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 22 | 23 | 27 | 28 | 34 | 35 | 40 | 45 | 52 | 53 | 58 | 59 | 60 | 61 |