diff --git a/3rdparty-licenses.txt b/3rdparty-licenses.txt index 63f8df16..6fdf9d01 100644 --- a/3rdparty-licenses.txt +++ b/3rdparty-licenses.txt @@ -4,6 +4,30 @@ Font Awesome Free This software includes graphical resources based on Font Awesome icons. Font Awesome is licensed under the Creative Commons Attribution 4.0 International license. See https://fontawesome.com/license/free for more details. +journal.png: https://fontawesome.com/icons/book-open?style=solid +jump.png: https://fontawesome.com/icons/reply?style=solid +keyboard.png: https://fontawesome.com/icons/keyboard?style=solid +pause.png: https://fontawesome.com/icons/pause?style=solid +save.png: https://fontawesome.com/icons/file-download?style=solid +sneak.png: https://fontawesome.com/icons/eye-slash?style=solid +third_person.png: https://fontawesome.com/icons/video?style=solid +toggle.png: https://fontawesome.com/icons/bars?style=solid +toggle_magic.png: https://fontawesome.com/icons/bolt?style=solid +use.png: https://fontawesome.com/icons/hand-point-up?style=solid +wait.png: https://fontawesome.com/icons/hourglass?style=solid +mouse.png - https://github.com/FortAwesome/Font-Awesome/issues/2376#issuecomment-215401368 - Based on an icon by t1k3 https://github.com/t1k3 + + +============ +Noun Project +============ + +This software includes graphical resources based on Noun Project icons. + +inventory.png: https://thenounproject.com/term/backpack/2551/ - CC-0 - By Rémy Médard, FR +weapon.png: https://thenounproject.com/term/sword/1161/ - CC-BY-3 - By Christopher T. Howlett, CA +attack.png: Based on the weapon.png by Christopher T. Howlett and modified by treio + ============= libjpeg-turbo diff --git a/README.md b/README.md index 387fa37d..aef72a6e 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,8 @@ The second method is used to connect to servers which are not displayed on the b If you want to go back to Singleplayer, simply untoggle the Multiplayer setting in the settings menu, and you can just start the game into Singleplayer by pressing the play icon. +[Google Play](https://play.google.com/store/apps/details?id=is.xyz.omw) | [Google Play (Nightly)](https://play.google.com/store/apps/details?id=is.xyz.omw_nightly) | [FAQ & Info](https://omw.xyz.is/) + ## Building There are two steps for building tes3mp for Android. The first step is building C/C++ libraries. The second step is building the Java launcher. @@ -69,9 +71,3 @@ adb logcat | ./tool/asan_symbolize.py --demangle -s ./symbols/armeabi-v7a/ ### Source code Original Java code written by sandstranger. Build scripts originally written by sandstranger and bwhaines. - -### Icons - -Some of the icons used in this project (keyboard.xml, load.xml, pause.xml, save.xml) are Font Awesome icons, distributed under the terms of the CC-BY 4.0 license. See https://fontawesome.com/license/free for more details. - -mouse.png - https://github.com/FortAwesome/Font-Awesome/issues/2376#issuecomment-215401368 diff --git a/app/build.gradle b/app/build.gradle index c1727c5b..4a03522b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,7 +27,7 @@ android { defaultConfig { applicationId "is.terrabyte.omw" - versionCode 14 + versionCode 17 versionName calculateVersion() minSdkVersion 21 @@ -74,7 +74,7 @@ android { applicationVariants.all { variant -> variant.outputs.all { - outputFileName = "omw_${variant.buildType.name}_${defaultConfig.versionName}.apk" + outputFileName = "app-debug.apk" } } } @@ -97,5 +97,7 @@ dependencies { implementation 'com.bugsnag:bugsnag-android-ndk:4.+' + implementation 'com.github.javiersantos:AppUpdater:2.7' + testImplementation 'junit:junit:4.12' } diff --git a/app/settings-default.cfg b/app/settings-default.cfg index 18b2be3e..01e8365b 100644 --- a/app/settings-default.cfg +++ b/app/settings-default.cfg @@ -346,7 +346,7 @@ terrain specular map pattern = _diffusespec grab cursor = true # Key controlling sneak toggles setting instead of being held down. -toggle sneak = false +toggle sneak = true # Player is running by default. always run = false diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 400d04c2..56068935 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -59,7 +59,7 @@ android:screenOrientation="fullUser" android:theme="@style/MyTheme" android:exported="true" - android:label="browser" + android:label="Server Browser" /> diff --git a/app/src/main/java/ui/activity/BrowserActivity.java b/app/src/main/java/ui/activity/BrowserActivity.java index 70c86f76..4bb285bb 100644 --- a/app/src/main/java/ui/activity/BrowserActivity.java +++ b/app/src/main/java/ui/activity/BrowserActivity.java @@ -8,6 +8,7 @@ import android.text.InputType; import android.view.LayoutInflater; import android.view.View; +import android.view.MenuItem; import android.view.ViewGroup; import android.widget.AdapterView; @@ -41,6 +42,12 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.browser); + + setSupportActionBar(findViewById(R.id.browser_toolbar)); + + // Enable the "back" icon in the action bar + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + listView = (ListView) findViewById(R.id.list); pullToRefresh = (SwipeRefreshLayout) findViewById(R.id.pullToRefresh); @@ -131,6 +138,17 @@ public int compare(Server m1, Server m2) { sortPlayersFilter = false; sortAlphabetFilter = true; } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + onBackPressed(); + return true; + } else { + return super.onOptionsItemSelected(item); + } + } + } diff --git a/app/src/main/java/ui/activity/MainActivity.kt b/app/src/main/java/ui/activity/MainActivity.kt index f32736ba..ee97a970 100644 --- a/app/src/main/java/ui/activity/MainActivity.kt +++ b/app/src/main/java/ui/activity/MainActivity.kt @@ -23,11 +23,13 @@ package ui.activity import android.annotation.SuppressLint import android.app.AlarmManager import android.app.AlertDialog +import android.app.DownloadManager import android.app.PendingIntent import android.app.ProgressDialog import android.content.* import android.net.Uri import android.os.Bundle +import android.os.Environment import android.preference.PreferenceManager import android.util.DisplayMetrics import com.google.android.material.floatingactionbutton.FloatingActionButton @@ -40,6 +42,10 @@ import com.bugsnag.android.Bugsnag import com.libopenmw.openmw.BuildConfig import com.libopenmw.openmw.R +import com.github.javiersantos.appupdater.AppUpdater; +import com.github.javiersantos.appupdater.enums.Display; +import com.github.javiersantos.appupdater.enums.UpdateFrom; + import constants.Constants import file.GameInstaller @@ -83,6 +89,14 @@ class MainActivity : AppCompatActivity() { if (prefs.getString("bugsnag_consent", "")!! == "") { askBugsnagConsent() } + + /** + AppUpdater(this) + .setUpdateFrom(UpdateFrom.GITHUB) + .setButtonUpdateClickListener{ _, _ -> update() } + .setGitHubUserAndRepo("terabyte25", "tes3mp-android") + .start(); + */ } /** @@ -347,6 +361,36 @@ class MainActivity : AppCompatActivity() { deleteRecursive(File(Constants.USER_CONFIG)) } + private fun update() { + var destination: String = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/OpenMW-tes3mp-update.apk" + val uri = Uri.parse("file://" + destination) + val file = File(destination) + if (file.exists()) + file.delete() + val url = "https://github.com/terabyte25/tes3mp-android/releases/latest/download/app-debug.apk" + val request = DownloadManager.Request(Uri.parse(url)) + request.setDescription("Downloading the latest version of OpenMW") + request.setTitle("OpenMW update") + request.allowScanningByMediaScanner() + request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) + request.setDestinationUri(uri) + val manager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager + val downloadId = manager.enqueue(request) + val onComplete = object:BroadcastReceiver() { + + override fun onReceive(ctxt:Context, intent:Intent) { + val install = Intent(Intent.ACTION_VIEW) + install.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + install.setDataAndType(uri, + "application/vnd.android.package-‌​archive") + startActivity(install) + unregisterReceiver(this) + finish() + } + } + registerReceiver(onComplete, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) + } + public fun startGame() { // Get scaling factor from config; if invalid or not provided, generate one var scaling = 0f diff --git a/app/src/main/java/ui/controls/Osc.kt b/app/src/main/java/ui/controls/Osc.kt index f62de3bf..82a3cea7 100644 --- a/app/src/main/java/ui/controls/Osc.kt +++ b/app/src/main/java/ui/controls/Osc.kt @@ -19,11 +19,10 @@ package ui.controls +import android.annotation.SuppressLint import android.content.Context import android.graphics.Color -import android.opengl.Visibility import android.preference.PreferenceManager -import android.util.TypedValue import android.view.KeyEvent import android.view.MotionEvent import android.view.View @@ -31,12 +30,17 @@ import android.widget.Button import android.widget.ImageView import android.widget.RelativeLayout import com.libopenmw.openmw.R +import org.jetbrains.anko.defaultSharedPreferences import org.libsdl.app.SDLActivity import ui.activity.GameActivity import ui.activity.MouseMode const val VIRTUAL_SCREEN_WIDTH = 1024 const val VIRTUAL_SCREEN_HEIGHT = 768 +const val CONTROL_DEFAULT_SIZE = 70 +const val JOYSTICK_SIZE = 230 +const val JOYSTICK_OFFSET = 110 +const val TOP_BAR_SPACING = 90 /** * Class to hold on-screen control elements such as buttons or joysticks. @@ -50,10 +54,10 @@ const val VIRTUAL_SCREEN_HEIGHT = 768 */ open class OscElement( public val uniqueId: String, - val visibility: OscVisibility, - private val defaultX: Int, - private val defaultY: Int, - private val defaultSize: Int = 50, + var visibility: OscVisibility, + val defaultX: Int, + val defaultY: Int, + private val defaultSize: Int = CONTROL_DEFAULT_SIZE, private val defaultOpacity: Float = 0.4f ) { @@ -115,15 +119,14 @@ open class OscElement( fun updateView() { val v = view ?: return - // Convert display pixels units into real pixels - val px: Float = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, size.toFloat(), v.context.resources.displayMetrics) - val params = RelativeLayout.LayoutParams(px.toInt(), px.toInt()) - val realScreenWidth = (v.parent as View).width val realScreenHeight = (v.parent as View).height val realX = x * realScreenWidth / VIRTUAL_SCREEN_WIDTH val realY = y * realScreenHeight / VIRTUAL_SCREEN_HEIGHT + val screenSize = (1.0 * size * realScreenWidth / VIRTUAL_SCREEN_WIDTH).toInt() + val params = RelativeLayout.LayoutParams(screenSize, screenSize) + params.leftMargin = realX params.topMargin = realY @@ -180,7 +183,7 @@ class OscImageButton( defaultY: Int, private val keyCode: Int, private val needMouse: Boolean = false, - defaultSize: Int = 50 + defaultSize: Int = CONTROL_DEFAULT_SIZE ) : OscElement(uniqueId, visibility, defaultX, defaultY, defaultSize) { override fun makeView(ctx: Context) { @@ -196,49 +199,24 @@ class OscImageButton( } -class OscKeyboardButton( - uniqueId: String, - visibility: OscVisibility, - private val imageSrc: Int, - defaultX: Int, - defaultY: Int, - private val osc: Osc -) : OscElement(uniqueId, visibility, defaultX, defaultY) { - - override fun makeView(ctx: Context) { - val v = ImageView(ctx) - v.setImageResource(imageSrc) - v.setOnTouchListener(View.OnTouchListener { _, motionEvent -> - if (motionEvent.action == MotionEvent.ACTION_UP) { - osc.toggleKeyboard() - } - return@OnTouchListener true - }) - v.tag = this - - view = v - } - -} - -class OscMouseButton( +class OscCustomButton( uniqueId: String, visibility: OscVisibility, private val imageSrc: Int, defaultX: Int, defaultY: Int, - private val osc: Osc + private val handler: () -> Unit ) : OscElement(uniqueId, visibility, defaultX, defaultY) { + @SuppressLint("ClickableViewAccessibility") override fun makeView(ctx: Context) { val v = ImageView(ctx) v.setImageResource(imageSrc) - v.setOnTouchListener(View.OnTouchListener { _, motionEvent -> - if (motionEvent.action == MotionEvent.ACTION_UP) { - osc.toggleMouse() - } - return@OnTouchListener true - }) + v.setOnTouchListener { _, motionEvent -> + if (motionEvent.action == MotionEvent.ACTION_UP) + handler() + true + } v.tag = this view = v @@ -357,81 +335,118 @@ class Osc( private var osk = Osk() var keyboardVisible = false //< Mode where only keyboard is visible var mouseVisible = false //< Mode where only mouse-switch icon is visible + private var topVisible = true //< The controls located at the top hidden behind the hamburger toggle private var visibilityState = 0 - private val btnMouse = OscMouseButton("mouse", OscVisibility.NULL, - R.drawable.mouse, 660, 0, this) + private val btnMouse = OscCustomButton("mouse", OscVisibility.NULL, + R.drawable.mouse, TOP_BAR_SPACING * 6, 0) { toggleMouse() } + private val btnTopToggle = OscCustomButton("toggle", OscVisibility.NULL, + R.drawable.toggle, 0, 0) { toggleTopControls() } + + private val joystickLeft = OscJoystickLeft("joystickLeft", OscVisibility.NORMAL, + JOYSTICK_OFFSET, 400, JOYSTICK_SIZE, 0) + private val joystickRight = OscJoystickRight("joystickRight", OscVisibility.ESSENTIAL, + VIRTUAL_SCREEN_WIDTH - JOYSTICK_SIZE - JOYSTICK_OFFSET, + 400, JOYSTICK_SIZE, 1) private var elements = arrayListOf( - OscJoystickLeft("joystickLeft", OscVisibility.NORMAL, - 75, 400, 170, 0), - OscJoystickRight("joystickRight", OscVisibility.ESSENTIAL, - 650, 400, 170, 1), + joystickLeft, + joystickRight, + btnTopToggle, OscImageButton("inventory", OscVisibility.NULL, - R.drawable.inventory, 950, 95, 3, true), - OscImageButton("changePerson", OscVisibility.NORMAL, - R.drawable.third_person, 212, 0, KeyEvent.KEYCODE_TAB), - OscImageButton("wait", OscVisibility.NORMAL, - R.drawable.wait, 274, 0, KeyEvent.KEYCODE_T), + R.drawable.inventory, 940, 95, 3, true), OscImageButton("pause", OscVisibility.ESSENTIAL, - R.drawable.pause, 950, 0, KeyEvent.KEYCODE_ESCAPE), + R.drawable.pause, 940, 0, KeyEvent.KEYCODE_ESCAPE), + OscImageButton("magic", OscVisibility.NORMAL, + R.drawable.toggle_magic, 940, 450, KeyEvent.KEYCODE_R), OscImageButton("weapon", OscVisibility.NORMAL, - R.drawable.toggle_weapon, 868, 539, KeyEvent.KEYCODE_F), - OscImageButton("jump", OscVisibility.NORMAL, - R.drawable.jump, 936, 300, KeyEvent.KEYCODE_E), + R.drawable.toggle_weapon, 940, 560, KeyEvent.KEYCODE_F), OscAttackButton("fire", OscVisibility.ESSENTIAL, - R.drawable.attack, 740, 315, 1, 90), - OscImageButton("magic", OscVisibility.NORMAL, - R.drawable.toggle_magic, 815, 642, KeyEvent.KEYCODE_R), - OscImageButton("crouch", OscVisibility.NORMAL, - R.drawable.sneak, 940, 670, 113), - OscImageButton("diary", OscVisibility.ESSENTIAL, - R.drawable.journal, 414, 0, KeyEvent.KEYCODE_J), - OscKeyboardButton("keyboard", OscVisibility.NULL, - R.drawable.keyboard, 586, 0, this), - btnMouse, - OscImageButton("use", OscVisibility.ESSENTIAL, - R.drawable.use, 950, 436, KeyEvent.KEYCODE_SPACE) + R.drawable.attack, 800, 315, 1, 120), + OscImageButton("use", OscVisibility.NORMAL, + R.drawable.use, joystickLeft.defaultX + JOYSTICK_SIZE/2 + 105, 630, + KeyEvent.KEYCODE_SPACE), + OscImageButton("jump", OscVisibility.NORMAL, R.drawable.jump, + joystickRight.defaultX + JOYSTICK_SIZE/2 - 105 - CONTROL_DEFAULT_SIZE, + 630, KeyEvent.KEYCODE_E) ) - + + private val topButtons: ArrayList + private val fnButtons = arrayListOf() + private val quickButtons = arrayListOf() + private val fn: OscHiddenToggle + private val qp: OscHiddenToggle + init { - // add buttons we didn't do earlier - if (multiplayer) { - elements.add(OscImageButton("chat", OscVisibility.NULL, R.drawable.chat, 780, 0, KeyEvent.KEYCODE_Y)) - // tes3mp doesn't allow quickload and quicksave - } else { - elements.add(OscImageButton("quickLoad", OscVisibility.NORMAL, R.drawable.load, 860, 0, 139)) - elements.add(OscImageButton("quickSave", OscVisibility.NORMAL, R.drawable.save, 780, 0, 135)) - } - val fnButtons = ArrayList() + val btnRowSpacing = 74 + val btnColumnSpacing = 65 // Fn buttons: F1, F2, F3, F4, F10, F11 are the only ones we care about arrayOf(1, 2, 3, 4, 10, 11).forEachIndexed{ i, el -> val code = 130 + el + val column = (i + 1) / 4 + 2 + val row = (i + 1) % 4 + 1 fnButtons.add(OscHiddenButton("f$el", OscVisibility.NULL, - 70, 70 * (i + 1), "F$el", code)) + btnColumnSpacing * column, btnRowSpacing * row, "F$el", code)) } - val fn = OscHiddenToggle("fn", OscVisibility.NULL, - 70, 0, "FN", fnButtons) + fn = OscHiddenToggle("fn", OscVisibility.NULL, + 2 * btnColumnSpacing, btnRowSpacing, "FN", fnButtons) // Quick buttons: 0 to 9 - val quickButtons = ArrayList() for (i in 0..9) { val code = KeyEvent.KEYCODE_0 + i + val column = (i + 1) / 9 + val row = (i + 1) % 9 + 1 quickButtons.add(OscHiddenButton("qp$i", OscVisibility.NULL, - 0, 70 * (i + 1), "$i", code)) + btnColumnSpacing * column, btnRowSpacing * row, "$i", code)) + } + qp = OscHiddenToggle("qp", OscVisibility.NULL, + 0, btnRowSpacing, "QP", quickButtons) + + topButtons = arrayListOf( + OscImageButton("changePerson", OscVisibility.NORMAL, + R.drawable.third_person, TOP_BAR_SPACING * 1, 0, KeyEvent.KEYCODE_TAB), + OscImageButton("diary", OscVisibility.ESSENTIAL, + R.drawable.journal, TOP_BAR_SPACING * 3, 0, KeyEvent.KEYCODE_J), + OscImageButton("wait", OscVisibility.NORMAL, + R.drawable.wait, TOP_BAR_SPACING * 4, 0, KeyEvent.KEYCODE_T), + OscCustomButton("keyboard", OscVisibility.NULL, + R.drawable.keyboard, TOP_BAR_SPACING * 5, 0) { toggleKeyboard() }, + btnMouse, + OscImageButton("crouch", OscVisibility.NORMAL, + R.drawable.sneak, TOP_BAR_SPACING * 7, 0, 113) + ) + // add buttons we didn't do earlier + if (multiplayer) { + topButtons.add(OscImageButton("chat", OscVisibility.NULL, R.drawable.chat, TOP_BAR_SPACING * 2, 0, KeyEvent.KEYCODE_Y)) + // tes3mp doesn't allow quickload and quicksave + } else { + topButtons.add(OscImageButton("quickSave", OscVisibility.NORMAL, R.drawable.save, TOP_BAR_SPACING * 2, 0, 135)) } - val qp = OscHiddenToggle("qp", OscVisibility.NULL, - 0, 0, "QP", quickButtons) - elements.addAll(fnButtons) elements.add(fn) elements.addAll(quickButtons) elements.add(qp) + elements.addAll(topButtons) } fun placeElements(target: RelativeLayout) { + val prefs = target.context.defaultSharedPreferences + val showQp = prefs.getBoolean("pref_show_qp", false) + val showFn = prefs.getBoolean("pref_show_fn", false) + val alwaysShowTop = prefs.getBoolean("pref_always_show_top_bar", false) + for (element in elements) { + if (!showQp && (element == qp || quickButtons.contains(element))) + continue + if (!showFn && (element == fn || fnButtons.contains(element))) + continue + if (alwaysShowTop && element == btnTopToggle) + continue + // If we want to utilize top-bar, don't let mouse/keyboard icons control it + if (!alwaysShowTop && topButtons.contains(element)) + element.visibility = OscVisibility.NULL + element.place(target) element.loadPrefs(target.context) } @@ -444,6 +459,10 @@ class Osc( // Mouse button is only needed in hybrid mode if (GameActivity.mouseMode != MouseMode.Hybrid) btnMouse.view?.visibility = View.GONE + + // Prepare initial top-button state + if (!alwaysShowTop) + toggleTopControls() } fun toggleKeyboard() { @@ -453,6 +472,15 @@ class Osc( showBasedOnState() } + private fun toggleTopControls() { + topVisible = !topVisible + // Note that this is done separate from the showBasedOnState mode + // Perhaps some refactoring is due + topButtons.forEach { + it.view?.visibility = if (topVisible) View.VISIBLE else View.GONE + } + } + /** * Displays different controls depending on current state * - keyboard visibility diff --git a/app/src/main/res/drawable/attack.png b/app/src/main/res/drawable/attack.png old mode 100644 new mode 100755 index 08c71bad..7c8053fd Binary files a/app/src/main/res/drawable/attack.png and b/app/src/main/res/drawable/attack.png differ diff --git a/app/src/main/res/drawable/chat.png b/app/src/main/res/drawable/chat.png old mode 100644 new mode 100755 index ac518854..388f2287 Binary files a/app/src/main/res/drawable/chat.png and b/app/src/main/res/drawable/chat.png differ diff --git a/app/src/main/res/drawable/inventory.png b/app/src/main/res/drawable/inventory.png old mode 100644 new mode 100755 index 6b6a06b3..0600cf55 Binary files a/app/src/main/res/drawable/inventory.png and b/app/src/main/res/drawable/inventory.png differ diff --git a/app/src/main/res/drawable/journal.png b/app/src/main/res/drawable/journal.png old mode 100644 new mode 100755 index 224274d3..9d73568e Binary files a/app/src/main/res/drawable/journal.png and b/app/src/main/res/drawable/journal.png differ diff --git a/app/src/main/res/drawable/jump.png b/app/src/main/res/drawable/jump.png old mode 100644 new mode 100755 index 98221173..4bffff3c Binary files a/app/src/main/res/drawable/jump.png and b/app/src/main/res/drawable/jump.png differ diff --git a/app/src/main/res/drawable/keyboard.png b/app/src/main/res/drawable/keyboard.png new file mode 100755 index 00000000..9f6b5a44 Binary files /dev/null and b/app/src/main/res/drawable/keyboard.png differ diff --git a/app/src/main/res/drawable/keyboard.xml b/app/src/main/res/drawable/keyboard.xml deleted file mode 100644 index c6a69b9d..00000000 --- a/app/src/main/res/drawable/keyboard.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/mouse.png b/app/src/main/res/drawable/mouse.png old mode 100644 new mode 100755 index 01edcb3a..31ce55d7 Binary files a/app/src/main/res/drawable/mouse.png and b/app/src/main/res/drawable/mouse.png differ diff --git a/app/src/main/res/drawable/pause.png b/app/src/main/res/drawable/pause.png new file mode 100755 index 00000000..e90ced51 Binary files /dev/null and b/app/src/main/res/drawable/pause.png differ diff --git a/app/src/main/res/drawable/pause.xml b/app/src/main/res/drawable/pause.xml deleted file mode 100644 index dd4575d9..00000000 --- a/app/src/main/res/drawable/pause.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/pointer_arrow.png b/app/src/main/res/drawable/pointer_arrow.png old mode 100644 new mode 100755 index 99160f16..b191d521 Binary files a/app/src/main/res/drawable/pointer_arrow.png and b/app/src/main/res/drawable/pointer_arrow.png differ diff --git a/app/src/main/res/drawable/run.png b/app/src/main/res/drawable/run.png old mode 100644 new mode 100755 index 3fd763af..dc848664 Binary files a/app/src/main/res/drawable/run.png and b/app/src/main/res/drawable/run.png differ diff --git a/app/src/main/res/drawable/save.png b/app/src/main/res/drawable/save.png new file mode 100755 index 00000000..fdeeb767 Binary files /dev/null and b/app/src/main/res/drawable/save.png differ diff --git a/app/src/main/res/drawable/save.xml b/app/src/main/res/drawable/save.xml deleted file mode 100644 index be62b5cf..00000000 --- a/app/src/main/res/drawable/save.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/sneak.png b/app/src/main/res/drawable/sneak.png old mode 100644 new mode 100755 index d2416672..f95baf3f Binary files a/app/src/main/res/drawable/sneak.png and b/app/src/main/res/drawable/sneak.png differ diff --git a/app/src/main/res/drawable/third_person.png b/app/src/main/res/drawable/third_person.png old mode 100644 new mode 100755 index 02b3a25f..4ca2f578 Binary files a/app/src/main/res/drawable/third_person.png and b/app/src/main/res/drawable/third_person.png differ diff --git a/app/src/main/res/drawable/toggle.png b/app/src/main/res/drawable/toggle.png new file mode 100755 index 00000000..bf87b32b Binary files /dev/null and b/app/src/main/res/drawable/toggle.png differ diff --git a/app/src/main/res/drawable/toggle_magic.png b/app/src/main/res/drawable/toggle_magic.png old mode 100644 new mode 100755 index 5b634ccb..bb8e5070 Binary files a/app/src/main/res/drawable/toggle_magic.png and b/app/src/main/res/drawable/toggle_magic.png differ diff --git a/app/src/main/res/drawable/toggle_weapon.png b/app/src/main/res/drawable/toggle_weapon.png old mode 100644 new mode 100755 index 5e77bca4..2e37ba26 Binary files a/app/src/main/res/drawable/toggle_weapon.png and b/app/src/main/res/drawable/toggle_weapon.png differ diff --git a/app/src/main/res/drawable/use.png b/app/src/main/res/drawable/use.png old mode 100644 new mode 100755 index e64ec3f1..8ac44492 Binary files a/app/src/main/res/drawable/use.png and b/app/src/main/res/drawable/use.png differ diff --git a/app/src/main/res/drawable/wait.png b/app/src/main/res/drawable/wait.png old mode 100644 new mode 100755 index f3f652f8..cd81ab37 Binary files a/app/src/main/res/drawable/wait.png and b/app/src/main/res/drawable/wait.png differ diff --git a/app/src/main/res/layout/browser.xml b/app/src/main/res/layout/browser.xml index 9b0b90ed..29fd13ff 100644 --- a/app/src/main/res/layout/browser.xml +++ b/app/src/main/res/layout/browser.xml @@ -1,11 +1,22 @@ - + tools:context="ui.activity.BrowserActivity" + android:orientation="vertical"> + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bef2c03b..4d643c36 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -185,5 +185,8 @@ Unable to open a URL You don\'t appear to have a web browser installed. Tried to open the following URL:\n\n%1$s + Enable Quick Keys + Enable FN keys + Always show top-bar icons diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index 3911c024..507f3f68 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -64,6 +64,18 @@ android:key="pref_hide_controls" android:title="@string/pref_hide_controls" /> + + + + + +