diff --git a/assets/dev-build-overlay.png b/assets/dev-build-overlay.png new file mode 100644 index 000000000..652a1d3e5 Binary files /dev/null and b/assets/dev-build-overlay.png differ diff --git a/src/com/reco1l/osu/ui/Dialog.kt b/src/com/reco1l/osu/ui/Dialog.kt index d7127521e..2f5d875fb 100644 --- a/src/com/reco1l/osu/ui/Dialog.kt +++ b/src/com/reco1l/osu/ui/Dialog.kt @@ -1,6 +1,8 @@ package com.reco1l.osu.ui import android.graphics.Color +import android.text.Html +import android.text.method.LinkMovementMethod import android.view.ContextThemeWrapper import android.view.Gravity.* import android.view.View @@ -8,6 +10,7 @@ import android.widget.Button import android.widget.EditText import android.widget.LinearLayout import android.widget.TextView +import androidx.core.text.HtmlCompat import androidx.core.view.isVisible import androidx.core.widget.doOnTextChanged import com.edlplan.framework.easing.Easing @@ -39,6 +42,8 @@ open class MessageDialog : BaseFragment() { protected var message: CharSequence = "" + protected var isHTMLMessage = false + protected var allowDismiss = true protected var onDismiss: (() -> Unit)? = null @@ -49,7 +54,16 @@ open class MessageDialog : BaseFragment() { override fun onLoadView() { findViewById(R.id.title)!!.text = title - findViewById(R.id.message)?.text = message + + if (isHTMLMessage) { + findViewById(R.id.message)?.apply { + text = HtmlCompat.fromHtml(message.toString(), HtmlCompat.FROM_HTML_MODE_LEGACY) + isClickable = true + movementMethod = LinkMovementMethod.getInstance() + } + } else { + findViewById(R.id.message)?.text = message + } val buttonLayout = findViewById(R.id.button_layout)!! @@ -97,8 +111,10 @@ open class MessageDialog : BaseFragment() { /** * The text to be show displayed in the dialog message. */ - fun setMessage(text: String): MessageDialog { + @JvmOverloads + fun setMessage(text: String, isHTML: Boolean = false): MessageDialog { message = text + isHTMLMessage = isHTML return this } diff --git a/src/ru/nsu/ccfit/zuev/osu/MainScene.java b/src/ru/nsu/ccfit/zuev/osu/MainScene.java index e1b3e0e3b..6b780e520 100644 --- a/src/ru/nsu/ccfit/zuev/osu/MainScene.java +++ b/src/ru/nsu/ccfit/zuev/osu/MainScene.java @@ -1,12 +1,13 @@ package ru.nsu.ccfit.zuev.osu; import android.content.Context; -import android.content.Intent; import android.graphics.PointF; -import android.net.Uri; import android.os.PowerManager; import android.util.Log; +import com.reco1l.andengine.Anchor; +import com.reco1l.andengine.shape.RoundedBox; +import com.reco1l.andengine.sprite.ExtendedSprite; import com.reco1l.osu.data.BeatmapInfo; import com.reco1l.osu.Execution; import com.reco1l.osu.ui.entity.MainMenu; @@ -51,7 +52,6 @@ import java.util.Arrays; import java.util.LinkedList; -import java.util.Locale; import java.util.TimerTask; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -172,66 +172,66 @@ public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, menu = new MainMenu(this); - final Text author = new Text(10, 530, ResourceManager - .getInstance().getFont("font"), - String.format( - Locale.getDefault(), - "osu!droid %s\nby osu!droid Team\nosu! is © peppy 2007-2024", - BuildConfig.VERSION_NAME + " (" + BuildConfig.BUILD_TYPE + ")" - )) { + if (BuildConfig.DEBUG) { + ResourceManager.getInstance().loadHighQualityAsset("dev-build-overlay", "dev-build-overlay.png"); + ExtendedSprite debugOverlay = new ExtendedSprite(ResourceManager.getInstance().getTexture("dev-build-overlay")); + debugOverlay.setPosition(Config.getRES_WIDTH() / 2f, Config.getRES_HEIGHT()); + debugOverlay.setOrigin(Anchor.BottomCenter); + scene.attachChild(debugOverlay); - @Override - public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) { - if (pSceneTouchEvent.isActionDown()) { + Text debugText = new Text(0, 0, ResourceManager.getInstance().getFont("smallFont"), "DEVELOPMENT BUILD"); + debugText.setColor(1f, 237f / 255f, 0f); + debugText.setPosition((Config.getRES_WIDTH() - debugText.getWidth()) / 2f, Config.getRES_HEIGHT() - debugOverlay.getHeight() - 1f - debugText.getHeight()); - new MessageDialog() - .setMessage(context.getString(com.osudroid.resources.R.string.dialog_visit_osu_website)) - .addButton("Yes", dialog -> { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://osu.ppy.sh")); - GlobalManager.getInstance().getMainActivity().startActivity(browserIntent); - dialog.dismiss(); - return null; - }) - .addButton("No", dialog -> { - dialog.dismiss(); - return null; - }) - .show(); + Text debugTextShadow = new Text(0, 0, ResourceManager.getInstance().getFont("smallFont"), "DEVELOPMENT BUILD"); + debugTextShadow.setColor(0f, 0f, 0f, 0.5f); + debugTextShadow.setPosition((Config.getRES_WIDTH() - debugText.getWidth()) / 2f + 2f, Config.getRES_HEIGHT() - debugOverlay.getHeight() - 1f - debugText.getHeight() + 2f); - return true; - } - return false; - } - }; - author.setPosition(10, Config.getRES_HEIGHT() - author.getHeight() - 10); + scene.attachChild(debugTextShadow); + scene.attachChild(debugText); + } - final Text yasonline = new Text(720, 530, ResourceManager.getInstance().getFont("font"), " Global Ranking\n Provided by iBancho") { + RoundedBox box = new RoundedBox() { - @Override - public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) { - if (pSceneTouchEvent.isActionDown()) { + { + Text versionText = new Text(10f, 2f, ResourceManager.getInstance().getFont("smallFont"), "osu!droid " + BuildConfig.VERSION_NAME); + attachChild(versionText); + setSize(versionText.getWidth() + 20f, versionText.getHeight() + 4f); + setPosition(10f, Config.getRES_HEIGHT() - getHeight() - 10f); + setColor(0f, 0f, 0f, 0.5f); // Black + setCornerRadius(12f); + } + + public boolean onAreaTouched(TouchEvent event, float localX, float localY) { + if (event.isActionUp()) { new MessageDialog() - .setMessage(context.getString(com.osudroid.resources.R.string.dialog_visit_osudroid_website)) - .addButton("Yes", dialog -> { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://" + OnlineManager.hostname)); - GlobalManager.getInstance().getMainActivity().startActivity(browserIntent); - dialog.dismiss(); - return null; - }) - .addButton("No", dialog -> { + .setTitle("About") + .setMessage( + "

osu!droid

\n" + + "
Version " + BuildConfig.VERSION_NAME + "
\n" + + "

Made by osu!droid team
osu! is © peppy 2007-2024

\n" + + "
\n" + + "Visit official osu! website ↗\n" + + "
\n" + + "
\n" + + "Visit official osu!droid website ↗\n" + + "
\n" + + "
\n" + + "Join the official Discord server ↗\n", + true + ) + .addButton("Close", dialog -> { dialog.dismiss(); return null; }) .show(); - - return true; } - return false; + return true; } }; - yasonline.setPosition(Config.getRES_WIDTH() - yasonline.getWidth() - 40, Config.getRES_HEIGHT() - yasonline.getHeight() - 10); + scene.attachChild(box); final Sprite music_prev = new Sprite(Config.getRES_WIDTH() - 50 * 6 + 35, 47, 40, 40, ResourceManager.getInstance().getTexture( @@ -362,14 +362,6 @@ public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final TextureRegion nptex = ResourceManager.getInstance().getTexture("music_np"); music_nowplay = new Sprite(Utils.toRes(Config.getRES_WIDTH() - 500), 0, (float) (40 * nptex.getWidth()) / nptex.getHeight(), 40, nptex); - final Rectangle bgTopRect = new Rectangle(0, 0, Config.getRES_WIDTH(), Utils.toRes(120)); - bgTopRect.setColor(0, 0, 0, 0.3f); - - final Rectangle bgbottomRect = new Rectangle(0, 0, Config.getRES_WIDTH(), - Math.max(author.getHeight(), yasonline.getHeight()) + Utils.toRes(15)); - bgbottomRect.setPosition(0, Config.getRES_HEIGHT() - bgbottomRect.getHeight()); - bgbottomRect.setColor(0, 0, 0, 0.3f); - for (int i = 0; i < 120; i++) { final float pX = (float) Config.getRES_WIDTH() / 2; final float pY = (float) Config.getRES_HEIGHT() / 2; @@ -456,10 +448,6 @@ public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX menuBarX = menu.getFirst().getX(); scene.attachChild(lastBackground, 0); - scene.attachChild(bgTopRect); - scene.attachChild(bgbottomRect); - scene.attachChild(author); - scene.attachChild(yasonline); menu.attachButtons(); @@ -475,9 +463,8 @@ public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX scene.attachChild(beatmapDownloader); scene.registerTouchArea(logo); - scene.registerTouchArea(author); + scene.registerTouchArea(box); scene.registerTouchArea(beatmapDownloader); - scene.registerTouchArea(yasonline); scene.registerTouchArea(music_prev); scene.registerTouchArea(music_play); scene.registerTouchArea(music_pause);